Da induve vene sta cunfigurazione? [Debian/Ubuntu]

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:

  1. Artefattu magicu (qualchissia l'hà messu è scurdatu)
  2. Config da u pacchettu
  3. 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 pagina 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" >> $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à

  1. dpkg è debconf sò i metudi principali per truvà fornitori di schedari.
  2. a ricerca in /var/lib/dpkg/info permette di vede l'operazioni nantu à i schedari durante a fase di stallazione.
  3. 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

Add a comment