Diin gikan kini nga config? [Debian/Ubuntu]

Ang katuyoan niini nga post mao ang pagpakita sa usa ka pamaagi sa pag-debug sa debian/ubuntu nga may kalabutan sa "pagpangita sa tinubdan" sa file sa configuration sa sistema.

Pananglitan sa pagsulay: human sa daghang pagbiaybiay sa tar.gz nga kopya sa na-install nga OS ug pagkahuman sa pagpasig-uli niini ug pag-instalar sa mga update, among nadawat ang mensahe:

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.

Tumong: masabtan kung diin gikan kini nga kantidad (U1563304817I0) ug kung giunsa kini pagbag-o sa husto. Kini ang una nga pananglitan nga nakit-an, dili labi ka makapaikag sa iyang kaugalingon, apan dali nga ipakita ang praktikal nga mga pamaagi sa pagtrabaho kauban ang Linux.

Lakang numero 1: Diin gikan ang RESUME?

# cd /etc
# grep -r RESUME
initramfs-tools/conf.d/resume:RESUME=/dev/mapper/U1563304817I0-swap

Kami nagbalikbalik (-r) pangitaa ang paghisgot niini nga variable sa /etc nga direktoryo (diin ang kadaghanan sa mga configs anaa). Atong makita ang conf.d snippet, nga klaro nga gigamit sa initramfs-tools package.

Diin gikan kini nga snippet?

Adunay tulo nga kapilian:

  1. Magic artifact (may nagbutang niini ug nakalimot)
  2. Pag-configure gikan sa package
  3. Ang config nga gihimo sa pipila nga script gikan sa mga pakete sa sistema

Atong susihon ang No. 2 (ingon ang pinakasimple):

 dpkg -S initramfs-tools/conf.d/resume
dpkg-query: no path found matching pattern *initramfs-tools/conf.d/resume*

dpkg -S nagtugot kanamo sa pagpangita sa database sa mga na-install nga mga file ug pangitaa kung unsang pakete ang nahisakop sa file. Ania ang usa ka pananglitan sa usa ka malampuson nga pagpangita:

dpkg -S resolv.conf
manpages: /usr/share/man/man5/resolv.conf.5.gz
systemd: /lib/systemd/resolv.conf

Balik ta sa atong buluhaton: file initramfs-tools/conf.d/resume wala ma-install sa sistema gikan sa package. Tingali kini nahimo sa postinst/preinst script sa package? Atong susihon ang bersyon numero 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

Sa katalogo /var/lib/dpkg/info/ adunay mga unpacked nga bersyon sa tanang "metafiles" sa mga pakete (mga script sa pag-install/pagtangtang, mga deskripsyon sa package, ug uban pa). Katingad-an, kini nga file gikuha sa postrm (sa pag-uninstall) sa initramfs-tools-core package. Atong tan-awon ang mga sulod sa postinst niini... Walay kalabutan sa conf.d directory.

Atong tan-awon ang mga file nga gilakip sa package initramfs-tools-core.

# dpkg -L initramfs-tools-core
...
/usr/share/initramfs-tools/hooks/resume
...

team dpkg -L nagtugot kanimo sa pagtan-aw sa tanan nga mga file nga naa sa sistema gikan sa gitakda nga pakete. Gipasiugda nako ang usa ka file nga makapaikag alang sa pagtuon. Ang pagsusi sa file nagpakita kung giunsa kini nga variable gigamit, apan wala isulti kung diin kini gikan.

debconf

Kini nahimo nga kini usa ka artifact sa usa ka tawo. kang kinsa? Sa dili pa mosalom sa installer, atong tan-awon ang laing importante nga imprastraktura sa Debian - mga tubag sa mga pangutana. Sa matag higayon nga ang usa ka pakete mangutana, ug sa daghang mga kaso kung wala kini mangutana apan naggamit sa default nga kapilian, ang pangutana ug ang tubag girekord sa usa ka espesyal nga database sa Debian nga gitawag debconf. Mahimo natong tan-awon ang database sa mga tubag (ug itakda pa kini sa dili pa i-install ang package mismo - debconf-set-selections), alang niini kinahanglan namon ang usa ka gamit debconf-get-selections gikan sa komposisyon debconf-utils. Ikasubo, walay nakit-an nga makapaikag :(debconf-get-selections |grep -i resume mibalik nga walay sulod).

debian-installer

Ang installer adunay kaugalingong database sa mga tubag sa mga pangutana: /var/log/installer/cdebconf/questions.dat. Ikasubo, wala usab usa ka pulong bahin sa among resume.
Apan adunay mga troso sa duol, lakip. syslog, diin ang tibuok nga log sa pag-install gisulat. Ang base-installer nga pakete gihisgutan didto, ug sa ibabaw niini panid makita nato ang link sa mga hilaw.

Sa sulod nila dali ra natong makit-an ang tubag sa atong pangutana:

  resume="$(mapdevfs "$resume_devfs")"; then
...
    if [ "$do_initrd" = yes ]; then
     ...
            resumeconf=$IT_CONFDIR/resume
....
                echo "RESUME=$resume" >> $resumeconf

Ang mapdevfs usa ka utility nga adunay klaro nga katuyoan, ug ang function nga interesado kami mao get_resume_partition, nga nagbasa /proc/swaps ug nagpili sa pinakadako didto. Ang swap gikan sa partman.

Ang tubag sa among pagsulay nga buluhaton: ang file gihimo sa installer sa /target sa panahon sa pag-instalar, i.e. naghisgot kami bahin sa ilado, apan usa ka artifact. Walay usa o bisan unsa sa kasamtangan nga mga pakete sa sistema nga makausab niini nga file.

Sa pag-summarize

  1. Ang dpkg ug debconf mao ang mga nag-unang pamaagi sa pagpangita sa mga taghatag sa file.
  2. Ang pagpangita sa /var/lib/dpkg/info nagtugot kanimo nga makita ang mga operasyon sa mga file sa panahon sa yugto sa pag-install.
  3. Ang installer makahimo og artifact nga mga file nga dili na mausab ni bisan kinsa (gawas sa user), ug kini makita sa installer code.

Source: www.habr.com

Idugang sa usa ka comment