Celý objem nainstalovaného softu je přitom obvykle menší, než je velikost CD. Už jen měnit CD v mechanice během instalace je otrava, když si místo toho můžeme v klidu dát cigárko/sex/kafíčko/párek+kakao/freeciv. Dle libosti. Další nezanedbatelnou výhodou je, že při tom všem nám zůstane zachován funkční instalátor RH 7.x, takže to CD se dá použít na skutečně různorodých strojích.
Příprava CD
Každý, kdo RH někdy instaloval, zná kickstart soubor /root/anaconda-ks.cfg, který vznikne po instalaci. Ten je výchozím článkem pro celou proceduru selfinstalace. Samotný by ale moc nepomohl, budeme se muset vrtat mnohem hlouběji. Pro začátek si ho zkopírujme do ks.cfg
Nejprve je nutné zkopírovat někam instalační CD, na to je potřeba místo na té které partišně. Osvědčil se mi tenhle postup (opakovaný pro všechna CD):
mount /mnt/cdrom mkdir $HOME/kick-7.3/kick-CD cd /mnt/cdrom tar -cf - . | ( cd $HOME/kick-7.3/kick-CD ; tar -xvpf - ) cd $HOME/kick-7.3/kick-CD umount /mnt/cdrom
Někdo musí z kola ven…
…aby se to všechno vešlo na CD. Teď je čas na kreativitu. Vyplatí se použít rpm -qa > $HOME/installed, spuštěný na už hotovém systému. Ten použijeme jako mustr a získáme tak seznam pakáží, které je potřeba ponechat v $HOME/kick-7.3/kick-CD/RedHat/RPMS.
V souboru $HOME/kick-7.3/kick-CD/RedHat/base/comps je výpis pakáží, který čte instalační anaconda a na který se odkazuje iks.cfg. Má celkem jednoduchou strukturu. Dozvíme se v něm, proč se nám normálně instaluje sendmail a podobná zvěrsva, i když je vůbec nechceme. Pro naše účely stačí, když bude mít tento tvar:
4 1 Base { hwdata mailcap . . <vynechán dlouhý seznam> . vim-enhanced taper perl-libnet }
Mezi {} závorkami ponecháme výpis z $HOME/installed. Stále však instalátor neví, že je vše jen na jednom CD. Je potřeba rebuild
$HOME/kick-7.3/kick-CD/RedHat/base/hdlist, na to je v pakáži anaconda-runtime prográmek genhdlist:
genhdlist --withnumbers --hdlist RedHat/base/hdlist $HOME/kick-7.3
Mezi hdlist, comps a ks.cfg je potřeba zajistit konzistenci. V tom nám pomůžou tyhle skriptíky: comps-check.pl, který srovná obsah comps souboru s
$HOME/kick-7.3/kick-CD/RedHat/RPMS, a depchecktree.py, kterýžto testne křížové závislosti pakáží tamtéž. ks.cfg si musíme pohlídat sami.kickstart
Teď dojde na ks.cfg. Tenhle soubor čte anaconda při bootu z CD. Je celkem slušně zdokumentován (na rozdíl od předchozího) v customization guide RedHatu. Dokonce existuje gui nástroj (ksconfig) na jeho tvorbu, ale co s GUI, že?
Nicméně se vyplatí postupovat opatrně, např. při tvorbě partitions pracuje příliš hrubě. Hm, ne surově, ale má jen velmi málo options. Navíc třeba mezi RH7.2 a RH7.3 je rozdíl v locales, takže en_US.iso885915 použité v ks.cfg z RH7.3 vám RH7.2 nezbaští a během instalace na vás anaconda vysype spoustu errorů a zhasne.
Pokud máme comps soubor ve tvaru uvedeném nahoře, vypadá seznam pakáží v ks.cfg takhle:
%packages @Base
Pakáž kudzu je k instalaci nutná, když jsem ji v %packages vynechal, zhavarovalo to. Smažte ji tedy až po instalaci v sekci %post. Mimochodem, tam se dá celkem slušně vyřádit, jestli tedy potřebujete co nejvíc pozměnit konfiguraci daného stroje, tak tady je to nejlepší místo.
Soubor ks.cfg musí přijít do image v$HOME/kick-7.3/kick-CD/dosutils/autoboot/cdboot.img, který je načítán během bootu. Tady je jeden z možných postupů, jak ho tam zahnat:
mount -o loop $HOME/kick-7.3/kick-CD/dosutils/autoboot/cdboot.img /mnt/floppy gzip -dc /mnt/floppy/initrd.img > floppy.initrd mkdir /tmp/redhat mount -o loop floppy.initrd /tmp/redhat install -c -m 644 ks.cfg /tmp/redhat/tmp umount /tmp/redhat gzip -9 floppy.initrd mv floppy.initrd.gz /mnt/floppy/initrd.img umount -f /mnt/floppy rmdir /tmp/redhat
Navíc je to floppy, takže se na ní nemůžeme příliš rozmachovat. Nyní je třeba upravit syslinux.cfg. Tam se při bootu pomocí předaného parametru anaconda dozví, že a kde má hledat ks.cfg. Takže třeba:
mount -o loop $HOME/kick-7.3/kick-CD/RedHat/dosutils/autoboot/cdboot.img /mnt/floppy $(EDITOR) /mnt/floppy/syslinux.cfg umount -f /mnt/floppy
kde ve svém oblíbeném editoru upravíme řádek začínající append tak, aby obsahoval ks=floppy, nebojte se, je to sice floppy, ve skutečnosti však je to jeho image, co v něm právě editujeme. Pro případ, že by ho měl hledat na skutečné floppy, je třeba tam mít ks=hd:fd0/ks.cfg. Dají se s tím dělat psí kusy, za domácí úkol si přečtěte manuál.
A teď to spálit
Každý, kdo má vypalovačku, ji má rozchozenou. Tečka. Takže mu stačí:
mkisofs -b \ $HOME/kick-7.3/kick-CD/RedHat/dosutils/autoboot/cdboot.img \ -l -J -R -r -T -V 'Custom RH Install' . | \ cdrecord -v blank=fast speed=4 dev=0,0,0 -
dle chuti pozměnit parametry. No a to by mělo být vše. Celý postup potřebuje ještě moře práce, aby to bylo vyladěno, ale to už nechám na laskavém čtenáři.
Jde to nastavit tak, aby si to bralo rpms ze sítě, přidat tam do %post sekce základní nastavení FW (ten redhnátí je směšný a navíc postavený na ipchains), na CD-RW si takhle můžeme udržovat up2date pakáže (nebere to jejich čísla, ale jen jména)… no prostě otázka – jako obvykle – nezní, jestli to jde, ale jak to udělat.
Ale o tom až v pátém kvartálu
Ukázky
můj ks.cfg (upraveno), syslinux.cfg
Credits
Tohle všechno jsem samozřejmě nevymyslel a nebudu tady lízat cizí smetanu. Velmi nápomocná je stránkaGraye Watsona, jehož Makefile jsem témeř nemusel předělávat.
Mnohem komplexněji je to popsáno tady.
comps-check.pl a depchecktree.py pochazejí odsud.