ΠžΡ‚ΠΊΡƒΠ΄Π° этот ΠΊΠΎΠ½Ρ„ΠΈΠ³? [Debian/Ubuntu]

ЦСль этого поста: ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² debian/ubuntu, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с «ΠΏΠΎΠΈΡΠΊΠΎΠΌ пСрвоисточника» Π² систСмном ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅.

ВСстовый ΠΏΡ€ΠΈΠΌΠ΅Ρ€: послС Π΄ΠΎΠ»Π³ΠΈΡ… ΠΈΠ·Π΄Π΅Π²Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π² Π½Π°Π΄ tar.gz ΠΊΠΎΠΏΠΈΠ΅ΠΉ установлСнной ОБ ΠΈ послС Π΅Ρ‘ восстановлСния ΠΈ установки Π°ΠΏΠ΄Π΅ΠΉΡ‚ΠΎΠ² ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ сообщСниС:

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.

ЦСль: ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΎΡ‚ΠΊΡƒΠ΄Π° это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (U1563304817I0) ΠΏΡ€ΠΈΡˆΠ»ΠΎ ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ попавшийся ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ особо интСрСсный сам ΠΏΠΎ сСбС, Π½ΠΎ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ практичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Linux.

Π¨Π°Π³ Π½ΠΎΠΌΠ΅Ρ€ 1: ΠžΡ‚ΠΊΡƒΠ΄Π° ΠΏΡ€ΠΈΡˆΡ‘Π» RESUME?

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

ΠœΡ‹ рСкурсивно (-r) ΠΈΡ‰Π΅ΠΌ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /etc (Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ²). ΠœΡ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ conf.d сниппСт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ явно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ initramfs-tools.

ΠžΡ‚ΠΊΡƒΠ΄Π° этот сниппСт?

Π•ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°:

  1. ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ (ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ» ΠΈ Π·Π°Π±Ρ‹Π»)
  2. ΠšΠΎΠ½Ρ„ΠΈΠ³ ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π°
  3. ΠšΠΎΠ½Ρ„ΠΈΠ³, сгСнСрированный ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ скриптом ΠΈΠ· систСмных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ β„–2 (ΠΊΠ°ΠΊ самый простой):

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

dpkg -S позволяСт Π½Π°ΠΌ ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ Π±Π°Π·Π΅ установлСнных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π½Π°ΠΉΡ‚ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ Ρ„Π°ΠΉΠ» относится. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ поиска:

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

ВозвращаСмся ΠΊ нашСй Π·Π°Π΄Π°Ρ‡Π΅: Ρ„Π°ΠΉΠ» initramfs-tools/conf.d/resume Π½Π΅ устанавливаСтся Π² систСму ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π°. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ½ гСнСрируСтся Π² postinst/preinst скриптС ΠΏΠ°ΠΊΠ΅Ρ‚Π°? ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π²Π΅Ρ€ΡΠΈΡŽ Π½ΠΎΠΌΠ΅Ρ€ 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

Π’ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /var/lib/dpkg/info/ Π»Π΅ΠΆΠ°Ρ‚ распакованныС вСрсии всСх «ΠΌΠ΅Ρ‚Π°Ρ„Π°ΠΉΠ»ΠΎΠ²» ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² (скрипты установки/удалСния, описания ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ Ρ‚.Π΄.). Π£Π΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ этот Ρ„Π°ΠΉΠ» удаляСтся Π² postrm (ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ) ΠΏΠ°ΠΊΠ΅Ρ‚Π° initramfs-tools-core. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ содСрТимоС Π΅Π³ΠΎ postinst… НичСго, ΠΊΠ°ΡΠ°ΡŽΡ‰Π΅Π³ΠΎΡΡ conf.d Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· состава ΠΏΠ°ΠΊΠ΅Ρ‚Π° initramfs-tools-core.

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

Команда dpkg -L позволяСт ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π² систСмС ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π― Π²Ρ‹Π΄Π΅Π»ΠΈΠ» интСрСсный для изучСния Ρ„Π°ΠΉΠ». Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ эта пСрСмСнная ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π½ΠΎ Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ появляСтся.

debconf

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, это Ρ‡Π΅ΠΉ-Ρ‚ΠΎ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚. Π§Π΅ΠΉ? ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π½Ρ‹Ρ€ΡΡ‚ΡŒ Π² инсталлятор, глянСм Π΅Ρ‰Ρ‘ Π² ΠΎΠ΄Π½Ρƒ Π²Π°ΠΆΠ½ΡƒΡŽ инфраструктуру Debian β€” ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° вопросы. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°ΠΊΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‘Ρ‚ вопрос, ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ вопроса Π½Π΅ Π·Π°Π΄Π°Ρ‘Ρ‚, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈ вопрос, ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π±Π°Π·Π΅ Π² Debian, которая называСтся debconf. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π±Π°Π·Ρƒ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² (ΠΈ Π΄Π°ΠΆΠ΅ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π΄ΠΎ установки самого ΠΏΠ°ΠΊΠ΅Ρ‚Π° β€” debconf-set-selections), для этого Π½Π°ΠΌ потрСбуСтся ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° debconf-get-selections ΠΈΠ· состава debconf-utils. К соТалСнию, Π½ΠΈΡ‡Π΅Π³ΠΎ интСрСсного Π½Π΅ нашлось: (debconf-get-selections |grep -i resume Π²Π΅Ρ€Π½ΡƒΠ» пусто).

debian-installer

Π£ установщика Π΅ΡΡ‚ΡŒ своя Π±Π°Π·Π° ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² Π½Π° вопросы: /var/log/installer/cdebconf/questions.dat. К соТалСнию, Ρ‚Π°ΠΌ Ρ‚ΠΎΠΆΠ΅ Π½Π΅Ρ‚ Π½ΠΈ слова ΠΏΡ€ΠΎ наш resume.
Π—Π°Ρ‚ΠΎ рядом Π΅ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈ, Π² Ρ‚.Ρ‡. syslog, ΠΊΡƒΠ΄Π° ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ вСсь Π»ΠΎΠ³ инсталляции. Π’Π°ΠΌ упоминаСтся ΠΏΠ°ΠΊΠ΅Ρ‚ base-installer, ΠΈ Π½Π° Π΅Π³ΠΎ страницС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ссылку Π½Π° сырцы.

Π’Π½ΡƒΡ‚Ρ€ΠΈ Π½ΠΈΡ… ΠΌΡ‹ с Π»Ρ‘Π³ΠΊΠΎΡΡ‚ΡŒΡŽ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° наш вопрос:

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

mapdevfs β€” это ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° с понятным Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π° интСрСсная Π½Π°ΠΌ функция это get_resume_partition, которая Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ /proc/swaps ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Ρ‚Π°ΠΌ ΡΠ°ΠΌΡƒΡŽ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ. Swap ΠΆΠ΅ Ρƒ нас ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚ partman’Π°.

ΠžΡ‚Π²Π΅Ρ‚ Π½Π° нашС тСстовоС Π·Π°Π΄Π°Π½ΠΈΠ΅: Ρ„Π°ΠΉΠ» создаётся инсталлятором Π² /target’Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ установки, Ρ‚.Π΅. ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ well-known, Π½ΠΎ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚. Π’ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² систСмС ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… Π½Π΅Ρ‚ Π½ΠΈΠΊΠΎΠ³ΠΎ ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ мСняло этот Ρ„Π°ΠΉΠ».

Подводя ΠΈΡ‚ΠΎΠ³

  1. dpkg ΠΈ debconf β€” основныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для поиска поставщиков Ρ„Π°ΠΉΠ»ΠΎΠ².
  2. поиск Π² /var/lib/dpkg/info позволяСт ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π½Π° этапС установки.
  3. Установщик ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹-Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΌ Π½ΠΈΠΊΠ΅ΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ (ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ), ΠΈ это ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ установщика.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com