LFS - végszó

Előzmények:

LFS #1
LFS #2
LFS #3

Történt tehát, hogy elhatároztam, összerakok egy LFS -t. Az eredeti elképzelésem az volt, hogy egy régebbi kernel verziót választok és az X11 R7.4 -et. Azután változott a dolog és a fő célkitűzés az lett, hogy először az aktuális (6.6) LFS könyv mentén összerakjak egy működő Linux -ot.
Néhány tapasztalatom szeretném megosztani veletek.

Amit felhasználtam:
* VirtualBox -ban készítettem egy virtuális gépet (mert nem volt fölös vasam) a következő paraméterekkel: 1 processzor, 384 MB RAM és 2 db HDD: 10 GB + 2 GB; 2 hálózati adapter: 1 bridgelve a fizikai gépem LAN portjára, 1 pedig egy VBox host only adapter (később lesz értelme is)
* LFS LiveCD, 6.3 x86, nosrc változat, mert nincs szükségünk a 6.3 -as LFS -hez szükséges forráskódokra
* kb. nettó 14 óra szabadidő

A vbox -os gépet a livecd -ről bootoltam fel. Ennek segítségével történt a particionálás is: a 10 GB -os lemez teljes egészében egy ext3 -as fájlrendszer lett, a 2 GB -os lemez pedig swap, amit be is kapcsoltam (swapon). Ezen a ponton nyer értelmet, hogy van hálózat is: a dhcpcd eth0/eth1 parancs segítségével kértem IP címet a gépnek, majd a /etc/rc.d/init.d/sshd start paranccsal elindítottam az openssh daemon -t és így tudtam csatlakozni putty -al. Ami azért jó, mert ellentétben a vbox ,,ablakkal'', ide tudok copy-paste -elni, s ez nagyon hasznos. Rengetek typo -t lehet véteni a folyamat során és van egy-kettő, amivel komoly károkat lehet okozni és emiatt akár lehet az egészet elölről kezdeni.

Hogy az internetre kilát a gép, az meg azért hasznos, mert a legfrissebb forráskódokat wget -tel le lehet tölteni rá (itt a wget -hez a fájlista: http://www.linuxfromscratch.org/lfs/view/stable/wget-list).

Tipp: ha valakinek több napig tart az LFS építése (mint nekem is), akkor ne kapcsoljátok ki a virtuális gépet, hanem válasszátok a vbox ,,Elmenteni a gép állapotát'' (save state) lehetőségét! Ez azért hasznos, mert ha nem így cselekedtek, akkor a virtuális gép minden indítása után be kell állítani különböző paramétereket (lemezek felcsatolása, swap, néhány symlink létrehozása, hálózat, stb), ami időigényes. Egyébként lehet használni host -ként bármilyen Linux -ot, amire telepítve vannak a könyv elején írt előfeltételek, de nekem a gyakorlatban egy Debian sid -en hiába volt meg minden (verziószámokat is figyeltem), mégsem tudtam leforgatni a GCC -t sem.

A könyv először nehezen volt megérthető, de kis segítséggel rájöttem, hogy nem kell semmi extrát csinálni, csakis és kizárólag, amit leírtak benne. Tehát azt mondja, hogy legyél kész az első lépésekkel (partíció létrehozása az lfs -hez, felcsatolása, legyen egy $LFS változód definiálva, ami a felcsatolt lfs partíciód könyvtárára mutat, legyenek a források letöltve a $LFS/sources -be) és feltételezi, hogy az adott program forrását már kicsomagoltad és a kicsomagolt könyvtárban állsz épp. A legelső csomag a binutils, ami egy kis bemelegítés az egészhez. :)

A binutils -t ki kell csomagolni, belépni a könyvtárába (cd $LFS/sources/binutils-xy) onnantól copy-paste -tel lehet végrehajtani, amit a könyv ír. Az összes többi csomagnál is ennyi a lényeg: legyen kicsomagolva (tar -xfj vagy tar -xfz, függően attól, hogy tar.bz2 vagy tar.gz formátumban van) és lépj be a könytárába! Miután egy-egy programot telepítettél (tehát megvolt minden, amit a könyv ír), töröld az egész könyvtárat, amibe kicsomagoltad! A törlés fontos, mert összekavarhatja a dolgokat, ha nem törölsz. Viszont az eredeti tar -olt csomagot ne töröld, azokra többször is szükség lesz.

A binutils (első) forgatásánál érdemes megmérni, mennyi időt vett igénybe összesen a configure szkript, majd a make && make install végrehajtása, ugyanis ez az idő az 1 SBU. Minden program lefordításához szükséges idő SBU -ban van megadva. Ami egy tök jó dolog, mert elég relatív, hogy egy P3 500 MHz gépen vagy egy C2D 3,2 GHz gépen mennyi idő alatt fordul le ugyanaz a program, másodpercben teljesen más értéket kapsz. Nálam az 1 SBU = 4 perc és bizony van olyan program, aminek a fordítása mindennel együtt 44 SBU -t vesz igénybe! Erre fel kell készülni. Pl. ha úgy érzed, 1 óra múlva szeretnél aludni, akkor ne vágj bele olyan műveletbe, ami feltehetően több lesz ennél.

Aztán vannak dolgok még, amikre érdemes odafigyelni. Az egyik a GCC Pass 2. Itt van egy kis tesztecske (miután lefordult és telepítetted), amivel ki tudod próbálni (írja a könyv is), hogy jól fordult -e le. Ha sikeres volt a fordítás, akkor a /tools/lib -ből hívja a linkert a gcc, ha nem, akkor a /lib -ből. Ha a /lib -re hivatkozik, akkor valamit rosszul csináltál és amíg ezt nem javítottad, ne lépj tovább! (általában csak typo)

Még néhány tipp:
* ahol azt írja a könyv, hogy adott tesztet javasolt lefuttatni, ott futtasd le
* ahol azt írja a könyv, hogy adott tesztnek nincs értelme, ott hagyd ki, fölösleges időpocsékolás
* a könyv azt írja, hogy a make után érdemes megadni a -jX kapcsolót, ahol X = processzorok száma * magok száma + 1; az én tapasztalatom az, hogy egyes programok fordítása képes hibára futni a párhuzamosság miatt vagy adott esetben több időt vesz igénybe, mintha alapértelmezetten csak 1 thread -et használna a make, tehát én végig a -jX kapcsoló nélkül fordítottam le mindent.
* ha elakadtál, akkor jó eséllyel más is elakadt már ugyanennél a pontnál, ezért érdemes előbb az lfs + < hibaüzenet > (=behelyettesítendő a hibaüzenetre) címszavakra keresni a Google -ben és jó eséllyel megoldás is lesz az első 10 találatban
* ha az előző pont sem segített és még mindig el vagy akadva, akkor az #lfs-support csatornán szívesen segítenek, de nem mindig vannak a gépnél és mások is járnak fel segítséget kérni, tehát türelemmel kell lenni
* a gcc végső fordítása (ez az, ami 44 SBU -t vesz igénybe) során van egy igencsak megterhelő teszt, ami során nálam elfogyott az összes RAM és swap a virtuális gépben és kernel panic -kal megállt a gép. No para, indítsd újra a gépet (ha a javasolt livecd -ről dolgozol, ne feledd az első lépéseket megismételni: felcsatolni az lfs partíciót, stb) és lépj a könyvtárba, ahol fordítottad a gcc -t és anélkül, hogy újrafordítanád, add ki újra make -k check parancsot, hadd csinálja a tesztet! Nálam másodszor már végigment gond nélkül.

A végeredmény ez lett:
* Linux 2.6.32.8 kernel
* gcc 4.4.3
* bash 4.1
* .. stb, a könyv szerinti csomagok és ezután még forgattam néhány számomra szükséges dolgot:
* az inetutils forgatásakor az ifconfig programot szándékosan kihagyja a könyv, erre nem figyeltem oda, ezért később ezt újrafordítottam az ifconfiggal együtt
* a BLFS (http://www.linuxfromscratch.org/blfs/) könyv alapján fordítottam még: dhcpcd, wget, sshd és mc programokat
* a kész rendszer villámgyorsan bootol és alig 18 MB RAM -ot zabál alapjáraton :)
* a kész LFS rendszer kb. 800 MB helyet foglal nálam, mert én telepítettem minden man -t (a legtöbb man csak opcionális) és meghagytam a /tools könyvtárat (= ~ 200 MB) is egyelőre. Ezen kívül a forráskódokat is meghagytam, azok kb. 200 MB -ot foglalnak.
* bazi sokat tanultam a Linux -ról :)

Sajnos a BLFS könyv még csak a 6.3 -as verziónál tart, így nincs teljesen szinkronban az LFS 6.6 -tal (régebbi programverziók szerepelnek a BLFS -ben). De ez nem gond, mert az LFS építése során szerzett tapasztalattal már bátran neki lehet vágni egyéb programok fordításának. ;)

Később majd fordítok X -et + gnome -ot magamnak, de előbb a virtuális gépen készült rendszert átviszem végre fizikai vasra, megnézem, mit tud. A kész LFS rendszerről pedig készítettem egy mentést (a virtuális diszkről), ami később egy jó alap lesz pl. otthoni routerhez vagy hasonló dolgokhoz.

Sikeres LFS forgatást mindenkinek, aki kedvet kapott! :)

Hozzászólások

mit mondhatnék, szupcsi.

>az én tapasztalatom az, hogy egyes programok fordítása képes hibára futni a párhuzamosság miatt vagy adott esetben több időt vesz igénybe, mintha alapértelmezetten csak 1 thread -et használna a make, tehát én végig a -jX kapcsoló nélkül fordítottam le mindent.

gentoo-éknál ebből nem volt probléma.

Na ez jó lett!
Az LFS 3 blogbejegyzés után már felcsigázódtam, de most aztán uccu neki, hosszú hétvégén stand by-ra rakom a csajom (bár gyanítom, néhány óra szünetet muszáj leszek tartani) :D

Köszönjük a leírást, ez egy jó kiindulási alap a könyvhöz.

Nekiálltam, de van egy kínom. Ahogy ajánlottad, két hálókártyát adtam meg, de az eth0 esetén mindig time out-ot kapok ip-kérésnél. Nálad nem volt ilyen gond? Már adtam neki hosszú timeout-ot is paraméterként, de akkor sem kap ip-t.

Akkor próbáld meg NAT -olt kártyaként használni az elsőt (ami a vendégben eth0). Ha bridgeled, akkor külön IP címet kellene kapni a kábel másik végén lógó routertől, de ha mondjuk közvetlen ADSL modemből lóg ki a kábel, akkor az nem fog még egy IP -t kiosztani. Lehet, hogy ez a gond.

Ha sikerült NAT -oltként használni, akkor ez a kártya kilát netre, a másikon meg tudsz ssh -zni.

Na ez vicces volt :)
Lecsatoltam a hostonly kártyát, akkor a NAT simán elindult. Gondoltam egyet, s a hostonlynak adtam egy PCnet-PCI II-t, a NAT maradt Intel, s láss csodát, beindult. Ezek szerint akkor azonos típussal a VB nem tud működni. Újabb tapasztalattal lettem gazdagabb.

szerk.: na ez is kb. 1 percig ment......na próbálkozok még vele...

eth0 NAT
eth1 hostonly

beindul a vbox, eth0 csatolva, van ping-re válasz. Kérek ip-t az eth1-nek, megkapja, s abban a pillanatban eltűnik kilátás...
unknown host-ot kapok....
Ez az LFS tényleg jó iskola ;)

szerk.: maradt az, hogy beindult a gép, letöltöm a forrásokat wget-list-el, majd kérek ip-t ssh-záshoz, s nyomatom utána. Gondolom akkor már nem fog kelleni net. Ha meg kész a működő LFS-em, akkor csatolok neki ismét egy NAT-os megoldást.

Így igaz, ha megvannak a források, már csak ssh kell. ;)

ui: sajnos a wget-list -ben van kb. 2-3 olyan hivatkozás, amin már nem létezik az adott fájl, mert újabb verzió jelent meg belőle. Az LFS tükörszervereiről lehet majd letölteni a hiányzó fájlokat (a 6. fejezetben találkozol hiányzó állományokkal). Az ajánlott az, hogy a tükörszerverről töltsd le az LFS által írt verziót, ne pedig az adott project weblapjáról az újabbat, mert lehet inkompatibilitási gond.