من أين هذا التكوين؟ [دبيان / أوبونتو]

الغرض من هذا المنشور هو إظهار تقنيات تصحيح الأخطاء debian / ubuntu المتعلقة بـ "find source" في ملف تهيئة النظام.

مثال اختبار: بعد فترة طويلة من الاستهزاء بنسخة 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.

من أين هذا المقتطف؟

هناك ثلاثة خيارات:

  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 يسمح لك بعرض جميع الملفات الموجودة في النظام من الحزمة المحددة. لقد أبرزت ملفًا مثيرًا للاهتمام للدراسة. يُظهر فحص الملف كيفية استخدام هذا المتغير ، لكنه لا يجيب من أين أتى.

com.debconf

اتضح أن هذه قطعة أثرية لشخص ما. لمن؟ قبل التعمق في برنامج التثبيت ، دعنا نلقي نظرة على بنية أساسية أخرى مهمة في دبيان - الإجابة عن الأسئلة. في كل مرة تطرح الحزمة سؤالاً ، وفي كثير من الحالات عندما لا تطرح سؤالاً ولكنها تستخدم الافتراضي ، يتم تسجيل السؤال والإجابة في قاعدة بيانات خاصة في دبيان تسمى debconf. يمكننا إلقاء نظرة على قاعدة بيانات الردود (وحتى كشفها قبل تثبيت الحزمة نفسها - debconf-set-selections) ، لهذا نحتاج إلى أداة مساعدة debconf-get-selections من التكوين debconf-utils. لسوء الحظ ، لم يتم العثور على شيء مثير للاهتمام :(debconf-get-selections |grep -i resume عاد فارغا).

مثبت دبيان

المثبت لديه قاعدة البيانات الخاصة به للإجابات على الأسئلة: /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'e في وقت التثبيت ، أي نحن نتحدث عن قطعة أثرية معروفة جيدًا. لا يوجد أحد ولا شيء في الحزم الموجودة في النظام لتغيير هذا الملف.

إجمال

  1. dpkg و debconf هما الطريقتان الرئيسيتان للعثور على موفري الملفات.
  2. يتيح لك البحث / var / lib / dpkg / info رؤية عمليات الملف أثناء مرحلة التثبيت.
  3. يمكن للمثبت إنشاء ملفات أثرية لا يغيرها أي شخص بعد ذلك (باستثناء المستخدم) ، ويمكن رؤية ذلك في كود المثبت.

المصدر: www.habr.com

إضافة تعليق