Одакле долази ова конфигурација? [Дебиан/Убунту]

Сврха овог поста је да покаже технику отклањања грешака у дебиан/убунту која се односи на „проналажење извора“ у датотеци конфигурације система.

Пример теста: након много исмевања тар.гз копије инсталираног ОС-а и након његовог враћања у претходно стање и инсталирања ажурирања, добијамо поруку:

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.

Циљ: разумети одакле долази ова вредност (У1563304817И0) и како да је исправно промените. Ово је први пример који је наишао, није посебно занимљив сам по себи, али згодан да покаже практичне методе рада са Линуксом.

Корак број 1: Одакле је дошао РЕСУМЕ?

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

Ми рекурзивно (-r) потражите помињање ове променљиве у директоријуму /етц (где се налази већина конфигурација). Проналазимо исечак цонф.д, који јасно користи пакет инитрамфс-тоолс.

Одакле је овај исечак?

Постоје три опције:

  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 није инсталиран на систему из пакета. Можда се генерише у постинст/преинст скрипти пакета? Хајде да проверимо верзију број 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/ постоје распаковане верзије свих „метафајлова“ пакета (скрипте за инсталацију/уклањање, описи пакета, итд.). Изненађујуће, ова датотека се уклања у пострм (приликом деинсталирања) пакета инитрамфс-тоолс-цоре. Хајде да погледамо садржај његовог постинст... Ништа у вези са директоријумом цонф.д.

Хајде да погледамо датотеке укључене у пакет initramfs-tools-core.

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

Тим dpkg -L омогућава вам да видите све датотеке које се налазе на систему из наведеног пакета. Истакнуо сам датотеку која је занимљива за проучавање. Испитивање датотеке показује како се ова променљива користи, али не говори одакле долази.

дебцонф

Испоставило се да је ово нечији артефакт. Чије? Пре него што уђемо у инсталатер, хајде да погледамо још једну важну Дебиан инфраструктуру – одговоре на питања. Сваки пут када пакет постави питање, иу многим случајевима када не поставља питање, али користи подразумевану опцију, и питање и одговор се снимају у посебној бази података у Дебиану која се зове дебцонф. Можемо погледати базу података одговора (па чак и поставити их пре инсталирања самог пакета - debconf-set-selections), за ово нам је потребан услужни програм debconf-get-selections из састава debconf-utils. Нажалост, ништа занимљиво није пронађено :(debconf-get-selections |grep -i resume вратио празан).

дебиан-инсталатер

Инсталатер има своју базу података одговора на питања: /var/log/installer/cdebconf/questions.dat. Нажалост, нема ни речи о нашој биографији.
Али у близини постоје трупци, укљ. сислог, где је написан цео дневник инсталације. Пакет основног инсталацијског програма се помиње тамо и на њему страна можемо видети везу до сировина.

Унутар њих лако можемо пронаћи одговор на наше питање:

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

мапдевфс је услужни програм са јасном сврхом, а функција која нас занима јесте get_resume_partition, који чита /проц/свапс и тамо бира највећи. Замена долази од партмана.

Одговор на наш тестни задатак: датотеку креира инсталатер у /таргет у тренутку инсталације, тј. говоримо о добро познатом, али артефакту. Не постоји нико или ништа у постојећим пакетима у систему што може да промени ову датотеку.

Резиме

  1. дпкг и дебцонф су главне методе за проналажење добављача датотека.
  2. претраживање у /вар/либ/дпкг/инфо вам омогућава да видите операције на датотекама током фазе инсталације.
  3. Инсталатер може да креира датотеке артефаката које нико никада (осим корисника) не мења, а то се може видети у коду инсталатера.

Извор: ввв.хабр.цом

Додај коментар