Tous les produits
Search
Centre de documentation

Elastic Compute Service:Install cloud-init

Dernière mise à jour :Aug 20, 2026

cloud-init est un outil d'initialisation open source qui fournit des fonctionnalités d'initialisation pour les systèmes d'exploitation Linux, telles que l'initialisation des mots de passe, la définition des noms d'hôte et l'exécution de scripts personnalisés. Si une image personnalisée que vous créez sur site ne dispose pas de cloud-init et doit être migrée vers le cloud, vous devez installer manuellement cloud-init. Dans le cas contraire, les instances ECS créées à partir de l'image personnalisée ne peuvent pas effectuer automatiquement les tâches d'initialisation, telles que la définition des noms d'hôte et la configuration des réseaux, ce qui affecte l'efficacité du déploiement et de la configuration automatisés. Cette rubrique décrit comment installer cloud-init sur les systèmes d'exploitation Linux.

Pour plus d'informations sur cloud-init, consultez la documentation officielle de cloud-init.

Scénarios

Toutes les images publiques Alibaba Cloud sont livrées avec cloud-init installé par défaut. Pour garantir que les instances ECS créées à partir de vos images personnalisées sur site puissent initialiser automatiquement les configurations système, nous vous recommandons de suivre les suggestions ci-dessous et d'effectuer les opérations correspondantes en fonction de votre situation réelle.

  • Serveurs Linux à migrer vers le cloud sans cloud-init installé

    Si votre serveur doit être migré vers Alibaba Cloud mais ne dispose pas de cloud-init, installez cloud-init avant la migration afin de garantir que les nouvelles instances ECS puissent effectuer automatiquement les tâches d'initialisation au démarrage.

    Remarque

    Pour les serveurs qui ne doivent pas être migrés vers le cloud, l'installation de cloud-init peut introduire une complexité ou une utilisation des ressources inutile. Décidez s'il convient d'installer cloud-init en fonction de votre environnement réel.

  • Serveurs Linux dont la version de cloud-init est antérieure à 0.7.9

    Les nouvelles versions de cloud-init contiennent généralement davantage de fonctionnalités et de correctifs pour assurer la compatibilité avec les dernières fonctionnalités de la plateforme cloud. Si la version de cloud-init sur votre serveur est ancienne, nous vous recommandons de mettre à niveau vers une version plus récente afin de garantir une compatibilité et une sécurité optimales.

  • Instances ECS exécutées sur Alibaba Cloud sans cloud-init installé

    Si votre instance ECS ne dispose pas de cloud-init, nous vous recommandons d'installer manuellement cloud-init à l'intérieur de l'instance afin de garantir qu'elle puisse compléter les configurations d'initialisation.

Étape 1 : Vérifier si vous devez installer ou mettre à niveau cloud-init

  1. Connectez-vous au serveur source.

  2. Exécutez les commandes suivantes pour vérifier si cloud-init est installé.

    Série CentOS

    rpm -qa | grep -i cloud-init 
    pip list | grep -i cloud-init

    Série Ubuntu

    dpkg -l | grep -i cloud-init 
    pip list | grep -i cloud-init
    • Si aucune sortie n'est renvoyée ou si la version est antérieure à 0.7.9 : Vous devez Étape 2 : Installer cloud-init.

      Important

      La version 0.7.9 est une première édition communautaire de cloud-init et ne peut pas être utilisée pour initialiser les instances ECS. Vous devez effectuer une mise à niveau vers une version ultérieure.

    • Si la version est 18 ou ultérieure : Vous n'avez pas besoin d'installer cloud-init. Toutefois, cloud-init configure automatiquement le réseau lors de l'initialisation de l'instance. Si la configuration par défaut ne répond pas à vos exigences, vous pouvez désactiver la fonctionnalité d'initialisation du réseau. Pour plus d'informations, consultez Désactiver l'initialisation automatique du réseau par Alibaba Cloud.

    • Si la version est 19.1.21 : Nous vous recommandons de mettre à niveau vers Alibaba Cloud cloud-init 23.2.2. Par rapport à Alibaba Cloud cloud-init 19.1.21, Alibaba Cloud cloud-init 23.2.2 offre les améliorations et fonctionnalités suivantes :

      • Si la version de cloud-init d'une instance est 23.2.2, l'instance prend en charge l'accès aux métadonnées en mode de renforcement de la sécurité. Pour plus d'informations sur les métadonnées d'instance, consultez Métadonnées d'instance.

      • Autres améliorations de fonctionnalités, améliorations des performances, corrections de bugs et contributions de la communauté. Pour plus d'informations, consultez le fichier ChangeLog.

    • Autres cas : Vous n'avez pas besoin d'installer cloud-init. Vous pouvez directement effectuer les opérations décrites dans Étapes suivantes.

  3. Pour éviter la perte de données causée par des opérations accidentelles lors de l'installation de cloud-init, nous vous recommandons de sauvegarder d'abord les données du serveur source, par exemple en créant des snapshots.

Étape 2 : Installer cloud-init

  • Alibaba Cloud cloud-init 23.2.2 : version recommandée. Cette version dépend de Python 3.6 ou ultérieur et utilise la source de données Aliyun.

  • Alibaba Cloud cloud-init 19.1.21 : cette version dépend de Python 3.6 ou ultérieur et utilise la source de données Aliyun.

  • Alibaba Cloud cloud-init 0.7.6a18 : cette version est requise pour certains systèmes d'exploitation plus anciens, tels que CentOS 6, Debian 9 et SUSE Linux Enterprise Server 12. Elle dépend de Python 2.7 et utilise la source de données Aliyun.

    Important

    La communauté Python a cessé le support technique de Python 2.7. Nous vous recommandons d'utiliser une version plus récente de cloud-init chaque fois que possible afin d'éviter les problèmes potentiels liés aux bibliothèques de dépendances.

  • cloud-init édition communautaire : l'édition communautaire de cloud-init est maintenue par la communauté. La dernière version d'Alibaba Cloud cloud-init est la 23.2.2. Si vous avez besoin d'une version plus récente de cloud-init, vous pouvez installer l'édition communautaire. Pour plus d'informations sur les versions, consultez le site officiel de cloud-init.

L'édition communautaire de cloud-init correspond à la version officielle du projet cloud-init, tandis qu'Alibaba Cloud cloud-init est optimisé pour la plateforme Alibaba Cloud et offre un meilleur support pour les services de cette plateforme. Par conséquent, nous vous recommandons d'utiliser Alibaba Cloud cloud-init. Choisissez l'édition de cloud-init à installer en fonction de vos besoins réels.

(Recommandé) Alibaba Cloud cloud-init 23.2.2

La dernière version d'Alibaba Cloud cloud-init est la 23.2.2. Cette version est distribuée sous forme de packages logiciels. Vous pouvez installer le package adapté à votre version de système d'exploitation ou procéder à l'installation depuis le package source.

Le tableau suivant répertorie les URL de téléchargement des packages logiciels pour chaque système d'exploitation :

Type de système d'exploitation

Version du système d'exploitation

Package binaire

Somme de contrôle MD5

Package source

Debian

12

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-8_all.deb.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-23.2.2-8.tar.gz

11

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian11/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian11/cloud-init_23.2.2-8_all.deb.md5sum

CentOS Stream

9

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-8.el9.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-8.el9.noarch.rpm.md5sum

8

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream8/cloud-init-23.2.2-8.el8.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream8/cloud-init-23.2.2-8.el8.noarch.rpm.md5sum

Fedora

42

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora42/cloud-init-23.2.2-8.fc42.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora42/cloud-init-23.2.2-8.fc42.noarch.rpm.md5sum

41

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora41/cloud-init-23.2.2-8.fc41.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora41/cloud-init-23.2.2-8.fc41.noarch.rpm.md5sum

40

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora40/cloud-init-23.2.2-8.fc40.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora40/cloud-init-23.2.2-8.fc40.noarch.rpm.md5sum

39

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora39/cloud-init-23.2.2-8.fc39.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora39/cloud-init-23.2.2-8.fc39.noarch.rpm.md5sum

38

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora38/cloud-init-23.2.2-8.fc38.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora38/cloud-init-23.2.2-8.fc38.noarch.rpm.md5sum

AlmaLinux

9

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux9/cloud-init-23.2.2-8.el9.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux9/cloud-init-23.2.2-8.el9.noarch.rpm.md5sum

8

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux8/cloud-init-23.2.2-8.el8.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux8/cloud-init-23.2.2-8.el8.noarch.rpm.md5sum

Rocky Linux

9

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux9/cloud-init-23.2.2-8.el9.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux9/cloud-init-23.2.2-8.el9.noarch.rpm.md5sum

8

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux8/cloud-init-23.2.2-8.el8.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux8/cloud-init-23.2.2-8.el8.noarch.rpm.md5sum

Ubuntu

24

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu24/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu24/cloud-init_23.2.2-8_all.deb.md5sum

22

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu22/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu22/cloud-init_23.2.2-8_all.deb.md5sum

20

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu20/cloud-init_23.2.2-8_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu20/cloud-init_23.2.2-8_all.deb.md5sum

Les exemples suivants montrent comment installer cloud-init en téléchargeant et en installant les packages binaires sur Debian 12 et CentOS Stream 9.

Debian 12

  1. Exécutez la commande suivante pour télécharger le package cloud-init.

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-8_all.deb
  2. Exécutez la commande suivante pour installer le package.

    sudo apt-get install -y ./cloud-init_23.2.2-8_all.deb
  3. (Facultatif) Pour empêcher la mise à jour ou la mise à niveau du package vers une version open source plus récente, nous vous recommandons d'exécuter la commande suivante afin de figer la version du package cloud-init.

    sudo apt-mark hold cloud-init
  4. Exécutez la commande suivante pour vérifier si la version de cloud-init correspond à celle attendue.

    cloud-init --version

CentOS Stream 9

  1. Exécutez la commande suivante pour télécharger le package cloud-init.

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-8.el9.noarch.rpm
  2. Exécutez la commande suivante pour installer le package.

    sudo yum install -y ./cloud-init-23.2.2-8.el9.noarch.rpm
  3. (Facultatif) Pour empêcher la mise à jour ou la mise à niveau du package vers une version open source plus récente, nous vous recommandons d'exécuter la commande suivante afin de figer la version du package cloud-init.

    sudo sh -c 'echo "exclude=cloud-init" >> /etc/dnf/dnf.conf'
  4. Exécutez la commande suivante pour vérifier si la version de cloud-init correspond à celle attendue.

    cloud-init --version
Remarque

Par défaut, Alibaba Cloud cloud-init 23.2.2 ne mappe plus le nom d'hôte à private-ipv4 dans le fichier /etc/hosts. Si votre activité nécessite cette configuration, configurez-la manuellement. Les systèmes d'exploitation plus récents implémentent la connectivité du nom d'hôte via le composant nss-myhostname, fourni par le package systemd-libs (série Red Hat) ou le package libnss-myhostname (série Debian) et activé via le fichier de configuration /etc/nsswitch.conf. Pour plus d'informations, consultez le manuel nss-myhostname.

Alibaba Cloud cloud-init 19.1.21

  1. Assurez-vous que la bibliothèque de dépendances Python PIP est installée sur le serveur source.

    Les exemples suivants présentent les commandes utilisées pour installer la bibliothèque de dépendances python3-pip sur certaines distributions Linux.

    CentOS/Red Hat Enterprise Linux

    sudo yum -y install python3-pip

    Ubuntu/Debian

    sudo apt-get -y install python3-pip

    OpenSUSE/SUSE

    sudo zypper -n install python3-pip
  2. Exécutez la commande suivante pour télécharger Alibaba Cloud cloud-init.

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
  3. Exécutez la commande suivante pour décompresser le package d'installation de cloud-init dans le répertoire actuel.

    tar -zxvf cloud-init-19.1.21.tgz
  4. Accédez au répertoire cloud-init et installez les bibliothèques de dépendances.

    cd ./cloud-init-19.1.21
    pip3 install -r ./requirements.txt
  5. Accédez au répertoire tools de cloud-init.

    cd ./tools
  6. Exécutez la commande suivante pour lancer le script deploy.sh qui installe cloud-init.

    sudo bash ./deploy.sh <issue> <major_version>

    Le tableau suivant décrit les paramètres et les valeurs d'exemple du script deploy.sh :

    Paramètre

    Description

    Exemple

    <issue>

    Type de plateforme du système d'exploitation. Valeurs valides : centos | redhat |rhel | debian | ubuntu | opensuse | sles. Les valeurs sont sensibles à la casse. sles indique SUSE/SLES.

    Remarque

    Si le système d'exploitation est CentOS Stream, sélectionnez centos comme type de plateforme du système d'exploitation.

    centos

    <major_version>

    Numéro de version majeure de la plateforme du système d'exploitation.

    Remarque

    Ubuntu 14 ne prend pas en charge Alibaba Cloud cloud-init 19.1.21.

    Le numéro de version majeure de CentOS 7.6 est 7

    Par exemple, si votre système d'exploitation est CentOS 7, exécutez la commande sudo bash ./deploy.sh centos 7.

  7. Vérifiez si cloud-init est installé.

    Si "description": "success" est renvoyé, l'installation a réussi.

    {
      "status_code": 0,
      "description": "success"
    }
  8. Exécutez la commande suivante pour vérifier si la version de cloud-init correspond à celle attendue.

    cloud-init --version

Les scripts shell d'exemple ci-dessous illustrent la procédure d'installation de cloud-init Alibaba Cloud sur différentes distributions Linux. Adaptez ces scripts à votre système d'exploitation avant de lancer l'installation.

CentOS 7/8

# Check and install python3-pip
if ! python3 -c 'import setuptools' >& /dev/null; then
  yum -y install python3-pip
fi
# Back up the earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress Alibaba Cloud cloud-init
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install cloud-init
issue_major=$( cat /etc/redhat-release | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh centos "$issue_major"

Red Hat Enterprise Linux 7/8

# Check and install python3-pip
if ! python3 -c 'import setuptools' >& /dev/null; then
  yum -y install python3-pip
fi
# Back up the earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress Alibaba Cloud cloud-init
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install cloud-init
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh rhel "$issue_major"

Ubuntu 16/18/20

# Check and install python3-pip
if ! python3 -c 'import setuptools' >& /dev/null; then
  apt-get install python36 python3-pip -y
fi
# Back up the earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress Alibaba Cloud cloud-init
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install cloud-init
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh ubuntu "$issue_major"

Debian 9/10

# Check and install python3-pip
if ! python3 -c 'import setuptools' >& /dev/null; then
  apt-get -y install python3-pip
fi
# Back up the earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress Alibaba Cloud cloud-init
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install cloud-init
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh debian "$issue_major"

SUSE 12/15

# Check and install python3-pip
if ! python3 -c 'import setuptools'>& /dev/null; then
  zypper -n install python3-pip
fi
# Back up the earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress Alibaba Cloud cloud-init
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install cloud-init
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh sles "$issue_major"

OpenSUSE 15

# Check and install python3-pip
if ! python3 -c 'import setuptools'>& /dev/null; then
  zypper -n install python3-pip
fi
# Back up the earlier version of cloud-init
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress Alibaba Cloud cloud-init
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install cloud-init
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh opensuse "$issue_major"

Alibaba Cloud cloud-init 0.7.6a18

Remarque

Les images publiques Alibaba Cloud pour CentOS 6, Debian 9 et SUSE Linux Enterprise Server 12 intègrent par défaut cloud-init-0.7.6a18. Pour effectuer des tests, commencez par sauvegarder le fichier de configuration en exécutant la commande sudo mv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bak.

  1. Vérifiez que le système d'exploitation est bien CentOS 6, Debian 9 ou SUSE Linux Enterprise Server 12 en exécutant la commande suivante :

    cat /etc/issue
  2. Assurez-vous que la bibliothèque de dépendances Python PIP est installée sur le serveur source.

    Les exemples ci-dessous présentent les commandes d'installation de la bibliothèque de dépendances Python2-pip.

    CentOS 6/SUSE Linux Enterprise Server 12

    sudo yum -y install python2-pip

    Debian 9

    sudo apt-get -y install python2-pip
  3. Téléchargez et décompressez Alibaba Cloud cloud-init 0.7.6a18 en exécutant les commandes suivantes :

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloud-init-0.7.6a18.tgz
    tar -zxvf cloud-init-0.7.6a18.tgz
  4. Accédez au répertoire tools de cloud-init.

    cd cloud-init-0.7.6a18/tools/
  5. Installez cloud-init en exécutant la commande suivante :

    sudo bash ./deploy.sh <issue> <major_version>

    Par exemple, pour un système d'exploitation CentOS 6, exécutez la commande sudo bash ./deploy.sh centos 6.

    Le tableau suivant détaille les paramètres et fournit des exemples de valeurs pour le script deploy.sh :

    Paramètre

    Description

    Exemple

    <issue>

    Type de plateforme du système d'exploitation. Valeurs possibles : centos

    debian

    sles. Les valeurs sont sensibles à la casse. sles correspond à SUSE/SLES.

    centos

    <major_version>

    Numéro de version majeure de la plateforme du système d'exploitation.

    La version majeure de CentOS 6.5 est 6

  6. Vérifiez que la version de cloud-init correspond à vos attentes en exécutant la commande suivante :

    cloud-init --version

Community edition cloud-init

  1. Assurez-vous que Git, Python et la bibliothèque de dépendances Python PIP sont installés sur le serveur source.

    Les exemples ci-dessous présentent les commandes d'installation de Git, Python 3.6 et de la bibliothèque de dépendances Python3-pip sur certaines distributions Linux.

    CentOS/Red Hat Enterprise Linux

    sudo yum -y install git python36 python3-pip

    Ubuntu/Debian

    sudo apt-get -y install git python3 python3-pip

    OpenSUSE/SUSE

    sudo zypper -n install git python36 python3-pip
  2. Téléchargez le package source cloud-init via Git en exécutant la commande suivante :

    git clone https://git.launchpad.net/cloud-init
  3. Accédez au répertoire cloud-init.

    cd ./cloud-init
  4. Installez toutes les bibliothèques de dépendances en exécutant la commande suivante :

    sudo pip3 install -r ./requirements.txt
  5. Installez cloud-init en exécutant la commande suivante :

    python3 setup.py install
  6. Modifiez le fichier de configuration cloud.cfg.

    1. Ouvrez le fichier de configuration.

      sudo vi /etc/cloud/cloud.cfg

      Repérez la section cloud_init_modules: dans le fichier.

      # The top level settings are used as module
      # and system configuration.
      
      # A set of users which may be applied and/or used by various modules
      # when a 'default' entry is found it will reference the 'default_user'
      # from the distro configuration specified below
      users:
         - default
      
      # If this is set, 'root' will not be able to ssh in and they
      # will get a message to login instead as the default $user
      disable_root: true
      
      # This will cause the set+update hostname module to not operate (if true)
      preserve_hostname: false
      
      # Example datasource config
      # datasource:
      #    Ec2:
      #      metadata_urls: [ 'blah.com' ]
      #      timeout: 5 # (defaults to 50 seconds)
      #      max_wait: 10 # (defaults to 120 seconds)
      
      # The modules that run in the 'init' stage
      cloud_init_modules:
    2. Remplacez les configurations situées avant cloud_init_modules: par le contenu suivant :

      # Example datasource config
      # The top level settings are used as module
      # and system configuration.
      # A set of users which may be applied and/or used by various modules
      # when a 'default' entry is found it will reference the 'default_user'
      # from the distro configuration specified below
      users:
         - default
      user:
          name: root
          lock_passwd: False
      # If this is set, 'root' will not be able to ssh in and they 
      # will get a message to login instead as the above $user
      disable_root: false
      # This will cause the set+update hostname module to not operate (if true)
      preserve_hostname: false
      syslog_fix_perms: root:root
      datasource_list: [ AliYun ]
      # Example datasource config
      datasource:
          AliYun:
              support_xen: false
              timeout: 5 # (defaults to 50 seconds)
              max_wait: 60 # (defaults to 120 seconds)
      #      metadata_urls: [ 'blah.com' ]
      # The modules that run in the 'init' stage
      cloud_init_modules:
  7. Vérifiez que la version de cloud-init correspond à vos attentes en exécutant la commande suivante :

    cloud-init --version

(Facultatif) Étape 3 : Configurer cloud-init

Désactiver l'initialisation automatique du réseau par Alibaba Cloud

À partir de la version 18, cloud-init initialise automatiquement la configuration réseau. La configuration réseau générée automatiquement est BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no. Si la configuration réseau par défaut ne répond pas à vos besoins métier, personnalisez-la en modifiant le fichier de configuration cloud-init selon la procédure suivante.

  1. Ouvrez le fichier de configuration cloud-init par défaut en exécutant la commande suivante, puis appuyez sur i pour passer en mode insertion.

    sudo vim /etc/cloud/cloud.cfg
  2. Ajoutez la configuration disabled avant Example datasource config afin de désactiver la fonctionnalité de configuration réseau automatique de cloud-init.

    network:
      config: disabled
    # This will cause the set+update hostname module to not operate (if true)
    preserve_hostname: true
    
    network:
      config: disabled
    
    # If you use datasource_list array, keep array items in a single line.
    # If you use multi line array, ds-identify script won't read array items.
    
    datasource_list: [ AliYun ]
    
    # Example datasource config
    datasource:
        AliYun:
            timeout: 5
            max_wait: 300

    Une fois cette configuration ajoutée, cloud-init ne gère plus les fichiers de configuration réseau situés dans le répertoire /etc/sysconfig/network-scripts/, tels que ifcfg-eth0. Vous devez gérer ces fichiers manuellement.

  3. Appuyez sur la touche Esc, saisissez :wq, puis appuyez sur la touche Enter pour enregistrer et fermer le fichier de configuration.

  4. Personnalisez les configurations réseau dans le répertoire /etc/sysconfig/network-scripts/ selon vos besoins (adresse IP, masque de sous-réseau, passerelle, etc.).

Désactiver la configuration automatique du nom d'hôte par Alibaba Cloud

Par défaut, cloud-init définit automatiquement le nom d'hôte et met à jour le fichier /etc/hostname au démarrage de l'instance. Pour empêcher toute modification du nom d'hôte, modifiez le fichier de configuration cloud-init en suivant la procédure ci-dessous.

  1. Ouvrez le fichier de configuration cloud-init par défaut en exécutant la commande suivante, puis appuyez sur i pour passer en mode édition.

    sudo vim /etc/cloud/cloud.cfg
  2. Remplacez preserve_hostname: false par preserve_hostname: true dans le fichier de configuration.

    # This will cause the set+update hostname module to not operate (if true)
    preserve_hostname: true
  3. Appuyez sur la touche Esc, saisissez :wq, puis appuyez sur la touche Enter pour enregistrer et fermer le fichier de configuration.

Étapes suivantes

  • Pour migrer des serveurs Linux vers le cloud, utilisez Server Migration Center (SMC). Pour plus d'informations, consultez la rubrique Migrer des serveurs vers ECS.

  • Pour les instances ECS exécutant des images Linux personnalisées sur Alibaba Cloud, redémarrez le système afin de vérifier les résultats. Si le système configure automatiquement le nom d'hôte, le réseau et les paramètres NTP, cela signifie que cloud-init est installé. Par exemple, exécutez les commandes suivantes pour afficher le fichier de configuration réseau :

    sudo reboot
    cat /etc/sysconfig/network-scripts/ifcfg-eth0

    La sortie suivante indique que le système a automatiquement configuré les paramètres réseau (protocole DHCP, périphérique réseau, type de périphérique, etc.) via cloud-init.

    BOOTPROTO=dhcp
    DEVICE=eth0
    ONBOOT=yes
    STARTMODE=auto
    TYPE=Ethernet
    USERCTL=no

FAQ

  • Que faire si des bibliothèques de dépendances sont manquantes lors de l'installation de cloud-init avec Python 3 ?

    Les bibliothèques manquantes varient selon les images. Installez les bibliothèques requises via pip, puis relancez l'installation de cloud-init.

  • Que faire en cas d'exécution anormale de cloud-init avec un message d'erreur ?

    Des conflits de versions entre les bibliothèques de dépendances installées par le gestionnaire de packages par défaut du système (tel que yum) et celles installées par pip peuvent provoquer des dysfonctionnements de cloud-init. Nous vous recommandons de télécharger les bibliothèques de dépendances requises en vous basant sur les messages d'erreur.

    Message d'erreur

    Cause

    Commande de dépannage

    no setuptools module in python

    Le module python setuptools est manquant

    Exemple avec Python 3.6 :

    • CentOS/Red Hat : yum -y install python3-pip

    • Ubuntu/Debian : apt-get -y install python3-pip

    • OpenSUSE/SUSE : zypper -n install python3-pip

    File "/home/testuser/cloud-init/cloudinit/log.py", line 19, in <module>
          import six
      ImportError: No module named six  )

    La bibliothèque de dépendances six est manquante

    pip3 install six
    File "/home/testuser/cloud-init/cloudinit/url_helper.py", line 20, in <module>
          import oauthlib.oauth1 as oauth1
      ImportError: No module named oauthlib.oauth1  )

    La bibliothèque de dépendances oauthlib est manquante

    pip3 install oauthlib

    Le message d'erreur n'indique pas quelle bibliothèque de dépendances est manquante

    Le message d'erreur n'est pas répertorié

    En vous basant sur les bibliothèques listées dans le fichier requirements.txt de cloud-init, exécutez la commande suivante pour installer toutes les bibliothèques de dépendances :

    pip3 install -r requirements.txt
  • Que faire si une nouvelle version de Python 3 installée sur l'instance provoque un dysfonctionnement de cloud-init ?

    Si vous installez une nouvelle version de Python 3 (par exemple Python 3.9) sur l'instance et la définissez comme version par défaut (en créant un lien symbolique, par exemple ln -s /usr/bin/python3,9 /usr/bin/python3), cloud-init peut dysfonctionner. Par exemple, l'exécution de cloud-init --version renvoie l'erreur suivante :

    $cloud-init --version
    Traceback (most recent call last):
      File "/usr/local/bin/cloud-init", line 33, in <module>
        sys.exit(load_entry_point('cloud-init==19.1.9', 'console_scripts', 'cloud-init')())
      File "/usr/local/bin/cloud-init", line 22, in importlib_load_entry_point
        for entry_point in distribution(dist_name).entry_points
      File "/usr/lib64/python3.9/importlib/metadata.py", line 524, in distribution
        return Distribution.from_name(distribution_name)
      File "/usr/lib64/python3.9/importlib/metadata.py", line 187, in from_name
        raise PackageNotFoundError(name)
    importlib.metadata.PackageNotFoundError: cloud-init

    Vous pouvez résoudre ce problème en appliquant l'une des méthodes suivantes :

    • Méthode 1 : Réinstallez cloud-init en utilisant la nouvelle version de Python 3.

    • Méthode 2 : Modifiez le fichier exécutable cloud-init pour changer le chemin de l'interpréteur Python vers la version précédente de Python 3. Prenons Python 3.6 comme exemple. Suivez les étapes ci-dessous pour modifier l'interpréteur dans le fichier exécutable cloud-init :

      1. Ouvrez le fichier cloud-init en exécutant la commande suivante.

        vim   /usr/local/bin/cloud-init
      2. Appuyez sur i pour passer en mode édition, et remplacez le contenu après #! au début du fichier par le chemin de Python 3.6.

        Après modification, la ligne #! se présente comme suit :

        #!/usr/bin/python3.6
      3. Appuyez sur la touche Esc pour quitter le mode édition, saisissez :wq, puis appuyez sur Entrée pour enregistrer et quitter le fichier.

  • Que faire si les données utilisateur spécifiées dans les métadonnées de l'instance lors de la création ne s'exécutent pas ou échouent après l'installation de cloud-init ?

    1. Vérifiez la présence de user-data dans les métadonnées de l'instance en exécutant la commande suivante depuis l'instance.

      curl http://100.100.100.200/latest/user-data

      Description du résultat :

      • Si user-data est défini, les informations correspondantes sont renvoyées. Passez à l'étape suivante pour le dépannage.

      • Si aucune information n'est renvoyée, user-data n'est pas défini.

    2. Utilisez les méthodes suivantes pour déterminer pourquoi user-data ne s'exécute pas ou échoue lors de son exécution.

      • Vérifiez que le format de user-data est correct.

        L'exécution de user-data est assurée par cloud-init. Vous devez vous assurer que le format des données est valide. Par exemple, la première ligne de user-data doit commencer par #!. Pour plus d'informations, reportez-vous à la rubrique Personnaliser les configurations d'initialisation des instances.

      • Examinez les résultats d'exécution de user-data dans le fichier journal de cloud-init /var/log/cloud-init.log et résolvez le problème en vous basant sur les messages d'erreur.

        L'exemple suivant illustre les informations enregistrées dans le fichier journal :

         util.py[DEBUG]: Running command ['/var/lib/cloud/instance/scripts/part-001'] with allowed return codes [0] (shell=False, capture=False)
      • Consultez la sortie standard et la sortie d'erreur standard du processus d'exécution de user-data.

        Dans systemd, l'outil d'initialisation du système Linux, user-data est exécuté par le service système cloud-final.service. Exécutez la commande suivante pour afficher la sortie standard et la sortie d'erreur standard du processus d'exécution de user-data, puis analysez les résultats pour résoudre le problème.

        journalctl -u cloud-final.service
      • Si aucune des méthodes précédentes ne permet d'identifier la raison pour laquelle user-data ne s'exécute pas ou échoue, nous vous recommandons de copier le contenu de user-data sur un hôte local pour le déboguer et vérifier s'il s'exécute correctement.

  • Que faire si les configurations d'initialisation du système et les scripts de données utilisateur de l'instance ne s'exécutent pas comme prévu après l'installation de cloud-init ?

    1. Exécutez les commandes suivantes pour vérifier si les quatre services cloud-init sont configurés pour démarrer au lancement du système.

      systemctl is-enabled cloud-init-local.service
      systemctl is-enabled cloud-init.service
      systemctl is-enabled cloud-config.service
      systemctl is-enabled cloud-final.service

      Si un message d'erreur ou la valeur disabled est renvoyée, cela signifie que cloud-init n'est pas configuré pour démarrer automatiquement au lancement du système.

    2. Exécutez les commandes suivantes pour configurer cloud-init afin qu'il démarre au lancement du système.

      systemctl enable cloud-init-local.service
      systemctl enable cloud-init.service
      systemctl enable cloud-config.service
      systemctl enable cloud-final.service
  • Que faire si la partition racine n'est pas automatiquement étendue à l'intérieur de l'instance après avoir augmenté la taille du disque système lors de la création de l'instance ?

    L'extension automatique des partitions pour les instances Linux est prise en charge par cloud-init. Assurez-vous que l'outil growpart est installé sur le système et que le fichier cloud.cfg est correctement configuré.

    1. Exécutez la commande suivante pour vérifier si l'outil growpart est installé sur le système.

      which growpart
    2. (Si nécessaire) Si l'outil n'est pas installé, exécutez les commandes suivantes pour installer growpart.

      • Série RHEL :

        sudo yum -y install cloud-utils-growpart
      • Série Debian :

        sudo apt -y install cloud-guest-utils
    3. Exécutez la commande suivante pour vérifier si le contenu ci-dessous figure dans le fichier /etc/cloud/cloud.cfg.

      cat /etc/cloud/cloud.cfg

      Assurez-vous que la fréquence d'exécution de growpart et de resizefs est définie sur once-per-instance :

      # The modules that run in the 'init' stage
      cloud_init_modules:
       - migrator
       - source-address
       - pip-source
       - seed_random
       - bootcmd
       - write-files
       - [ growpart, once-per-instance ]
       - [ resizefs, once-per-instance ]
       - set_hostname
       - update_hostname
       - update_etc_hosts
       - rsyslog
       - users-groups
       - ssh
    4. (Si nécessaire) Si ce contenu est absent, ajoutez-le au fichier /etc/cloud/cloud.cfg.

  • Que faire si le nouveau nom d'hôte ne prend pas effet après sa mise à jour dans la console et le redémarrage d'une instance ECS dont la version de cloud-init est antérieure ou égale à 0.7.6a16 ?

    • Description du problème

      Après avoir mis à jour le nom d'hôte dans la console ECS et redémarré l'instance ECS, le nouveau nom d'hôte n'est pas appliqué. Lorsque vous exécutez la commande cloud-init --version, la version de cloud-init est 0.7.6a16 ou une version antérieure.

    • Cause

      Lorsque cloud-init met à jour le nom d'hôte via le module update_hostname, il exécute la commande hostname pour obtenir le nom d'hôte actuel du système, lit le fichier /var/lib/cloud/data/previous-hostname pour récupérer le nom d'hôte stocké dans le cache de données de cloud-init, puis vérifie la cohérence entre les deux valeurs. Si elles correspondent, le nom d'hôte est mis à jour. En cas d'incohérence, cloud-init suppose que le nom d'hôte a été modifié manuellement et n'effectue pas la mise à jour.

      Sur les systèmes d'exploitation de la série Red Hat, les sauts de ligne du fichier /var/lib/cloud/data/previous-hostname sont traités lors de la lecture du fichier, mais la sortie de la commande hostname ne subit pas ce traitement. Par conséquent, les deux résultats diffèrent et le nom d'hôte n'est pas mis à jour.

    • Solution

      Vous pouvez appliquer l'une des solutions suivantes pour résoudre ce problème :

      • Mettez à niveau la version de cloud-init. Pour plus d'informations, reportez-vous à l'étape Étape 2 : Installer cloud-init.

        • Si vous utilisez CentOS 6 ou une version antérieure, utilisez cloud-init 0.7.6a18.

        • Si vous utilisez CentOS 7, utilisez cloud-init 19.1.21.

        • Si vous utilisez CentOS 8 ou une version ultérieure, nous vous recommandons d'utiliser cloud-init 23.2.2 ou une version ultérieure.

      • Traitez manuellement le saut de ligne.

        Modifiez manuellement le fichier cloud-init défectueux cloudinit/distros/rhel.py (obtenez le chemin du fichier en exécutant la commande find / -name rhel.py). Reportez-vous au commit distros/rhel.py: _read_hostname() missing strip on "hostname" pour traiter le saut de ligne dans la sortie de la commande hostname. L'exemple suivant montre comment effectuer ce traitement :

        diff --git a/cloudinit/distros/rhel.py b/cloudinit/distros/rhel.py
        index 0b68414e..65176e99 100644
        --- a/cloudinit/distros/rhel.py
        +++ b/cloudinit/distros/rhel.py
        @@ -143,6 +143,7 @@ class Distro(distros.Distro):
                     return util.load_file(filename).strip()
                 elif self.uses_systemd():
                     (out, _err) = util.subp(['hostname'])
        +            out = out.strip()
                     if len(out):
                         return out
                     else: