..:: W³asna minidystrybucja ::..

Mo¿e trudno w to uwierzyc, ale tekst ten pisany jest na moim starym laptopie 486dx, 25Mhz, 1.2GB HDD, 8mb RAM pracuj±cym na minidystrybucji przygotowanej specjalnie na potrzeby mojej "maszyny do pisania".

Zanim zaczniemy cokolwiek robiæ, musimy zastanowiæ siê, czemu ma slu¿yc nasza minidystrybucja. Moje za³o¿enie bylo proste. Mia³em starego laptopa na ktorym chcia³em wieczorami móc pisaæ sobie teksty na strone WWW. Tak wiêc zastosowanie juz mamy, przyszedl czas na realizacje :)


Reklama


Nasza dystrybucja zajmie prawdopodobnie jedna lub dwie dyskietki. Dlatego przed przyst±pieniem do pracy, powinnismy siê w takowe dyskietki zaopatrzyæ. Radzê jednak, aby by³y to no¶niki nieu¿ywane, najlepiej prosto ze sklepu. Doswiadczenie pokaza³o mi, ¿e eksperymentowanie z mocno ju¿ sfatygowaniymi dyskietkami, nie wychodzi na dobre :P

UWAGA: do zrobienia minidystrybucji konieczne bedzie posiadanie zainstalowanej dowolnej dystrybucji linuxa.

Na pocz±tku formatujemy dyskietkê w systemie plikow ms-dos

mkfs.msdos /dev/fd0

Drugim krokiem, jest instalacja bootloadera na dyskietce. Wielu znawcow linuxa poleca do tego celu lilo, ja jednak ze wzgledu na oszczednosc miejsca radze u¿yc syslinuxa. Wystarczy wpisaæ:

syslinux -s /dev/fd0

Po wykonaniu tej komendy mamy juz co¶ na wzor 'dyskietki systemowej'. Jest ona jednak jeszcze nie przygotowana do odpalenia j±dra systemowego. Musimy wiec napisaæ plik konfiguracyjny, dziêki któremu syslinux bedzie wiedzia³ ktore j±dro odpalic i jaki tekst powitalny wyswietliæ przy starcie :)

Montujemy zatem dyskietke do dowolnego katalogu

mount /dev/fd0 /mnt/floppy

Nastêpnie tworzymy na niej plik syslinux.cfg, o nastêpuj±cej zawartoci:

default nasze_jajko
display welcome.msg
label nasze_jajko
  kernel jajko
  append initrd=initrd.gz root=/dev/fd0

Teraz konieczne bêdzie, aby przy dogrywaniu na dyskietke kernela dla naszej minidystrybucji, zapisaæ go w pliku 'jajko'. Do pliku welcome.msg (zwyk³y plik tekstowy) mo¿emy wpisaæ dowolny tekst, ktory bêdzie widoczny w chwili ³adowania naszej minidystrybucji (mo¿e to byæ np. wzmianka o autorze :P)

Do w±tku jadra jeszcze powrócimy, teraz zajmijmy sie sednem naszej dystrybucji, czyli pakietami. Niestety ju¿ na wstepie musimy wybiæ sobie z g³owy stosowanie plikow z aktualnie u¿ywanej dystrybucji linuxa. Powodem tego stanu rzeczy jest to, ¿e mimo tego, ¿e poszczegolne pliki binarne dystrybucji (jak np. cp, ls, cat itp.) zajmuja naprawde niewiele miejsca, to jednak wymagaja one bibliotek, które zajmuj± minimum 5mb, co jak wiemy nie jest wielko¶cia zdatn± do upchniêcia na jednej dyskietce :P

Poda¿aj±c za innymi tworcami miniaturowych linuxow, musimy uzyc jednej z wczesnych wersji jakiejs dystrybucji, bazuj±cej na pakietach libc5. Z mojego do¶wiadczenia wynika, ¿e jedn± z najbardziej nadaj±cych sie do tego celu dystrybucji jest naturalnie... Slackware! Konkretnie jego wersja 3.x. Pakiety Slackware s± - dla nas tworców - niezwykle wykogne ze wzgledu na brak sprawdzania jakichkolwiek zale¿nosci pomiêdzy nimi.

Zanim jednak zaczniemy prace przy instalacji pakietow, musimy przygotowaæ sobie 'system plików' na ktorym bedziemy wszystko instalowaæ. Bedzie to skompresowany system plików tylko do odczytu.

Na poczatek za³o¿my sobie pusty plik o rozmiarze 3MB.

dd if=/dev/zero of=initrd count=3 bs=1024k

Mimo, ¿e dyskietka ma zaledwie 1,44MB pojemno¶ci, pozwalamy sobie za³o¿yc system plików o rozmiarze 3MB, poniewa¿ dane te beda pó¼niej kompresowane. Ponadto po dekompresji systemu plików, wypada, aby nie by³ on zape³niony w 100%, lecz aby posiadal tak¿e przestrzeñ zdatn± do u¿ytku dla usera.

Mamy juz plik bêd±cy fundamentem naszego systemu plików. Musimy go teraz sformatowac do formatu ext2. Niektórzy u¿ytkownicy polecaj± formaty takie jak np. ext3 lub minix, ja jednak odradzam ich stosowanie ze wzglêdu na konieczno¶æ dokompilowania do jadra dodatkowych, niestandardowych modu³ów, ktore jedynie zwieksz± jego rozmiar, a nie dadz± nam faktycznych korzysci.

mkfs.ext2 initrd

Na pytanie programu, czy aby na pewno chcemy sformatowac plik, który nie jest urz±dzeniem, odpowiadamy twierdz±co. Po niespe³na sekundzie mamy ju¿ w pe³ni gotowy do pracy system plików.

Musimy teraz podmontowaæ nasz plik jako urzadzenie loopback, tak aby¶my mogli pracowaæ na nim jak na normalnym dysku.

mkdir /mnt/distro
mount -t ext2 -o loop initrd /mnt/distro

W katalogu /mnt/distro mamy nasz± wirtualna partycjê. Aby zaczê³a ona przynajmniej przypominaæ partycjê linuxow±, za³ó¿my na niej standardowe, minimalne drzewo katalogów.

/bin/
/dev/
/etc/
/lib/
/mnt/
/mnt/floppy/
/mnt/dysk/
/usr/
/usr/bin/
/proc/
/tmp/

Gdy juz przygotujemy minimalne drzewo katalogow, musimy w pierwszej kolejnosci zapelnic katalog bibliotek. W wiekszosci przypadkow wystarczy nam, abysmy skopiowali do niego wszystkie pliki pasujace do wzorca '*libc*' wraz z dowiazaniami symbolicznymi do nich.

Zwykle tak prezentuje sie listing katalogu /lib/ w minidystrybucjach:
ld-linux.so        libc.so.5.4.44     libext2fs.so.2.3  libtermcap.so.2.0.8
ld-linux.so.1      libcom_err.so.2    libm.so.5         libuuid.so.1
ld-linux.so.1.9.9  libcom_err.so.2.0  libm.so.5.0.9     libuuid.so.1.1
libc.so.5          libext2fs.so.2     libtermcap.so.2

Nale¿y pamiêtaæ, ¿e pliki z podan± wersj±, to biblioteki w³a¶ciwe, natomiast nazwy bez pe³nej wersji, to jedynie dowi±zania symboliczne.

Czyli np. ld-linux.so oraz ld-linux.so.1 to dowi±zania symboliczne do pliku ld-linux.so.1.9.9

W ten prosty sposob zapewnilismy sobie obecno¶æ niezbêdnych bibliotek. Teraz przyszed³ czas na sterowniki urzadzeñ. W zasadzie mo¿emy skopiowaæ (np. pod MC) cala zawartosc /dev/ bez podkatalogóww, jednak na u¿ytek minidystrybucji nie jest to szczegolnie konieczne. Radzilbym przede wszystkim skopiowaæ pliki takie jak:

  • Konsole: console, systty, tty*
  • Uzadzenia niezbedne: loop*, fd0
  • Dyski twarde: hd*
  • Opcjonalne dodatki: ram*, null, zero

Od strony czysto technicznej, dystrybucja jest juz gotowa. Teraz trzeba siê tylko zatroszczyæ o pakiety niezbêdne do normalnego u¿ytkowania systemu.

Do kategorii absolutnie niezbêdnych pakietów mo¿emy zaliczyæ:

  • pow³oka (np. bash, ash, sh, tcsh - najlepiej wybrac najmniejsza, lub basha jesli zalezy nam na funkcjonalnosci)
  • cat, ls, cp, rm, less, ps, kill, mkdir, chmod
  • w przypadku narzedzi sieciowych: ifconfig, ping, nc (netcat), lynx, telnet, ssh, ftp
  • do obslugi dysków: mount, umount, dd, fsck, mkfs

O ile w przypadku narzêdzi plikowo-dyskowych jedna dyskietka to sporo miejsca, tak w przypadku pakietów sieciowych, prawdopodobnie niezbêdne bêdzie do³±czenie drugiego no¶nika - wkoñcu istnieje wiele dystrybucji wielodyskietkowych.

Gdy ju¿ jeste¶my przy dystrybucjach wielodyskietkowych, to opisze schematycznie, jak mia³oby wygl±daæ ³adowanie drugiej dyskietki.

Na pocz±tku zanim zaczniemy tworzyæ dystrybucje, zamiast standardowego 3MB pliku initrd, stwórzmy plik o wielko¶ci np. 8mb, z czego oczywi¶cie nie bêdziemy mogli zaj±æ wiêcej ni¿ w przypadku dystrybucji jednodyskietkowej. Wiêkszy rozmiar pliku obrazu sprawi, ¿e kernel zarezerwuje przy dekompresji initrd.gz wiêcej pamiêci RAM zdatnej do zapisu plików, na któr± bêdziemy mogli wgraæ pó¼niej zawarto¶æ drugiej dyskietki. Gdy system zabootuje z tak przygotowanego obrazu, g³ówna partycja dystrybucji bêdzie mia³a oko³o 6mb wolnego miejsca, co wystarczy nawet do za³adowania dystrybucji czterodystkiekowej.

Dodatkowe pakiety na kolejnych dyskietkach mo¿na przetrzymywaæ np. jako archiwa *.tgz i rozpakowywaæ je do jakiego¶ z góry ustalonego katalogu, np. ja robie to zwykle do katalogu /usr/bin/.

Po wgraniu na dyskietke wszystkich u¿ytecznych pakietów, pozostaj± nam ju¿ tylko prace polegaj±ce na konfiguracji ¶rodowiska. Na pocz±tek w katalogu /etc/ utwórzmy plik "profile" o nastêpuj±cej zawartosci:

#!/bin/sh
PATH="/bin:/sbin:/usr/bin" 
HOSTNAME="darkstar"
PS1="[/W]/$"
TERM=linux
export PATH HOSTNAME PS1 TERM

Tyle ustawieñ zwykle wystarczy do podstawowej konfiguracji pow³oki.

Teraz zajmijmy siê plikiem /etc/fstab i wpiszmy tam nastêpuj±ce ustawienia partycji:

/dev/ramdisk / ext2 defaults 1 1 
none /proc dafaults 0 0

Do katalogu /etc/ warto wrzuciæ jeszcze pliki takie jak: shells, termcap, groups itp...

Pliku /etc/passwd nie musimy wrzucaæ, bo nasza minidystrybucja bedzie prawdopodobnie startowaæ w trybie "single user", czyli dostêpne bêdzie bez logowania jedynie konto roota.

Teraz wystarczy tylko w g³ównym katalogu dystrybucji utworzyæ plik o nazwie "linuxrc" o nastêpuj±cej zawarto¶ci:

#!/bin/sh 
/sbin/mount -v -t proc /proc /proc
/bin/update
cd / 
exec bash -rcfile /etc/profile

Ok... konfiguracja dla usera jest skoñczona, teraz trzeba przygotowac konfiguracje dla programów.

W pliku /etc/lib.so.conf wpiszmy po prostu sciezke "/lib", poniewa¿ to jedyna lokalizacja w której przetrzymywane s± pliki bibliotek w naszej minidystrybucji. Musimy tylko sprawiæ, aby wszystkie nasze biblioteki zosta³y poprawnie rozpoznane i zaindeksowane. W tym celu wydajemy polecenie:

# ldconfig -r /sciezka/nasza_dystrybucja/

Po tym zabiegu, mamy gotowy plik ld.so.cache, niezbêdny do poprawnego dzia³ania dystrybucji.

Pliki startowe ju¿ mamy, teraz wypada tylko zatroszczyæ siê o "co¶" do zamykania systemu. W zasadzie mo¿naby pokusiæ siê o u¿ycie domy¶lnego halt'a lub shutdown'a, ale zajmuj± one po kilkadziesi±t kilobajtów, co wyklucza je z u¿ycia na dyskietce. Ja osobi¶cie polecam napisaæ sobie prosty skrypcik zamykaj±cy system i zapisac go w pliku /bin/halt

#!/bin/sh 
sync 
echo Teraz mozesz bezpiecznie wyciagnac dyskietke :P
umount -a -v -n 
kill 1 

Nie zapomnij naturalnie o ustawieniu dla skryptu atrybutu wykonywalno¶ci:

chmod +x /bin/halt

To w zasadzie wszystko, nasza minidystrybucja jest ju¿ gotowa. Musimy tylko odmontowaæ katalog z plikami i spakowaæ plik initrd:

# gzip -9 initrd

Nowopowsta³y plik initrd.gz kopiujemy na dyskietkê - nasza pierwsza dystrybucja jest ju¿ gotowa, mo¿na otworzyæ szampana (albo soczek :P) i to uczciæ :)

Cenne uwagi:

  • Dystrybucja startuje w trybie ramdysku, czyli jesli po zabootowaniu systemu wpadniesz w furiê i wpiszesz radosne "rm -rf /" to po resecie komputera wszystko wróci do normy i twoim oczom uka¿e siê ponownie znak zachêty basha. Pamiêtaj, ¿e resetowane s± jedynie zmiany dotycz±ce g³ównego (dyskietkowego) systemu plików... je¶li zaczniesz siê bawiæ dyskami, to ju¿ tylko Ontrack ci pomo¿e :)
  • Zamiast domy¶lenj zawarto¶ci katalogu /bin/ mo¿na u¿yæ programu busybox, który bardzo zrêcznie zast±pi wszystkie narzêdzia w stylu ls, cp, rm itp... (minimalna kompilacja ma jakies 100kb przy libc5)
  • minimalna wersja menad¿era plików MC zajmuje oko³o 300kb (mo¿e siê czasami przydaæ :P)
  • skompilowane wersje j±der mo¿na ¶ci±gn±æ z innych minidystrybucji, oto krótka charakterystyka:
    • alfalinux - j±dro obs³uguje modemy sprzêtowe (nie winmodemy!), brak obs³ugi lanu
    • floppix - pelna obsluga lanu, ca³kowity brak obslugi dysków twardych!
    • brutalware - pe³na obs³uga lanu, dysków twardych i modemów sprzêtowych (niestety du¿e j±dro :/)
  • Ciekawym pomys³em jest u¿ywanie modularnego j±dra, dla którego dodatkowe modu³y mo¿na umie¶ciæ na jednej z kolejnych dyskietek.
  • Nie, nie uda ci siê dodaæ do swojej minidystrybucji wsparcia dla neostrady :))
  • W 95% identyczny sposób tworzy siê dystrybucje bootowalne z CD

I to by by³o na tyle... mam nadzieje, ¿e artyku³ siê podoba³ i ¿e po jego przeczytaniu, przynajmniej niektórzy z was zajm± siê prac± twórcz± polegaj±c± na tworzeniu w³asnych minidystrybucji. Tak naprawdê ca³a ta zabawa nie ma s³u¿yæ odkrywaniu ko³a na nowo, lecz pog³êbianiu w³asnej wiedzy na temat zasad budowy systemu linux.

Autor: Unknow

Uwa¿asz, ¿e prezentowane przez nas informacje s± u¿yteczne? Pomó¿ nam je wypromowaæ!

  • dodaj do flakera
  • blipnij o tym
Kana³ RSS
Co na forum?
Jak odzyskaæ...
Pêtla foreach
poszukuje po...
Problem z fu...
poszukuje do...
ServerShell status: dzia³a
[zaló¿ konto]
Subskrypcja
Je¶li chcesz byæ powiadamiany o nowo¶ciach na stronie, wpisz tu swój e-mail

RSS

Dodaj do Google