یہ ترتیب کہاں سے آتی ہے؟ [Debian/Ubuntu]

اس پوسٹ کا مقصد debian/ubuntu میں ڈیبگنگ تکنیک دکھانا ہے جو سسٹم کنفیگریشن فائل میں "ذریعہ تلاش کرنے" سے متعلق ہے۔

ٹیسٹ کی مثال: انسٹال کردہ OS کی 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) کہاں سے آئی اور اسے صحیح طریقے سے کیسے تبدیل کیا جائے۔ یہ پہلی مثال ہے جو سامنے آئی، اپنے آپ میں خاص طور پر دلچسپ نہیں، لیکن لینکس کے ساتھ کام کرنے کے عملی طریقے دکھانے کے لیے آسان ہے۔.

مرحلہ نمبر 1: RESUME کہاں سے آیا؟

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

ہم بار بار (-r) /etc ڈائرکٹری میں اس متغیر کا تذکرہ تلاش کریں (جہاں زیادہ تر تشکیلات ہیں)۔ ہمیں conf.d کا ٹکڑا ملتا ہے، جو initramfs-tools پیکیج کے ذریعے واضح طور پر استعمال ہوتا ہے۔

یہ ٹکڑا کہاں سے ہے؟

تین اختیارات ہیں:

  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/ پیکجز کے تمام "میٹا فائلز" (انسٹالیشن/ ہٹانے کے اسکرپٹس، پیکج کی تفصیل وغیرہ) کے بغیر پیک شدہ ورژن موجود ہیں۔ حیرت انگیز طور پر، یہ فائل initramfs-tools-core پیکیج کے پوسٹ آر ایم (ان انسٹال کرنے پر) میں ہٹا دی گئی ہے۔ آئیے اس کے پوسٹ انسٹ کے مواد کو دیکھتے ہیں... conf.d ڈائریکٹری سے متعلق کچھ نہیں ہے۔

آئیے پیکج میں شامل فائلوں کو دیکھتے ہیں۔ initramfs-tools-core.

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

ٹیم dpkg -L آپ کو مخصوص پیکیج سے سسٹم پر موجود تمام فائلوں کو دیکھنے کی اجازت دیتا ہے۔ میں نے ایک فائل کو اجاگر کیا ہے جو مطالعہ کے لیے دلچسپ ہے۔ فائل کی جانچ پڑتال سے پتہ چلتا ہے کہ یہ متغیر کیسے استعمال ہوتا ہے، لیکن یہ نہیں بتاتا کہ یہ کہاں سے آیا ہے۔

ڈیبکینف

معلوم ہوا کہ یہ کسی کا نمونہ ہے۔ کس کا؟ انسٹالر میں غوطہ لگانے سے پہلے، آئیے ایک اور اہم Debian انفراسٹرکچر پر ایک نظر ڈالتے ہیں - سوالات کے جوابات۔ جب بھی کوئی پیکج سوال پوچھتا ہے، اور بہت سے معاملات میں جب وہ سوال نہیں پوچھتا لیکن پہلے سے طے شدہ آپشن کا استعمال کرتا ہے، سوال اور جواب دونوں کو Debian میں 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 میں بنائی گئی ہے، یعنی ہم معروف، لیکن ایک نمونے کے بارے میں بات کر رہے ہیں۔ سسٹم میں موجود پیکجز میں کوئی ایک یا کوئی چیز نہیں ہے جو اس فائل کو تبدیل کر سکے۔

اپ میزانی

  1. dpkg اور debconf فائل فراہم کنندگان کو تلاش کرنے کے اہم طریقے ہیں۔
  2. /var/lib/dpkg/info میں تلاش کرنا آپ کو تنصیب کے مرحلے کے دوران فائلوں پر آپریشن دیکھنے کی اجازت دیتا ہے۔
  3. انسٹالر آرٹفیکٹ فائلیں بنا سکتا ہے جو پھر کبھی کسی کے ذریعہ تبدیل نہیں ہوتی ہیں (سوائے صارف کے)، اور اسے انسٹالر کوڈ میں دیکھا جا سکتا ہے۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں