Woher kommt diese Konfiguration? [Debian/Ubuntu]

Ziel dieses Beitrags: die Debugging-Technik in Debian/Ubuntu zu demonstrieren, die mit dem „Suchen der Quelle“ in der Systemkonfigurationsdatei zusammenhĂ€ngt.

Testbeispiel: Nach langem HerumÀrgern mit der tar.gz-Kopie des installierten Betriebssystems und nach deren Wiederherstellung und Installation von Updates erhalten wir die Meldung:

update-initramfs: Generating /boot/initrd.img-4.15.0-54-generic
W: initramfs-tools-Konfiguration setzt RESUME=/dev/mapper/U1563304817I0-swap
W: aber kein passendes Swap-GerĂ€t ist verfĂŒgbar.
I: Das initramfs wird versuchen, von /dev/dm-1 fortzufahren
I: (/dev/mapper/foobar-swap)
I: Setzen Sie die RESUME-Variable, um dies zu ĂŒberschreiben.

Ziel: Verstehen, woher dieser Wert (U1563304817I0) stammt und wie man ihn richtig Àndert. Dies ist ein zufÀlliges Beispiel, nicht besonders interessant an sich, aber praktisch, um Methoden zur Arbeit mit Linux zu demonstrieren..

Schritt Nummer 1: Woher kommt RESUME?

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

Wir suchen rekursiv (-r) nach einer ErwÀhnung dieser Variable im Verzeichnis /etc (da ist die Mehrheit der Konfigurationen). Wir finden einen conf.d-Schnipsel, der offensichtlich vom Paket initramfs-tools verwendet wird.

Woher stammt dieser Schnipsel?

Es gibt drei Möglichkeiten:

  1. Ein magisches Artefakt (jemand hat es vergessen)
  2. Konfiguration aus dem Paket
  3. Konfiguration, die durch ein Skript aus den Systempaketen generiert wurde

ÜberprĂŒfen wir Nummer 2 (als die einfachste):

 dpkg -S initramfs-tools/conf.d/resume
dpkg-query: kein passender Pfad gefunden, der dem Muster *initramfs-tools/conf.d/resume* entspricht.

dpkg -S ermöglicht es uns, in der Datenbank der installierten Dateien zu suchen und herauszufinden, zu welchem Paket die Datei gehört. Hier ein Beispiel fĂŒr eine erfolgreiche Suche:

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

Kehren wir zu unserer Aufgabe zurĂŒck: die Datei initramfs-tools/conf.d/resume wird nicht durch das Paket im System installiert. Vielleicht wird sie im postinst/preinst-Skript des Pakets generiert? ÜberprĂŒfen wir Version Nummer 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

Im Verzeichnis /var/lib/dpkg/info/ enthalten die entpackten Versionen aller „Metadateien“ von Paketen (Installations-/Entfernungsskripte, Paketbeschreibungen usw.). Erstaunlich, aber diese Datei wird im postrm (beim Entfernen) des Pakets initramfs-tools-core gelöscht. Lassen Sie uns den Inhalt seines postinst ansehen
 Nichts, was die conf.d-Direktive betrifft.

Lassen Sie uns die Dateien aus dem Paket anschauen initramfs-tools-core.

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

Team dpkg -L erlaubt es, alle Dateien anzuzeigen, die im System von dem angegebenen Paket existieren. Ich habe eine interessante Datei zur Untersuchung ausgewÀhlt. Die Untersuchung der Datei zeigt, wie diese Variable verwendet wird, stellt aber nicht klar, woher sie kommt.

debconf

Es scheint, dass es sich um ein Artefakt von jemandem handelt. Von wem? Bevor wir in den Installer eintauchen, schauen wir uns eine weitere wichtige Infrastruktur von Debian an – die Antworten auf Fragen. Jedes Mal, wenn ein Paket eine Frage stellt, und in vielen FĂ€llen, wenn es keine Frage stellt, aber die Standardoption verwendet, werden sowohl die Frage als auch die Antwort in einer speziellen Datenbank in Debian gespeichert, die debconf genannt wird. Wir können die Antwortdatenbank ansehen (und sogar die Antworten noch vor der Installation des eigentlichen Pakets festlegen – debconf-set-selections), dafĂŒr benötigen wir das Dienstprogramm debconf-get-selections aus dem Paket debconf-utils. Leider gibt es nichts Interessantes: (debconf-get-selections |grep -i resume gab nichts zurĂŒck).

debian-installer

Der Installer hat seine eigene Datenbank fĂŒr die Fragen: /var/log/installer/cdebconf/questions.dat. Leider steht dort auch kein Wort ĂŒber unser Resume.
DafĂŒr gibt es in der NĂ€he Protokolle, einschließlich syslog, in denen das gesamte Installationsprotokoll verfasst wird. Dort wird das Paket base-installer erwĂ€hnt, und in dessen Seite sehen wir einen Link zu den Quellcodes.

Darin finden wir mĂŒhelos die Antwort auf unsere Frage:

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

mapdevfs ist ein Dienstprogramm mit klarer FunktionalitĂ€t, und die interessante Funktion fĂŒr uns ist get_resume_partition, die /proc/swaps liest und das GrĂ¶ĂŸte auswĂ€hlt. Der Swap stammt von partman.

Die Antwort auf unsere Testaufgabe: Die Datei wird vom Installer im /target beim Installationszeitpunkt erstellt, d.h. wir sprechen ĂŒber ein bekanntes, aber dennoch Artefakt. In den bestehenden Paketen im System gibt es nichts, was diese Datei Ă€ndern wĂŒrde.

Zusammenfassend

  1. dpkg und debconf sind die Hauptmethoden zur Suche nach den Dateiherstellern.
  2. Die Suche in /var/lib/dpkg/info ermöglicht es, die Operationen an den Dateien wÀhrend der Installation zu sehen.
  3. Der Installer kann Artefakt-Dateien erstellen, die danach von niemandem jemals geĂ€ndert werden (außer vom Benutzer), und das kann im Code des Installers gesehen werden.

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster