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
