Tworzenie własnej płyty LiveCD / Remastering Ubuntu LiveCD
Ostatnia zmiana: 2013-11-26 18:43


Metoda w dużej części opiera się o przepisy podane w:
- Szarp HOWTO.
- Ubuntu LiveCDCustomizationHowTo
- Custom Ubuntu Linux Live-CD

Metoda modyfikacji nowszej wersji, 6.06, opisana jest w dokumencie Remastering LiveCD - Ubuntu Dapper Drake.

Wstęp

Istnieje już wiele dystrybucji LiveCD, począwszy od słynnego Knoppixa i jego odmiany a skończywszy na polskim LinuxEduCD. Czasami jednak nie spełniają one naszych założeń - brakuje pakietów, chcielibyśmy inne ustawienia domyślne itd. Można stworzyć całą płytę samemu (o tym w dalszej części tekstu) lub przerobić (remastering) istniejącą już dystrybucję LiveCD.

Wymagania

- komputer z linuksem i podłączeniem do internetu (w tym przypadku był to Debian SID). Mile widziana szybka maszyna, z dużą ilością ramu. W przeciwieństwie do innych metod, nie musimy posiadać dużo swapu.
- dystrybucja LiveCD; w tym przypadku to będzie Ubuntu LiveCD "The Breezy Badger" 5.10 - do pobrania z mirrorów lub można zamówić za darmo z witryny Ubuntu
- moduł cloop i narzędzia pomocnicze. W przypadku debiana instalujemy następujące pakiety:


    # aptitude install cloop-utils cloop-src

a następnie zgodnie z instrukcją zawartą w pakiecie cloop-src kompilujemy i instalujemy moduł cloop.ko.
- mkisofs, cdrecord

Metoda

Modyfikacja LiveCD sprowadza się do skopiowania i rozpakowania systemu plików, jego modyfikacji, ponownego spakowania i stworzenia nowej płyty
Przed przystąpieniem do prac warto uruchomić LiveCD i zapoznać się z zawartymi tam programami. Pomocne może być przygotowanie spisu programów do instalacji i do usunięcia.

Modyfikacja LiveCD

Kopiowanie danych

Dane z płyty lub obrazu należy skopiować. Jeżeli mamy płytę to należy ją zamontować:


    # mount -t iso9660 /dev/cdrom /cdrom

Jeżeli posiadamy tylko obraz płyty można go zamontować przez loop'a (oczywiście w jądro musi być wkompilowana obsługa loop'a):


    # mount -t iso9660 -o loop ubuntu.iso /cdrom

Następnie tworzymy nowy katalog i kopiujemy tam zawartość płyty


    # mkdir ubuntu
    # cp -a /cdrom/. ubuntu
    # umount /cdrom

Usuwanie niepotrzebnych plików i programów

Wraz z płytą Ubuntu LiveCD przychodzi też parę programów pod Windows, które nie są nam do niczego potrzebne. Można je usunąć, dzięki temu zmniejszy się rozmiar płyty i będzie można całość nagrać np. na małą płytkę CDR 8cm.


    # cd ubuntu
    # rm -rf README.diskdefines start.bmp start.exe start.ini autorun.inf bin disctree doc programs

Płytkę można uruchomić podając w linii poleceń dodatkowe parametry. Jeżeli nie chcemy tego robić i nie potrzebujemy żadnego ich opisu, można skasować pliki isolinux/f*.txt


    # rm -f isolinux/f*.txt

Następnie należy zmodyfikować plik konfiguracyjny ISOLINUX - loadera z płyty CD. System ma mieć domyślnie wybrany język polski oraz ma nie zadawać zbędnych pytań, więc odpowiednio modyfikujemy plik isolinux/isolinux.cfg


    DEFAULT /install/vmlinuz
    APPEND casper/enable=true casper-udeb/snapshot/backing-file=/cdrom/casper/filesystem.cloop \
                vga=normal initrd=/install/initrd.gz ramdisk_size=1048576 root=/dev/rd/0 \
                debian-installer/locale=pl_PL debconf/priority=critical rw --
    DISPLAY isolinux.txt
    TIMEOUT 0
    PROMPT 1

Przy takich ustawieniach płyta wyświetli logo startowe i tekst powitalny - do zmiany w pliku isolinux/isolinux.txt. Logo zawarte jest w pliku splash.rle (definicja - pierwsza linia w pliku isolinux.txt) Jeżeli nie chcemy loga, a chcemy żeby system od razu został uruchomiony można zmienić parametry TIMEOUT i PROMPT.

Rozpakowanie systemu plików

System plików skompresowany jest cloop'em. Aby go rozpakować należy wykonać następujące polecenia


    # cd ..
    # modprobe cloop
    # extract_compressed_fs ubuntu/casper/filesystem.cloop > ubuntu.ext2
    # mkdir fs-ubuntu
    # mount -t ext2 -o loop ubuntu.ext2 fs-ubuntu

Dekompresja systemu plików trwa dość długo.
Domyślny obraz jest wielkości 2GB, ponieważ modyfikujemy go i z pewnością będą usuwane pliki, można na nim pracować. W innym przypadku można zwiększyć jego rozmiar (np. do 3GB)


    # umount fs-ubuntu
    # mkdir fs-tmp
    # mv ubuntu.ext2 old.ext2
    # mount -t ext2 -o loop old.ext2 fs-tmp przeniesienie rozpakowanego FS do innego miejsca
    # dd if=/dev/zero of=ubuntu.ext2 bs=1M count=3000 utworzenie nowego pliku 3GB
    # mke2fs ubuntu.ext2 utworzenie FS ext2
    # mount -o loop ubuntu.ext2 fs-ubuntu
    # cp -a fs-tmp/. fs-ubuntu skopiowanie danych ze starego pliku do nowego
    # umount fs-tmp
    # rm -rf fs-tmp old.ext2 usunięcie starego systemu plików

Modyfikacja systemu pliku

Ponieważ będziemy modyfikować zawartość pakietów, należy posiadać dostęp do internetu. Kopiujemy plik resolv.conf z naszymi ustawieniami oraz dodajemy repozytorium universe do listy źródeł pakietów


    # cp /etc/resolv.conf fs-ubuntu/etc/resolv.conf
    # vi fs-ubuntu/etc/apt/sources.list

Na następnie przechodzimy na nowy system plików


    # chroot fs-ubuntu /bin/bash

Od tej pory jesteśmy w nowym środowisku. Pierwsze czynności to zamontowanie proc i sys


    mount -t proc proc /proc
    mount -t sysfs sysfs /sys

Następnie uaktualniamy listę pakietów


    apt-get update

Należy teraz zmodyfikować pakiety w zależności od potrzeb. Raczej na pewno należy zainstalować pakiety ze wsparciem dla języka polskiego: language-pack-pl language-pack-pl-base language-pack-gnome-pl language-pack-gnome-pl-base. Odinstalować czcionki arabskie/chińskie/japońskie, pakiety z słownikami. Reszta wg uznania (ja zostawiłem OpenOffice, wyrzuciłem kompletnie pakiety związane z drukarkami, Evolution, irc, gry gnome, pythona, zainstalowałem polskie słowiki, mc, wpasupplicant, wifi-radar). Można też zrobić domyślne ustawienia programów (zapisać je później w /etc/skel). Na samym końcu warto zainstalować deborphan i usunąć niepotrzebne biblioteki.

Po modyfikacji listy pakietów należy "posprzątać"


    apt-get clean
    rm -rf /tmp/* /var/tmp/*

Odmontować systemy plików i wyjść z chroota


    umount /proc
    umount /sys
    exit

Należy również uaktualnić listę pakietów


    # chroot fs-ubuntu dpkg-query -W --showformat='${Package} ${Version}\n' > ubuntu/casper/filesystem.manifest

Ponieważ po modyfikacji pakietów zostało zwolnione dużo miejsca, w celu polepszenia kompresji można puste miejsca w filesystemie wypełnić zerami i odmontować system plików


    # dd if=/dev/zero of=fs-ubuntu/zero
    # rm -rf fs-ubuntu/zero
    # umount fs-ubuntu

Kompresja systemu plików



    # create_compressed_fs ubuntu.ext2 ubuntu/casper/filesystem.cloop

Trwa dość długo. Następnie należy uaktualnić sumy kontrolne


    # find ubuntu -type f -print0 | xargs -0 md5sum > ubuntu/md5sum.txt

Tworzenie obrazu płyty



    # mkisofs \
        -o livecd.iso \
        -b isolinux/isolinux.bin \
        -c isolinux/boot.cat \
        -no-emul-boot \
        -boot-load-size 4 \
        -boot-info-table \
        -V "Moje wlasne LiveCD" \
        -cache-inodes -r -J -l ubuntu

powstały obraz można wypalić na płycie CD przy pomocy programu cdrecord

Zakończenie

Można przygotować odpowiedni plik autorun.inf, dzięki czemu użytkownikom systemu Windows po włożeniu płytki uruchomi się jakiś program lub strona html z informacją co to jest za płytką. Można przygotować własną ikonę płytki (zdefiniowaną w autorun.inf). Można zmienić loga startowe, domyślne tapety, tematy gtk2, uruchomić na starcie przeglądarkę w określoną stroną WWW.

Tworzenie od podstaw LiveCD

Sprawa w skrócie wygląda prosto:
- przygotować system plików z zainstalowaną jakąkolwiek dystrybucją. Może to być nawet masz działający system. Należy pamiętać, że nie wiadomo na czym będzie to uruchamiane więc należy na starcie wykonać autodetekcję sprzętu, ustawić pliki konfiguracyjne, sieć itd.
- skompresować system plików przy pomocy cloop
- przygotować jądro z cloop'em oraz odpowiedni initrd, który załaduje moduł cloop, podmontuje system główny system plików i zacznie wykonywać init z niego.
- przygotować strukturę katalogów z isolinux, odpowiednio całość skonfigurować
- wypalić płytkę.
W praktyce prościej jest zmodyfikować istniejące już LiveCD, ale jest to do zrobienia :)