Hvaðan kemur þessi config? [Debian/Ubuntu]

Tilgangur þessarar færslu er að sýna villuleitartækni í debian/ubuntu sem tengist "að finna upprunann" í kerfisstillingarskránni.

Prófdæmi: eftir að hafa verið mikið að hæðast að tar.gz afritinu af uppsettu stýrikerfi og eftir að hafa endurheimt það og sett upp uppfærslur fáum við skilaboðin:

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.

Markmið: skilja hvaðan þetta gildi (U1563304817I0) kom og hvernig á að breyta því rétt. Þetta er fyrsta dæmið sem rakst á, ekki sérstaklega áhugavert í sjálfu sér, en þægilegt til að sýna hagnýtar aðferðir við að vinna með Linux.

Skref númer 1: Hvaðan kom RESUME?

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

Við endurkvæmt (-r) leitaðu að minnst á þessa breytu í /etc möppunni (þar sem flestar stillingarnar eru). Við finnum conf.d bútinn, sem greinilega er notaður af initramfs-tools pakkanum.

Hvaðan er þetta brot?

Það eru þrjár möguleikar:

  1. Töfragripur (einhver setti hann og gleymdi)
  2. Stillingar úr pakkanum
  3. Config búin til af einhverju skriftu úr kerfispökkum

Athugum nr. 2 (sem einfaldasta):

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

dpkg -S gerir okkur kleift að leita í gagnagrunninum yfir uppsettar skrár og finna hvaða pakka skráin tilheyrir. Hér er dæmi um árangursríka leit:

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

Snúum okkur aftur að verkefni okkar: skrá initramfs-tools/conf.d/resume er ekki sett upp á kerfinu frá pakkanum. Kannski er það búið til í postinst/preinst scripti pakkans? Athugum útgáfu númer 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

Í verslun /var/lib/dpkg/info/ það eru ópakkar útgáfur af öllum „metafile“ pakka (uppsetningar-/fjarlægingarforskriftir, pakkalýsingar osfrv.). Það kemur á óvart að þessi skrá er fjarlægð í postrm (við uninstall) initramfs-tools-core pakkans. Við skulum skoða innihald postinst þess... Ekkert sem tengist conf.d skránni.

Við skulum skoða skrárnar sem fylgja með í pakkanum initramfs-tools-core.

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

Team dpkg -L gerir þér kleift að skoða allar skrár sem eru á kerfinu úr tilgreindum pakka. Ég hef bent á skrá sem er áhugaverð til náms. Skoðun á skránni sýnir hvernig þessi breyta er notuð, en segir ekki hvaðan hún kemur.

debconf

Það kemur í ljós að þetta er gripur einhvers. Hvers? Áður en kafað er inn í uppsetningarforritið skulum við kíkja á annan mikilvægan Debian innviði - svör við spurningum. Í hvert skipti sem pakki spyr spurningar, og í mörgum tilfellum þegar hann spyr ekki spurningar heldur notar sjálfgefna valmöguleikann, eru bæði spurningin og svarið skráð í sérstakan gagnagrunn í Debian sem heitir debconf. Við getum skoðað gagnagrunn svara (og jafnvel stillt þau áður en pakkann er sett upp sjálf - debconf-set-selections), til þess þurfum við tól debconf-get-selections úr samsetningunni debconf-utils. Því miður fannst ekkert áhugavert :(debconf-get-selections |grep -i resume skilað auðu).

debian-uppsetningaraðili

Uppsetningarforritið hefur sinn eigin gagnagrunn með svörum við spurningum: /var/log/installer/cdebconf/questions.dat. Því miður er heldur ekki orð um ferilskrána okkar.
En það eru trjábolir í nágrenninu, þ.m.t. syslog, þar sem öll uppsetningarskráin er skrifuð. Þar er minnst á grunnuppsetningarpakkann og á honum síðu við getum séð hlekkinn á hráefnin.

Inni í þeim getum við auðveldlega fundið svarið við spurningunni okkar:

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

mapdevfs er tól með skýran tilgang og aðgerðin sem við höfum áhuga á er get_resume_partition, sem les /proc/swaps og velur þann stærsta þar. Swap kemur frá partman.

Svarið við prófunarverkefninu okkar: skráin er búin til af uppsetningarforritinu í /target við uppsetningu, þ.e. við erum að tala um vel þekkt, en grip. Það er enginn eða neitt í núverandi pökkum í kerfinu sem getur breytt þessari skrá.

Toppur upp

  1. dpkg og debconf eru helstu aðferðirnar til að finna skráarveitur.
  2. leit í /var/lib/dpkg/info gerir þér kleift að sjá aðgerðir á skrám meðan á uppsetningu stendur.
  3. Uppsetningarforritið getur búið til gripaskrár sem er síðan aldrei breytt af neinum (nema notandanum), og það má sjá í uppsetningarkóðanum.

Heimild: www.habr.com

Bæta við athugasemd