Ushbu konfiguratsiya qayerdan keladi? [Debian/Ubuntu]

Ushbu postning maqsadi debian/ubuntu-da tizim konfiguratsiya faylida "manbani topish" bilan bog'liq disk raskadrovka texnikasini ko'rsatishdir.

Sinov misoli: o'rnatilgan operatsion tizimning tar.gz nusxasini ko'p masxara qilgandan so'ng va uni qayta tiklab, yangilanishlarni o'rnatganimizdan so'ng biz quyidagi xabarni olamiz:

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.

Maqsad: ushbu qiymat (U1563304817I0) qayerdan kelganini va uni qanday qilib to'g'ri o'zgartirish kerakligini tushuning. Bu o'ziga xos qiziqarli emas, balki Linux bilan ishlashning amaliy usullarini ko'rsatish uchun qulay bo'lgan birinchi misoldir.

1-qadam: REZUME qaerdan paydo bo'ldi?

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

Biz rekursiv (-r) /etc katalogida ushbu o'zgaruvchining eslatmasini qidiring (ko'pchilik konfiguratsiyalar mavjud). Biz initramfs-tools to'plami tomonidan aniq qo'llaniladigan conf.d snippetini topamiz.

Bu parcha qayerdan olingan?

Uchta variant mavjud:

  1. Sehrli artefakt (kimdir qo'ygan va unutgan)
  2. Paketdan konfiguratsiya
  3. Tizim paketlaridan ba'zi skriptlar tomonidan yaratilgan konfiguratsiya

Keling, β„– 2 ni tekshiramiz (eng oddiy):

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

dpkg -S o'rnatilgan fayllar ma'lumotlar bazasini qidirish va fayl qaysi paketga tegishli ekanligini topish imkonini beradi. Muvaffaqiyatli qidiruvga misol:

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

Keling, vazifamizga qaytaylik: fayl initramfs-tools/conf.d/resume paketdan tizimga o'rnatilmagan. Ehtimol, u paketning postinst/preinst skriptida yaratilganmi? 3-versiyani tekshiramiz.

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

Katalogda /var/lib/dpkg/info/ paketlarning barcha "metafayllari" ning ochilmagan versiyalari mavjud (o'rnatish/o'chirish skriptlari, paket tavsiflari va boshqalar). Ajablanarlisi shundaki, bu fayl initramfs-tools-core paketining postrm (o'chirishda) da o'chiriladi. Keling, uning postinst mazmunini ko'rib chiqaylik ... conf.d katalogiga hech narsa tegishli emas.

Keling, paketga kiritilgan fayllarni ko'rib chiqaylik initramfs-tools-core.

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

komanda dpkg -L belgilangan paketdan tizimdagi barcha fayllarni ko'rish imkonini beradi. Men o'rganish uchun qiziqarli bo'lgan faylni ta'kidladim. Faylni tekshirish ushbu o'zgaruvchining qanday ishlatilishini ko'rsatadi, lekin u qaerdan kelganini aytmaydi.

debconf

Ma'lum bo'lishicha, bu kimningdir artefaktidir. Kimniki? O'rnatuvchiga sho'ng'ishdan oldin, keling, yana bir muhim Debian infratuzilmasini ko'rib chiqaylik - savollarga javoblar. Paket har safar savol berganida va ko'p hollarda u savol bermasa, lekin standart variantdan foydalansa, savol ham, javob ham Debian'da debconf nomli maxsus ma'lumotlar bazasida qayd etiladi. Biz javoblar ma'lumotlar bazasiga qarashimiz mumkin (va hatto paketni o'rnatishdan oldin ularni o'rnatishimiz mumkin - debconf-set-selections), buning uchun bizga yordamchi dastur kerak debconf-get-selections tarkibidan debconf-utils. Afsuski, qiziq narsa topilmadi :(debconf-get-selections |grep -i resume bo'sh qaytarildi).

debian-o'rnatuvchi

O'rnatuvchi o'zining savollarga javoblar bazasiga ega: /var/log/installer/cdebconf/questions.dat. Afsuski, bizning rezyumemiz haqida bir so'z ham yo'q.
Ammo yaqin atrofda jurnallar mavjud, jumladan. syslog, bu erda butun o'rnatish jurnali yoziladi. Asosiy o'rnatish paketi u erda va uning ustida eslatib o'tilgan sahifa biz xomashyoga havolani ko'rishimiz mumkin.

Ularning ichida biz savolimizga javobni osongina topishimiz mumkin:

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

mapdevfs - bu aniq maqsadga ega yordamchi dastur va bizni qiziqtiradigan funksiya get_resume_partition, u /proc/swaps-ni o'qiydi va u erda eng kattasini tanlaydi. Swap partmandan keladi.

Test vazifamizga javob: fayl o'rnatish vaqtida /target-da o'rnatuvchi tomonidan yaratilgan, ya'ni. Biz taniqli, ammo artefakt haqida gapiramiz. Tizimdagi mavjud paketlarda ushbu faylni o'zgartira oladigan hech kim yoki hech narsa yo'q.

sarhisob qilar ekanmiz

  1. dpkg va debconf fayl provayderlarini topishning asosiy usullari hisoblanadi.
  2. /var/lib/dpkg/info da qidirish o'rnatish bosqichida fayllardagi operatsiyalarni ko'rish imkonini beradi.
  3. O'rnatuvchi hech kim tomonidan o'zgartirilmaydigan artefakt fayllarini yaratishi mumkin (foydalanuvchidan tashqari) va buni o'rnatuvchi kodida ko'rish mumkin.

Manba: www.habr.com

a Izoh qo'shish