O ble mae'r ffurfwedd hon yn dod? [Debian/Ubuntu]

Pwrpas y swydd hon yw dangos techneg dadfygio yn debian/ubuntu sy'n gysylltiedig â "dod o hyd i'r ffynhonnell" yn ffeil ffurfweddu'r system.

Enghraifft brawf: ar ôl llawer o watwar y copi tar.gz o'r OS gosodedig ac ar ôl ei adfer a gosod diweddariadau, rydym yn derbyn y neges:

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.

Nod: deall o ble y daeth y gwerth hwn (U1563304817I0) a sut i'w newid yn gywir. Dyma'r enghraifft gyntaf a ddaeth ar ei thraws, nid yn arbennig o ddiddorol ynddo'i hun, ond yn gyfleus i ddangos dulliau ymarferol o weithio gyda Linux.

Cam rhif 1: O ble daeth RESUME?

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

Rydyn ni'n ailadroddus (-r) edrychwch am sôn am y newidyn hwn yn y cyfeiriadur / etc (lle mae'r rhan fwyaf o'r cyfluniadau). Rydym yn dod o hyd i'r pyt conf.d, sy'n amlwg yn cael ei ddefnyddio gan y pecyn initramfs-tools.

O ble mae'r pyt hwn?

Mae tri opsiwn:

  1. Arteffact hud (mae rhywun yn ei roi ac wedi anghofio)
  2. Ffurfweddu o'r pecyn
  3. Ffurfwedd a gynhyrchir gan rai sgript o becynnau system

Gadewch i ni wirio Rhif 2 (fel y symlaf):

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

dpkg -S yn ein galluogi i chwilio'r gronfa ddata o ffeiliau wedi'u gosod a dod o hyd i ba becyn y mae'r ffeil yn perthyn iddo. Dyma enghraifft o chwiliad llwyddiannus:

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

Gadewch i ni ddychwelyd at ein tasg: ffeil initramfs-tools/conf.d/resume heb ei osod ar y system o'r pecyn. Efallai ei fod yn cael ei gynhyrchu yn sgript postinst/preinst y pecyn? Gadewch i ni wirio fersiwn rhif 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

Yn y catalog /var/lib/dpkg/info/ mae fersiynau heb eu pacio o'r holl “fetaffeiliau” o becynnau (sgriptiau gosod / tynnu, disgrifiadau pecyn, ac ati). Yn syndod, mae'r ffeil hon yn cael ei thynnu yn y postrm (wrth ddadosod) y pecyn initramfs-tools-core. Gadewch i ni edrych ar gynnwys ei postinst... Dim byd yn ymwneud â'r cyfeiriadur conf.d.

Gadewch i ni edrych ar y ffeiliau sydd wedi'u cynnwys yn y pecyn initramfs-tools-core.

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

Tîm dpkg -L yn eich galluogi i weld yr holl ffeiliau sydd ar y system o'r pecyn penodedig. Rwyf wedi tynnu sylw at ffeil sy'n ddiddorol i'w hastudio. Mae archwilio'r ffeil yn dangos sut mae'r newidyn hwn yn cael ei ddefnyddio, ond nid yw'n dweud o ble mae'n dod.

debconf

Mae'n ymddangos bod hwn yn arteffact rhywun. Pwy? Cyn plymio i mewn i'r gosodwr, gadewch i ni edrych ar seilwaith Debian pwysig arall - atebion i gwestiynau. Bob tro mae pecyn yn gofyn cwestiwn, ac mewn llawer o achosion pan nad yw'n gofyn cwestiwn ond yn defnyddio'r opsiwn diofyn, mae'r cwestiwn a'r ateb yn cael eu cofnodi mewn cronfa ddata arbennig yn Debian o'r enw debconf. Gallwn edrych ar y gronfa ddata o atebion (a hyd yn oed eu gosod cyn gosod y pecyn ei hun - debconf-set-selections), am hyn y mae arnom angen defnyddioldeb debconf-get-selections o'r cyfansoddiad debconf-utils. Yn anffodus, ni ddarganfuwyd dim byd diddorol :(debconf-get-selections |grep -i resume dychwelyd yn wag).

gosodwr debian

Mae gan y gosodwr ei gronfa ddata ei hun o atebion i gwestiynau: /var/log/installer/cdebconf/questions.dat. Yn anffodus, nid oes gair hefyd am ein ailddechrau.
Ond mae boncyffion gerllaw, gan gynnwys. syslog, lle mae'r log gosod cyfan wedi'i ysgrifennu. Sonnir am y pecyn gosodwr sylfaen yno, ac arno tudalen gallwn weld y ddolen i'r amrwd.

Y tu mewn iddynt gallwn yn hawdd ddod o hyd i'r ateb i'n cwestiwn:

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

Mae mapdevfs yn ddefnyddioldeb gyda phwrpas clir, a'r swyddogaeth y mae gennym ddiddordeb ynddi yw get_resume_partition, sy'n darllen /proc/swaps ac yn dewis yr un mwyaf yno. Mae cyfnewid yn dod o partman.

Yr ateb i'n tasg prawf: mae'r ffeil yn cael ei chreu gan y gosodwr yn /targed ar adeg gosod, h.y. rydym yn sôn am adnabyddus, ond arteffact. Nid oes unrhyw un neu unrhyw beth yn y pecynnau presennol yn y system a all newid y ffeil hon.

Crynhoi

  1. dpkg a debconf yw'r prif ddulliau ar gyfer dod o hyd i ddarparwyr ffeiliau.
  2. mae chwilio yn /var/lib/dpkg/info yn caniatáu ichi weld gweithrediadau ar ffeiliau yn ystod y cyfnod gosod.
  3. Gall y gosodwr greu ffeiliau arteffactau nad ydynt byth wedyn yn cael eu newid gan unrhyw un (ac eithrio'r defnyddiwr), a gellir gweld hyn yn y cod gosodwr.

Ffynhonnell: hab.com

Ychwanegu sylw