V tomto článku vám ukáži, jak je možné upravovat live obrazy linuxových distribucí. Pro úpravu live cd používám automatizovaně Salt, který mi pomáhá rychle a jednoduše obsah livecd měnit. Když livecd po úpravách spustím tak, se mi salt minion přihlásí do salt masteru pod unikátním id a můžu jej konfigurovat automatizovaně. Nicméně v tomto článku popíši klasickou cestu, bez automatizace.
První co budeme potřebovat, je nainstalovat nějaký software, který je potřeba k práci s ISO soubory v linuxu. Jedná se o tyto aplikace: bsdtar, mksquashfs/unsquashfs, xorriso a mkisofs. Bsdtar použijeme pro rozbalení ISO obrazu, unsquashfs je pro rozbalení squash filesystému, což je komprimovaný linuxový filesystem, u grml je v něm zabalený root adresář systému. A jak už název napovídá tak mksquashfs slouží k vytvoření squash file systému. Xorriso je program díky kterému, můžete vytvářet a modifikovat ISO filesystem soubory. A poslední mkisofs nám vytvoří konečný ISO soubor a provolává se skrz xorriso. Co budeme potřebovat jsem si zhruba představili a teď už můžeme přejít k úpravám.
Já jsem pro modifikaci zvolil grml small verze, takže si ji můžete stáhnout z adresy grml.org. Potom jsem si vytvořil adresář grml-modify, který mám v /home/user/grml-modify
, ale jestli ho umístíte jinam je jen na vás. Do něj ještě vytvořím adresář iso_unpack
user@celaeno:~/grml-modify$ mkdir iso_unpack
Teď už rozbalíme do tohoto adresáře ISO file.
user@celaeno:~/grml-modify$ bsdtar -C iso_unpack -xf ../Downloads/grml64-small_2018.12.iso user@celaeno:~/grml-modify$ ls iso_unpack/ autorun.inf boot cdrom.ico conf EFI GRML live
autorun.inf
zobrazí ikonku a spustí index.html při načtení livecd, kde index.html je úvodní stránka o grmlboot
– zde nalezneme vše k bootucdrom.icon
je ikonaconf
– zde nalezneme bootid.txt
a bootfile.txt
EFI
zde je bootx64.efi
pro UEFI bootGRML
máme popis distribuce, to znamená, že je zde uložena licence, README, md5sum atp.live
, kde nalezneme squash grml, který nás zajímá nejvíce. Je zde umístěný ještě soubor filesytem.module
, ve kterém je uvedený název squash souboru a to je grml64-small.squashfs
.Teď už nezbývá nic jiného než rozbalit samotný squashfs a pustit se do úprav.
Rozbalení provedeme takto – rozbalíme root do adresáře grml-root:
user@celaeno:~/grml-modify/$ unsquashfs -d grml-root iso_unpack/live/grml64-small/grml64-small.squashfs Parallel unsquashfs: Using 4 processors 28824 inodes (30423 blocks) to write [| ] 40/30423 0%
create_inode: could not create character device live/grml64-small/grml-root/dev/full, because you're not superuser! create_inode: could not create character device live/grml64-small/grml-root/dev/null, because you're not superuser! create_inode: could not create character device live/grml64-small/grml-root/dev/ptmx, because you're not superuser! [| ] 40/30423 0% create_inode: could not create character device live/grml64-small/grml-root/dev/random, because you're not superuser! create_inode: could not create character device live/grml64-small/grml-root/dev/tty, because you're not superuser! create_inode: could not create character device live/grml64-small/grml-root/dev/urandom, because you're not superuser! create_inode: could not create character device live/grml64-small/grml-root/dev/zero, because you're not superuser! [====================================================================================================================================================================================\ ] 30416/30423 99% created 25657 files created 3279 directories created 3142 symlinks created 0 devices created 0 fifos
Chyby, že nejsme root není potřeba řešit, protože /dev vyřeší chroot nebo LXC.
Parametr -d znamená destination, pokud se nepoužije, rozbalí se nám do adresáře squashfs-root
Teď už v adresáři grml-root můžete vidět, že je to klasický root adresář, který najdeme na každé linuxové distribuci viz výpis.
user@celaeno:~/grml-modify/grml-root$ ls bin boot dev etc grml-live home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
A můžeme začít samotnou úpravu rootu. Jedna možnost je použít chroot a další možnost je použít LXC. My používáme LXC, protože celý tento proces mám napojený na Jenkins a Salt, takže to probíhá automaticky a jen si v gitu upravíme, co chceme do rootu nahrát.
V konfiguraci LXC v /var/lib/lxc/grml-live/config je potřeba grml-root nastavit jako rootfs a ještě upravit tty na 1, protože grml běží na prvním tty terminalu.
lxc.rootfs = /home/user/grml-modify/grml-root lxc.tty = 1
Po úpravě konfigurace by se vám mělo podařit nastartovat LXC kontejner s rootem z grml. Předpokládáme, že máte nastavenou síť a věci kolem. Nechceme se v tomto příspěvku zabývat konfigurací LXC, na internetu je na to návodů docela dost. Po startu kontejneru se stačí přihlásit na terminál pomocí příkazu.
user@celaeno:~$ lxc-attach -n nazev_kontejneru
Teď si můžete spustit SSH a přihlásit se do konzole například skrz SSH . Je dobré zaktualizovat repozitáře a poté můžete instalovat přes apt, cokoliv potřebujete. My jsme pomocí bootstrap-salt automaticky nainstalovali salt-minion, provedli jeho konfiguraci, nastavili si, ať se po startu sám spouští a nakonfiguruje si síť, protože ve výchozím stavu je to u grml vypnuté.
Pokud máte veškeré akce na rootu grml hotové, můžete LXC stopnout a vytvořit squashfs. Squashfs vytvoříme takto:
user@celaeno:~/grml-modify$ mksquashfs grml-root iso_unpack/live/grml64-small/grml64-small.squashfs -comp xz -Xdict-size 100% -b 1048576 Parallel mksquashfs: Using 4 processors Creating 4.0 filesystem on iso_unpack/live/grml64-small/grml64-small.squashfs, block size 1048576. [=====================================================================================================================================================================================\] 25794/25794 100% Exportable Squashfs 4.0 filesystem, xz compressed, data block size 1048576 compressed data, compressed metadata, compressed fragments, compressed xattrs duplicates are removed Filesystem size 249897.64 Kbytes (244.04 Mbytes) 29.01% of uncompressed filesystem size (861411.59 Kbytes) Inode table size 258798 bytes (252.73 Kbytes) 24.24% of uncompressed inode table size (1067676 bytes) Directory table size 279784 bytes (273.23 Kbytes) 40.67% of uncompressed directory table size (687930 bytes) Xattr table size 56 bytes (0.05 Kbytes) 107.69% of uncompressed xattr table size (52 bytes) Number of duplicate files found 1620 Number of inodes 32078 Number of files 25657 Number of fragments 630 Number of symbolic links 3142 Number of device nodes 0 Number of fifo nodes 0 Number of socket nodes 0 Number of directories 3279 Number of ids (unique uids + gids) 1 Number of uids 1 user (1000) Number of gids 1 user (1000)
První parametr je zdroj a druhý je cíl, další parametry jsou snad jasné. Pokud ne, stačí se podívat do manuálu.
Poslední, co nám zbývá, je vytvoření samotného ISO obrazu.
Stačí spustit příkaz Xorriso:
user@celaeno:~/grml-modify$ xorriso -as mkisofs -o grml64-small.iso -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat iso_unpack xorriso 1.3.2 : RockRidge filesystem manipulator, libburnia project. Drive current: -outdev 'stdio:grml64-small.iso' Media current: stdio file, overwriteable Media status : is blank Media summary: 0 sessions, 0 data blocks, 0 data, 182g free Added to ISO image: directory '/'='/home/pepa/grml-modify/iso_unpack' xorriso : UPDATE : 989 files added in 1 seconds xorriso : UPDATE : 989 files added in 1 seconds xorriso : UPDATE : 2.30% done xorriso : UPDATE : 14.91% done xorriso : UPDATE : 21.54% done, estimate finish Fri Jan 11 20:28:24 2019 xorriso : UPDATE : 37.69% done, estimate finish Fri Jan 11 20:28:22 2019 xorriso : UPDATE : 48.46% done, estimate finish Fri Jan 11 20:28:22 2019 xorriso : UPDATE : 70.00% done, estimate finish Fri Jan 11 20:28:21 2019 xorriso : UPDATE : 96.92% done ISO image produced: 152142 sectors Written to medium : 152142 sectors at LBA 0 Writing to 'stdio:grml64-small.iso' completed successfully.
Nastavíme, že ISO chceme vytvářet pomocí příkazu mkisofs a jak se bude jmenovat výstup. Co ještě stojí za zmínku, je cesta k isolinux.bin
a cesta k boot.cat.
Je důležité pro správné fungování livecd a grubu.
Pro přesný popis a pochopení se prosím podívejte do manuálové stránky xorriso.
Poslední parametr je zdroj, kde xorriso bude hledat data pro ISO.
To je vše. Po proběhnutí by v adresáři grml-modify mělo být vidět naše nové ISO.
user@celaeno:~/grml-modify$ ls grml-root grml64-small.iso iso_unpack
Tohle je jednoduchý návod, jak si upravit ISO, určitě se nejedná o kompletní návod, jak pracovat s ISO live distribucemi.
Zdravím, chybí příklad pro mksquashfs. Je tam jen jeho výstup.