U scopu di questu post hè di mostrà una tecnica di debugging in debian/ubuntu in relazione à "truvà a fonte" 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ì hè ghjuntu, micca particularmente interessante in sè stessu, ma cunvene per vede i metudi pratichi di travaglià cù Linux..
Passu numeru 1: Induve vene RESUME?
# cd /etc
# grep -r RESUME
initramfs-tools/conf.d/resume:RESUME=/dev/mapper/U1563304817I0-swap
Avemu 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.conf
Riturnemu à 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/resume
In 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
Risulta chì questu hè un artefattu di qualcunu. Di quale ? Prima di tuffà in l'installatore, fighjemu un'altra infrastruttura Debian impurtante - risposte à e dumande. Ogni volta chì un pacchettu face una dumanda, è in parechji casi quandu ùn faci micca una dumanda ma usa l'opzione predeterminata, sia a quistione sia a risposta sò arregistrati in una basa di dati speciale in Debian chjamata debconf. Pudemu guardà a basa di dati di risposte (è ancu stabilisce prima di installà 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-installer
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
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" >> $resumeconf
mapdevfs 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