Ev mîheng ji ku tê? [Debian/Ubuntu]

Armanca vê postê ew e ku di pelê veavakirina pergalê de teknîkek debuggkirinê ya di debian/ubuntu-yê de têkildarî "dîtina çavkaniyê" nîşan bide.

Mînaka ceribandinê: piştî pir tinazkirina kopiya tar.gz ya OS-ya sazkirî û piştî nûvekirina wê û sazkirina nûvekirinan, em peyamê distînin:

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.

Armanc: fêm bikin ku ev nirx (U1563304817I0) ji ku hatî û meriv wê çawa rast biguhezîne. Ev mînaka yekem e ku pê re hat, bi xwe ne bi taybetî balkêş, lê hêsan e ku meriv rêbazên pratîkî yên xebata bi Linux re nîşan bide.

Gav hejmar 1: RESUME ji ku hat?

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

Em dubare (-r) di pelrêça /etc de (ku piraniya mîhengan lê ne) behsa vê guherbarê bigerin. Em pişka conf.d dibînin, ku bi eşkere ji hêla pakêta initramfs-tools ve tê bikar anîn.

Ev parçe ji ku derê ye?

Sê bijartî hene:

  1. Hunera sêrbaz (kesek ew danî û ji bîr kir)
  2. Veavakirina ji pakêtê
  3. Veavakirin ji hêla hin skrîptê ve ji pakêtên pergalê ve hatî çêkirin

Ka em hejmara 2 (wek ya herî hêsan) kontrol bikin:

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

dpkg -S destûrê dide me ku em li databasa pelên sazkirî bigerin û bibînin ka pel ji kîjan pakêtê ye. Li vir mînakek lêgerînek serkeftî ye:

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

Em vegerin ser karê xwe: pel initramfs-tools/conf.d/resume ji pakêtê li ser pergalê nayê saz kirin. Dibe ku ew di skrîpta postinst/preinst ya pakêtê de hatî çêkirin? Ka em guhertoya jimare 3 kontrol bikin.

# cd /var/lib/dpkg/info/
# grep -r initramfs-tools/conf.d/resume *
initramfs-tools-core.postrm:    rm -f /etc/initramfs-tools/conf.d/resume

Di katalogê de /var/lib/dpkg/info/ guhertoyên nepakkirî yên hemî "metafilên" pakêtan hene (skrîptên sazkirin/rakirin, danasînên pakêtê, hwd.). Ecêb e, ev pel di postrm (li ser rakirinê) ya pakêta initramfs-tools-core de tê rakirin. Ka em li naveroka postinst-a wê binerin... Tiştek bi pelrêça conf.d ve girêdayî nîne.

Ka em li pelên ku di pakêtê de cih digirin binêrin initramfs-tools-core.

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

tîma dpkg -L destûrê dide te ku hûn hemî pelên ku li ser pergalê ne ji pakêta diyarkirî bibînin. Min dosyayek ku ji bo xwendinê balkêş e ronî kiriye. Vekolîna pelê nîşan dide ku ev guhêrbar çawa tê bikar anîn, lê nabêje ku ew ji ku tê.

debconf

Derket holê ku ev eserê kesekî ye. Yê wan? Berî ku em bikevin nav sazkerê, bila em li binesaziyek din a girîng a Debian binêrin - bersivên pirsan. Her gava ku pakêtek pirsek dipirse, û di pir rewşan de gava ku ew pirsek napirse lê vebijarka xwerû bikar tîne, hem pirs û hem jî bersiv di databasek taybetî ya Debian de bi navê debconf têne tomar kirin. Em dikarin li databasa bersivan binihêrin (û tewra wan berî ku pakêtê bixwe saz bikin jî saz bikin - debconf-set-selections), ji bo vê yekê em pêdivîyek pêdivî ye debconf-get-selections ji pêkhatinê debconf-utils. Mixabin, tiştek balkêş nehat dîtin :(debconf-get-selections |grep -i resume vala vegeriya).

debian-sazker

Sazker databasa xwe ya bersivên pirsan heye: /var/log/installer/cdebconf/questions.dat. Mixabin, di derbarê reseniya me de jî gotinek tune.
Lê têketinên nêzîk hene, di nav de. syslog, ku têketina tevahiya sazkirinê tê nivîsandin. Pakêta bingehîn-sazker li wir, û li ser wê tê gotin rûpel em dikarin girêdana raweyan bibînin.

Di hundurê wan de em dikarin bi hêsanî bersiva pirsa xwe bibînin:

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

mapdevfs amûrek bi armancek zelal e, û fonksiyona ku em jê re eleqedar in ev e get_resume_partition, ku /proc/swap dixwîne û ya herî mezin li wir hildibijêre. Swap ji partman tê.

Bersiva peywira ceribandina me: Pelê di dema sazkirinê de ji hêla sazkerê /target ve hatî afirandin, ango. em behsa berhemeke naskirî lê dikin. Di pakêtên heyî yên pergalê de kes an jî tiştek tune ku bikaribe vê pelê biguherîne.

Ji bo kurteya

  1. dpkg û debconf ji bo peydakirina pêşkêşkerên pelan rêbazên sereke ne.
  2. lêgerîna li /var/lib/dpkg/info dihêle hûn di qonaxa sazkirinê de operasyonên li ser pelan bibînin.
  3. Sazker dikare pelên hunerî biafirîne ku wê hingê ji hêla kesek ve (ji bilî bikarhêner) nayê guhertin, û ev dikare di koda sazkerê de were dîtin.

Source: www.habr.com

Add a comment