ಈ ಸಂರಚನೆಯು ಎಲ್ಲಿಂದ ಬರುತ್ತದೆ? [ಡೆಬಿಯನ್/ಉಬುಂಟು]

ಈ ಪೋಸ್ಟ್‌ನ ಉದ್ದೇಶವು ಸಿಸ್ಟಮ್ ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್‌ನಲ್ಲಿ "ಮೂಲವನ್ನು ಹುಡುಕಲು" ಸಂಬಂಧಿಸಿದ ಡೆಬಿಯನ್/ಉಬುಂಟುನಲ್ಲಿ ಡೀಬಗ್ ಮಾಡುವ ತಂತ್ರವನ್ನು ತೋರಿಸುವುದು.

ಪರೀಕ್ಷಾ ಉದಾಹರಣೆ: ಸ್ಥಾಪಿಸಲಾದ 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: ರೆಸ್ಯೂಮ್ ಎಲ್ಲಿಂದ ಬಂತು?

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

ನಾವು ಪುನರಾವರ್ತಿತವಾಗಿ (-r) /etc ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ (ಹೆಚ್ಚಿನ ಸಂರಚನೆಗಳು ಇರುವಲ್ಲಿ) ಈ ವೇರಿಯಬಲ್‌ನ ಉಲ್ಲೇಖಕ್ಕಾಗಿ ನೋಡಿ. initramfs-tools ಪ್ಯಾಕೇಜ್‌ನಿಂದ ಸ್ಪಷ್ಟವಾಗಿ ಬಳಸಲಾದ conf.d ತುಣುಕನ್ನು ನಾವು ಕಂಡುಕೊಳ್ಳುತ್ತೇವೆ.

ಈ ತುಣುಕು ಎಲ್ಲಿಂದ ಬಂದಿದೆ?

ಮೂರು ಆಯ್ಕೆಗಳಿವೆ:

  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 ಪ್ಯಾಕೇಜ್‌ನ postrm (ಅಸ್ಥಾಪನೆಯಲ್ಲಿ) ತೆಗೆದುಹಾಕಲಾಗಿದೆ. ಅದರ postinst ನ ವಿಷಯಗಳನ್ನು ನೋಡೋಣ... conf.d ಡೈರೆಕ್ಟರಿಗೆ ಸಂಬಂಧಿಸಿಲ್ಲ.

ಪ್ಯಾಕೇಜ್‌ನಲ್ಲಿ ಸೇರಿಸಲಾದ ಫೈಲ್‌ಗಳನ್ನು ನೋಡೋಣ initramfs-tools-core.

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

ತಂಡದ dpkg -L ನಿಗದಿತ ಪ್ಯಾಕೇಜ್‌ನಿಂದ ಸಿಸ್ಟಮ್‌ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಫೈಲ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಅಧ್ಯಯನಕ್ಕಾಗಿ ಆಸಕ್ತಿದಾಯಕವಾದ ಫೈಲ್ ಅನ್ನು ನಾನು ಹೈಲೈಟ್ ಮಾಡಿದ್ದೇನೆ. ಫೈಲ್ ಅನ್ನು ಪರಿಶೀಲಿಸುವುದು ಈ ವೇರಿಯಬಲ್ ಅನ್ನು ಹೇಗೆ ಬಳಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ತೋರಿಸುತ್ತದೆ, ಆದರೆ ಅದು ಎಲ್ಲಿಂದ ಬರುತ್ತದೆ ಎಂದು ಹೇಳುವುದಿಲ್ಲ.

ಡೆಬ್ಕಾನ್ಫ್

ಇದು ಯಾರೊಬ್ಬರ ಕಲಾಕೃತಿ ಎಂದು ತಿರುಗುತ್ತದೆ. ಯಾರದು? ಸ್ಥಾಪಕಕ್ಕೆ ಧುಮುಕುವ ಮೊದಲು, ಇನ್ನೊಂದು ಪ್ರಮುಖ ಡೆಬಿಯನ್ ಮೂಲಸೌಕರ್ಯವನ್ನು ನೋಡೋಣ - ಪ್ರಶ್ನೆಗಳಿಗೆ ಉತ್ತರಗಳು. ಪ್ರತಿ ಬಾರಿ ಪ್ಯಾಕೇಜ್ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳುತ್ತದೆ, ಮತ್ತು ಅನೇಕ ಸಂದರ್ಭಗಳಲ್ಲಿ ಅದು ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳದೆ ಡೀಫಾಲ್ಟ್ ಆಯ್ಕೆಯನ್ನು ಬಳಸಿದಾಗ, ಪ್ರಶ್ನೆ ಮತ್ತು ಉತ್ತರ ಎರಡನ್ನೂ ಡೆಬಿಯನ್‌ನಲ್ಲಿನ ವಿಶೇಷ ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿ ದಾಖಲಿಸಲಾಗುತ್ತದೆ debconf ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ನಾವು ಉತ್ತರಗಳ ಡೇಟಾಬೇಸ್ ಅನ್ನು ನೋಡಬಹುದು (ಮತ್ತು ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಸ್ಥಾಪಿಸುವ ಮೊದಲು ಅವುಗಳನ್ನು ಹೊಂದಿಸಿ - debconf-set-selections), ಇದಕ್ಕಾಗಿ ನಮಗೆ ಉಪಯುಕ್ತತೆಯ ಅಗತ್ಯವಿದೆ debconf-get-selections ಸಂಯೋಜನೆಯಿಂದ debconf-utils. ದುರದೃಷ್ಟವಶಾತ್, ಆಸಕ್ತಿದಾಯಕ ಏನೂ ಕಂಡುಬಂದಿಲ್ಲ :(debconf-get-selections |grep -i resume ಖಾಲಿ ಮರಳಿದೆ).

ಡೆಬಿಯನ್-ಸ್ಥಾಪಕ

ಅನುಸ್ಥಾಪಕವು ಪ್ರಶ್ನೆಗಳಿಗೆ ಉತ್ತರಗಳ ತನ್ನದೇ ಆದ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಹೊಂದಿದೆ: /var/log/installer/cdebconf/questions.dat. ದುರದೃಷ್ಟವಶಾತ್, ನಮ್ಮ ಪುನರಾರಂಭದ ಬಗ್ಗೆ ಒಂದು ಪದವೂ ಇಲ್ಲ.
ಆದರೆ ಹತ್ತಿರದಲ್ಲಿ ಲಾಗ್‌ಗಳಿವೆ, incl. 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 ಅನ್ನು ಓದುತ್ತದೆ ಮತ್ತು ಅಲ್ಲಿ ದೊಡ್ಡದನ್ನು ಆಯ್ಕೆ ಮಾಡುತ್ತದೆ. ಸ್ವಾಪ್ ಪಾರ್ಟ್‌ಮ್ಯಾನ್‌ನಿಂದ ಬರುತ್ತದೆ.

ನಮ್ಮ ಪರೀಕ್ಷಾ ಕಾರ್ಯಕ್ಕೆ ಉತ್ತರ: ಅನುಸ್ಥಾಪನೆಯ ಸಮಯದಲ್ಲಿ / ಗುರಿಯಲ್ಲಿ ಅನುಸ್ಥಾಪಕದಿಂದ ಫೈಲ್ ಅನ್ನು ರಚಿಸಲಾಗಿದೆ, ಅಂದರೆ. ನಾವು ಪ್ರಸಿದ್ಧ, ಆದರೆ ಕಲಾಕೃತಿಯ ಬಗ್ಗೆ ಮಾತನಾಡುತ್ತಿದ್ದೇವೆ. ಈ ಫೈಲ್ ಅನ್ನು ಬದಲಾಯಿಸಬಹುದಾದ ವ್ಯವಸ್ಥೆಯಲ್ಲಿ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಪ್ಯಾಕೇಜ್‌ಗಳಲ್ಲಿ ಯಾರೂ ಅಥವಾ ಯಾವುದೂ ಇಲ್ಲ.

ಸಾರಾಂಶ

  1. dpkg ಮತ್ತು debconf ಫೈಲ್ ಪೂರೈಕೆದಾರರನ್ನು ಹುಡುಕುವ ಮುಖ್ಯ ವಿಧಾನಗಳಾಗಿವೆ.
  2. /var/lib/dpkg/info ನಲ್ಲಿ ಹುಡುಕುವುದರಿಂದ ಅನುಸ್ಥಾಪನೆಯ ಹಂತದಲ್ಲಿ ಫೈಲ್‌ಗಳಲ್ಲಿ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ನೋಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.
  3. ಅನುಸ್ಥಾಪಕವು ಆರ್ಟಿಫ್ಯಾಕ್ಟ್ ಫೈಲ್‌ಗಳನ್ನು ರಚಿಸಬಹುದು, ನಂತರ ಅದನ್ನು ಯಾರಿಂದಲೂ ಬದಲಾಯಿಸಲಾಗುವುದಿಲ್ಲ (ಬಳಕೆದಾರರನ್ನು ಹೊರತುಪಡಿಸಿ), ಮತ್ತು ಇದನ್ನು ಸ್ಥಾಪಕ ಕೋಡ್‌ನಲ್ಲಿ ಕಾಣಬಹುದು.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ