Jednodyskietkowy linux
sposób tworzenie jednodyskietkowej dystrybucji linuksa
UWAGA: Strona jest już mocno nieaktualna. Idź do LiveCD lub Remastering LiveCDCo jest niezbędne:
- jądro linuxa. Praktycznie dowolne, można użyć 2.2.17.
- busybox. Zawiera zestaw podstawowych poleceń unixa, idealny do zastosowania dla naszych potrzeb.
- syslinux. Umożliwia ładowanie linuxa z systemu plików MS DOS.
- dyskietka :), formatowana w systemie plików MS DOS.
Archiwum zawierające syslinux'a (w naszym przypadku jest to syslinux-1.48.tar.gz) należy rozpakować do dowolnego katalogu, a następnie go skompilować:
# tar zxvf syslinux-1.48.tar.gz
# cd syslinux-1.48
# make
Na sformatowaną dyskietkę instalujemy syslinux'a wydając następujące polecenie:
# ./syslinux /dev/fd0
# cd ..
Kompilację jądra można przeprowadzić praktycznie dowolnie, na początek zaleca się zaznaczenie jak najmniejszej liczby opcji w celu minimalizacji wielkości jądra. Należy pamiętać o wkompilowaniu na stałe obsługi ramdysku wraz z opcją initrd oraz obsługi systemu plików minix. Można użyć tego pliku .config. Tak przygotowane jądro należy skopiować na dyskietkę (zakładając, że zostało ono skompilowane poleceniem make bzImage, a dyskietka jest zamontowana w /mnt/floopy):
# cp /usr/src/linux/arch/i386/boot/bzImage /mnt/floppy/bzImage
a następnie poinformować je, że ma załadować ramdisk i główny system plików będzie właśnie w ramdysku:
# rdev /mnt/floppy/bzImage /dev/ram0
# rdev -r /mnt/floppy/bzImage 16384
(szczegóły na temat narzędzia rdev należy szukać oczywiście w manach)
Tworzymy plik konfiguracyjny dla syslinux'a:
# echo "DEFALUT bzImage initrd=initrd.gz" > /mnt/floppy/syslinux.cfg
Ostatnim krokiem jest przygotowanie odpowiedniego systemu plików. Można wykorzystać do tego celu BusyBox, zawierający większość potrzebnych poleceń UNIXowych łącznie w prostym shelem. Tworzymy katalog zawierający nasz system plików:
a następnie rozpakowywujemu i kompilujemy busybox'a:
# tar zxvf busybox-0.47.tar.gz
# cd busybox-0.47
# make
# make PREFIX=../rootfs install
# cd ..
brakuje jeszcze kilka katalogów, można je utworzyć wykonując polecenia:
# cd rootfs
# mkdir /dev /dev/pts /etc /proc /lib
Podstawowe pliki i katalogi zostały już zainstalowane, należy jeszcze dodać biblioteki i odpowiednie wpisy w katalogu /etc:
# cp /lib/ld-linux.so.2 lib/ld-linux.so.2
# cp /lib/libc.so.6 lib/libc.so.6
Są to dwie podstawowe biblioteki, z których korzysta busybox. Można się o tym przekonać, wydając polecenie:
Ponieważ newralgicznym punktem jest ograniczona przestrzeń na dyskietce, można biblioteki poddać działaniu programu strip:
# strip lib/libc.so.6 lib/ld-linux.so.2
Powinno to zmniejszyć ich rozmiar o kilkanaście kilobajtów. Następnie tworzymy nowe urządzenia - wpisy w naszym katalogu dev. Na początek powinny wystarczyć następujące:
# mknod dev/ram0 b 1 0
# mknod dev/mem c 1 1
# mknod dev/kmem c 1 2
# mknod dev/null c 1 3
# mknod dev/port c 1 4
# mknod dev/zero c 1 5
# mknod dev/full c 1 7
# mknod dev/tty1 c 4 1
# mknod dev/tty2 c 4 2
# mknod dev/tty3 c 4 3
# mknod dev/tty4 c 4 4
# mknod dev/tty c 5 0
# mknod dev/console c 5 1
# cd ..
Jeszcze zostaje utworzenie odpowiednich wpisów w katalogu etc. Należy utworzyć plik fstab o zawartości:
fstab
/dev/ram0 / minix defaults 1 1
none /proc proc defaults 0 0
none /dev/pts devpts defaults 0 0
oraz plik rcS w naszym katalogu etc/init.d:
rcS
- !/bin/sh
mount -t proc,devpts
Należy pamiętać o nadaniu odpowiednich atrybutów dla tego pliku:
# chmod 755 etc/init.d/rcS
To już wszystko! Należy jeszcze skompresować nasz system plików i skopiować go na dyskietkę. Można to wykonać przy pomocy następujących poleceń (zakładamy, że w pracującym jądrze znajduje się obsługa ramdysków i systemu minix):
# dd if=/dev/zero of=/dev/ram0 bs=1k count=2048
# mkfs.minix /dev/ram0
# mount -t minix /dev/ram0 /mnt/disk
# cp -aR rootfs/* /mnt/disk
# umount /mnt/disk
# dd if=/dev/ram0 bs=1k count=2048 | gzip -v9 > initrd.gz
Utworzony został ramdysk o pojemności 2MB, i zainicjowany system plików minix. Po skopiowaniu tam naszego systemu plików, kompresujemu go gzip. Plik powinien zajmować ok. 600KB. Wystarczy teraz skopiować go na dyskietkę:
# cp initrd.gz /mnt/floppy/initrd.gz
# umount /mnt/floppy
i zrestartować komputer. Powodzenia!
(28.09.2k) Podsumowanie
Nasz jednodyskietkowy linux jest bardzo ubogi - brak mu obsługi sieci, brak innych narzędzi - np. do zakładania innych systemów plików (ReiserFS, ext2). Należy dodać pliki passwd i group, dodać odpowiedni plik inittab. Czeka nas rozbudowa o odpowiednie wpisy w katalogu /dev, montowanie swap'a, obsługę dysków IDE i SCSI, CDROMów, a także walka o każdy kilobajt miejsca na dyskietce. Ale początek jest już za nami...