Var kommer denna konfiguration ifrÄn? [Debian/Ubuntu]

Syftet med detta inlÀgg Àr att visa en felsökningsteknik i debian/ubuntu, relaterad till "finnande kÀlla" i systemkonfigurationsfilen.

Testexempel: efter lÄngvarig plÄga av tar.gz-kopian av det installerade operativsystemet och efter att ha ÄterstÀllt samt installerat uppdateringar fÄr vi meddelandet:

update-initramfs: Genererar /boot/initrd.img-4.15.0-54-generic
W: initramfs-tools-konfigurationen sÀtter RESUME=/dev/mapper/U1563304817I0-swap
W: men ingen matchande swap-enhet Àr tillgÀnglig.
I: Initramfs kommer att försöka Äteruppta frÄn /dev/dm-1
I: (/dev/mapper/foobar-swap)
I: StÀll in RESUME-variabeln för att ÄsidosÀtta detta.

MÄlet: förstÄ varifrÄn detta vÀrde (U1563304817I0) kommer och hur man Àndrar det pÄ rÀtt sÀtt. Detta Àr det första exemplet som dyker upp, inte sÀrskilt intressant i sig, men bekvÀmt för att visa praktiska metoder för arbete med Linux..

Steg nummer 1: Var kom RESUME ifrÄn?

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

Vi söker rekursivt (-r) efter omnÀmnandet av denna variabel i katalogen /etc (dÀr de flesta konfigurationsfiler ligger). Vi hittar en conf.d-snippet som tydligt anvÀnds av paketet initramfs-tools.

VarifrÄn kommer denna snippet?

Det finns tre alternativ:

  1. En magisk artefakt (nÄgon lade dit den och glömde bort)
  2. Konfiguration frÄn paketet
  3. Konfiguration genererad av nÄgot skript frÄn systempaket

Vi kontrollerar alternativ nr 2 (som Àr det enklaste):

 dpkg -S initramfs-tools/conf.d/resume
dpkg-query: ingen sökvÀrde funnen som matchar mönstret *initramfs-tools/conf.d/resume*

dpkg -S möter oss för att söka i databasen över installerade filer och ta reda pÄ vilket paket filen tillhör. HÀr Àr ett exempel pÄ en lyckad sökning:

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

Vi ÄtergÄr till vÄr uppgift: filen initramfs-tools/conf.d/resume installeras inte i systemet frÄn paketet. Kanske den genereras i postinst/preinst-skriptet för paketet? Vi kontrollerar 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

I kataloget /var/lib/dpkg/info/ ligger de uppackade versionerna av alla "metafiler" frÄn paketen (installations-/borttagningsskript, paketbeskrivningar, etc.). Uppenbarligen tas denna fil bort i postrm (vid borttagning) av paketet initramfs-tools-core. LÄt oss titta pÄ innehÄllet i dess postinst... Ingenting relaterat till conf.d-katalogen.

LÄt oss titta pÄ filerna i paketet initramfs-tools-core.

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

Team dpkg -L tillÄter oss att se alla filer som finns i systemet frÄn det angivna paketet. Jag markerade en intressant fil att studera. Att studera filen visar hur denna variabel anvÀnds, men svarar inte pÄ var den kommer ifrÄn.

debconf

SĂ„ det hĂ€r Ă€r nĂ„gon sorts artefakt. Vems? Innan vi dyker ner i installationsprogrammet, lĂ„t oss titta pĂ„ en annan viktig infrastruktur i Debian — svar pĂ„ frĂ„gor. Varje gĂ„ng ett paket stĂ€ller en frĂ„ga, och i mĂ„nga fall nĂ€r det inte stĂ€ller nĂ„gon frĂ„ga men anvĂ€nder ett standardalternativ, registreras bĂ„de frĂ„gan och svaret i en speciell databas i Debian som kallas debconf. Vi kan titta pĂ„ svarsdatan (och till och med stĂ€lla in dem före installationen av sjĂ€lva paketet — debconf-set-selections), för detta behöver vi verktyget debconf-get-selections frĂ„n paketet debconf-utils. TyvĂ€rr hittades inget intressant: (debconf-get-selections |grep -i resume returnerade tomt).

debian-installer

Installationsprogrammet har sin egen svarsdatabase: /var/log/installer/cdebconf/questions.dat. TyvÀrr finns det inte ett ord om vÄr resume dÀr heller.
Men det finns loggar i nÀrheten, inklusive syslog, dÀr all installationslogg skrivs. DÀr nÀmns paketet base-installer, och pÄ dess sidan kan vi se en lÀnk till kÀllkoden.

Inuti dem hittar vi lÀtt svaret pÄ vÄr frÄga:

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

mapdevfs Àr ett verktyg med ett tydligt syfte, och den intressanta funktionen vi behöver Àr get_resume_partition, som lÀser /proc/swaps och vÀljer den största. Swap kommer frÄn partman.

Svaret pÄ vÄr testuppgift: filen skapas av installationsprogrammet i /target vid installationen, d.v.s. vi pratar om en vÀlkÀnd, men artefakt. Det finns inga paket i systemet som Àndrar denna fil.

Sammanfattningsvis

  1. dpkg och debconf Àr de huvudsakliga metoderna för att leta efter filleverantörer.
  2. sökning i /var/lib/dpkg/info gör att du kan se operationer om filer under installationsfasen.
  3. Installationsprogrammet kan skapa filartefakter som aldrig Àndras av nÄgon (utom anvÀndaren), och detta kan ses i installationsprogrammetkoden.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster