Partitions
Lors de l’installation, deux partitions sont créées sur le disque choisi comme cible de l’installation.
Par exemple, si le disque d’installation est /dev/sda :
/dev/sda1partition système EFI de 512 Mo/dev/sda2reste du disqueLa disposition des partitions d’un système en cours d’exécution peut être visualisée avec la commande
lsblk.citadel:~ # lsblk /dev/sda NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 477G 0 disk ├─sda1 8:1 0 511M 0 part └─sda2 8:2 0 476.5G 0 part └─luks 252:0 0 476.4G 0 crypt ├─citadel-rootfsA 252:1 0 2G 0 lvm │ └─rootfs 252:4 0 354M 1 crypt / ├─citadel-rootfsB 252:2 0 2G 0 lvm └─citadel-storage 252:3 0 472.4G 0 lvm /storagePlusieurs autres périphériques en mode bloc sont créés pendant le démarrage, au moment où la partition principale du disque est déchiffrée.
sda ├─sda1 (a) /boot partition └─sda2 (b) LUKS encrypted partition └─citadel (c) LVM volume group ├─citadel-rootfsA (d1) rootfs partition A (Read Only) │ └─rootfs (e) The dm-verity device created for rootfsA ├─citadel-rootfsB (d2) rootfs partition B (Read Only) └─citadel-storage (f) mounted as /storage (Read/Write)(a) /boot partitionpartition de démarrage EFI(b) LUKS encrypted partitionle reste du disque est un volume chiffré(c) LVM volume groupla partition principale contient plusieurs volumes LVM(d) citadel-rootfs(A/B)deux partitions racine afin que l’une puisse être mise à jour pendant que l’autre est utilisée.(e) /dev/mapper/rootfspériphérique mapper verity pour la partition racine montée(f) /dev/mapper/citadel-storagele système de fichiers inscriptibleArborescence du système de fichiers de Citadel
/ ├─ /run/citadel/images/ │ │ │ ├─ modules.mountpoint/ (modules image mounted here) │ └─ extra.mountpoint/ (extra image mounted here) │ └─ /storage │ ├─ resources/dev (resource images for channel 'dev') │ │ │ ├─base-realmfs.img │ └─main-realmfs.img │ ├─ /realms (/realms is a bind mount of /storage/realms) │ ├─skel/ │ └─config │ ├─ /realms/realmfs-images │ │ │ ├─citadel-kernel-5.7-dev-001.img │ └─citadel-extra-dev-001.img │ └─ /realms/realm-main ├─ home └─ configMontage des images de ressources
Les images de ressources sont intégrées au système par la création de périphériques loop. Ces périphériques peuvent être visualisés en exécutant la commande « losetup » à l’intérieur de Citadel.
citadel:~ # losetup -ONAME,OFFSET,RO,BACK-FILE NAME OFFSET RO BACK-FILE /dev/loop1 4096 1 /storage/resources/dev/citadel-extra-dev-001.img /dev/loop2 4096 1 /storage/realms/realmfs-images/main-realmfs.img /dev/loop0 4096 1 /storage/resources/dev/citadel-kernel-5.0.6-dev-000.imgLes fichiers d’images de ressources sont protégés contre les modifications accidentelles ou les altérations malveillantes grâce à dm-verity, qui permet au noyau de vérifier une somme de contrôle cryptographique de chaque bloc chargé depuis l’image.
Vous pouvez visualiser le nœud device mapper verity associé à chaque périphérique loop avec la commande
lsblk.citadel:~ # lsblk /dev/loop0 /dev/loop1 /dev/loop4 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 116.9M 1 loop └─verity-kernel 252:5 0 116M 1 crypt /run/citadel/images/kernel.mountpoint loop1 7:1 0 938.9M 1 loop └─verity-extra 252:6 0 931.5M 1 crypt /run/citadel/images/extra.mountpoint loop2 7:2 0 4G 1 loop └─verity-realmfs-main-11922f31 252:9 0 4G 1 crypt /run/citadel/realmfs/realmfs-main-11922f31.mountpointLes paramètres de chaque instance dm-verity peuvent être visualisés avec la commande veritysetup.
citadel:~ # veritysetup status verity-kernel /dev/mapper/verity-kernel is active and is in use. type: VERITY status: verified hash type: 1 data block: 4096 hash block: 4096 hash name: sha256 salt: fa430cb7887de60dca6fd1974868036ea39cf5017eb55f02e3a76f82a12a0431 data device: /dev/loop0 data loop: /storage/resources/dev/citadel-kernel-5.0.6-dev-000.img size: 237536 sectors mode: readonly hash device: /dev/loop0 hash loop: /storage/resources/dev/citadel-kernel-5.0.6-dev-000.img hash offset: 237544 sectorsLorsqu’un fichier d’image de ressources est monté, un fichier nommé « manifest », situé à la racine, liste les montages bind à effectuer pour intégrer l’image au système de fichiers racine de Citadel.
Chaque ligne de ce fichier désigne un répertoire à monter par bind depuis l’image montée vers le système de fichiers racine. Si un répertoire doit être monté à un emplacement différent du répertoire source, les répertoires source et cible sont tous deux indiqués sur une seule ligne, séparés par le caractère « : ». Dans l’image « extra » ci-dessous, le répertoire /usr/share de l’image de ressources est monté en /opt/share sur le système de fichiers de Citadel.
citadel:~ # cat /run/citadel/images/kernel.mountpoint/manifest /usr/lib/modules citadel:~ # cat /run/citadel/images/extra.mountpoint/manifest /usr/lib/firmware /usr/share:/opt/shareL’utilitaire citadel-image permet de visualiser les variables de metainfo stockées dans la section d’en-tête d’un fichier d’image de ressources.
citadel:~ # citadel-image metainfo /storage/resources/dev/citadel-extra-dev-001.img image-type = "extra" channel = "dev" version = 1 timestamp = "20190331172025" nblocks = 195924 shasum = "04e6f58afa6f608aff2d6cbb47cbe704f8ab0995f4dfe8e1c03655dc9bb6635a" verity-salt = "7bf3eec3c51ffd2e82329a9fc6fe42915743874d7c5af43589e589c037ae81e5" verity-root = "b94eb3431c4fb95e5b9bd62b4505d089414ae660d75eee0fce54b8483d3f9571" citadel:~ # citadel-image metainfo /storage/resources/dev/citadel-kernel-5.0.6-dev-000.img image-type = "kernel" kernel-version = "5.0.6" kernel-id = "36b7a960dcd51d1649f83a7361f9eb5c2af5741ce6cc53689b411347aa1298b6" channel = "dev" version = 1 timestamp = "20190407002748" nblocks = 29692 shasum = "c988bd7d468c409eb6cd3af8fa9e17b0a75a72d6ad765ad1749d15628a9096be" verity-salt = "fa430cb7887de60dca6fd1974868036ea39cf5017eb55f02e3a76f82a12a0431" verity-root = "f4c4fbaebb59d348bd44cfb1cdef54a813728aabc5acc439c2e739b63c1b8370"Les images RealmFS possèdent également un en-tête d’image de ressources, avec un ensemble de variables de metainfo légèrement différent.
citadel:~ # citadel-image metainfo /storage/realms/realmfs-images/main-realmfs.img image-type = "realmfs" realmfs-name = "main" nblocks = 1048575 channel = "realmfs-user" verity-salt = "ad254e6dd385c0392ed8a6a41b849cfd4ef98ec3643e186feb011d5aa4f1d194" verity-root = "11922f311b5a9141d65b7ef82e1c9159d75e413d1b420a7e3302ec8ec0ad8593"