---
title: "Construction d'images CentOS Stream avec Disk Image Builder pour OPCP"
description: "Découvrez comment construire des images OpenStack CentOS Stream 8 et 9 personnalisées avec diskimage-builder (DiB) pour On-Prem Cloud Platform"
url: https://docs.ovhcloud.com/fr/guides/hosted-private-cloud/opcp/how-to-create-centos-image
lang: fr
lastUpdated: 2026-09-11
---
> For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt.

# Construction d'images CentOS Stream avec Disk Image Builder pour OPCP

## Objectif

[Disk Image Builder](https://opendev.org/openstack/diskimage-builder) (DiB) est l'outil OpenStack utilisé pour construire des images disque de systèmes d'exploitation personnalisées. Ce guide explique comment construire des images **CentOS Stream 8** et **CentOS Stream 9** prêtes à être importées dans OpenStack Glance et utilisées sur votre On-Prem Cloud Platform (OPCP).

**Ce guide explique comment installer DiB, préparer des éléments personnalisés qui contournent un problème connu de CentOS, puis lancer la construction pour CentOS Stream 8 et CentOS Stream 9.**

Pour un autre exemple basé sur Debian avec une personnalisation via Ansible, consultez le guide [Création d'une image Debian personnalisée pour OPCP](https://docs.ovhcloud.com/fr/guides/hosted-private-cloud/opcp/how-to-create-debian-image.md).

:::info
Dans ce guide, nous utilisons **Debian 12** comme hôte de construction pour produire des images **CentOS**, mais vous pouvez utiliser une autre distribution Linux (des ajustements peuvent être nécessaires). Vous pouvez également adapter les chemins et les commandes présentés ici en fonction de vos besoins.
:::

## Prérequis

- Disposer des permissions root sur l'hôte de construction
- Au moins 10 Go d'espace disque libre
- Un environnement Linux Debian 12 (ou compatible) pour lancer la construction
- Un accès à internet pour télécharger les paquets et les miroirs CentOS amont

## En pratique

### Étape 1 : Installer les prérequis de construction

Installez les composants requis par DiB pour construire des images basées sur CentOS, Debian et Ubuntu :

```bash
apt update
apt install -y \
  dosfstools \
  python3 \
  python3-venv \
  python3-pip \
  virtualenv \
  kpartx \
  debootstrap \
  lvm2 \
  squashfs-tools \
  git \
  qemu-utils \
  qemu-system-x86 \
  curl
```

:::info
`git` est nécessaire pour cloner le dépôt DiB, `qemu-utils` fournit l'outillage `qemu-img` utilisé pour manipuler les images `qcow2`, `qemu-system-x86` fournit `qemu-system-x86_64` utilisé à l'étape 7 pour tester le résultat, et `curl` sert à télécharger les paquets et le contenu des miroirs durant la construction.
:::

### Étape 2 : Installer Disk Image Builder

Créez et activez un environnement virtuel Python :

```bash
virtualenv ~/env-diskimage-builder
source ~/env-diskimage-builder/bin/activate
```

Clonez le dépôt DiB sur un tag spécifique et installez-le. Dans cet exemple, nous utilisons la version `3.42.0` :

```bash
git clone --depth 1 --branch 3.42.0 https://opendev.org/openstack/diskimage-builder ~/diskimage-builder
pip install -e ~/diskimage-builder
```

Vérifiez que `disk-image-create` est disponible :

```bash
disk-image-create --version
```

### Étape 3 : Créer l'arborescence de dossiers

Créez les répertoires de travail utilisés par la construction :

```bash
mkdir -p ~/dib                  # dossier principal
mkdir -p ~/dib/tmp-build-dir    # dossier temporaire utilisé pendant la construction
mkdir -p ~/dib/elements         # dossier stockant les éléments personnalisés utilisés par DiB
mkdir -p ~/dib/env              # dossier stockant les variables personnalisées par distribution
```

### Étape 4 : Définir les éléments personnalisés

La construction CentOS nécessite deux éléments personnalisés qui contournent des limitations actuelles des éléments DiB amont.

#### Élément personnalisé : `block-device-efi-custom`

L'élément `block-device-efi` par défaut crée une partition ESP (EFI System Partition) plus grande que nécessaire. Créez un élément personnalisé basé sur celui-ci et redimensionnez la partition de 550 Mio à 512 Mio :

```bash
cp -pR ~/diskimage-builder/diskimage_builder/elements/block-device-efi ~/dib/elements/block-device-efi-custom
sed -i -e 's/550/512/' ~/dib/elements/block-device-efi-custom/block-device-default.yaml
```

#### Élément personnalisé : `centos-custom`

L'élément `centos` par défaut présente un problème qui n'est pas encore corrigé. Créez un élément personnalisé basé sur celui-ci pour appliquer le correctif requis :

```bash
cp -pR ~/diskimage-builder/diskimage_builder/elements/centos ~/dib/elements/centos-custom

sed -i \
  -e 's/centos.repo/*.repo/' \
  -e 's/centos-addons.repo/*.repo/' \
  -e 's/CentOS-Stream-BaseOS.repo/*.repo/' \
  -e 's/CentOS-Stream-AppStream.repo/*.repo/' \
  -e 's/CentOS-Stream-Extras.repo/*.repo/' \
  -e 's/CentOS-Stream-PowerTools.repo/*.repo/' \
  -e 's/CentOS-Linux-BaseOS.repo/*.repo/' \
  -e 's/CentOS-Linux-AppStream.repo/*.repo/' \
  -e 's/CentOS-Linux-Extras.repo/*.repo/' \
  -e 's/CentOS-Linux-PowerTools.repo/*.repo/' \
  -e 's/CentOS-Linux-Plus.repo/*.repo/' \
  ~/dib/elements/centos-custom/pre-install.d/00-02-set-centos-mirror
```

### Étape 5 : Construire une image CentOS Stream 8

:::info
Pour CentOS Stream 8, l'utilisateur par défaut créé par `cloud-init` est `centos`.
:::

#### Créer les variables d'environnement

```bash
mkdir -p ~/dib/env/centos8

cat <<EOF > ~/dib/env/centos8/main.env
export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, OpenStack"
export DIB_GRUB_TIMEOUT=10
export DIB_DISTRIBUTION_MIRROR=http://vault.centos.org/centos
export DIB_RELEASE=8-stream
export DIB_BOOTLOADER_DEFAULT_CMDLINE="nofb nomodeset gfxpayload=text rd.auto"
export DIB_DRACUT_ENABLED_MODULES="
- name: crypt
  packages:
    - cryptsetup
- name: lvm
  packages:
    - lvm2
- name: mdraid
  packages:
    - mdadm
"
EOF
```

#### Lancer la construction

Réinitialisez toute variable précédemment définie, sourcez le fichier d'environnement, puis lancez la construction :

```bash
unset DIB_CLOUD_INIT_DATASOURCES
unset DIB_GRUB_TIMEOUT
unset DIB_DISTRIBUTION_MIRROR
unset DIB_RELEASE
unset DIB_BOOTLOADER_DEFAULT_CMDLINE
unset DIB_DRACUT_ENABLED_MODULES

source ~/dib/env/centos8/main.env

cd ~/dib

export TMPDIR="$(pwd)/tmp-build-dir"
export ELEMENTS_PATH="$(pwd)/elements"

disk-image-create --no-tmpfs -t qcow2 --image-size 16GB -a amd64 \
  dracut-regenerate block-device-efi-custom bootloader \
  cloud-init-datasources centos-custom \
  -o my-centos8-image
```

Une fois la construction terminée, vérifiez les fichiers générés :

```bash
ls my-centos8-image*
```

```console
my-centos8-image.qcow2

my-centos8-image.d:
dib-manifests
```

### Étape 6 : Construire une image CentOS Stream 9

:::info
Pour CentOS Stream 9, l'utilisateur par défaut créé par `cloud-init` est `cloud-user`.
:::

#### Créer les variables d'environnement

```bash
mkdir -p ~/dib/env/centos9

cat <<EOF > ~/dib/env/centos9/main.env
export DIB_GRUB_TIMEOUT=10
export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, OpenStack"
export DIB_RELEASE=9-stream
export DIB_BOOTLOADER_DEFAULT_CMDLINE="nofb nomodeset gfxpayload=text rd.auto"
export DIB_DRACUT_ENABLED_MODULES="
- name: crypt
  packages:
    - cryptsetup
- name: lvm
  packages:
    - lvm2
- name: mdraid
  packages:
    - mdadm
"
EOF
```

#### Lancer la construction

```bash
unset DIB_CLOUD_INIT_DATASOURCES
unset DIB_GRUB_TIMEOUT
unset DIB_DISTRIBUTION_MIRROR
unset DIB_RELEASE
unset DIB_BOOTLOADER_DEFAULT_CMDLINE
unset DIB_DRACUT_ENABLED_MODULES

source ~/dib/env/centos9/main.env

cd ~/dib

export TMPDIR="$(pwd)/tmp-build-dir"
export ELEMENTS_PATH="$(pwd)/elements"

disk-image-create --no-tmpfs -t qcow2 --image-size 16GB -a amd64 \
  dracut-regenerate block-device-efi-custom bootloader \
  cloud-init-datasources centos-custom \
  -o my-centos9-image
```

Une fois la construction terminée, vérifiez les fichiers générés :

```bash
ls my-centos9-image*
```

```console
my-centos9-image.qcow2

my-centos9-image.d:
dib-manifests
```

### Étape 7 (optionnel) : Tester l'image localement

Avant d'importer l'image, vous pouvez la démarrer localement avec QEMU pour vérifier qu'elle démarre correctement :

```bash
qemu-system-x86_64 -nographic \
  -m 2048 \
  -drive file=my-centos9-image.qcow2,if=virtio,format=qcow2
```

### Étape 8 : Importer l'image dans OpenStack

Importez l'image `qcow2` générée dans Glance :

```bash
openstack image create \
  --disk-format qcow2 \
  --container-format bare \
  --file my-centos9-image.qcow2 \
  my-centos9-image
```

Vous pouvez désormais créer une instance Bare Metal (Ironic) ou Compute (Nova) à partir de l'image nouvellement créée.

## Dépannage

### L'image ne démarre pas (emergency mode) ou le build échoue sur grub2-probe

#### Symptômes

L'erreur peut apparaître à deux endroits différents :

Lors du build, sur l'étape grub :

```console
/usr/sbin/grub2-probe: error: ../grub-core/kern/fs.c:120:unknown filesystem.
```

Au démarrage d'une instance, le boot ne va pas jusqu'au bout et s'arrête en mode « emergency ». `journalctl` montre des erreurs sur le système de fichiers :

```console
/dev/vda3 has unsupported feature(s): FEATURE_C12
e2fsck: Get a newer version of e2fsck!
fsck failed with exit status 12
```

#### Cause

Le problème est lié à la version d'`e2fsprogs`, utilisé par les commandes `mke2fs`, `e2fsck`, `grub2-probe`.

`disk-image-builder` formate la partition root avec le `mkfs.ext4` de la machine de construction, pas celui de l'image cible. Si l'hôte de construction utilise un `e2fsprogs` récent (version supérieure à 1.47), certaines fonctionnalités ext4 sont activées par défaut à la création du système de fichiers :

- `metadata_csum_seed`
- `orphan_file`

Ces fonctionnalités sont trop récentes pour l'`e2fsprogs`/`grub2` embarqué dans CentOS 8 ou 9, ce qui cause les erreurs observées.

#### Solution

Désactivez ces fonctionnalités à la création du système de fichiers via l'option `--mkfs-options` de `disk-image-create` :

```bash
disk-image-create --no-tmpfs -t qcow2 --image-size 16GB -a amd64 \
  --mkfs-options "-O ^metadata_csum_seed,^orphan_file" \
  dracut-regenerate block-device-efi-custom bootloader \
  cloud-init-datasources centos-custom \
  -o my-centos-image
```

## Aller plus loin

- [Création d'une image Debian personnalisée pour OPCP](https://docs.ovhcloud.com/fr/guides/hosted-private-cloud/opcp/how-to-create-debian-image.md)
- [Documentation Disk Image Builder](https://docs.openstack.org/diskimage-builder/latest/)

Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en place de nos solutions, contactez votre commercial ou cliquez sur [ce lien](https://www.ovhcloud.com/fr/professional-services/) afin d'obtenir un devis et demandez une analyse à nos experts Professional Services sur le cas d'usage spécifique de votre projet.

Échangez avec notre [communauté d'utilisateurs](https://community.ovhcloud.com/).
