Hlavní navigace

Úpravy v live distribuci Grml

15. 1. 2019 15:28 (aktualizováno) Celaeno

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ím 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

Obsah live cd adresáře

  • autorun.inf zobrazí ikonku a spustí index.html při načtení livecd, kde index.html je úvodní stránka o grml
  • adresář boot  – zde nalezneme vše k bootu
  • cdrom.icon je ikona
  • conf  – zde nalezneme bootid.txt a bootfile.txt
  • EFI zde je bootx64.efi pro UEFI boot
  • v GRML  máme popis distrubuce, to znamená, je zde uložena licence, README, md5sum atp.
  • a konečně se dostáváme k poslenímu adresáři a to je 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.

Samotná úprava

No a teď 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 nejsem root není potřeba řešit, protože /dev vyřeší chroot, nebo LXC.
Parametr -d znamená destination, pokud se nepoužije, tak se nám to rozbalí 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. Já používám LXC, protože celý tento proces mám napojený na Jenkins a Salt, takže to probíhá automaticky jen si v gitu upravím co chci 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ám, že máte nastavenou síť a věci kolem. Nechci 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 skrz SSH například. Je dobré zaktualizovat repozitáře a poté můžete instalovat přes apt cokoliv potřebujete. Já jsem pomocí bootstrap-salt automaticky nainstaloval salt-minion, provedl jeho konfiguraci, nastavil si ať se mi po startu sám spouští a taky ať se mi nakonfiguruje síť, protože ve výchozím stavu je to u grml vypnuté.

Pokud máte veškeré akce na rootu grml hotové, tak 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, tak se stačí podívat do manuálu.

Poslední co nám zbývá, tak 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ě sotjí 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

Závěr

Tohle je jednoduchý návod jak si upravit ISO, určitě se nejedná o kompletní návod jak pracovat s ISO live distribucemi.