labs:ostree-lab1-initramfs

OSTree: Lab 1 ammorce d'un OStree avec GRUB

Objet Amorce d'un système de fichier OSTree
Niveau requis débutant, avisé
Débutant, à savoir
Suivi :DRAFT:

Voici quelques notes sur la façon d'amorcer une arborescence de systèmes de fichiers gérés par OSTree.

Remplissage du référentiel local

Suivre les instructions générales de la page GnomeOSTree, mais pour la dernière étape, demander à ostadmin de sauter la génération de l'image initramfs: on ajustera un initramfs pour prendre en charge le démarrage à l'aide d'OSTree plus tard.

Résumé des commandes (en tant que root):

ostadmin init
cd /ostree
ostree --repo=repo remote add gnome http://ostree.gnome.org/repo \
       trees/gnomeos-3.6-i686-{runtime,devel}
ostree-pull --repo=repo --related --depth=3 gnome
ostadmin deploy --checkout-only gnomeos-3.6-i686-devel

Ajuster les initramfs

Changer un initramfs existant permet de grarntir que tout fonctionnera très bien, même les configurations complexes qui cryptent LVM et/ou LUKS dans le système de fichiers racine. Le résultat est: si le système fonctionne maintenant , cela fonctionnera également avec ostree.

Tout d'abord, créer un répertoire de travail et décompresser les initramfs actuels. Il faudra peut-être remplacer unxz par gunzip / bunzip2 selon la méthode de compression des initramfs. En tant que root:

mkdir /tmp/workdir
cd /tmp/workdir
unxz -c /boot/initramfs-linux.img | bsdcpio -i

Modifier le script init, faites défiler jusqu'à la fin et ajouter les lignes suivantes avant la dernière ligne (celle qui utilise exec pour basculer vers le système de fichiers réel):

if [ -n "${ostree}" ] && [ ! -d "/new_root/ostree/${ostree}" ] ; then
  ostree='current'
fi

if [ -n "${ostree}" ] && \
   [ -x /new_root/ostree/ostree-init ] && \
   [ -d "/new_root/ostree/${ostree}" ]
then
  msg ":: Booting OSTree '${ostree}'"
  msg "::   command: ostree-init /new_root ${ostree} /sbin/init $*"
  exec env -i "TERM=$TERM" /new_root/ostree/ostree-init \
    "/new_root" "${ostree}" /sbin/init "$@" || true
  msg ":: Failed OSTree boot, will do a normal one :-("
fi

l'extrait ci-dessus utilise la variable ${ostree}, qui n'a été définie nulle part. Cela sera transmis comme argument dans la ligne de commande du noyau à partir du chargeur de démarrage.

Maintenant, recompresser les initramfs et enregistrer avec un nom différent:

find . -print0 | bsdcpio -R 0:0 -0oH newc | xz --check=crc32 > /boot/initramfs-gnomeos.img

Ajout d'une entrée GRUB

Ajouter une entrée au fichier de configuration GRUB qui utilise les initramfs modifiés et transmet un paramètre ostree= non vide dans la ligne de commande du noyau. À titre d'exemple, voici à quoi ressemble une entrée:

title  GNOME OS [/boot/vmlinuz-linux]
root   (hd0,0)
kernel /vmlinuz-linux root=/dev/mapper/vg-root cryptdevice=/dev/sda2 lvmcrypt ro quiet ostree=current
initrd /initramfs-gnomeos.img

En règle générale, on peut copier l'entrée par défaut, changer le chemin pour utiliser les initramfs modifiés et éditer la ligne du noyau pour ajouter ostree=current à la fin.

labs/ostree-lab1-initramfs.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1