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:
- Töfragripur (einhver setti hann og gleymdi)
- Stillingar úr pakkanum
- 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
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
- dpkg og debconf eru helstu aðferðirnar til að finna skráarveitur.
- leit í /var/lib/dpkg/info gerir þér kleift að sjá aðgerðir á skrám meðan á uppsetningu stendur.
- 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