Krátke pojednanie o tom, ako mi Tiny Core Linux zjednodušil prácu a urobil život krajším.
Moja každodenná práca sa točí aj okolo správy mnohých používateľkých staníc, či už s GNU/Linuxom alebo Windowsom. Po dlhých rokoch praxe som si uvedomil, že ak má trvať oprava akéhokoľvek problému na niektorej zo staníc viac ako 10 minút, oveľa lepšie je nahodiť rovno pripravený image a dosyncovať používateľké nastavenia zo servera. Už dlhšie som teda hľadal nejaký rozumný spôsob samotného deployovania imagov (ďalej imidžov). Komerčné riešenia ako Ghost som zavrhol, keďže každé ušetrené euro sa môže premietnuť nakoniec v mojom vlastnom vrecku a navyše sú všetky nie celkom prispôsobené na používanie v prostredí, ake prevádzkujem.
Už nejaký ten rok používam linuxové live CD System Rescue CD. Obsahuje veľké množstvo užitočných nástrojov a prácu si bez neho už vôbec neviem predstaviť. Imidže som teda vytváral pomocou neho, konkrétne utilitou Partimage. Na dnešné pomery ide už o dosť zastaranú vec, ale v čase mojich firemných začiatkov to bol ešte veľmi živý a kvalitný projekt a k dnešnému dňu mám už príliš veľké množstvo imidžov, aby som mohol prejsť na niečo iné. Pokiaľ dané CD používam v pôvodnej forme, ako optický disk, je všetko v poriadku. Ale oveľa praktickejšie je používať bootovanie zo siete cez PXE, či už ide o pohodlné distribuovanie nových verzií na tú hromadu pobočiek alebo aj preto, že cez PXE mám prístupné aj iné užitočné nástroje. Samozrejme, SystemRescueCD nie je žiaden problém rozchodiť cez PXE, problémom je len jeho veľkosť niekoľko stoviek MB a s tým spojené možné problémy. Ťahať toľko dát cez TFTP je nezmysel a preto tvorcovia pripravili možnosť doťahať dáta cez HTTP alebo NFS (a možno aj niečo iné). Ale rozbehávať kvôli tomuto jednému nástroju web server na každom serveri je otrava. Navyše to zbytočne pridáva nové bezpečnostné riziká.
Takže už istý čas som sa obzeral po niečom inom, malom a pritom dostatočne modifikovateľnom, aby som tam vedel napchať všetko, čo potrebujem (dropbear alebo openssh, mc, partimage, cfdisk, rsync, podporu cifs, xfs a ntfs). Dnes som sa náhodou ponevieral po distrowatch a všimol som si nedávno východziu verziu Tiny Core Linux. Ide o maličké live CD zaberajúce približne 10MB. Autori rovno ponúkajú aj mikro verziu bez grafickej nadstavby, ktorá má len okolo 4MB, obsahuje pritom podporu dosť veľa sieťoviek a diskových radičov. Čo je ale veľké plus, je možnosť doťahať rozšírenia, medzi ktorými som našiel všetky programy, ktoré som potreboval. Ale poďme pekne poporiadku.
Ako prvé bola moja snaha smerovaná na netboot. To nie je žiaden problém, keďže priamo z oficiálnej stránky sa dá stiahnuť všetko potrebné a netreba ani sťahovať a rozbaľovať ISO. Plnú verziu som ani neskúšal, išiel som rovno na mikro. Po nabootovaní je už sieť samozrejme hore a tak by bolo dobre vyskúšať stiahnuť nejaké rozšírenia. Sú tam na to pripavené skripty (majú prefix tce-), ale tvorcovia pripravili aj celkom schopnú grafickú utilitku zvanú appbrowser, ktorá má aj konzolového príbuzného appbrowser-cli. Inštalácia je jednoduchá:
tce-load -w -i appbrowser-cli
Takže mám všetky potrebné balíky, odskúšal som si, či všetko beži. Teraz by bolo dobré, aby tam tie balíky zostali aj po rebootnutí. Tiny Core Linux ponúka možnosť ukladať zmeny na pevný disk, ale to je pre mna nepoužiteľné. Našťastie autori boli rozumní a pridali možnosť automaticky doťahať balíky po nabootovaní. To sa dá spraviť niekoľkými spôsobmi, no ja sa zameriam už len čisto na môj prípad, teda PXE boot cez TFTP. Ide o skutočne jednoduchý proces. Stačí zobrať všetky balíky, ktoré chcete po nabootovaní pridať, umiestniť ich niekam do adresárovej štruktúry prístupnej cez TFTP a vytvoriť ešte jeden texťák, kde budú uložené cesty k jednotlivým balíčkom relatívne k TFTP rootu. Cestu k tomuto zoznamu už potom stačí predať ako parameter kernelu. Príklad:
LABEL tinycore
MENU LABEL Tiny Core Linux
kernel /tinycore/bzImage
append initrd=/tinycore/microcore.gz tftplist=169.254.0.1/tinycore/extensions/list.lst
Ja som ale večne nespokojný človek a takýto spôsob mi ešte nie celkom vyhovuje. Navyše tie balíky po deploynutí zostávajú namountované ako loop zariadenia. To je divné. Moje podozrenie sa po rýchlom prejdení inštalačných skriptov potvrdzuje. Balíky pre Tiny Core Linux sú obyčajné squashfs partície, ktorých inštalácia spočíva v tom, že ich obsahom sa "preloží" už existujúca root partícia. V skutočnosti to nie je až taký zlý nápad, keďže na tvorbu vlastných balíkov človek nemusí študovať žiadne nové nástroje a vystačí si už s tým, čo pozná. Vďaka tomu som hneď vyriešil aj nasledujúcu úlohu a to dostať do nabootovaného systému nejaké moje vlastné skripty a nastavenia. Ale tie namountované zariadenia naozaj nie sú veľmi pekné a ja ako veľký detailista som sa s tým nemohol uspokojiť.
Zvolil som teda nasledujúce riešenie. Samotný initrd balíček je obyčajný gzipnutý archív rozbaliteľný cez cpio. Rozhodol som sa ho teda rozbaliť, nakopírovať do neho obsah všetkých rozšírení a nakoniec to celé zbaliť. Keď už to budem robiť, rovno tam môžem nahrať aj všetky vlastné skripty a porobiť úpravy, ktoré potrebujem. Keďže som veľmi lenivý človek, napísal som si na to skript:
#!/bin/bash
INFILE="/data/samba/install/tftpboot/tinycore/microcore.gz"
OUTFILE="/data/samba/install/tftpboot/tinycore/customcore.gz"
INEXTD="/data/samba/install/tftpboot/tinycore/extensions"
INROOT="/data/samba/install/tftpboot/tinycore/root"
DIR="/tmp/tinycore"
MNTDIR="${DIR}/mnt"
ROOTDIR="${DIR}/root"
rm -f $OUTFILE
rm -rf $DIR
mkdir $DIR
mkdir $MNTDIR
mkdir $ROOTDIR
echo "Rozbalujem $INFILE"
cd $ROOTDIR; zcat $INFILE | cpio -i -H newc -d
ZOZNAM=`find ${INEXTD}/*.tcz`
for X in $ZOZNAM; do
echo "Pridavam rozsirenie $X"
mount -o loop,ro -t squashfs $X $MNTDIR
cp -axf ${MNTDIR}/* ${ROOTDIR}/
umount $MNTDIR
done
echo "Pridavam dodatocne subory"
cp -axf ${INROOT}/* ${ROOTDIR}/
KERNELY=`cd ${ROOTDIR}/lib/modules/; find * -maxdepth 0 -type d`
for X in $KERNELY; do
echo "Spustam depmod pre kernel $X"
depmod -b $ROOTDIR $X
done
echo "Vsetko balim do suboru $OUTFILE"
cd $ROOTDIR; find * | cpio -o -H newc | gzip -2 > $OUTFILE
advdef -z4 $OUTFILE
Dostal som teda jeden initrd súbor, ktorý obsahuje všetko, čo potrebujem. Poslednú vec, ktorú som potreboval vyriešiť, bola ešte customizácia tohto balíku, keďže raz chcem, aby hneď po nabootovaní začal ťahať imidž z nejakeho samba sharu, inokedy nech len spusti stress alebo nech nerobí nič a zostane v shelli. Jednou z možností je vytvoriť si niekoľko rôznych initrd, prípadne dodatočné balíky, ale to opäť nie je ono. Autori Tiny Core Linux ale mysleli aj na túto potrebu a tak pridali možnosť natiahnuť viac initrd archívov cez TFTP.
LABEL tinycoredeployxp
MENU LABEL Deploy clean Windows XP
kernel /tinycore/bzImage
append initrd=/tinycore/microcore.gz,/tinycore/deployxp.gz
Pár slov na záver? Sám ani neviem, prečo som napísal tento blog. Možno to bola moja túžba sa podeliť o potenciálne zaujímavé informácie alebo len obyčajná eufória z toho, že som našiel niečo, čo mi tak presne sadlo. Skúšal som už veľa malých distribúcií a často som bol zúfalý zo zbytočnej prekomplikovanosti a nabloatovanosti. Preto nájsť niečo také jednoduché, priamočiare a schopné urobiť všetko, čo potrebujem, pokladám v dnešnej dobe skoro za zázrak. Veď už len fakt, že tento blog som písal dlhšie, ako mi trvalo si upraviť Tiny Core Linux podľa vyššie spomínaného postupu, od prvého stiahnutia až po rozoslanie na pobočky, o niečom svedčí. Opäť je svet o niečo lepším miestom pre život :)
|
webhosting by: |
UnlimitedHosting | CustomHosting | FreeWeb.sk |