Odkiaľ je tento konfigurák? [Debian/Ubuntu]

Cieľom tohto príspevku je ukázať techniku ladania v Debian/Ubuntu, týkajúcu sa „hľadania zdroja“ v systémovom konfiguračnom súbore.

Testovací príklad: po dlhých experimentoch so zálohami tar.gz nainštalovaného OS a po jeho obnovení a inštalácii aktualizácií dostávame správu:

update-initramfs: Generovanie /boot/initrd.img-4.15.0-54-generic
W: konfigurácia initramfs-tools nastavuje RESUME=/dev/mapper/U1563304817I0-swap
W: ale nie je k dispozícii zodpovedajúce výmenné zariadenie.
I: Initramfs sa pokúsi o obnovenie z /dev/dm-1
I: (/dev/mapper/foobar-swap)
I: Nastavte premennú RESUME, aby ste ju preopravili.

Cieľ: pochopiť, odkiaľ toto hodnotenie (U1563304817I0) pochádza a ako ho správne zmeniť. Toto je prvý príklad, ktorý sme našli, nie príliš zaujímavý sám o sebe, ale vhodný na demonštráciu praktických metód práce s Linuxom..

Krok číslo 1: Odkiaľ pochádza RESUME?

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

Rekurzívne (-r) hľadáme zmienku o tejto premennej v adresári /etc (tam, kde sú väčšina konfigurácií). Nachádzame snippet v conf.d, ktorý je jasne používaný balíkom initramfs-tools.

Odkiaľ pochádza tento snippet?

Existujú tri možnosti:

  1. Magický artefakt (niekto ho položil a zabudol)
  2. Konfigurácia z balíka
  3. Konfigurácia vygenerovaná nejakým skriptom z systémových balíkov

Skontrolujeme č. 2 (ako najjednoduchšie):

 dpkg -S initramfs-tools/conf.d/resume
dpkg-query: nenájdená cesta zodpovedajúca vzoru *initramfs-tools/conf.d/resume*

dpkg -S nám umožňuje hľadať v databáze nainštalovaných súborov a zistiť, ku ktorému balíku súbor patrí. Tu je príklad úspešného vyhľadávania:

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

Vraciame sa k našej úlohe: súbor initramfs-tools/conf.d/resume nie je nainštalovaný v systéme z balíka. Možno sa generuje v postinst/preinst skripte balíka? Skontrolujeme verziu čí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 adresári /var/lib/dpkg/info/ ležia rozbalené verzie všetkých „metasúborov“ balíkov (inštalačné/odstraňovacie skripty, opisy balíkov atď.). Prekvapujúce je, že tento súbor sa odstraňuje v postrm (pri odstraňovaní) balíka initramfs-tools-core. Pozrime sa na obsah jeho postinst… Nič, čo sa týka adresára conf.d.

Pozrime sa na súbory z balíka initramfs-tools-core.

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

Tím dpkg -L nám umožňuje pozrieť sa na všetky súbory, ktoré existujú v systéme od uvedeného balíka. Vybral som zaujímavý súbor na skúmanie. Skúmanie súboru ukazuje, ako sa táto premenná používa, ale neodpovedá na to, odkiaľ pochádza.

debconf

Takže, je to niekoho artefakt. Čie? Predtým, než sa ponoríme do inštalátora, pozrime sa ešte na jednu dôležitú infraštruktúru Debianu — odpovede na otázky. Každýkrát, keď balík položí otázku, a v mnohých prípadoch, keď otázku nekladie, ale používa predvolenú možnosť, otázka aj odpoveď sa zaznamenávajú v špeciálnej databáze v Debiane, ktorá sa volá debconf. Môžeme sa pozrieť na databázu odpovedí (a dokonca ich nastaviť pred inštaláciou samotného balíka — debconf-set-selections), na to budeme potrebovať utilitu debconf-get-selections z balíka debconf-utils. Bohužiaľ, nič zaujímavé sa nenašlo: (debconf-get-selections |grep -i resume vrátilo prázdno).

debian-installer

Inštalátor má svoju vlastnú databázu odpovedí na otázky: /var/log/installer/cdebconf/questions.dat. Bohužiaľ, tam tiež nie je ani slovo o našom resume.
Našťastie sú tu vedľa logy, vrátane syslog, do ktorého sa zapisuje celý log inštalácie. Tam sa spomína balík base-installer, a na jeho stránke môžeme vidieť odkaz na zdrojové kódy.

Vo vnútri nich ľahko nájdeme odpoveď na našu otázku:

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

mapdevfs — to je utilita s jasným účelom, a zaujímavá funkcia pre nás je get_resume_partition, ktorá číta /proc/swaps a vyberá tam najväčší. Swap však pochádza od partmana.

Odpoveď na našu testovaciu úlohu: súbor sa vytvára inštalátorom v /targete v okamihu inštalácie, t.j. hovoríme o well-known, ale artefakte. Vo existujúcich balíkoch v systéme nie je nikto a nič, čo by tento súbor menilo.

Na záver

  1. dpkg a debconf — hlavné metódy na vyhľadávanie dodávateľov súborov.
  2. vyhľadávanie v /var/lib/dpkg/info umožňuje vidieť operácie nad súbormi v priebehu inštalácie.
  3. Inštalátor môže vytvárať súbory-artefakty, ktoré nikto nikdy nezmení (okrem používateľa), a to je viditeľné v kóde inštalátora.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster