Waar kom hierdie konfigurasie vandaan? [Debian/Ubuntu]

Die doel van hierdie pos is om debian/ubuntu-ontfoutingstegnieke te wys wat verband hou met "vind bron" in die stelselkonfigurasielêer.

Toetsvoorbeeld: na lang bespotting van die tar.gz-kopie van die geïnstalleerde bedryfstelsel en na die herstel en installering van opdaterings, kry ons die boodskap:

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.

Doel: om te verstaan ​​waar hierdie waarde (U1563304817I0) vandaan kom en hoe om dit korrek te verander. Dit is die eerste voorbeeld wat ek teëgekom het, op sigself nie baie interessant nie, maar handig om praktiese metodes te wys om met Linux te werk..

Stap nommer 1: Waar kom RESUME vandaan?

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

Ons rekursief (-r) ons soek 'n vermelding van hierdie veranderlike in die /etc-gids (waar die meeste konfigurasies is). Ons vind 'n conf.d-brokkie wat eksplisiet deur die initramfs-tools-pakket gebruik word.

Waar is hierdie brokkie vandaan?

Daar is drie opsies:

  1. Magiese artefak (iemand het gesit en vergeet)
  2. config uit die pakket
  3. Config gegenereer deur 'n paar script van stelsel pakkette

Merk #2 (as die maklikste een):

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

dpkg -S laat ons toe om die databasis van geïnstalleerde lêers te deursoek en te vind aan watter pakket die lêer behoort. Hier is 'n voorbeeld van 'n suksesvolle soektog:

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

Terug na ons taak: die lêer initramfs-tools/conf.d/resume is nie vanaf die pakket in die stelsel geïnstalleer nie. Miskien is dit gegenereer in die postinst/preinst pakket script? Gaan weergawe nommer 3 na.

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

In die katalogus /var/lib/dpkg/info/ daar is uitgepakte weergawes van alle "metafiles" van pakkette (installasie-/verwyderingsskrifte, pakketbeskrywings, ens.). Verbasend genoeg word hierdie lêer verwyder in die postrm (wanneer dit verwyder word) van die initramfs-tools-kernpakket. Kom ons kyk na die inhoud van sy postinst... Niks te doen met die conf.d gids nie.

Kom ons kyk na die lêers in die pakket initramfs-tools-core.

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

Span dpkg -L laat jou toe om al die lêers wat in die stelsel is vanaf die gespesifiseerde pakket te sien. Ek het 'n interessante lêer uitgelig om te bestudeer. Die ondersoek van die lêer wys hoe hierdie veranderlike gebruik word, maar antwoord nie waar dit vandaan kom nie.

debconf

Dit blyk dat dit iemand se artefak is. Wie s'n? Voordat ons in die installeerder duik, kom ons kyk na 'n ander belangrike Debian-infrastruktuur - beantwoord vrae. Elke keer as 'n pakket 'n vraag vra, en in baie gevalle wanneer dit nie 'n vraag vra nie, maar die verstek gebruik, word beide die vraag en die antwoord opgeneem in 'n spesiale databasis in Debian genaamd debconf. Ons kan na die databasis van antwoorde kyk (en dit selfs blootstel voordat ons die pakket self installeer - debconf-set-selections), hiervoor het ons 'n nut nodig debconf-get-selections uit die samestelling debconf-utils. Ongelukkig is niks interessant gevind nie :(debconf-get-selections |grep -i resume leeg teruggegee).

debian-installeerder

Die installeerder het sy eie databasis van antwoorde op vrae: /var/log/installer/cdebconf/questions.dat. Ongelukkig is daar ook geen woord oor ons CV nie.
Maar daar is houtblokke naby, insl. syslog, waar die hele installasielog geskryf word. Dit noem die basis-installeerder pakket, en dit bladsy ons kan die skakel na raws sien.

Binne hulle kan ons maklik die antwoord op ons vraag vind:

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

mapdevfs is 'n hulpprogram met 'n duidelike doel, en die funksie waarin ons belangstel is get_resume_partition, wat /proc/swaps lees en die grootste een daar kies. Swap kom van partman.

Die antwoord op ons toetstaak is: die lêer word geskep deur die installeerder in /target ten tyde van installasie, d.w.s. ons praat van bekende, maar 'n artefak. Daar is niemand en niks in die bestaande pakkette in die stelsel om hierdie lêer te verander nie.

Opsomming

  1. dpkg en debconf is die hoofmetodes om lêerverskaffers te vind.
  2. Deur /var/lib/dpkg/info te soek, kan u lêerbewerkings tydens die installasiefase sien.
  3. Die installeerder kan artefaklêers skep wat nooit deur enigiemand (behalwe die gebruiker) verander word nie, en dit kan in die installeerderkode gesien word.

Bron: will.com

Voeg 'n opmerking