Vytvoření vlastního LiveCD

Tento návod je určen pro pokročilé uživatele

V následujícím návodu si krok za krokem ukážeme, jak postupovat při úpravách běžného Ubuntu desktop CD. Budeme vycházet z verze 7.10 Gutsy Gibbon, ale mělo by to fungovat i na jiné. Takto můžeme například:

  • přidat programy, které chceme mít na CD po ruce
  • upravit nastavení (defaultní jazyk na češtinu)
  • vyhodit programy, které nám jen zabírají místo (to můžou být cizokrajné fonty, tiskový systém apod.)

Postup je: rozbalit, upravit, sbalit, vypálit. Není to tak složité, jako se může zdát.

V následujícím textu budeme psát o CD, totéž ale platí pro DVD či podobná média.

Co potřebujeme

  • Počítač s Linuxem, pokud možno Ubuntu (verze 7.10 nebo novější; architektury takové, aby na ní šlo cílový systém spustit).
  • Alespoň 3 GB místa na disku, podle potřeby víc.
  • Mít nainstalované balíky squashfs-tools a mkisofs na pracovním systému.
  • Administrátorská oprávnění k používání sudo.

Funkčnost CD je vhodné zkoušet ve virtuálním počítači bez nutnosti vypalování a restartování.

Rozbalení CD

Získáme iso obraz CD. Lze jej stáhnout nebo zkopírovat z CD (příkazem cp /dev/cdrom ubuntu-7.04-desktop-i386.iso).

  • Dále budeme předpokládat, že se jmenuje ubuntu-7.04-desktop-i386.iso.
  • Velká část dat na CD je uložena v komprimovaném souborovém systému squashfs. Díky tomu se na CD vejde přes 1500 MB dat! Pokud chceme upravit programy nebo systémové nastavení, je třeba rozbalit jak obraz CD, tak squashfs. Vytvoříme si adresáře:
mkdir cd-mnt
mkdir cd-data
mkdir sq-mnt
mkdir sq-data
  • Obraz CD přimountujeme do adresáře cd-mnt:
sudo mount ubuntu-7.04-desktop-i386.iso cd-mnt/ -o loop -t iso9660
  • a protože do CD obrazu nejde zapisovat, tak vykopírujeme skoro všechna data do adresáře cd-data. Vynecháme ale obrovský soubor /casper/filesystem.squashfs, v němž je uložen zmíněný komprimovaný oddíl s většinou dat.
rsync --exclude=/casper/filesystem.squashfs -a cd-mnt/ cd-data
  • Obdobnou operaci teď provdeme se squashfs. Přimountujeme jej do adresáře sq-mnt:
sudo mount cd-mnt/casper/filesystem.squashfs sq-mnt -o loop -t squashfs
  • a protože ani do squashfs nejde zapisovat, tak jej „rozzipujeme“ do adresáře sq-data:
sudo cp -a sq-mnt/* sq-data/

Chvíli to potrvá, je jich 1,5 GB.

  • Squashfs i CD už nepotřebujeme mít přimountované, proto je můžeme směle odmountovat a jejich adresáře odstranit:
sudo umount sq-mnt/; rmdir sq-mnt
sudo umount cd-mnt/; rmdir cd-mnt

Nyní můžeme v adresáři cd-data upravovat nezazipovanou část CD (tj. jen jádro a úvodní nabídka) a v sq-data zbytek systému.

Tipy na možné úpravy

Výchozí jazyk určíme přidáním souboru lang obsahujícího dvoupísmennou zkratku daného jazyka do adresáře cd-data/isolinux/. Do toho souboru se vloží toliko dvě písmena cs.

sudo echo "cs" > cd-data/isolinux/lang

Aby byl na CD zahrnut plný český překlad, instalujeme metabalík language-support-cs podle níže uvedeného postupu (obsahuje závislosti na veškeré české překlady). Podrobnější postup instalace jen části jazykových balíčků je uveden níže. Slovenčina (sk) se samozřejmě instaluje obdobně.

Namísto kopírování použijeme balíčkovací systém APT, aby se automaticky instalovaly jejich závislosti a abychom z programů neudělali černé pasažéry. Balíčkovací systém je potřeba zmást tak, aby za rootovský adresář považoval ten, kam jsme rozbalili squashfs. K tomu je příkaz chroot. Pak je lze programy instalovat jako obvykle, ale veškeré změny se týkají systému na CD.

  • Abychom mohli pracovat s internetem, nejprve překopírujeme některé soubory z „domovského“ systému:
sudo cp /etc/resolv.conf sq-data/etc/
sudo cp /etc/hosts sq-data/etc/
  • Zachrootujeme se do adresáře sq-data, připojíme systémové oddíly a nastavíme důležité proměnné:
sudo chroot sq-data
mount -t proc none /proc
mount -t sysfs none /sys
export HOME=/root
export LC_ALL=C
  • Můžou se hodit i repozitáře restricted, universe a multiverse. Stačí odkomentovat v souboru /etc/apt/sources.list na CD patřičné řádky.(Pokud tam multiverse není, okopírujeme oba řádky s universe a přepíšeme uni na multi.).

*V novějších verzích Ubuntu je nutné aptitude doinstalovat, práce s balíky tak bude v textovém prostředí pohodlnejší.

apt-get install aptitude

Nezapomeneme na aktualizaci informací o balíčcích ze stávajících i přidaných Zdrojů

aptitude update

* A je to. Nyní můžeme spustit např. aptitude a přidávat či odebírat programy dle libosti.

:!: Jen pozor pokud budeme vypalovat na CD, abychom se na něj vešli (je zaplněno skoro těsně).

Po dokončení úprav po sobě smažeme stažené balíčky a jiné dočasné soubory, odpojíme oddíly a vymaníme se z chrootu:

apt-get clean
rm -rf /tmp/*
rm /etc/resolv.conf  /etc/hosts
umount /proc
umount /sys
exit

V chrootu jde dále provádět kouzla jako:

  • Kompilace vlastního jádra nebo initrd.
  • Nainstalujte pomocí apt-get správný kernel.
  • Zkoupírujte z vašeho chroot systému /boot/vmlinuz-názevjádra do cd-data/casper/vmlinuz.
  • Vytvořte initrd.gz:
sudo chroot sq-data
mkinitramfs -o /initrd.gz 2.6.15-26-k7(vaše označení jádra)

*Exitněte se z chrootu a z sq-data přesuňte nový initrd.gz do cd-data/casper

  • Nahrazení tapet na ploše, obrázky se nachází v adresáři /usr/share/backgrounds a zároveň jsou zapsány v přehledném souboru /usr/share/gnome-background-properties/ubuntu-wallpapers.xml. Hezké obrázky najdete třeba na http://art.gnome.org/.
  • Všelijaká nastavení chování Gnome pomocí programu gconftool.
  • Odinstalovat exotické fonty, které patrně nikdy nevyužijeme:
apt-get remove ttf-baekmuk ttf-bengali-fonts ttf-devanagari-fonts ttf-gujarati-fonts ttf-indic-fonts ttf-kannada-fonts ttf-kochi-gothic ttf-kochi-mincho ttf-lao ttf-oriya-fonts ttf-punjabi-fonts ttf-malayalam-fonts ttf-tamil-fonts ttf-telugu-fonts
  • Odinstalovat cizí jazyky (angličtinu ale zachováme):
aptitude --purge remove language-pack-de language-pack-gnome-de language-pack-gnome-de-base --assume-yes
aptitude --purge remove language-pack-xh language-pack-gnome-xh language-pack-gnome-xh-base --assume-yes
aptitude --purge remove language-pack-pt language-pack-gnome-pt language-pack-gnome-pt-base --assume-yes
aptitude --purge remove language-pack-es language-pack-gnome-es language-pack-gnome-es-base --assume-yes
aptitude --purge remove language-pack-fr language-pack-gnome-fr language-pack-gnome-fr-base --assume-yes
  • Odinstalovat balíček gnome-games (ušetří asi 40MB):
aptitude --purge remove gnome-games gnome-games-data
  • Instalovat plnou podporu pro češtinu. To zahrnuje balíčky, z nichž si vyberme ty, co potřebujeme (nemá smysl třeba instalovat českou nápovědu pro Gimp, když ji nepoužíváme).
apt-get install language-pack-cs language-pack-cs-base mozilla-firefox-locale-cs-cz myspell-cs-cz aspell-cs openoffice.org-help-cs openoffice.org-l10n-cs openoffice.org-thesaurus-cs thunderbird-locale-cs gimp-help-cs

V případě, že instalujeme všechny, stačí instalovat metabalíček:

apt-get install language-support-cs
  • Instalovat podporu pro flash a jiné licenčně omezené formáty multimédií.
apt-get install gstreamer0.10-pitfdll gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse gxine ogle ogle-gui lame lame-extras
apt-get install flashplugin-nonfree

Java od SUNů není svobodně licencována a je nutno odsouhlasit licenční smlouvu:

apt-get install sun-java6-jre sun-java6-plugin
  • Můžeme také provést update stávajících balíčků:
aptitude update
aptitude safe-upgrade

  • Zachrootujte se - Postupně proveďte tyto příkazy:
chroot /home/vasuzivatel/sq-data
mount -t proc none /proc
mount -t sysfs none /sys
export HOME=/root
export LC_ALL=C
/etc/init.d/dbus start
  • Spusťte si X na :1:
X :1 -ac
  • V chrootu pusťte Gnome nebo vaše prostředí v livku:
DISPLAY=localhost:1 gnome-session
  • Přepněte se na tty8, kde máte váš X server zkratkou Ctrl+Alt+F8.
  • Pokud se vám nelíbí mít X na samostatné tty, dá se použít i Xephyr.

Sestavení ISO

Po dokončení úprav CD sestavíme zpátky.

  • Připravíme soubory pro squashfs a instalátor na CD:
sudo chmod +w cd-data/casper/filesystem.manifest
sudo chroot sq-data dpkg-query -W --showformat='${Package} ${Version}\n' > cd-data/casper/filesystem.manifest
sudo cp cd-data/casper/filesystem.manifest cd-data/casper/filesystem.manifest-desktop
sudo sed -ie '/ubiquity/d' cd-data/casper/filesystem.manifest-desktop
  • Odstraníme starý a zabalíme nový squashfs soubor (v nových verzích Ubuntu je potřeba doinstalovat squashfs-tools). Trvá to asi tisíc let:
sudo rm -f cd-data/casper/filesystem.squashfs
sudo mksquashfs sq-data/ cd-data/casper/filesystem.squashfs
  • (Teď můžeme upravit jmenovku CD:)
sudo gedit cd-data/README.diskdefines
  • Vytvoříme kontrolní součet md5 všech souborů na CD:

(s vyjímkou těch které se budou ještě měnit)

cd cd-data
sudo bash -c "find . \( -path './isolinux/isolinux.bin' -or -path './md5sum.txt' -or -path './cd-data/isolinux/boot.cat' -prune \)  -or -type f -print0 | xargs -0 md5sum > md5sum.txt"
cd ..
  • Nakonec zabalíme ISO. To trvá jenom sto let.
cd cd-data
sudo mkisofs -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-7.04-desktop-i386-custom.iso .

A po skončení hrátek s LiveCD, můžeme smazat pracovní adresáře

sudo rm -rf cd-data
sudo rm -rf sq-data

A je to!

Zkouška CD v emulátoru

Použij qemu, Luku!

qemu -cdrom ubuntu-7.04-desktop-i386-custom.iso -m 300

(Volba -m 300 zde určuje množství poskytnuté paměti v MB.)

Vypálení CD

ISO soubor lze vypálit běžnými nástroji (jako k3b) nebo v příkazovém řádku:

cdrecord dev=/dev/cdrom ubuntu-7.04-desktop-i386-custom.iso

Odkazy