Wêr komt dizze konfiguraasje wei? [Debian/Ubuntu]

It doel fan dit berjocht is om in debuggentechnyk yn debian/ubuntu te sjen yn ferbân mei "de boarne fine" yn it systeemkonfiguraasjetriem.

Testfoarbyld: nei in protte bespotting fan 'e tar.gz-kopy fan it ynstalleare OS en nei it weromsette en ynstallearjen fan updates, krije wy it berjocht:

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: begripe wêr't dizze wearde (U1563304817I0) wei kaam en hoe't it goed kin wizigje. Dit is it earste foarbyld dat tsjinkaam, net spesjaal ynteressant op himsels, mar handich om praktyske metoaden te sjen foar wurkjen mei Linux.

Stap nûmer 1: Wêr kaam RESUME wei?

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

wy rekursyf (-r) sykje nei in fermelding fan dizze fariabele yn 'e map /etc (dêr't de measte konfiguraasjes binne). Wy fine it conf.d snippet, dat dúdlik wurdt brûkt troch it pakket initramfs-tools.

Wêr komt dit stikje wei?

D'r binne trije opsjes:

  1. Magysk artefakt (ien sette it en fergeat)
  2. Konfigurearje út it pakket
  3. Konfiguraasje generearre troch wat skript fan systeempakketten

Litte wy nûmer 2 kontrolearje (as it ienfâldichste):

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

dpkg -S lit ús sykje yn 'e database fan ynstalleare bestannen en fine hokker pakket it bestân heart. Hjir is in foarbyld fan in suksesfolle sykopdracht:

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

Litte wy weromgean nei ús taak: bestân initramfs-tools/conf.d/resume is net ynstalleare op it systeem fanút it pakket. Miskien wurdt it oanmakke yn it postinst/preinst-skript fan it pakket? Litte wy ferzje nûmer 3 kontrolearje.

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

Yn katalogus /var/lib/dpkg/info/ der binne útpakte ferzjes fan alle "metafiles" fan pakketten (ynstallaasje-/ferwideringsskripts, pakketbeskriuwings, ensfh.). Ferrassend is dit bestân fuortsmiten yn 'e postrm (by uninstall) fan it initramfs-tools-core pakket. Litte wy nei de ynhâld fan syn postinst sjen ... Neat relatearre oan de conf.d-map.

Litte wy nei de bestannen yn it pakket sjen initramfs-tools-core.

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

team dpkg -L kinne jo alle triemmen sjen dy't op it systeem binne fanút it opjûne pakket. Ik haw in bestân markearre dat ynteressant is foar stúdzje. It ûndersykjen fan de triem lit sjen hoe't dizze fariabele wurdt brûkt, mar fertelt net wêr't it weikomt.

debconf

It docht bliken dat dit ien syn artefakt is. Waans? Foardat jo yn 'e ynstallearder dûke, litte wy ris nei in oare wichtige Debian-ynfrastruktuer sjen - antwurden op fragen. Elke kear as in pakket in fraach stelt, en yn in protte gefallen as it gjin fraach stelt, mar de standertopsje brûkt, wurde sawol de fraach as it antwurd opnommen yn in spesjale databank yn Debian neamd debconf. Wy kinne de database fan antwurden besjen (en se sels ynstelle foardat jo it pakket sels ynstallearje - debconf-set-selections), hjirfoar hawwe wy in nut nedich debconf-get-selections út de gearstalling debconf-utils. Spitigernôch is neat ynteressant fûn :(debconf-get-selections |grep -i resume lege weromjûn).

debian-ynstallearder

De ynstallearder hat syn eigen database mei antwurden op fragen: /var/log/installer/cdebconf/questions.dat. Spitigernôch is der ek gjin wurd oer ús cv.
Mar der binne logs tichtby, incl. syslog, wêr't it hiele ynstallaasjelogboek skreaun is. It basisynstallearderpakket wurdt dêr neamd, en dêrop side wy kinne sjen de keppeling nei de raws.

Binnen har kinne wy ​​​​maklik it antwurd fine op ús fraach:

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

mapdevfs is in nut mei in dúdlik doel, en de funksje wy binne ynteressearre yn is get_resume_partition, dy't /proc/swaps lêst en dêr de grutste selektearret. Swap komt fan partman.

It antwurd op ús testtaak: it bestân wurdt makke troch de ynstallearder yn /target op it momint fan ynstallaasje, d.w.s. wy prate oer bekende, mar in artefakt. D'r is gjinien of neat yn 'e besteande pakketten yn it systeem dat dizze triem feroarje kin.

To summarize

  1. dpkg en debconf binne de wichtichste metoaden foar it finen fan bestânproviders.
  2. sykjen yn /var/lib/dpkg/info kinne jo operaasjes sjen op bestannen yn 'e ynstallaasjefaze.
  3. It ynstallearder kin artefaktbestannen oanmeitsje dy't dan nea troch ien (útsein de brûker) feroare wurde, en dit kin sjoen wurde yn 'e ynstallearderkoade.

Boarne: www.habr.com

Add a comment