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

الغرض من هذا المنشور هو إظهار تقنية 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.


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


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


  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/ 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.


الإجابة على مهمة الاختبار الخاصة بنا: يتم إنشاء الملف بواسطة المثبت في / الهدف في وقت التثبيت ، أي نحن نتحدث عن قطعة أثرية معروفة ، لكن لا يوجد أحد ولا شيء في الحزم الموجودة في النظام لتغيير هذا الملف.


لتلخيص


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

Source: https://habr.com/ru/post/ar461033/


All Articles