Ин конфигуратсия аз куҷо меояд? [Debian/Ubuntu]

Мақсади ин паём нишон додани усули ислоҳи хатогиҳо дар debian/ubuntu мебошад, ки ба "пайдо кардани манбаъ" дар файли конфигуратсияи система алоқаманд аст.

Мисоли санҷиш: пас аз тамасхури зиёди нусхаи tar.gz OS насбшуда ва пас аз барқарор кардани он ва насби навсозиҳо, мо паёмро мегирем:

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 хориҷ карда шудааст. Биёед ба мундариҷаи постинсти он назар андозем... Ҳеҷ чиз ба директорияи 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-насбкунанда

Насбкунанда дорои базаи шахсии ҷавобҳои саволҳо мебошад: /var/log/installer/cdebconf/questions.dat. Мутаассифона, дар бораи ҳоли мо низ ҳарфе нест.
Аммо дар наздикии он чӯбҳо мавҷуданд, аз ҷумла. syslog, ки дар он тамоми сабти насб навишта шудааст. Дар он ҷо бастаи насбкунандаи асосӣ зикр шудааст ва дар он саҳифа мо пайвандро ба хом дида метавонем.

Дар дохили онҳо мо метавонем ба осонӣ ба саволи худ ҷавоб ёбем:

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

mapdevfs як утилитаест, ки ҳадафи равшан дорад ва функсияе, ки мо ба он таваҷҷӯҳ дорем get_resume_partition, ки /proc/swaps -ро мехонад ва калонтаринро дар он ҷо интихоб мекунад. Своп аз партман меояд.

Ҷавоб ба вазифаи санҷишии мо: файл аз ҷониби насбкунанда дар /target ҳангоми насб сохта шудааст, яъне. сухан дар бораи маълум, вале осори. Дар бастаҳои мавҷудаи система касе ё чизе вуҷуд надорад, ки ин файлро тағир диҳад.

Барои ҷамъбаст кардан

  1. dpkg ва debconf усулҳои асосии дарёфти провайдерҳои файл мебошанд.
  2. ҷустуҷӯ дар /var/lib/dpkg/info ба шумо имкон медиҳад, ки амалиётро дар файлҳо дар марҳилаи насбкунӣ бубинед.
  3. Насбкунанда метавонад файлҳои артефактиро эҷод кунад, ки пас аз он ҳеҷ гоҳ аз ҷониби касе (ба истиснои корбар) тағир дода намешавад ва инро дар коди насбкунанда дидан мумкин аст.

Манбаъ: will.com

Илова Эзоҳ