No kurienes nāk šī konfigurācija? [Debian/Ubuntu]

Šīs ziņas mērķis ir parādīt atkļūdošanas paņēmienu debian/ubuntu, kas saistīts ar "avota atrašanu" sistēmas konfigurācijas failā.

Testa piemērs: pēc ilgstošas ​​ņirgāšanās par instalētās OS tar.gz kopiju un pēc tās atjaunošanas un atjauninājumu instalēšanas mēs saņemam ziņojumu:

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.

Mērķis: saprast, no kurienes radās šī vērtība (U1563304817I0) un kā to pareizi mainīt. Šis ir pirmais piemērs, kas pats par sevi nav īpaši interesants, bet ērts, lai parādītu praktiskas metodes darbam ar Linux.

1. darbība: no kurienes radās RESUME?

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

Mēs rekursīvi (-r) meklējiet pieminējumu par šo mainīgo direktorijā /etc (kur atrodas lielākā daļa konfigurāciju). Mēs atrodam conf.d fragmentu, ko skaidri izmanto initramfs-tools pakotne.

No kurienes ir šis fragments?

Ir trīs iespējas:

  1. Burvju artefakts (kāds to ielika un aizmirsa)
  2. Konfigurācija no pakotnes
  3. Konfigurācija, ko ģenerē kāds skripts no sistēmas pakotnēm

Pārbaudīsim Nr. 2 (kā vienkāršāko):

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

dpkg -S ļauj mums meklēt instalēto failu datu bāzē un atrast, kurai pakotnei fails pieder. Šeit ir veiksmīgas meklēšanas piemērs:

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

Atgriezīsimies pie mūsu uzdevuma: fails initramfs-tools/conf.d/resume nav instalēts sistēmā no pakotnes. Varbūt tas ir ģenerēts pakotnes postinst/preinst skriptā? Pārbaudīsim versijas numuru 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

Katalogā /var/lib/dpkg/info/ ir visu pakotņu “metafailu” neizpakotas versijas (instalēšanas/noņemšanas skripti, pakotņu apraksti utt.). Pārsteidzoši, šis fails tiek noņemts initramfs-tools-core pakotnes postrm (atinstalēšanas laikā). Apskatīsim tās postinst saturu... Nekas nav saistīts ar conf.d direktoriju.

Apskatīsim iepakojumā iekļautos failus initramfs-tools-core.

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

Komanda dpkg -L ļauj skatīt visus failus, kas atrodas sistēmā no norādītās pakotnes. Esmu izcēlis failu, kas ir interesants izpētei. Faila pārbaude parāda, kā šis mainīgais tiek izmantots, bet nenorāda, no kurienes tas nāk.

debconf

Izrādās, ka tas ir kāda artefakts. Kuru? Pirms iedziļināties instalēšanas programmā, apskatīsim vēl vienu svarīgu Debian infrastruktūru – atbildes uz jautājumiem. Katru reizi, kad pakotne uzdod jautājumu, un daudzos gadījumos, kad tā neuzdod jautājumu, bet izmanto noklusējuma opciju, gan jautājums, gan atbilde tiek ierakstīti īpašā Debian datu bāzē, ko sauc par debconf. Mēs varam apskatīt atbilžu datu bāzi (un pat tās iestatīt pirms pašas pakotnes instalēšanas - debconf-set-selections), šim nolūkam mums ir nepieciešama utilīta debconf-get-selections no sastāva debconf-utils. Diemžēl nekas interesants netika atrasts :(debconf-get-selections |grep -i resume atgriezta tukša).

debian-installer

Uzstādītājam ir sava datu bāze ar atbildēm uz jautājumiem: /var/log/installer/cdebconf/questions.dat. Diemžēl arī par mūsu CV nav ne vārda.
Bet tuvumā ir baļķi, t.sk. syslog, kur ir rakstīts viss instalācijas žurnāls. Pamatinstalēšanas pakotne ir minēta tur un uz tās lappuse mēs varam redzēt saiti uz raws.

Tajās mēs varam viegli atrast atbildi uz mūsu jautājumu:

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

mapdevfs ir utilīta ar skaidru mērķi, un funkcija, kas mūs interesē, ir get_resume_partition, kas nolasa /proc/swaps un atlasa tur lielāko. Swap nāk no partman.

Atbilde uz mūsu testa uzdevumu: failu instalēšanas laikā izveido instalēšanas programma mapē /target, t.i. mēs runājam par labi zināmu, bet artefaktu. Sistēmā esošajās pakotnēs nav neviena vai nekā, kas varētu mainīt šo failu.

Summējot

  1. dpkg un debconf ir galvenās metodes failu nodrošinātāju atrašanai.
  2. Meklēšana mapē /var/lib/dpkg/info ļauj skatīt operācijas ar failiem instalēšanas posmā.
  3. Instalēšanas programma var izveidot artefaktu failus, kurus pēc tam neviens (izņemot lietotāju) nemaina, un to var redzēt instalēšanas programmas kodā.

Avots: www.habr.com

Pievieno komentāru