U scopu di questu articulu hè di mustrà e tecniche di debugging in debian/ubuntu, in relazione à "ricerca di a fonte originale" in u schedariu di cunfigurazione di u sistema.
Esempiu di prova: dopu assai burla di a copia tar.gz di u SO installatu è dopu a restaurazione è a stallazione di l'aghjurnamenti, ricevemu u missaghju:
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.Scopu: capisce da induve stu valore (U1563304817I0) hè vinutu è cumu cambià bè. Questu hè u primu esempiu chì mi hè venutu in mente, micca particularmente interessante in sè stessu, ma cunveniente per mustrà metudi pratichi di travagliu cù Linux.
Passu numeru 1: Induve vene RESUME?
# cd /etc
# grep -r RESUME
initramfs-tools/conf.d/resume:RESUME=/dev/mapper/U1563304817I0-swapAvemu recursivamente (-r) cercate una menzione di sta variabile in u cartulare /etc (induve a maiò parte di e cunfigurazioni sò). Truvemu u snippet conf.d, chì hè chjaramente utilizatu da u pacchettu initramfs-tools.
Da induve vene stu frammentu ?
Ci sò trè opzioni:
- Artefattu magicu (qualchissia l'hà messu è scurdatu)
- Config da u pacchettu
- Config generata da qualchi script da i pacchetti di sistema
Cuntrollamu u N ° 2 (cum'è u più simplice):
dpkg -S initramfs-tools/conf.d/resume
dpkg-query: no path found matching pattern *initramfs-tools/conf.d/resume*dpkg -S ci permette di cercà a basa di dati di i schedari installati è truvà quale pacchettu appartene u schedariu. Eccu un esempiu di una ricerca successu:
dpkg -S resolv.conf
manpages: /usr/share/man/man5/resolv.conf.5.gz
systemd: /lib/systemd/resolv.confRiturnemu à u nostru compitu: file initramfs-tools/conf.d/resume ùn hè micca stallatu in u sistema da u pacchettu. Forsi hè generatu in u script postinst / preinst di u pacchettu? Cuntrollamu a versione 3.
# cd /var/lib/dpkg/info/
# grep -r initramfs-tools/conf.d/resume *
initramfs-tools-core.postrm: rm -f /etc/initramfs-tools/conf.d/resumeIn u catalogu /var/lib/dpkg/info/ ci sò versioni unpacked di tutti i "metafiles" di pacchetti (scripts d'installazione / rimuzione, descrizzioni di pacchetti, etc.). Sorprendentemente, stu schedariu hè sguassatu in u postrm (nantu à a disinstallazione) di u pacchettu initramfs-tools-core. Fighjemu u cuntenutu di u so postinst... Nunda liata à u repertoriu conf.d.
Fighjemu i schedari inclusi in u pacchettu initramfs-tools-core.
# dpkg -L initramfs-tools-core
...
/usr/share/initramfs-tools/hooks/resume
...squadra dpkg -L permette di vede tutti i schedari chì sò in u sistema da u pacchettu specificatu. Aghju evidenziatu un schedariu chì hè interessante per u studiu. Esaminà u schedariu mostra cumu si usa sta variabile, ma ùn dice micca da induve vene.
debconf
Dunque, questu hè l'artefattu di qualchissia. Di quale ? Prima di immergerci in l'installatore, guardemu un'altra parte impurtante di l'infrastruttura. Debian — risposte à e dumande. Ogni volta chì un pacchettu face una dumanda, è in parechji casi quandu ùn face micca una dumanda ma usa l'opzione predefinita, sia a dumanda sia a risposta sò arregistrate in una basa di dati speciale in Debian, chì si chjama debconf. Pudemu fighjà a basa di dati di risposte (è ancu cunfigurà li prima di stallà u pacchettu stessu - debconf-set-selections), per questu avemu bisognu di una utilità debconf-get-selections da a cumpusizioni debconf-utils. Sfortunatamente, ùn hè statu trovu nunda di interessante :(debconf-get-selections |grep -i resume riturnatu viotu).
debian-installatore
L'installatore hà a so propria basa di dati di risposte à e dumande: /var/log/installer/cdebconf/questions.dat. Sfurtunatamente, ùn ci hè ancu una parolla nantu à u nostru curriculum vitae.
Ma ci sò logs vicinu, incl. syslog, induve u logu di l'installazione tutale hè scrittu. U pacchettu di installazione di basa hè citatu quì, è nantu à questu pudemu vede u ligame à i raws.
Dentru à elli pudemu truvà facilmente a risposta à a nostra dumanda:
resume="$(mapdevfs "$resume_devfs")"; then
...
if [ "$do_initrd" = yes ]; then
...
resumeconf=$IT_CONFDIR/resume
....
echo "RESUME=$resume" >> $resumeconfmapdevfs hè una utilità cù un scopu chjaru, è a funzione chì ci interessa hè get_resume_partition, chì leghje /proc/swaps è selezziunate u più grande quì. U scambiu vene da partman.
A risposta à u nostru compitu di prova: u schedariu hè creatu da l'installatore in /target à u mumentu di a stallazione, i.e. si parla di cunnisciuta, ma un artefattu. Ùn ci hè nimu o qualcosa in i pacchetti esistenti in u sistema chì ponu cambià stu schedariu.
Per sintetizà
- dpkg è debconf sò i metudi principali per truvà fornitori di schedari.
- a ricerca in /var/lib/dpkg/info permette di vede l'operazioni nantu à i schedari durante a fase di stallazione.
- L'installatore pò creà schedarii di artefatti chì ùn sò mai cambiati da nimu (eccettu l'utilizatore), è questu pò esse vistu in u codice di l'installatore.
Source: www.habr.com
