Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 05-10-2020 18:37:02

jpt
Membre
Distrib. : Debian 10.6
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Question à propos de initrd.img et des infos contenues dedans

Bonjour,

ce matin j'ai fait des modifs pour le montage de mes disques de travail (changement du point de montage), j'ai testé en ligne de commande c'est tout bon, et j'ai oublié de faire

$ sudo update-initramfs -u -k all

tel que préconisé ici.

Ensuite j'ai tout éteint et quatre heures plus tard je rallume et je constate que mes modifs sont bien prises en compte.
Or la date du /boot/initrd.img.5.7.10, qui "pèse" 19 Mio et qui contient bien "etc/fstab" (sans "/" en tête) entre autres, date de plusieurs jours.

J'aurais tendance, à la lecture de ce qui précède, à penser que le fstab dans initrd-img.5.7.10 n'est pas à jour mais pour vérifier c'est mission impossible : je lis dans le man update-initramfs "The initramfs is a gzipped cpio archive.", alors je tente un

gzip -d -l initrd-img.5.7.10

et je me prends "gzip: initrd-img.5.7.10 not in gzip format" alors je tente

cpio -i < initrd.img.5.7.10

et j'attends qu'il se passe quelque chose et il ne se passe rien...

Donc pas moyen de savoir ce que contient ce fichu fichier d'initramfs : les vrais fichiers nécessaires au boot, ou des pointeurs vers ces fichiers ?

Je précise que lsinitramfs mon-fichier liste bien ce à quoi je m'attends (sauf le "/" de tête, comme dit plus haut).

Bon, j'ai la réponse avec la commande

lsinitramfs -l initrd.img.5.7.10 | grep fstab

-rw-r--r--   1 root     root            0 Oct  3 11:56 etc/fstab

Il fait 0 octet. Est-ce à dire que le système va aller chercher l'autre sur le disque ?
Il y a plein d'autres fichiers à 0, entre autres dans usr/sbin et usr/bin, et je ne sais quoi penser.
Une idée, quelqu'un ?
Merci,

Dernière modification par jpt (05-10-2020 18:54:56)


Ryzen3 3200G - Gigabyte B450M

Hors ligne

#2 06-10-2020 09:53:15

raleur
Membre
Inscription : 03-10-2014

Re : Question à propos de initrd.img et des infos contenues dedans

A ma connaissance l'initramfs de Debian généré par le paquet initramfs-tools ne contient pas de copie du fichier fstab, il n'en a pas besoin. Pour monter la racine, il utilise le paramètre root= de la ligne de commande du noyau passée par le chargeur d'amorçage. Pour savoir s'il doit monter un /usr séparé, il peut lire le fichier /etc/fstab de la racine après l'avoir montée. Le reste du contenu de /etc/fstab ne concerne pas l'initramfs.

jpt a écrit :

gzip: initrd-img.5.7.10 not in gzip format


Tu as vérifié le contenu du fichier avec file ?
Si un paquet intel-microcode ou amd-microcode est installé, le contenu de l'initramfs classique peut être précédé par des microcodes pour le processeur.

jpt a écrit :

que contient ce fichu fichier d'initramfs : les vrais fichiers nécessaires au boot, ou des pointeurs vers ces fichiers ?


Les vrais fichiers. Des pointeurs vers la racine ne fonctionneraient pas puisque la racine n'est pas encore montée.

jpt a écrit :

Il y a plein d'autres fichiers à 0, entre autres dans usr/sbin et usr/bin


Exemples ?


Il vaut mieux montrer que raconter.

Hors ligne

#3 06-10-2020 11:37:45

jpt
Membre
Distrib. : Debian 10.6
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Re : Question à propos de initrd.img et des infos contenues dedans

raleur a écrit :

A ma connaissance l'initramfs de Debian généré par le paquet initramfs-tools ne contient pas de copie du fichier fstab, il n'en a pas besoin. Pour monter la racine, il utilise le paramètre root= de la ligne de commande du noyau passée par le chargeur d'amorçage. Pour savoir s'il doit monter un /usr séparé, il peut lire le fichier /etc/fstab de la racine après l'avoir montée. Le reste du contenu de /etc/fstab ne concerne pas l'initramfs.

Et pourtant... voir en fin de réponse.

raleur a écrit :

jpt a écrit :

gzip: initrd-img.5.7.10 not in gzip format


Tu as vérifié le contenu du fichier avec file ?

# file /boot/initrd.img-5.7.10
/boot/initrd.img-5.7.10: ASCII cpio archive (SVR4 with no CRC)


raleur a écrit :

Si un paquet intel-microcode ou amd-microcode est installé, le contenu de l'initramfs classique peut être précédé par des microcodes pour le processeur.


Oui, c'est ce qu'on voit en l'examinant avec Xarchiver par ex.

raleur a écrit :

jpt a écrit :

que contient ce fichu fichier d'initramfs : les vrais fichiers nécessaires au boot, ou des pointeurs vers ces fichiers ?


Les vrais fichiers. Des pointeurs vers la racine ne fonctionneraient pas puisque la racine n'est pas encore montée.

C'est ce que je m'étais aussi dit.

raleur a écrit :

jpt a écrit :

Il y a plein d'autres fichiers à 0, entre autres dans usr/sbin et usr/bin


Exemples ?


-rw-r--r--   1 root     root            0 Oct  3 11:56 etc/fstab
...
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/sbin/blockdev
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/sbin/arping
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/sbin/arp
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/sbin/adjtimex
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/sbin/acpid
dessus les 5 derniers de usr/sbin, dessous les 5 premiers de usr/bin
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/bin/zcat
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/bin/yes
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/bin/xzcat
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/bin/xz
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/bin/xxd
et pour comparer, vers la fin du fichier
-rw-r--r--   1 root     root           36 Oct  3 11:56 usr/share/fonts/.uuid
-rw-r--r--   1 root     root           36 Oct  3 11:56 usr/share/fonts/truetype/.uuid
-rw-r--r--   1 root     root           36 Oct  3 11:56 usr/share/fonts/truetype/dejavu/.uuid



et pour savoir ce qu'il en est irl (lsn c'est un alias à moi pour trier par noms) :

# lsn /usr/sbin/blockdev
-rwxr-xr-x 1 root root 63560 janv. 10  2019 /usr/sbin/blockdev*
# lsn /usr/sbin/ar*
-rwxr-xr-x 1 root root 67512 sept. 24  2018 /usr/sbin/arp*
-rwxr-xr-x 1 root root 76928 janv. 10  2019 /usr/sbin/arpd*
lrwxrwxrwx 1 root root    27 mai    9 12:29 /usr/sbin/arptables -> /etc/alternatives/arptables*
lrwxrwxrwx 1 root root    17 mars   1  2019 /usr/sbin/arptables-nft -> xtables-nft-multi*
lrwxrwxrwx 1 root root    17 mars   1  2019 /usr/sbin/arptables-nft-restore -> xtables-nft-multi*
lrwxrwxrwx 1 root root    17 mars   1  2019 /usr/sbin/arptables-nft-save -> xtables-nft-multi*
lrwxrwxrwx 1 root root    35 mai    9 12:29 /usr/sbin/arptables-restore -> /etc/alternatives/arptables-restore*
lrwxrwxrwx 1 root root    32 mai    9 12:29 /usr/sbin/arptables-save -> /etc/alternatives/arptables-save*
# lsn /usr/sbin/acpid
-rwxr-xr-x 1 root root 56024 nov.  22  2018 /usr/sbin/acpid*
# lsn /usr/sbin/adjtimex
ls: impossible d'accéder à '/usr/sbin/adjtimex': Aucun fichier ou dossier de ce type -- tiens tiens, ça c'est curieux
# lsn /usr/bin/zcat
-rwxr-xr-x 1 root root 1983 janv.  6  2019 /usr/bin/zcat*
# lsn /usr/bin/yes
-rwxr-xr-x 1 root root 35424 févr. 28  2019 /usr/bin/yes*
# lsn /usr/bin/xzcat
lrwxrwxrwx 1 root root 2 janv. 28  2019 /usr/bin/xzcat -> xz*
# lsn /usr/bin/xz
-rwxr-xr-x 1 root root 81192 janv. 28  2019 /usr/bin/xz*
# lsn /usr/bin/xxd
-rwxr-xr-x 1 root root 18552 juin  15  2019 /usr/bin/xxd*



locate adjtimex
/usr/share/man/man2/adjtimex.2.gz
/usr/src/linux-source-4.19/tools/testing/selftests/timers/valid-adjtimex.c
/usr/src/linux-source-5.7/tools/testing/selftests/timers/valid-adjtimex.c


man adjtimex --> c'est pour du code.

EDIT :
J'ai recopié le current et en ai fait générer un autre. Il y a 45 octets de différence, et etc/fstab est toujours là, à 0, tout comme la ligne concernant adjtimex, qui n'existe pas dans la cible.
Go figure...
Et voilà les différences :

< -rw-r--r--   1 root     root         6584 Oct  3 11:56 var/cache/fontconfig/3b418bcb-2ee7-4f42-9804-567334fe98e5-le64.cache-7
< -rw-r--r--   1 root     root          160 Oct  3 11:56 var/cache/fontconfig/673f7fd8-c0a1-41cc-9f54-786d450d76a2-le64.cache-7
< -rw-r--r--   1 root     root          144 Oct  3 11:56 var/cache/fontconfig/6fabcec4-6495-4a18-882a-a6304b5c536f-le64.cache-7
< -rw-r--r--   1 root     root          104 Oct  3 11:56 var/cache/fontconfig/90a61821-4fdd-4016-8c46-1713cc9d6fc2-le64.cache-7
---
> -rw-r--r--   1 root     root          160 Oct  6 12:39 var/cache/fontconfig/2a013032-af12-46fc-a4e4-9a02be503c52-le64.cache-7
> -rw-r--r--   1 root     root         6584 Oct  6 12:39 var/cache/fontconfig/3a70299f-3e2d-4b57-b902-706a58da9b1a-le64.cache-7
> -rw-r--r--   1 root     root          104 Oct  6 12:39 var/cache/fontconfig/7b066b97-2af7-42f9-a89c-0d89a0fcefe1-le64.cache-7
> -rw-r--r--   1 root     root          144 Oct  6 12:39 var/cache/fontconfig/d78eb92f-654b-41c4-9e24-60a466707a5f-le64.cache-7

Pourquoi est-ce que ces trucs (dont on se contre-fiche) ont changé, indépendamment de la date ? Mystère...

Dernière modification par jpt (06-10-2020 12:13:41)


Ryzen3 3200G - Gigabyte B450M

Hors ligne

#4 06-10-2020 12:18:45

raleur
Membre
Inscription : 03-10-2014

Re : Question à propos de initrd.img et des infos contenues dedans

jpt a écrit :

boot/initrd.img-5.7.10: ASCII cpio archive (SVR4 with no CRC)


Donc l'initramfs n'est pas compressé. Cela peut s'expliquer si tu as déjà exécuté gzip -d dessus (remplace le fichier compressé par le fichier décompressé et supprime l'extension .gz le cas échéant).

jpt a écrit :

-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/sbin/blockdev
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/sbin/arping
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/sbin/arp
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/sbin/adjtimex
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/sbin/acpid

-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/bin/zcat
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/bin/yes
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/bin/xzcat
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/bin/xz
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/bin/xxd


Ce sont des commandes implémentées par l'exécutable busybox (cf man busybox). Je suppose que ce sont des liens pointant vers cet exécutable, soit des liens "physiques" (hard links) qui ont une taille nulle par nature, soit des liens symboliques dont la cible serait traitée par le format d'archive cpio comme une méta-donnée et non comme du contenu (d'où la taille nulle). Pour en avoir le coeur net, il faut extraire le contenu de l'initramfs ou redémarrer avec le paramètre "break" qui lance un shell dans l'initramfs.

Dernière modification par raleur (06-10-2020 12:19:03)


Il vaut mieux montrer que raconter.

Hors ligne

#5 06-10-2020 12:59:59

jpt
Membre
Distrib. : Debian 10.6
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Re : Question à propos de initrd.img et des infos contenues dedans

à supprimer

Dernière modification par jpt (06-10-2020 15:47:06)


Ryzen3 3200G - Gigabyte B450M

Hors ligne

#6 06-10-2020 15:46:08

jpt
Membre
Distrib. : Debian 10.6
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Re : Question à propos de initrd.img et des infos contenues dedans

raleur a écrit :

jpt a écrit :

boot/initrd.img-5.7.10: ASCII cpio archive (SVR4 with no CRC)


Donc l'initramfs n'est pas compressé. Cela peut s'expliquer si tu as déjà exécuté gzip -d dessus (remplace le fichier compressé par le fichier décompressé et supprime l'extension .gz le cas échéant).

Non, j'ai fait générer un initrd tout frais pour essayer de comprendre, et j'y suis arrivé en étudiant les scripts : l'initramfs EST compressé, en fait en 2 parties : ce fichu dossier "kernel (qui contient x86 qui contient microcode qui contient AuthenticAMD.bin)" et un autre, compressé également et que je n'ai pu récupérer qu'avec l'aide de unmkinitramfs.
Je recopie un petit bout de son man :

man unmkinitramfs a écrit :

DESCRIPTION
       The unmkinitramfs command extracts the content of a given initramfs image using cpio. If the image contains multiple segments, each are passed to cpio in order.
...
BUGS
       unmkinitramfs cannot deal with multiple-segmented initramfs images, except where an early (uncompressed) initramfs with system firmware is prepended to the regular compressed initramfs.



raleur a écrit :

jpt a écrit :

-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/sbin/blockdev
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/sbin/arping
--snip--


Ce sont des commandes implémentées par l'exécutable busybox (cf man busybox). Je suppose que ce sont des liens pointant vers cet exécutable, soit des liens "physiques" (hard links) qui ont une taille nulle par nature, soit des liens symboliques dont la cible serait traitée par le format d'archive cpio comme une méta-donnée et non comme du contenu (d'où la taille nulle). Pour en avoir le cœur net, il faut extraire le contenu de l'initramfs ou redémarrer avec le paramètre "break" qui lance un shell dans l'initramfs.


1- je ne connais pas busybox. Je sais que ça existe, si je me souviens bien je l'ai découvert sous knoppix, j'ai essayé de comprendre mais ça n'était pas évident et j'ai laissé tomber.

2- extraire le contenu de l'initramfs montre des tas de fichiers avec la même taille, c'est vraiment curieux. Mais n'importe qui peut jouer : il suffit de recopier un initrd.img quelque part puis d'aller dans ce dossier et là, unmkinitramfs -v initrd.img . (n'oubliez pas le point pour dire que c'est que ça se passe !) et encore, je ne suis pas sûr que le -v soit bien utile.
Et vous découvrirez un dossier early (avec kernel et ce qu'il contient, vu plus haut) et un autre main qui contient tout le fourbi pour activer la suite, genre (mais les fichiers sont bizarres, ils sont parfois un paquet à avoir la même taille) :

# ls -Al main/usr/bin/
total 132004
-rwxr-xr-x 247 root root 707288 avril  1  2019 '['
-rwxr-xr-x 247 root root 707288 avril  1  2019 '[['
-rwxr-xr-x 247 root root 707288 avril  1  2019  ar
-rwxr-xr-x 247 root root 707288 avril  1  2019  arch
-rwxr-xr-x 247 root root 707288 avril  1  2019  ash
-rwxr-xr-x 247 root root 707288 avril  1  2019  awk
# ls -Al main/usr/sbin/
total 41616
-rwxr-xr-x 247 root root 707288 avril  1  2019 acpid
-rwxr-xr-x 247 root root 707288 avril  1  2019 adjtimex
-rwxr-xr-x 247 root root 707288 avril  1  2019 arp
-rwxr-xr-x 247 root root 707288 avril  1  2019 arping
-rwxr-xr-x   1 root root 116848 janv. 10  2019 blkid
-rwxr-xr-x 247 root root 707288 avril  1  2019 blockdev
-rwxr-xr-x 247 root root 707288 avril  1  2019 brctl
# ls -Al main/etc/
total 44
drwxr-xr-x 3 root root 4096 oct.   6 16:08 fonts
-rw-r--r-- 1 root root    0 oct.   6 15:57 fstab
-rw-r--r-- 1 root root 5468 oct.   6 15:57 ld.so.cache
-rw-r--r-- 1 root root   34 mars   2  2018 ld.so.conf
drwxr-xr-x 2 root root 4096 oct.   6 16:08 ld.so.conf.d
drwxr-xr-x 2 root root 4096 oct.   6 16:08 modprobe.d
lrwxrwxrwx 1 root root   12 oct.   6 16:08 mtab -> /proc/mounts
-rw-r--r-- 1 root root   14 oct.   6 15:57 nsswitch.conf
-rw-r--r-- 1 root root  261 oct.   6 15:57 os-release
-rw-r--r-- 1 root root   30 oct.   6 15:57 passwd
drwxr-xr-x 2 root root 4096 oct.   6 16:08 plymouth
drwxr-xr-x 2 root root 4096 oct.   6 16:08 udev


Et voilà.

Dernière modification par jpt (06-10-2020 16:20:56)


Ryzen3 3200G - Gigabyte B450M

Hors ligne

#7 06-10-2020 16:15:39

raleur
Membre
Inscription : 03-10-2014

Re : Question à propos de initrd.img et des infos contenues dedans

jpt a écrit :

1- je ne connais pas busybox.


Busybox est une "boîte à outils" qui regroupe un grand nombre de commandes et programmes standard d'Unix/Linux en version compacte dans un seul exécutable et peut remplacer les exécutables individuels dans un système compact comme un initramfs, un installateur ou un système embarqué.
Il est inclus par défaut dans l'initramfs généré par le paquet initramfs-tools, mais on peut le désactiver via /etc/initramfs-tools/initramfs.conf. Dans ce cas, il est remplacé par klibc-utils, autre implémentation compacte des commandes système usuelles.

jpt a écrit :

2- extraire le contenu de l'initramfs montre des tas de fichiers avec la même taille, c'est vraiment curieux


Ce sont simplement des liens physiques qui pointent vers le même exécutable (busybox) comme je le soupçonnais dans mon message précédent. Le nombre de liens de l'inode est affiché : 247, ce qui correspond à peu près au nombre de commandes mentionnées dans la page de manuel de busybox.


Il vaut mieux montrer que raconter.

Hors ligne

#8 07-10-2020 12:41:08

jpt
Membre
Distrib. : Debian 10.6
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Re : Question à propos de initrd.img et des infos contenues dedans

Bonjour,

raleur a écrit :

jpt a écrit :

2- extraire le contenu de l'initramfs montre des tas de fichiers avec la même taille, c'est vraiment curieux

Ce sont simplement des liens physiques qui pointent vers le même exécutable (busybox) comme je le soupçonnais dans mon message précédent.

Bien vu ! yes.gif
Le man de busybox me liste les commandes disponibles et la première que je rencontre c'est celle dont je ne comprenais pas d'où elle sortait puisqu'elle est absente de la vraie machine :

man busybox a écrit :

COMMAND DESCRIPTIONS
       adjtimex
           adjtimex [-q] [-o OFF] [-f FREQ] [-p TCONST] [-t TICK]
           Read and optionally set system timebase parameters. See adjtimex(2)

Mais je n'ai toujours pas d'explication concernant fstab, car si j'ai bien vu au début du man
       ... To create a working system, just add /dev, /etc, and a Linux kernel.
je constate avec lsinitramfs que le dossier /etc de initrd.img est loin de ressembler à celui de la machine : 29 fichiers et dossiers contre 3074 !
J'ai passé la matinée à étudier les scripts de création des .img sans rien trouver de significatif.
Bon, ce n'est pas dramatique, c'était juste pour me coucher moins bête.

Par ailleurs,

raleur a écrit :

jpt a écrit :

1- je ne connais pas busybox.

Busybox [...] est inclus par défaut dans l'initramfs généré par le paquet initramfs-tools, mais on peut le désactiver via /etc/initramfs-tools/initramfs.conf. Dans ce cas, il est remplacé par klibc-utils, autre implémentation compacte des commandes système usuelles.

J'ai bien l'impression que j'ai les deux -- infos récupérées avec lsinitramfs -l fichier.img :

-rwxr-xr-x   1 root     root        74688 Feb  1  2019 usr/lib/klibc-ae-2A4n9ZnfImcw9WIt7dF-3OvQ.so
-rwxr-xr-x 247 root     root            0 Apr  1  2019 usr/bin/busybox


Bah, tant que ça n'est pas gênant, ça peut rester ainsi.

Dernière modification par jpt (07-10-2020 12:43:26)


Ryzen3 3200G - Gigabyte B450M

Hors ligne

Pied de page des forums