¿De dónde proviene esta configuración?Debian/Ubuntu]

El propósito de esta publicación es mostrar técnicas de depuración en debian/ubuntu, связанную с «поиском первоисточника» в системном конфигурационном файле.

Ejemplo de prueba: después de muchas burlas de la copia tar.gz del sistema operativo instalado y después de restaurarla e instalar actualizaciones, recibimos el mensaje:

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.

Objetivo: entender de dónde viene este valor (U1563304817I0) y cómo cambiarlo correctamente. Это первый попавшийся пример, не особо интересный сам по себе, но удобный, чтобы показать практические методы работы с Linux.

Paso número 1: ¿De dónde surgió RESUME?

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

Nosotros recursivamente (-r) busque una mención de esta variable en el directorio /etc (donde están la mayoría de las configuraciones). Encontramos el fragmento conf.d, que claramente utiliza el paquete initramfs-tools.

¿De dónde es este fragmento?

Hay tres opciones:

  1. Artefacto mágico (alguien lo puso y lo olvidó)
  2. Configuración desde el paquete
  3. Configuración generada por algún script de paquetes del sistema

Revisemos el número 2 (como el más simple):

 dpkg -S initramfs-tools/conf.d/resume
dpkg-query: no path found matching pattern *initramfs-tools/conf.d/resume*

dpkg -S nos permite buscar en la base de datos de archivos instalados y encontrar a qué paquete pertenece el archivo. A continuación se muestra un ejemplo de una búsqueda exitosa:

dpkg -S resolv.conf
manpages: /usr/share/man/man5/resolv.conf.5.gz
systemd: /lib/systemd/resolv.conf

Volvamos a nuestra tarea: archivo initramfs-tools/conf.d/resume no está instalado en el sistema desde el paquete. ¿Quizás se genera en el script postinst/preinst del paquete? Comprobemos la versión número 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

En el catálogo /var/lib/dpkg/info/ Hay versiones descomprimidas de todos los "metarchivos" de los paquetes (scripts de instalación/eliminación, descripciones de paquetes, etc.). Sorprendentemente, este archivo se elimina en el postrm (al desinstalar) del paquete initramfs-tools-core. Veamos el contenido de su postinst... Nada relacionado con el directorio conf.d.

Veamos los archivos incluidos en el paquete. initramfs-tools-core.

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

Equipo dpkg -L le permite ver todos los archivos que están en el sistema desde el paquete especificado. He resaltado un archivo que es interesante para estudiar. Examinar el archivo muestra cómo se usa esta variable, pero no dice de dónde viene.

debconf

Получается, это чей-то артефакт. Чей? Перед тем, как нырять в инсталлятор, глянем ещё в одну важную инфраструктуру Debian — ответы на вопросы. Каждый раз, когда пакет задаёт вопрос, и во многих случаях, когда он вопроса не задаёт, но использует вариант по-умолчанию, и вопрос, и ответ фиксируются в специальной базе в Debian, которая называется debconf. Мы можем посмотреть на базу ответов (и даже выставить их до установки самого пакета — debconf-set-selections), para esto necesitamos una utilidad debconf-get-selections de la composición debconf-utils. Desafortunadamente, no se encontró nada interesante :(debconf-get-selections |grep -i resume devuelto vacío).

debian-installer

El instalador tiene su propia base de datos de respuestas a preguntas: /var/log/installer/cdebconf/questions.dat. Lamentablemente tampoco hay ni una palabra sobre nuestro currículum.
Pero hay troncos cerca, incl. syslog, donde se escribe todo el registro de instalación. El paquete de instalación base se menciona allí y en él página podemos ver el enlace a los raws.

Dentro de ellos podemos encontrar fácilmente la respuesta a nuestra pregunta:

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

mapdevfs es una utilidad con un propósito claro, y la función que nos interesa es get_resume_partition, que lee /proc/swaps y selecciona el más grande allí. El intercambio viene de partman.

La respuesta a nuestra tarea de prueba: el archivo lo crea el instalador en /target en el momento de la instalación, es decir. Estamos hablando de algo conocido, pero un artefacto. No hay nada ni nadie en los paquetes existentes en el sistema que pueda cambiar este archivo.

En resumen

  1. dpkg y debconf son los métodos principales para encontrar proveedores de archivos.
  2. buscar en /var/lib/dpkg/info le permite ver las operaciones en los archivos durante la fase de instalación.
  3. El instalador puede crear archivos de artefactos que nadie (excepto el usuario) puede cambiar nunca, y esto se puede ver en el código del instalador.

Fuente: habr.com

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster