FreeBSD kézikönyv
Előző | Fejezet 10. Bináris Linux kompatibilitás | Következő

# 10.2. Telepítés

A bináris Linux kompatibilitás alapértelmezés szerint nem engedélyezett. Legkönnyebben úgy tudjuk elérhetővé tenni, ha betöltjük a `linux` nevű KLD modult (“Kernel LoaDable”). Ehhez `root` felhasználóként a következőket kell begépelni:

    # kldload linux

Ha minden egyes rendszerindítás során engedélyezni szeretnénk a bináris kompatibilitást, akkor tegyük bele az `/etc/rc.conf` állományba ezt a sort:

    linux_enable="YES"

A modul betöltődését a kldstat(8) paranccsal tudjuk ellenőrizni:

    % kldstat
    Id Refs Address    Size     Name
     1    2 0xc0100000 16bdb8   kernel
     7    1 0xc24db000 d000     linux.ko

Ha valamiért nem akarjuk vagy nem éppen nem tudjuk betölteni a modult, akkor a bináris Linux kompatibilitást az `options COMPAT_LINUX` beállítással be is tudjuk építeni a rendszermagba. Ennek pontos menetét a 8 fejezetben találjuk meg.

## 10.2.1. Linuxos futtatókönyvtárak telepítése

A linuxos könyvtárakat két módon is felrakhatjuk: egyrészt a linux_base port telepítésével, másrészt manuálisan.

### 10.2.1.1. A könyvtárak telepítése a linux_base porttal

A futtatókönyvtárakat a lehető legegyszerűbben a `emulators/linux_base` porton keresztül tudjuk telepíteni. Teljesen úgy történik, mint a Portgyűjtemény akármelyik másik portjának telepítése. Csupán ennyit kell beírnunk:

    # cd /usr/ports/emulators/linux_base-f10
    # make install distclean

> Megjegyzés: A FreeBSD 8.0 kiadását megelőző változataiban az `emulators/linux_base-f10` port helyett az `emulators/linux_base-fc4` portot használjuk.

A telepítés végeztével kaptunk is egy működő bináris Linux kompatibilitást, habár egyes programok még panaszkodhatnak a rendszerkönyvtárak alverzióit illetően. Általánosságban véve ez azonban nem okoz nagyobb gondot.

> Megjegyzés: A `emulators/linux_base` portnak több változata is használható, melyek az egyes Linux disztribúcióknak feleltethetőek meg. Ilyenkor mindig érdemes közülük azt választani, amelyik a leginkább megfelel a telepíteni kívánt linuxos alkalmazás igényeinek.

### 10.2.1.2. A könyvtárak telepítése manuálisan

Ha korábban még nem telepítettük volna a Portgyűjteményt, akkor egyénileg kell felraknunk az egyes könyvtárakat. Közülük azokra lesz szükségünk, amelyeket maga az alkalmazás is használni akar, valamint a futásidejű linkerre. Emellett még a FreeBSD rendszerükön levő Linux binárisok számára a `/compat/linux` könyvtárban létre kell hoznunk a gyökér ún. “árnyékkönyvtárát” is. A FreeBSD alatt elindított Linux programok először ebben a könyvtárban fogják keresni a hozzájuk tartozó osztott könyvtárakat. Így tehát, amikor egy linuxos program betölti például a `/lib/libc.so` függvénykönyvtárat, akkor a FreeBSD először a `/compat/linux/lib/libc.so` állományt próbálja meg megnyitni, majd ha az nem létezik, akkor a `/lib/libc.so` állományt. Az osztott könyvtárak ezért a `/compat/linux/lib` árnyékkönyvtárba telepítendőek, és nem oda, ahova a linuxos `ld.so` mutat.

Általánosságban szólva eleinte elég csak azokat az osztott könyvtárakat megkeresni és felrakni, amelyekre a telepítendő linuxos alkalmazásunknak ténylegesen szüksége van. Egy idő után úgyis összegyűlnek azok a fontosabb függvénykönyvtárak, amelyek segítségével már minden további ráfordítás nélkül futtatni tudjuk a frissen importált programokat.

### 10.2.1.3. Hogyan telepítsünk újabb osztott könyvtárakat?

Mit tegyünk, ha az `emulators/linux_base` port telepítése után az alkalmazás még mindig követel néhány hiányzó osztott könyvtárat? Honnan tudhatjuk meg, hogy milyen osztott könyvtárak kellenek majd egy Linux bináris használatához és honnan szerezzük be ezeket? Erre alapvetőn két lehetőségünk van (az utasításokat `root` felhasználóként kell majd végrehajtanunk).

Ha hozzáférünk egy Linux rendszerhez, akkor szedjük össze az alkalmazásunk futtatásához szükséges osztott könyvtárakat és másoljuk ezeket a FreeBSD partíciójára. Például:

Tegyük fel, hogy FTP-n keresztül leszedtük a Doom Linux változatát és felraktuk egy általunk elérhető Linux rendszerre. Az `ldd linuxdoom` parancs segítségével ki tudjuk deríteni, milyen osztott könyvtárak kellenek majd nekünk:

    % ldd linuxdoom
    libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
    libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
    libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29

Az utolsó oszlopban levő állományokat másoljuk át, tegyük ezeket a `/compat/linux` könyvtárba, és hozzunk létre az első oszlopban szereplő szimbolikus linkeket. Így tehát a következő állományok kellenének:

    /compat/linux/usr/X11/lib/libXt.so.3.1.0
    /compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
    /compat/linux/usr/X11/lib/libX11.so.3.1.0
    /compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0
    /compat/linux/lib/libc.so.4.6.29
    /compat/linux/lib/libc.so.4 -> libc.so.4.6.29

> > Megjegyzés: Ha már rendelkezünk az `ldd` kimenetének első oszlopában szereplő főverziószámú osztott könyvtár, akkor nem kell átmásolni az utolsó oszlopban levő állományokat, hiszen így is működnie kellene mindennek. Ha viszont egy újabb változattal találkozunk, akkor érdemes mégis inkább átmásolni. Miután a szimbolikus linkeket átirányítottuk az új változatra, a régit akár törölhetjük is. Ha például ezek a könyvtárak elérhetőek a rendszerünkön:

> >     /compat/linux/lib/libc.so.4.6.27
> >     /compat/linux/lib/libc.so.4 -> libc.so.4.6.27

> > Észrevesszük, hogy az `ldd` kimenetében az új bináris egy újabb változatot igényel:

> >     libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29

> > Ha csak az utolsó jegyében marad le valamivel a verziószám, akkor nem különösebben aggódnunk a `/lib/libc.so.4.6.29` miatt sem, hiszen a programnak egy picivel korábbi verzióval is remekül kellene tudnia működnie. Természetesen, ha akarjuk, ettől függetlnül lecserélhetjük a `libc.so` állományt, ami ezt eredményezi:

> >     /compat/linux/lib/libc.so.4.6.29
> >     /compat/linux/lib/libc.so.4 -> libc.so.4.6.29

> > Megjegyzés: A szimbolikus linkek karbantartása csak a Linux binárisok esetén szükséges. A FreeBSD saját futásidejű linkere magától megkeresi a megfelelő főverziószámú könyvtárakat, ezért emiatt általában nem kell aggódni.

## 10.2.2. Linux ELF binárisok telepítése

Az ELF binárisok futtatása előtt néha még szükség van a “megbélyegzés” (branding) használatára is. Ha egy bélyegezetlen ELF binárist akarunk elindítani, akkor a következő hibaüzenetet kapjuk:

    % ./egy-linux-elf-bináris
    ELF binary type not known
    Abort

A FreeBSD rendszermagjának a brandelf(1) paranccsal tudunk segíteni a FreeBSD és a Linux binárisainak megkülönböztetésében.

    % brandelf -t Linux egy-linux-elf-bináris

A GNU által fejlesztett eszközök manapság már automatikusan elhelyezik az ELF binárisok azonosításához szükséges bélyegeket, ezért ez a lépés a jövőben egyre inkább feleslegessé válik.

## 10.2.3. Tetszőleges RPM formátumú csomag telepítése

A FreeBSD a telepített (akár linuxos) alkalmazások nyomonkövetésére saját csomagadatbázissal rendelkezik, amelynek következében a Linux® által felkínált RPM adatbázisokat nem támogatja.

Ennek ellenére akármelyik RPM alapú Linux alkalmazás telepíthető rendszerünkre a következő módon:

    # cd /compat/linux
    # rpm2cpio -q < /a/linuxos/allomány.helye.rpm | cpio -id

Ezt követően a brandelf(1) segítségével állítsuk be az ELF binárisokat (könyvtárakat viszont ne!) megfelelő típusúra. Ekkor ugyan nem leszünk képesek rendesen eltávolítani az így telepített szoftvert, de ez a módszer teszteléshez megfelelő.

## 10.2.4. A névfeloldó beállítása

Ha a névfeloldás (DNS) valamiért nem működne, vagy egy ehhez hasonló üzenetet kapunk:

    resolv+: "bind" is an invalid keyword resolv+:
    "hosts" is an invalid keyword

Akkor az `/compat/linux/etc/host.conf` állományba be kell illesztenünk a következő sorokat:

    order hosts, bind
    multi on

Az itt megszabott sorrend szerint először a `/etc/hosts` állományt nézi át, és majd csak ezután próbálja meg feloldani a nevet. Ha a `/compat/linux/etc/host.conf` állomány nem létezik, akkor a linuxos alkalmazás a FreeBSD `/etc/host.conf` állományát találja meg, és panaszkodni fog a FreeBSD eltérő formátumára. Távolítsuk el a `bind` szócskát, ha nem állítottunk be névszervert az `/etc/resolv.conf` állományhoz.

Előző | Tartalom | Következő
Bináris Linux kompatibilitás | Fel | A Mathematica® telepítése

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.