Odkud je tato konfigurace?Debian/Ubuntu]

Účelem tohoto příspěvku je ukázat techniky ladění v debian/ubuntu, související s „hledáním původního zdroje“ v konfiguračním souboru systému.

Testovací příklad: po velkém výsměchu kopii tar.gz nainstalovaného OS a po jeho obnovení a instalaci aktualizací obdržíme zprávu:

update-initramfs: Generating /boot/initrd.img-4.15.0-54-generic
W: initramfs-tools configuration sets RESUME=/dev/mapper/U1563304817I0-swap
W: but no matching swap device is available.
I: The initramfs will attempt to resume from /dev/dm-1
I: (/dev/mapper/foobar-swap)
I: Set the RESUME variable to override this.

Cíl: pochopit, odkud tato hodnota (U1563304817I0) pochází a jak ji správně změnit. Toto je první příklad, který mě napadl, sám o sobě není nijak zvlášť zajímavý, ale je vhodný pro ukázku praktických metod práce s... Linux.

Krok číslo 1: Kde se vzal RESUME?

# cd /etc
# grep -r RESUME
initramfs-tools/conf.d/resume:RESUME=/dev/mapper/U1563304817I0-swap

My rekurzivně (-r) hledejte zmínku o této proměnné v adresáři /etc (kde je většina konfigurací). Najdeme fragment conf.d, který jednoznačně používá balíček initramfs-tools.

Odkud je tento úryvek?

Existují tři možnosti:

  1. Magický artefakt (někdo ho položil a zapomněl)
  2. Konfigurace z balíčku
  3. Konfigurace generovaná nějakým skriptem ze systémových balíčků

Zkontrolujeme č. 2 (jako nejjednodušší):

 dpkg -S initramfs-tools/conf.d/resume
dpkg-query: no path found matching pattern *initramfs-tools/conf.d/resume*

dpkg -S nám umožňuje prohledávat databázi nainstalovaných souborů a zjistit, ke kterému balíčku soubor patří. Zde je příklad úspěšného vyhledávání:

dpkg -S resolv.conf
manpages: /usr/share/man/man5/resolv.conf.5.gz
systemd: /lib/systemd/resolv.conf

Vraťme se k našemu úkolu: soubor initramfs-tools/conf.d/resume není v systému nainstalován z balíčku. Možná je generován ve skriptu postinst/preinst balíčku? Podívejme se na verzi číslo 3.

# cd /var/lib/dpkg/info/
# grep -r initramfs-tools/conf.d/resume *
initramfs-tools-core.postrm:    rm -f /etc/initramfs-tools/conf.d/resume

V katalogu /var/lib/dpkg/info/ existují rozbalené verze všech „metasouborů“ balíčků (instalační/odstraňovací skripty, popisy balíčků atd.). Překvapivě je tento soubor odstraněn v postrm (při odinstalaci) balíčku initramfs-tools-core. Podívejme se na obsah jeho postinst... Nic souvisejícího s adresářem conf.d.

Podívejme se na soubory, které jsou součástí balení initramfs-tools-core.

# dpkg -L initramfs-tools-core
...
/usr/share/initramfs-tools/hooks/resume
...

Tým dpkg -L umožňuje zobrazit všechny soubory, které jsou v systému ze zadaného balíčku. Zvýraznil jsem soubor, který je zajímavý pro studium. Prozkoumání souboru ukazuje, jak se tato proměnná používá, ale neříká, odkud pochází.

debconf

Takže tohle je něčí artefakt. Čí? Než se pustíme do instalačního programu, podívejme se ještě na jednu důležitou součást infrastruktury. Debian — odpovědi na otázky. Pokaždé, když balíček položí otázku, a v mnoha případech, kdy otázku nepoloží, ale použije výchozí možnost, se otázka i odpověď zaznamenají do speciální databáze v Debian, který se nazývá debconf. Můžeme se podívat na databázi odpovědí (a dokonce je nastavit před samotnou instalací balíčku - debconf-set-selections), k tomu potřebujeme utilitu debconf-get-selections ze složení debconf-utils. Bohužel se nic zajímavého nenašlo :(debconf-get-selections |grep -i resume vráceno prázdné).

debian-instalační program

Instalátor má vlastní databázi odpovědí na otázky: /var/log/installer/cdebconf/questions.dat. Bohužel tam není ani slovo o našem životopisu.
Ale poblíž jsou klády vč. syslog, kde je zapsán celý instalační protokol. Balíček base-installer je zmíněn tam a na něm strana můžeme vidět odkaz na raws.

Uvnitř nich snadno najdeme odpověď na naši otázku:

  resume="$(mapdevfs "$resume_devfs")"; then
...
    if [ "$do_initrd" = yes ]; then
     ...
            resumeconf=$IT_CONFDIR/resume
....
                echo "RESUME=$resume" >> $resumeconf

mapdevfs je nástroj s jasným účelem a funkce, která nás zajímá, je get_resume_partition, který přečte /proc/swaps a vybere tam největší. Swap pochází od partmanu.

Odpověď na náš testovací úkol: soubor vytvoří instalátor v /target v době instalace, tzn. mluvíme o známém, ale artefaktu. Ve stávajících balíčcích v systému není nikdo nebo nic, co by mohlo tento soubor změnit.

Sčítání

  1. dpkg a debconf jsou hlavní metody pro nalezení poskytovatelů souborů.
  2. vyhledávání v /var/lib/dpkg/info vám umožní vidět operace se soubory během fáze instalace.
  3. Instalační program může vytvářet soubory artefaktů, které pak nikdo (kromě uživatele) nikdy nezmění, což je vidět v kódu instalačního programu.

Zdroj: www.habr.com

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster