Nga vjen ky konfigurim? [Debian/Ubuntu]

Qëllimi i këtij postimi është të tregojë një teknikë korrigjimi në debian/ubuntu lidhur me "gjetjen e burimit" në skedarin e konfigurimit të sistemit.

Shembull testimi: pas shumë talljeve me kopjen tar.gz të sistemit operativ të instaluar dhe pas rivendosjes së tij dhe instalimit të përditësimeve, marrim mesazhin:

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.

Objektivi: kuptoni se nga erdhi kjo vlerë (U1563304817I0) dhe si ta ndryshoni atë saktë. Ky është shembulli i parë që hasi, jo veçanërisht interesant në vetvete, por i përshtatshëm për të treguar metoda praktike të punës me Linux.

Hapi numër 1: Nga erdhi RINISIM?

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

Ne në mënyrë rekursive (-r) kërkoni një përmendje të kësaj ndryshore në drejtorinë /etc (ku janë shumica e konfigurimeve). Gjejmë fragmentin conf.d, i cili përdoret qartë nga paketa initramfs-tools.

Nga është ky fragment?

Ekzistojnë tre mundësi:

  1. Artifakt magjik (dikush e vendosi dhe harroi)
  2. Konfigurimi nga paketa
  3. Konfigurimi i krijuar nga disa skripta nga paketat e sistemit

Le të kontrollojmë nr. 2 (si më i thjeshti):

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

dpkg -S na lejon të kërkojmë bazën e të dhënave të skedarëve të instaluar dhe të gjejmë se cilës paketë i përket skedari. Këtu është një shembull i një kërkimi të suksesshëm:

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

Le të kthehemi në detyrën tonë: skedar initramfs-tools/conf.d/resume nuk është i instaluar në sistem nga paketa. Ndoshta është krijuar në skriptin postinst/preinst të paketës? Le të kontrollojmë versionin numër 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

Në katalog /var/lib/dpkg/info/ ka versione të papaketuara të të gjithë “metafileve” të paketave (skriptet e instalimit/heqjes, përshkrimet e paketave, etj.). Çuditërisht, ky skedar hiqet në postrm (në çinstalim) të paketës initramfs-tools-core. Le të shohim përmbajtjen e postinst-it të tij... Asgjë që lidhet me direktorinë conf.d.

Le të shohim skedarët e përfshirë në paketë initramfs-tools-core.

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

Ekip dpkg -L ju lejon të shikoni të gjithë skedarët që janë në sistem nga paketa e specifikuar. Kam vënë në pah një dosje interesante për studim. Ekzaminimi i skedarit tregon se si përdoret kjo ndryshore, por nuk tregon se nga vjen.

debkonf

Rezulton se ky është objekt i dikujt. E kujt? Përpara se të zhytemi në instaluesin, le të hedhim një vështrim në një infrastrukturë tjetër të rëndësishme Debian - përgjigjet e pyetjeve. Sa herë që një paketë bën një pyetje, dhe në shumë raste kur nuk bën një pyetje, por përdor opsionin e paracaktuar, si pyetja ashtu edhe përgjigjja regjistrohen në një bazë të dhënash të veçantë në Debian të quajtur debconf. Ne mund të shikojmë bazën e të dhënave të përgjigjeve (dhe madje t'i vendosim ato përpara se të instalojmë vetë paketën - debconf-set-selections), për këtë na duhet një shërbim debconf-get-selections nga përbërja debconf-utils. Fatkeqësisht, asgjë interesante nuk u gjet :(debconf-get-selections |grep -i resume u kthye bosh).

instalues ​​i debianit

Instaluesi ka bazën e tij të të dhënave të përgjigjeve të pyetjeve: /var/log/installer/cdebconf/questions.dat. Fatkeqësisht, gjithashtu nuk ka asnjë fjalë për CV tonë.
Por ka trungje aty pranë, përfshirë. syslog, ku shkruhet i gjithë regjistri i instalimit. Paketa e instaluesit bazë përmendet atje dhe në të faqe ne mund të shohim lidhjen me raws.

Brenda tyre mund të gjejmë lehtësisht përgjigjen e pyetjes sonë:

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

mapdevfs është një mjet me një qëllim të qartë, dhe funksioni për të cilin ne jemi të interesuar është get_resume_partition, i cili lexon /proc/swaps dhe zgjedh më të madhin atje. Shkëmbimi vjen nga partman.

Përgjigja për detyrën tonë të testimit: skedari krijohet nga instaluesi në /target në momentin e instalimit, d.m.th. po flasim për një artefakt të njohur, por. Nuk ka asnjë ose asgjë në paketat ekzistuese në sistem që mund ta ndryshojë këtë skedar.

Duke përmbledhur

  1. dpkg dhe debconf janë metodat kryesore për gjetjen e ofruesve të skedarëve.
  2. kërkimi në /var/lib/dpkg/info ju lejon të shihni operacionet në skedarë gjatë fazës së instalimit.
  3. Instaluesi mund të krijojë skedarë artifakte që më pas nuk ndryshohen kurrë nga askush (përveç përdoruesit), dhe kjo mund të shihet në kodin e instaluesit.

Burimi: www.habr.com

Shto një koment