Jednodyskietkowy linux

sposób tworzenie jednodyskietkowej dystrybucji linuksa

UWAGA: Strona jest już mocno nieaktualna. Idź do LiveCD lub Remastering LiveCD

Co 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:


    # mkdir rootfs

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:


    # ldd bin/busybox

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


  1. !/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...