الغرض من هذا المنشور هو إظهار تقنية debian / ubuntu لتصحيح الأخطاء المتعلقة بـ "البحث المصدر" في ملف تكوين النظام.
مثال على الاختبار: بعد التنقير الطويل لنسخة 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: من أين جاء السيرة الذاتية؟
# cd /etc # grep -r RESUME initramfs-tools/conf.d/resume:RESUME=/dev/mapper/U1563304817I0-swap
نبحث بشكل متكرر ( -r
) عن ذكر هذا المتغير في الدليل / etc (حيث توجد معظم التكوينات). نجد conf.d مقتطفًا يستخدم صراحةً بواسطة حزمة أدوات initramfs.
من أين يأتي هذا المقتطف؟
هناك ثلاثة خيارات:
- قطعة أثرية السحر (وضع شخص ونسي)
- التكوين من الحزمة
- تكوين تم إنشاؤه بواسطة بعض البرامج النصية من حزم النظام
تحقق رقم 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/
directory على الإصدارات التي تم فك حزمتها من جميع حزم "ملفات التعريف" (تثبيت / إلغاء تثبيت البرامج النصية ، وأوصاف الحزمة ، وما إلى ذلك). من المستغرب أن يتم حذف هذا الملف في postrm (عند الحذف) لحزمة initramfs-tools-core. دعونا نرى محتويات postinst له ... لا شيء يتعلق بالدليل conf.d.
دعونا نلقي نظرة على الملفات من initramfs-tools-core
.
# dpkg -L initramfs-tools-core ... /usr/share/initramfs-tools/hooks/resume ...
يتيح لك الأمر dpkg -L
رؤية جميع الملفات الموجودة على النظام من الحزمة المحددة. سلطت الضوء على ملف مثير للاهتمام للدراسة. يوضح فحص الملف كيفية استخدام هذا المتغير ، لكنه لا يجيب من أين أتى.
debconf
اتضح أن هذا هو قطعة أثرية لشخص ما. الذي؟ قبل الغوص في برنامج التثبيت ، دعونا ننظر إلى بنية دبيان الأساسية الأخرى - إجابات على الأسئلة. في كل مرة تسأل فيها الحزمة سؤالاً ، وفي كثير من الحالات عندما لا تطرح سؤالاً ، ولكن تستخدم الخيار الافتراضي ، يتم إصلاح كل من السؤال والجواب في قاعدة بيانات خاصة في دبيان تسمى debconf. يمكننا إلقاء نظرة على قاعدة بيانات الإجابات (وحتى ضبطها قبل تثبيت الحزمة نفسها - 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
mapdevfs هي أداة ذات غرض واضح ، والوظيفة التي نهتم بها هي get_resume_partition
، التي تقرأ / proc / مبادلة وتختار أكبرها هناك. المبادلة تأتي من partman.
الإجابة على مهمة الاختبار الخاصة بنا: يتم إنشاء الملف بواسطة المثبت في / الهدف في وقت التثبيت ، أي نحن نتحدث عن قطعة أثرية معروفة ، لكن لا يوجد أحد ولا شيء في الحزم الموجودة في النظام لتغيير هذا الملف.
لتلخيص
- dpkg و debconf هما الطريقتان الرئيسيتان للعثور على موفري الملفات.
- يتيح لك البحث في / var / lib / dpkg / info رؤية عمليات الملفات أثناء مرحلة التثبيت.
- يمكن للمُنشئ إنشاء ملفات أثرية لا يغيرها أي شخص أبدًا (باستثناء المستخدم) ، ويمكن رؤية ذلك في رمز المثبت.