MÄlet med dette innlegget: Ä vise feilsÞkingsteknikker i Debian/Ubuntu relatert til "kjÞp av kilde" i systemkonfigurasjonsfilen.
Testeksempel: etter lange prÞvelser med tar.gz-kopien av det installerte operativsystemet og etter gjenoppretting og oppdatering fÄr vi fÞlgende melding:
update-initramfs: Generating /boot/initrd.img-4.15.0-54-generic
W: initramfs-tools-oppsetten setter RESUME=/dev/mapper/U1563304817I0-swap
W: men ingen matchende bytte-enhet er tilgjengelig.
I: Initramfs vil prĂžve Ă„ gjenoppta fra /dev/dm-1
I: (/dev/mapper/foobar-swap)
I: Sett RESUME-variabelen for Ä overstyre dette.MÄl: Ä forstÄ hvor denne verdien (U1563304817I0) kommer fra og hvordan den kan endres korrekt. Dette er det fÞrste treffer eksemplet, ikke spesielt interessant i seg selv, men praktisk for Ä vise metoder for arbeid med Linux..
Steg nummer 1: Hvor kom RESUME fra?
# cd /etc
# grep -r RESUME
initramfs-tools/conf.d/resume:RESUME=/dev/mapper/U1563304817I0-swapVi sÞker rekursivt (-r) etter referanser til denne variabelen i katalogen /etc (der de fleste konfigurasjoner befinner seg). Vi finner et conf.d-snipp som Äpenbart brukes av pakken initramfs-tools.
Hvor kommer dette snippet fra?
Det finnes tre muligheter:
- Et magisk artefakt (noen la det dit og glemte det)
- Konfigurasjonen fra pakken
- Konfigurasjonen generert av et skript fra systempakkene
Vi sjekker nr. 2 (som den enkleste):
dpkg -S initramfs-tools/conf.d/resume
dpkg-query: ingen sti funnet som matcher mÞnsteret *initramfs-tools/conf.d/resume*dpkg -S lar oss sÞke i databasen av installerte filer og finne ut hvilken pakke filen tilhÞrer. Her er et eksempel pÄ et vellykket funn:
dpkg -S resolv.conf
manpages: /usr/share/man/man5/resolv.conf.5.gz
systemd: /lib/systemd/resolv.confVi returnerer til oppgaven vÄr: filen initramfs-tools/conf.d/resume installert i systemet fra pakken. Kanskje den genereres i postinst/preinst-skriptet til pakken? Vi sjekker versjon nr. 3.
# cd /var/lib/dpkg/info/
# grep -r initramfs-tools/conf.d/resume *
initramfs-tools-core.postrm: rm -f /etc/initramfs-tools/conf.d/resumeI katalogen /var/lib/dpkg/info/ ligger de utkrevne versjonene av alle "metafiler" til pakkene (installasjons-/fjerningsskripter, pakke beskrivelser osv.). Merkelig nok blir denne filen fjernet i postrm (ved fjerning) av pakken initramfs-tools-core. La oss se innholdet i postinst⊠Ingen ting angÄende conf.d-katalogen.
La oss se pÄ filene av pakken initramfs-tools-core.
# dpkg -L initramfs-tools-core
...
/usr/share/initramfs-tools/hooks/resume
...Laget dpkg -L lar oss se alle filer som er i systemet fra den angitte pakken. Jeg har markert en interessant fil for studier. Studiet av filen viser hvordan denne variabelen brukes, men gir ikke svaret pÄ hvor den kommer fra.
debconf
Ser det ut som en artefakt fra noen? Hvem? FĂžr vi dykker inn i installasjonsprogrammet, la oss ta en titt pĂ„ en annen viktig infrastruktur i Debian â svar pĂ„ spĂžrsmĂ„l. Hver gang en pakke stiller et spĂžrsmĂ„l, og i mange tilfeller nĂ„r den ikke stiller spĂžrsmĂ„l, men bruker standardvalget, blir bĂ„de spĂžrsmĂ„let og svaret lagret i et spesielt register i Debian, kalt debconf. Vi kan se pĂ„ svarets database (og til og med stille dem fĂžr selve pakken installeres â debconf-set-selections), for dette trenger vi et verktĂžy debconf-get-selections fra pakken debconf-utils. Dessverre har vi ikke funnet noe spennende: (debconf-get-selections |grep -i resume returnerte tomt).
debian-installer
Installeringsprogrammet har sin egen database for spÞrsmÄl: /var/log/installer/cdebconf/questions.dat. Dessverre er det heller ikke ett ord om vÄrt resume.
Men det finnes logger i nÊrheten, inkludert syslog, hvor hele installasjonsloggen skrives. Der nevnes pakken base-installer, og pÄ dens kan vi se en lenke til kildekodene.
Inni dem finner vi lett svaret pÄ spÞrsmÄlet vÄrt:
resume="$(mapdevfs "$resume_devfs")"; da
...
hvis [ "$do_initrd" = yes ]; da
...
resumeconf=$IT_CONFDIR/resume
....
echo "RESUME=$resume" >> $resumeconfmapdevfs er et verktÞy med en klar hensikt, og den interessante funksjonen for oss er get_resume_partition, som leser /proc/swaps og velger den stÞrste. Swap fÄr vi fra partman.
Svaret pÄ vÄr testoppgave: filen opprettes av installasjonsprogrammet i /target under installasjonen, altsÄ snakker vi om en velkjent, men artefakt. Det finnes ingen komponenter i systemets pakker som endrer denne filen.
Oppsummering
- dpkg og debconf er de viktigste metodene for Ă„ finne leverandĂžrer av filer.
- à sÞke i /var/lib/dpkg/info gjÞr det mulig Ä se operasjoner pÄ filer under installasjonsprosessen.
- InstallatĂžren kan opprette filartefakter som aldri endres av andre (bortsett fra brukeren), og dette kan sees i installasjonskoden.
Kilde: habr.com
