Postituse eesmĂ€rk on nĂ€idata tĂ”rkeotsingu tehnikat debian/ubuntu, mis on seotud "allika otsimisega" sĂŒsteemi konfiguratsioonifailis.
TestnĂ€ide: pĂ€rast pikki kannatusi tar.gz koopia ĂŒle ning pĂ€rast selle taastamist ja uuenduste installimist saame teate:
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.EesmÀrk: mÔista, kust see vÀÀrtus (U1563304817I0) tuli ja kuidas seda Ôigesti muuta. See on esimene ettejuhtuv nÀide, mitte eriti huvitav iseenesest, kuid mugav, et nÀidata praktika meetodeid Linuxis..
Samm number 1: Kust tuli RESUME?
# cd /etc
# grep -r RESUME
initramfs-tools/conf.d/resume:RESUME=/dev/mapper/U1563304817I0-swapMe otsime rekursiivselt (-r) mainimist sellest muutuja kataloogis /etc (seal, kus enamik konfiguratsioone on). Leiame conf.d lÔigu, mida pakett initramfs-tools selgelt kasutab.
Kust see lÔik tuli?
On kolm vÔimalust:
- Maagiline artefakt (keegi pani ja unustas selle)
- Paketi konfiguratsioon
- Konfiguratsioon, mille on genereerinud mingi skript sĂŒsteemipakettidelt
Kontrollime nr 2 (kui kÔige lihtsam):
dpkg -S initramfs-tools/conf.d/resume
dpkg-query: ei leitud vastet mustrile *initramfs-tools/conf.d/resume*dpkg -S vÔimaldab meil otsida installitud failide andmebaasist ja leida, mille paketiga fail kuulub. Siin on nÀide eduka otsingu kohta:
dpkg -S resolv.conf
manpages: /usr/share/man/man5/resolv.conf.5.gz
systemd: /lib/systemd/resolv.confNaaseme meie ĂŒlesande juurde: fail initramfs-tools/conf.d/resume ei installita sĂŒsteemi paketist. VĂ”ib-olla genereeritakse see postinst/preinst skripti kĂ€igus? Kontrollime versiooni number 3.
# cd /var/lib/dpkg/info/
# grep -r initramfs-tools/conf.d/resume *
initramfs-tools-core.postrm: rm -f /etc/initramfs-tools/conf.d/resumeKaustas /var/lib/dpkg/info/ on lahtipakitud versioonid kÔigist pakettide "meta-failidest" (installimis/eemaldamis-skriptid, pakettide kirjeldused ja jne). Imelik, aga see fail kustutatakse postrm (eemaldamise) kÀigus paketist initramfs-tools-core. Vaadakem tema postinst sisu⊠Mitte midagi, mis oleks seotud conf.d kaustaga.
Vaata, millised failid kuuluvad paketti initramfs-tools-core.
# dpkg -L initramfs-tools-core
...
/usr/share/initramfs-tools/hooks/resume
...Meeskond dpkg -L vĂ”imaldab nĂ€ha kĂ”iki faile, mis on sĂŒsteemis antud paketist. Olen esile tĂ”stnud huvitava faili uurimiseks. Faili uurimine nĂ€itab, kuidas seda muutujat kasutatakse, kuid ei vasta kĂŒsimusele, kust see pĂ€rineb.
debconf
Tundub, et see on kellegi artefakt. Kelle? Enne kui sukeldume installija juurde, vaatame ĂŒhte olulist Debian'i infrastruktuuri â kĂŒsimustele vastused. Iga kord, kui pakett esitab kĂŒsimuse, ja paljuski ka siis, kui see kĂŒsimust ei esita, kuid kasutab vaikimisi varianti, fikseeritakse nii kĂŒsimus kui ka vastus spetsiaalses andmebaasis Debiani sĂŒsteemis, mida nimetatakse debconf. Saame vaadata vastuste andmebaasi (ja isegi esitada need enne paketi installimist â debconf-set-selections), selleks on meil vajalik utiliit debconf-get-selections paketist debconf-utils. Kahjuks ei leidnud me midagi huvitavat: (debconf-get-selections |grep -i resume tagastas tĂŒhja).
debian-installer
Installijal on oma kĂŒsimuste vastuste andmebaas: /var/log/installer/cdebconf/questions.dat. Kahjuks ei ole seal ka sĂ”na meie resume kohta.
KĂŒll aga on lĂ€heduses logid, sealhulgas syslog, kuhu kirjutatakse kogu installatsioonilog. Seal mainitakse paketti base-installer, ja selle kauguselt nĂ€eme viidatud allikale.
Nende sees leiame kergesti vastuse meie kĂŒsimusele:
resume="$(mapdevfs "$resume_devfs")"; siis
...
kui [ "$do_initrd" = jah ]; siis
...
resumeconf=$IT_CONFDIR/resume
....
echo "RESUME=$resume" >> $resumeconfmapdevfs on utiliit, millel on arusaadav otstarve, ja meid huvitav funktsioon on get_resume_partition, mis loeb /proc/swaps ja valib sealt suurima. Swap tulevad meil partmanilt.
Meie testĂŒlesande vastus: fail loodakse installeri poolt /targetâis paigaldamise hetkel, see tĂ€hendab, et rÀÀgime hĂ€sti tuntud, aga artefaktist. SĂŒsteemis olevates paketides ei ole midagi, mis seda faili muudaks.
KokkuvÔtteks
- dpkg ja debconf â peamised meetodid failide pakkujate leidmiseks.
- otsimine /var/lib/dpkg/infoâs vĂ”imaldab nĂ€ha faile, millega operatsioonid on seotud paigaldamise etapis.
- Installija vÔib luua artefaktifaile, mida kunagi keegi ei muuda (vÀlja arvatud kasutaja), ja seda on vÔimalik nÀha installija koodis.
Allikas: habr.com
