Aller au contenu
DocumentationComposants

Composants

Tout ce qu’il faut pour comprendre, construire et contribuer à XCP-hl.

Vue d’ensemble des dépôts

XCP-hl est réparti sur plusieurs dépôts fonctionnels, plus ce dépôt de documentation.

Vagrantin/xcp-hl          ← docs (ce site)
      │
      ├── Vagrantin/xolite-ce       ← correctif XO Lite + build RPM
      │         │ publie le RPM signé comme artefact de release GitHub
      │         │
      ├─────────│───Vagrantin/xoa-proxy           ← proxy HTTP Rust + build RPM
      │         │        │  publie le RPM signé comme artefact de release GitHub
      │         ▼        ▼
      ├── Vagrantin/xcp-ng-ce-iso   ← assemblage de l'ISO + releases GitHub de l'ISO
      │         │ télécharge les RPM de xolite-ce et xoa-proxy, assemble l'ISO
      │
      ├── Vagrantin/xoa-hl          ← XOA-hl : Xen Orchestra modifié (RPM + conteneur)
      │         ▼
      ├── Vagrantin/build-xoa-hl    ← chaîne Packer → image XVA de XOA sur XCP-ng
      │         │ publie la XVA comme release GitHub (tags xoa-image-*)
      │

Chaque dépôt a sa propre chaîne GitHub Actions. Ils sont faiblement couplés : xolite-ce et xoa-proxy publient des artefacts RPM versionnés que xcp-ng-ce-iso récupère par tag de release. Aucun de ces dépôts n’a besoin d’être récupéré en même temps qu’un autre pour un build normal. xoa-hl construit le Xen Orchestra modifié par la communauté (XOA-hl), et build-xoa-hl l’empaquette en image XVA.


Pile technique

CoucheTechnologie
Base hyperviseurXCP-ng 8.3 (Xen 4.17, Dom0 Linux 4.19)
Interface XO LiteVue 3 · TypeScript · Vite · Pinia (@xen-orchestra/lite)
Build de XO LiteYarn (Corepack) · yarn build:xo-lite
Empaquetage RPMrpmbuild, rpmsign, createrepo_c
Assemblage de l’ISOcreate-install-image (chaîne d’outils XCP-ng, branche master)
Outillage ISOmksquashfs, xorriso, isohybrid, implantisomd5
Build de XOA-hlNode.js 24 · workspaces Yarn · conteneur AlmaLinux 9
Build de l’image XVAPacker · greffon ddelnano/xenserver · Kickstart
Environnement de buildDocker (xcp-ng-build-env:8.3)
Serveur proxyRust · hyper · tokio · tokio_util::io::ReaderStream
CI/CDGitHub Actions
SignatureGPG : clé maîtresse hors ligne + 2 sous-clés de signature (voir plus bas)

Chaîne de build, de bout en bout

1. CI xolite-ce (GitHub Actions)
   ├── Cloner vatesfr/xen-orchestra au tag figé dans UPSTREAM_TAG
   │   (actuellement xo-lite-v0.21.0, relevé délibérément, pas automatiquement)
   ├── Appliquer patches/community-xoa-deploy.patch
   ├── yarn build:xo-lite
   ├── rpmbuild → xo-lite-community-<VERSION>.rpm
   ├── rpmsign avec la signing subkey RPM (GPG_PRIVATE_KEY + GPG_PASSPHRASE)
   └── Publier le RPM signé comme artefact de release GitHub (clé publique sur
       keys.openpgp.org ; étapes d'import dans les notes de version)

2. CI xoa-proxy (GitHub Actions)
   ├── Installer la chaîne d'outils musl (musl-1.2.4, libc statique)
   ├── Installer Rust stable via rustup
   ├── Ajouter la cible x86_64-unknown-linux-musl
   ├── cargo build --release --target x86_64-unknown-linux-musl
   ├── Préparer les sources RPM (binaire + unité systemd + config logrotate)
   ├── rpmbuild → xoa-proxy-<VERSION>.rpm
   ├── rpmsign avec la signing subkey RPM (GPG_PRIVATE_KEY + GPG_PASSPHRASE)
   └── Publier le RPM signé comme artefact de release GitHub (clé publique sur
       keys.openpgp.org ; étapes d'import dans les notes de version)

3. CI xcp-ng-ce-iso (GitHub Actions)
   ├── Télécharger le RPM signé depuis la release xolite-ce
   ├── Télécharger le RPM signé depuis la release xoa-proxy
   ├── Importer GPG_PRIVATE_KEY (signing subkey ISO) dans le trousseau du runner
   ├── Exporter la clé publique du trousseau du runner → l'injecter dans le chroot de l'installateur
   ├── Préparer community-repo/x86_64/ avec createrepo_c
   ├── Lancer create-installimg.sh (root) : construit install.img (SquashFS)
   ├── Lancer create-iso.sh (non-root) : assemble l'ISO
   ├── isohybrid --uefi (fingerprint hybride MBR/GPT)
   ├── implantisomd5
   ├── sha256sum → xcp-ng-8.3-ceN.iso.sha256
   ├── gpg --detach-sign  (signing subkey ISO via GPG_PRIVATE_KEY)
   └── Publier xcp-ng-8.3-ceN.iso + .iso.sha256 + .iso.sha256.asc comme
       release GitHub de Vagrantin/xcp-ng-ce-iso (clé publique sur
       keys.openpgp.org ; étapes de vérification dans les notes de version)

4. CI xoa-hl (GitHub Actions, sur un tag v<VERSION>-ceN)
   ├── Récupération superficielle de vatesfr/xen-orchestra au commit figé dans UPSTREAM_XO
   │   (actuellement 5.113.2, dernière version XO 5.x, relevée délibérément)
   ├── Appliquer patches/*.patch (menu-hide-items, xcp-hl-updates, xoa-hl-update-api)
   ├── Écrire xoahl.config.toml + générer un certificat TLS auto-signé
   ├── yarn && yarn build (tous les workspaces), élaguer, retirer les devDependencies
   ├── tar → xoa-hl-<VERSION>.tar.gz (entrée du build uniquement, non publiée)
   ├── rpmbuild → xoa-hl-<VERSION>-N.….x86_64.rpm (tout XO déjà construit)
   ├── Publier le RPM comme release GitHub v<VERSION>-ceN
   └── Republier les 5 RPM les plus récents en dépôt yum signé (mises à jour de l'appliance)

5. build-xoa-hl (Packer, sur un vrai hôte XCP-ng)
   ├── Résoudre la checksum de l'ISO AlmaLinux + l'URL de la dernière release RPM de xoa-hl
   ├── Générer inst.ks (Kickstart) et almalinux-build.json (modèle Packer)
   ├── packer build : installer AlmaLinux 9 via Kickstart sur l'hôte XCP-ng
   ├── Provisionner : xe-guest-utilities, Node 24, RPM xoa-hl, unités de premier démarrage
   ├── Alléger l'image, vider /etc/machine-id
   └── Exporter la XVA (xva_compressed) : l'appliance que XO Lite CE déploie

Choix de conception

Trois dépôts pour le côté ISO

Ceci concerne spécifiquement la chaîne de l’ISO (xolite-ce, xoa-proxy, xcp-ng-ce-iso) ; voir le schéma ci-dessus pour la place des dépôts propres à XOA-hl dans la chaîne complète. Séparer chaque build de RPM de l’assemblage de l’ISO garde les responsabilités bien délimitées : xolite-ce (correctif d’interface, empaquetage) et xoa-proxy (proxy Rust, empaquetage) peuvent chacun évoluer indépendamment sans toucher à la chaîne d’outils de l’ISO, et réciproquement. Chacun publie un RPM versionné et signé comme artefact de release GitHub. Ces artefacts sont ensuite consommés pour construire l’ISO.

Correctif au niveau du code source

Le correctif XO Lite est appliqué au code source Vue/TypeScript de DeployXoaView.vue.


Signature GPG

XCP-hl utilise une unique paire de clés suivant un modèle offline master key + sous-clés. La clé maîtresse est conservée hors ligne et n’est jamais utilisée pour signer. Deux signing subkeys en sont dérivées : une pour les deux RPM, une pour l’ISO.

Détails de la clé

PropriétéValeur
UID de la cléXCP-ng Community Edition (Master signing key) (tel qu’affiché par gpg --list-keys)
Fingerprint de la clé maîtresse2F59 1DB9 D2C1 28C4 C3D9 63F4 6DA0 0DCA 5BBA 215A
Publiée surkeys.openpgp.org
Adresse e-mailxcp-ng-ce.lid530@passmail.com
Fichier de clé publiquexcp-ng-ce-public.asc

Rôle des sous-clés

Sous-cléUtilisée pour
Signing subkey RPMxo-lite-community-*.rpm et xoa-proxy-*.rpm
Signing subkey ISOxcp-ng-8.3-ceN.iso.sha256.asc (detached signature du fichier de checksum de l’ISO)

Documentation détaillée des composants

PageDescription
xoa-proxyProxy HTTP/gzip en Rust pour la livraison des XVA
xolite-ceCorrectif XO Lite, spec RPM, chaîne de build
xcp-ng-ce-isoAssemblage de l’ISO, chaîne d’outils, workflow de CI
xoa-hlXen Orchestra modifié (XOA-hl), construit et empaqueté en RPM
build-xoa-hlChaîne Packer qui construit l’image XVA de XOA sur XCP-ng