Bu konfiqurasiya haradan gəlir? [Debian/Ubuntu]

Bu yazının məqsədi debian/ubuntu-da sistem konfiqurasiya faylında "mənbənin tapılması" ilə bağlı sazlama texnikasını göstərməkdir.

Test nümunəsi: quraşdırılmış ƏS-nin tar.gz nüsxəsini çox istehza etdikdən və onu bərpa etdikdən və yeniləmələri quraşdırdıqdan sonra mesaj alırıq:

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.

Məqsəd: bu dəyərin (U1563304817I0) haradan gəldiyini və onu necə düzgün dəyişdirəcəyini anlayın. Bu, özlüyündə maraqlı olmayan, lakin Linux ilə işləməyin praktik üsullarını göstərmək üçün əlverişli olan ilk nümunədir.

Addım nömrəsi 1: CV haradan gəldi?

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

Biz rekursiv (-r) /etc kataloqunda bu dəyişənin qeydini axtarın (konfiqurasiyaların əksəriyyəti buradadır). Biz initramfs-tools paketi tərəfindən aydın şəkildə istifadə olunan conf.d parçasını tapırıq.

Bu fraqment haradandır?

Üç seçim var:

  1. Sehrli artefakt (kimsə onu qoyub unutdu)
  2. Paketdən konfiqurasiya
  3. Sistem paketlərindən bəzi skript tərəfindən yaradılan konfiqurasiya

2 nömrəli yoxlayaq (ən sadə kimi):

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

dpkg -S quraşdırılmış faylların verilənlər bazasında axtarış aparmağa və faylın hansı paketə aid olduğunu tapmağa imkan verir. Uğurlu axtarış nümunəsi:

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

Gəlin vəzifəmizə qayıdaq: fayl initramfs-tools/conf.d/resume paketdən sistemə quraşdırılmayıb. Bəlkə paketin postinst/preinst skriptində yaradılıb? 3 nömrəli versiyanı yoxlayaq.

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

Kataloqda /var/lib/dpkg/info/ paketlərin bütün “metafayllarının” açılmamış versiyaları mövcuddur (quraşdırma/çıxarma skriptləri, paket təsvirləri və s.). Təəccüblüdür ki, bu fayl initramfs-tools-core paketinin postrm-də (söküldükdə) silinir. Onun postinst məzmununa baxaq... conf.d kataloqu ilə bağlı heç nə yoxdur.

Paketə daxil olan fayllara baxaq initramfs-tools-core.

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

Komanda dpkg -L müəyyən paketdən sistemdə olan bütün fayllara baxmaq imkanı verir. Öyrənmək üçün maraqlı olan bir faylı vurğuladım. Faylın araşdırılması bu dəyişənin necə istifadə edildiyini göstərir, lakin haradan gəldiyini söyləmir.

debconf

Belə çıxır ki, bu kiminsə əsəridir. Kimin? Quraşdırıcıya keçməzdən əvvəl gəlin digər vacib Debian infrastrukturuna - suallara cavablara nəzər salaq. Paket hər dəfə sual verəndə və bir çox hallarda sual vermədikdə, lakin standart variantdan istifadə etdikdə, həm sual, həm də cavab Debian-da debconf adlı xüsusi verilənlər bazasında qeyd olunur. Cavablar bazasına baxa bilərik (və hətta paketi quraşdırmadan əvvəl onları təyin edə bilərik - debconf-set-selections), bunun üçün bizə yardımçı proqram lazımdır debconf-get-selections tərkibindən debconf-utils. Təəssüf ki, maraqlı heç nə tapılmadı :(debconf-get-selections |grep -i resume boş qaytarıldı).

debian-quraşdırıcı

Quraşdırıcının suallara cavablar bazası var: /var/log/installer/cdebconf/questions.dat. Təəssüf ki, CV-miz haqqında bir kəlmə də yoxdur.
Ancaq yaxınlıqda loglar var, o cümlədən. bütün quraşdırma jurnalının yazıldığı syslog. Baza-quraşdırıcı paketi orada qeyd olunur və üzərindədir səhifə xammalın linkini görə bilərik.

Onların içərisində sualımızın cavabını asanlıqla tapa bilərik:

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

mapdevfs aydın məqsədi olan bir köməkçi proqramdır və bizi maraqlandıran funksiya budur get_resume_partition, /proc/swaps oxuyur və orada ən böyüyü seçir. Mübadilə partmandan gəlir.

Test tapşırığımızın cavabı: fayl quraşdırma zamanı /target-də quraşdırıcı tərəfindən yaradılır, yəni. Söhbət tanınmış, lakin bir artefaktdan gedir. Sistemdəki mövcud paketlərdə bu faylı dəyişə biləcək heç kim və ya heç nə yoxdur.

Yekunlaşdırma

  1. dpkg və debconf fayl təminatçılarını tapmaq üçün əsas üsullardır.
  2. /var/lib/dpkg/info-da axtarış quraşdırma mərhələsində fayllar üzərində əməliyyatları görməyə imkan verir.
  3. Quraşdırıcı daha sonra heç kim (istifadəçi istisna olmaqla) tərəfindən dəyişdirilməyən artefakt faylları yarada bilər və bunu quraşdırıcı kodunda görmək olar.

Mənbə: www.habr.com

Добавить комментарий