Honnan származik ez a konfiguráció? [Debian/Ubuntu]

A poszt célja: bemutatni a Debian/Ubuntu hibakeresési technikáját, amely a rendszerszintű konfigurációs fájlban a „forrás keresésére” vonatkozik.

Teszt példa: hosszú szenvedés után egy tar.gz másolatú telepített operációs rendszerről, és annak helyreállítása és frissítések telepítése után az alábbi üzenetet kapjuk:

update-initramfs: Generating /boot/initrd.img-4.15.0-54-generic
W: initramfs-tools konfigurációs beállítás RESUME=/dev/mapper/U1563304817I0-swap
W: de nincs megfelelő swap eszköz elérhető.
I: Az initramfs megpróbál visszatérni a /dev/dm-1-re
I: (/dev/mapper/foobar-swap)
I: Állítsa be a RESUME változót, hogy felülbírálja ezt.

Cél: megérteni, honnan származik ez az érték (U1563304817I0), és hogyan lehet azt helyesen megváltoztatni. Ez az első előforduló példa, nem különösebben izgalmas önállóan, de kényelmes, hogy bemutassuk a Linux használatának gyakorlati módszereit..

Első lépés: Honnan származik a RESUME?

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

Rekurzívan (-r) keressük ezt a változót az /etc könyvtárban (ahol a legtöbb konfiguráció található). Találunk egy conf.d részletet, amelyet egyértelműen az initramfs-tools csomag használ.

Honnan származik ez a részlet?

Három lehetőség van:

  1. Mágikus relikvia (valaki letette és elfelejtette)
  2. Csomagból származó konfiguráció
  3. Konfiguráció, amelyet valamilyen szkript generált a rendszer csomagjaiból

Ellenőrizzük a №2-t (a legegyszerűbb):

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

dpkg -S lehetővé teszi számunkra, hogy a telepített fájlok adatbázisában keressünk, és megtudjuk, melyik csomaghoz tartozik a fájl. Íme egy sikeres keresés példája:

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

Visszatérünk a feladatunkhoz: a fájl initramfs-tools/conf.d/resume nem kerül telepítésre a rendszerbe a csomagból. Lehet, hogy a postinst/preinst szkript generálja a csomagban? Ellenőrizzük a 3. verziót.

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

A mappa /var/lib/dpkg/info/ a csomagok összes „metafájlja” (telepítési/eltávolítási szkriptek, csomagleírások stb.) kibővített változatai. Meglepetés, de ez a fájl eltávolításra kerül a postrm során (a initramfs-tools-core csomag eltávolításakor). Nézzük meg a postinst tartalmát... Semmi az conf.d könyvtárral kapcsolatban.

Nézzük meg az initramfs-tools-core csomag fájljait dpkg -L.

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

A parancs lehetővé teszi, hogy megtekintsük az összes fájlt, amely a megadott csomagból a rendszerben létezik. Kiemeltem egy érdekes fájlt a tanulmányozáshoz. A fájl tanulmányozása megmutatja, hogyan használják ezt a változót, de nem válaszol arra, hogy honnan származik. debconf

debconf

Ez tehát valakinek az artefaktuma. Kié? Mielőtt belemennénk az installátorba, nézzük meg egy másik fontos Debian infrastruktúrát — a kérdésekre adott válaszokat. Minden alkalommal, amikor egy csomag kérdést tesz fel, és sok esetben, amikor nem kérdez, de az alapértelmezett verziót használja, a kérdés és a válasz rögzítésre kerül egy speciális adatbázisban a Debianban, amit debconf-nak hívnak. Megnézhetjük a válaszok adatbázisát (sőt előre be is állíthatjuk őket a csomag telepítése előtt — debconf-set-selections), ehhez szükségünk lesz egy segédprogramra debconf-get-selections a debconf-utilscsomagból. Sajnos, nem találtunk semmi érdekeset: (debconf-get-selections |grep -i resume üresen tért vissza).

debian-installer

A telepítőnek van egy saját válaszadatbázisa a kérdésekre: /var/log/installer/cdebconf/questions.dat. Sajnos, ott sem található egy szó sem a resume-ról.
Viszont van egy közeli napló, többek között a syslog, ahova a telepítés összes naplója íródik. Ott említést nyer a base-installer csomag, és annak oldalán láthatunk egy hivatkozást a forrásokra.

Ezekben könnyedén megtaláljuk a kérdésünkre adott választ:

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

A mapdevfs egy jól meghatározott feladatú segédprogram, a számunkra érdekes funkció pedig a get_resume_partition, amely a /proc/swaps-t olvassa és a legnagyobbat választja. A swap pedig tőlünk érkezik a partman-ból.

A tesztfeladatunkra adott válasz: a fájl a telepítő által jön létre a /target-ben a telepítés pillanatában, vagyis egy well-known, de artefaktumról beszélünk. A rendszerben meglévő csomagok között nincs olyan, ami ezt a fájlt megváltoztatná.

Összefoglalva

  1. A dpkg és a debconf a fájlok szállítóinak keresésének alapvető módszerei.
  2. A /var/lib/dpkg/info-ban végzett keresés lehetővé teszi a fájlokkal kapcsolatos műveletek megtekintését a telepítés során.
  3. A telepítő képes artefakt fájlokat létrehozni, amelyeket soha senki nem változtat meg (kivéve a felhasználót), és ezt láthatjuk a telepítő kódjában.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster