이 설정 파일은 어디에서 가져온 것인가요?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)의 출처와 이를 올바르게 변경하는 방법을 이해합니다. Это первый попавшийся пример, не особо интересный сам по себе, но удобный, чтобы показать практические методы работы с Linux.

1단계: RESUME은 어디에서 왔나요?

# 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

Получается, это чей-то артефакт. Чей? Перед тем, как нырять в инсталлятор, глянем ещё в одну важную инфраструктуру Debian — ответы на вопросы. Каждый раз, когда пакет задаёт вопрос, и во многих случаях, когда он вопроса не задаёт, но использует вариант по-умолчанию, и вопрос, и ответ фиксируются в специальной базе в Debian, которая называется debconf. Мы можем посмотреть на базу ответов (и даже выставить их до установки самого пакета — debconf-set-selections), 이를 위해서는 유틸리티가 필요합니다 debconf-get-selections 실적 debconf-utils. 불행히도 흥미로운 것은 발견되지 않았습니다 :(debconf-get-selections |grep -i resume 빈 상태로 반환됨)

debian-설치자

설치 프로그램에는 질문에 대한 답변이 포함된 자체 데이터베이스가 있습니다. /var/log/installer/cdebconf/questions.dat. 안타깝게도 우리 이력서에 대해서도 한마디도 없습니다.
하지만 근처에 통나무가 있습니다. 전체 설치 로그가 기록되는 syslog. 기본 설치 프로그램 패키지가 거기에 언급되어 있습니다. 페이지 raws에 대한 링크를 볼 수 있습니다.

그 안에서 우리는 질문에 대한 답을 쉽게 찾을 수 있습니다.

  resume="$(mapdevfs "$resume_devfs")"; then
...
    if [ "$do_initrd" = yes ]; then
     ...
            resumeconf=$IT_CONFDIR/resume
....
                echo "RESUME=$resume" >> $resumeconf

mapdevfs는 명확한 목적을 가진 유틸리티이며 우리가 관심 있는 기능은 다음과 같습니다. get_resume_partition, /proc/swap을 읽고 거기에서 가장 큰 것을 선택합니다. 스왑은 partman에서 제공됩니다.

테스트 작업에 대한 답변: 파일은 설치 시 설치 프로그램에 의해 /target에 생성됩니다. 우리는 잘 알려져 있지만 인공물에 대해 이야기하고 있습니다. 시스템의 기존 패키지에는 이 파일을 변경할 수 있는 사람이나 그 어떤 것도 없습니다.

최대 합계

  1. dpkg 및 debconf는 파일 공급자를 찾는 주요 방법입니다.
  2. /var/lib/dpkg/info를 검색하면 설치 단계에서 파일에 대한 작업을 볼 수 있습니다.
  3. 설치 프로그램은 누구도(사용자 제외) 변경하지 않는 아티팩트 파일을 생성할 수 있으며 이는 설치 프로그램 코드에서 볼 수 있습니다.

출처 : habr.com

DDoS 보호, VPS VDS 서버가 있는 사이트를 위한 안정적인 호스팅 구입 🔥 DDoS 공격 방지 기능이 탑재된 안정적인 웹사이트 호스팅, VPS 및 VDS 서버를 구매하세요 | ProHoster