Wou kënnt dës Configuratioun hier? [Debian/Ubuntu]

Den Zweck vun dësem Post ass eng Debugging Technik an debian/ubuntu ze weisen am Zesummenhang mat "d'Quell fannen" an der Systemkonfiguratiounsdatei.

Testbeispill: no vill Spott vun der tar.gz Kopie vum installéierten OS an no der Restauratioun an Installatioun vun Updates, kréien mir de Message:

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.

Zil: verstoen wou dëse Wäert (U1563304817I0) hierkënnt a wéi et richteg z'änneren. Dëst ass dat éischt Beispill dat erfonnt ass, net besonnesch interessant a sech selwer, awer praktesch fir praktesch Methoden ze weisen fir mat Linux ze schaffen.

Schrëtt Nummer 1: Wou ass RESUME hierkënnt?

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

Mir rekursiv (-r) kuckt no enger Ernimmung vun dëser Variabel am /etc Verzeichnis (wou déi meescht Konfiguratioune sinn). Mir fannen de conf.d Snippet, dee kloer vum initramfs-tools Package benotzt gëtt.

Wou kënnt dësen Ausschnëtt hier?

Et ginn dräi Optiounen:

  1. Magic Artefakt (een huet et gesat a vergiess)
  2. Config aus dem Package
  3. Config generéiert vun e puer Skript vu Systempakete

Loosst eis d'Nummer 2 kontrolléieren (wéi am einfachsten):

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

dpkg -S erlaabt eis d'Datebank vun installéierten Dateien ze sichen an ze fannen zu wéi engem Package d'Datei gehéiert. Hei ass e Beispill vun enger erfollegräicher Sich:

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

Komme mer zréck op eis Aufgab: Datei initramfs-tools/conf.d/resume ass net um System vum Package installéiert. Vläicht gëtt et am Postinst / Preinst Skript vum Package generéiert? Loosst eis d'Versioun Nummer 3 iwwerpréiwen.

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

Am Katalog /var/lib/dpkg/info/ et gi ausgepackte Versioune vun all "Metafile" vu Packagen (Installatioun / Ewechhuele Scripten, Package Beschreiwunge, etc.). Iwwerraschend gëtt dës Datei am postrm (op Uninstall) vum initramfs-tools-core Package geläscht. Loosst eis den Inhalt vu sengem Postinst kucken ... Näischt am Zesummenhang mam Conf.d Verzeichnis.

Loosst eis d'Dateien kucken, déi am Package abegraff sinn initramfs-tools-core.

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

Equipe dpkg -L erlaabt Iech all d'Fichier'en ze gesinn, déi um System aus dem spezifizéierte Package sinn. Ech hunn e Fichier markéiert deen interessant ass fir ze studéieren. D'Untersuchung vun der Datei weist wéi dës Variabel benotzt gëtt, awer seet net wou se hierkënnt.

debconf

Et stellt sech eraus datt dëst den Artefakt vun engem ass. Wien seng? Ier Dir an den Installateur daucht, kucke mer eng aner wichteg Debian Infrastruktur - Äntwerten op Froen. All Kéier wann e Package eng Fro stellt, a ville Fäll wann et keng Fro stellt, awer d'Standardoptioun benotzt, ginn d'Fro an d'Äntwert an enger spezieller Datebank an Debian genannt debconf opgeholl. Mir kënnen d'Datebank vun Äntwerten kucken (a souguer se setzen ier Dir de Package selwer installéiert - debconf-set-selections), dofir brauche mir en Utility debconf-get-selections aus der Zesummesetzung debconf-utils. Leider gouf näischt interessants fonnt :(debconf-get-selections |grep -i resume eidel zréckginn).

Debian-Installateur

Den Installateur huet seng eege Datebank mat Äntwerten op Froen: /var/log/installer/cdebconf/questions.dat. Leider gëtt et och kee Wuert iwwer eise Resumé.
Mee et gi Logbicher an der Géigend, inkl. syslog, wou de ganze Installatiounsprotokoll geschriwwe gëtt. De Base-Installer Package gëtt do erwähnt, an drop Säit mir kënnen de Link op d'Raws gesinn.

Bannen an hinnen kënne mir einfach d'Äntwert op eis Fro fannen:

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

mapdevfs ass en Utility mat engem kloeren Zweck, an d'Funktioun déi mir interesséiert ass get_resume_partition, déi /proc/swaps liest a wielt dee gréissten do. Swap kënnt aus Partman.

D'Äntwert op eis Testaufgab: d'Datei gëtt vum Installateur an /target am Moment vun der Installatioun erstallt, d.h. mir schwätzen iwwer bekannt, awer en Artefakt. Et gëtt keen oder näischt an de existente Packagen am System déi dës Datei änneren kann.

Zesummefaassung

  1. dpkg an debconf sinn d'Haaptmethoden fir Dateiprovider ze fannen.
  2. Sich an /var/lib/dpkg/info erlaabt Iech Operatiounen op Dateien während der Installatiounsphase ze gesinn.
  3. Den Installateur kann Artefaktdateien erstellen, déi dann ni vu jidderengem geännert ginn (ausser dem Benotzer), an dëst kann am Installateurscode gesi ginn.

Source: will.com

Setzt e Commentaire