Selle postituse eesmärk on näidata tõrkeotsingu tehnikaid debian/ubuntu süsteemis, seoses "allika leidmisega" süsteemi konfiguratsioonifailis.
Testnäide: pärast pikka vaeva tar.gz koopia taastamise ja uuenduste installimisega saame teate:
update-initramfs: genereerimine /boot/initrd.img-4.15.0-54-generic
W: initramfs-tools konfiguratsioon seab RESUME=/dev/mapper/U1563304817I0-swap
W: kuid sobivat vahetusseadet pole saadaval.
I: Initramfs proovib jätkata /dev/dm-1
I: (/dev/mapper/foobar-swap)
I: Seadke RESUME muutuja, et seda üle kirjutada.Eesmärk: mõista, kust see väärtus (U1563304817I0) tuli ja kuidas seda õigesti muuta. See on esimene ettejuhtuv näide, mis iseenesest pole eriti huvitav, kuid mugav, et näidata praktilisi meetodeid Linuxi kasutamisel..
Samm number 1: Kust tuli RESUME?
# cd /etc
# grep -r RESUME
initramfs-tools/conf.d/resume:RESUME=/dev/mapper/U1563304817I0-swapOtsime rekursiivselt (-r) mainimist selle muutuja kohta kataloogis /etc (seal, kus enamik konfiguratsioonifailidest asub). Leiame conf.d lõike, mis on selgelt mõeldud initramfs-tools paketi jaoks.
Kust see lõik pärineb?
On kolm varianti:
- Kasutaja artefakt (keegi pani selle ja unustas)
- Paketi konfiguratsioon
- Konfiguratsioon, mis genereeriti mõne skripti kaudu süsteemipakettidest
Kontrollime nr 2 (kui kõige lihtsam):
dpkg -S initramfs-tools/conf.d/resume
dpkg-query: ei leitud sobivat teed mudeli *initramfs-tools/conf.d/resume* jaoks.dpkg -S järel annab meile võimaluse otsida installitud failide andmebaasist ja leida, kellele see fail kuulub. Siin on edukas otsingu näide:
dpkg -S resolv.conf
manpages: /usr/share/man/man5/resolv.conf.5.gz
systemd: /lib/systemd/resolv.confNaaseme tagasi meie ülesande juurde: fail initramfs-tools/conf.d/resume ei installita süsteemi paketi kaudu. Kas see genereeritakse postinst/preinst skripti kaudu? 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/resumeKataloogis /var/lib/dpkg/info/ seal asuvad kõik pakettide "meta-failide" lahti pakkimise versioonid (installimis-/eemaldamisprotseduurid, pakettide kirjeldused jne). Üllatavalt kustutatakse see fail postrm (paketi eemaldamisel) initramfs-tools-core paketi kaudu. Uurime, mis on selle postinst… Mitte midagi, mis puudutab conf.d katalooge.
Uurime initramfs-tools-core paketi faile. dpkg -L.
# dpkg -L initramfs-tools-core
...
/usr/share/initramfs-tools/hooks/resume
...Meeskond annab võimaluse vaadata kõiki faile, mis on süsteemis antud paketist. Olen välja valinud huvitava faili uurimiseks. Faili uurimine näitab, kuidas seda muutujat kasutatakse, kuid ei vasta sellele, kust see pärineb. debconf
debconf
Tundub, et see on kellegi artefakt. Kelle? Enne, kui sukeldume installeri, vaatame veel ühte olulist Debian infrastruktuuri — vastuseid küsimustele. Iga kord, kui pakk küsib küsimuse, ja paljuski ka siis, kui ta küsimust ei esita, vaid kasutab vaikimisi varianti, märgitakse nii küsimus kui ka vastus spetsiaalsesse andmebaasi Debianis, mida nimetatakse debconf. Saame vaadata vastuste andmebaasi (ja isegi seada need enne paketi installimist — debconf-set-selections), selleks vajame utiliiti debconf-get-selections , mis kuulub debconf-utils. Kahjuks ei leitud midagi huvitavat: (debconf-get-selections | grep -i resume tõi tühja).
debian-installer
Installeril on oma vastuste andmebaas: /var/log/installer/cdebconf/questions.dat. Kahjuks sealgi ei ole meie resume’ist küll sõnagi.
Küll aga on seal läheduses logid, sealhulgas syslog, kuhu kirjutatakse kogu installatsiooni logi. Seal mainitakse paketti base-installer, ja selle me saame näha viidet allikatele.
Nende sees leiame kergesti vastuse oma küsimusele:
resume="$(mapdevfs "$resume_devfs")"; then
...
if [ "$do_initrd" = yes ]; then
...
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 tuleb meil partman'ist.
Vastus meie testülesandele: fail luuakse installeriga /targetis installimise hetkel, st räägime well-known, kuid artefaktist. Süsteemis olevates pakettides ei ole kedagi ega midagi, mis seda faili muudaks.
Kokkuvõtteks
- dpkg ja debconf on peamised meetodid failide tarnijate leidmiseks.
- otsimine /var/lib/dpkg/info võimaldab näha failidega seotud toimetamisi installimise etapis.
- Installer võib luua artefaktifaile, mida keegi kunagi ei muuda (välja arvatud kasutaja), ja seda on võimalik näha installeri koodist.
Allikas: habr.com
