Instalación de Cloud-Init
Escenarios
Para asegurarse de que puede usar la función de inyección de datos de usuario para inyectar información personalizada inicial en los ECS creados a partir de una imagen privada (como configurar la ECS contraseña de inicio de sesión), instale Cloud-Init en el ECS utilizado para crear la imagen.
- Es necesario descargar Cloud-Init desde su sitio web oficial. Por lo tanto, debe vincular una EIP al ECS.
- Si Cloud-Init no está instalado, no puede configurar un ECS. Como resultado, solo puede usar la contraseña del archivo de imagen para iniciar sesión en los ECS creados.
- De forma predeterminada, los ECS creados a partir de una imagen pública tienen Cloud-Init instalado. No es necesario instalar o configurar Cloud-Init en dichos ECS.
- Para los ECS creados con un archivo de imagen externo, instale y configure Cloud-Init realizando las operaciones de esta sección. Para ver cómo configurar Cloud-Init, consulte Configuración de Cloud-Init.
Cloud-Init es un software de código abierto. Si la versión instalada tiene vulnerabilidades de seguridad, se recomienda actualizarla a la versión más reciente.
Prerrequisitos
- Una EIP ha sido vinculada al ECS.
- Ha iniciado sesión en el ECS.
- El modo de obtención de la dirección IP del ECS es DHCP.
Procedimiento
- Comprueba si se ha instalado Cloud-Init.
Para obtener más información, véase Comprobar si se ha instalado Cloud-Init.
- Instale Cloud-Init.
Puede instalar Cloud-Init de cualquiera de las siguientes maneras: (Recomendado) Instalar Cloud-Init usando el paquete de instalación oficial, Instalar Cloud-Init usando el paquete oficial de código fuente y pip y Instalar Cloud-Init usando el código fuente oficial de GitHub.
Comprobar si se ha instalado Cloud-Init
Realice las operaciones proporcionadas aquí para comprobar si se ha instalado Cloud-Init. Los métodos para comprobar si Cloud-Init está instalado varían en función de los sistemas operativos.
- Si se encuentra en un entorno de Python 3, ejecute el siguiente comando para comprobar si Cloud-Init está instalado (Ubuntu22.0.4 se usa como ejemplo):
- Si se muestra información similar a la siguiente, se ha instalado Cloud-Init:
/usr/bin/cloud-init
- Si se muestra información similar a la siguiente, Cloud-Init no está instalado:
/usr/bin/which: no cloud-init in (/usr/local/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin)
- Si se muestra información similar a la siguiente, se ha instalado Cloud-Init:
- Si estás en un entorno de Python 2, ejecuta el siguiente comando para comprobar si Cloud-Init está instalado (CentOS 6 se usa como ejemplo):
- Si se muestra información similar a la siguiente, se ha instalado Cloud-Init:
cloud-init-0.7.5-10.el6.centos.2.x86_64
- Si no se devuelve ninguna información, Cloud-Init no está instalado.
Para confirmar que Cloud-Init realmente no está instalado, se recomienda ejecutar rpm -qa |grep cloud-init para comprobar de nuevo. Si cualquiera de which cloud-init y rpm -qa |grep cloud-init muestra que Cloud-Init se ha instalado, Cloud-Init está instalado.
- Si se muestra información similar a la siguiente, se ha instalado Cloud-Init:
- Compruebe si se utiliza el certificado SSH en el sistema operativo ECS. Si el certificado ya no se utiliza, elimínelo.
- Si el certificado se almacena en un directorio de usuario root, por ejemplo, /$path/$to/$root/.ssh/autorized_keys, ejecute los siguientes comandos:
cd /root/.ssh
rm authorized_keys
- Si el certificado no está almacenado en un directorio de usuario root, por ejemplo, /$path/$to/$none-root/.ssh/autorized_keys, ejecute los siguientes comandos:
cd /home/centos/.ssh
rm authorized_keys
- Si el certificado se almacena en un directorio de usuario root, por ejemplo, /$path/$to/$root/.ssh/autorized_keys, ejecute los siguientes comandos:
- Ejecute el siguiente comando para eliminar la caché generada por Cloud-Init y asegúrese de que la ECS creada a partir de la imagen privada se puede iniciar con el certificado:
No reinicie el ECS después de realizar la configuración. De lo contrario, necesita configurarlo de nuevo.
(Recomendado) Instalar Cloud-Init usando el paquete de instalación oficial
El método de instalación de Cloud-Init en un ECS varía dependiendo del sistema operativo. Realice las operaciones de instalación como usuario root.
A continuación se describe cómo instalar Cloud-Init en un ECS que ejecute SUSE Linux, CentOS, Fedora, Debian y Ubuntu. Para otros tipos de sistemas operativos, instale el tipo requerido de Cloud-Init. Por ejemplo, necesita instalar coreos-cloudinit en los ECS que ejecutan CoreOS.
- SUSE Linux
Rutas de acceso para obtener el paquete de instalación de Cloud-Init para SUSE Linux
https://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools/
http://download.opensuse.org/repositories/Cloud:/Tools/
Seleccione el paquete de instalación de repositorio necesario en las rutas proporcionadas.
Tome SUSE Enterprise Linux Server 12 como ejemplo. Realice los siguientes pasos para instalar Cloud-Init:
- Inicie sesión en el ECS utilizado para crear una imagen privada de Linux.
- Ejecute el siguiente comando para instalar el origen de instalación de red para SUSE Enterprise Linux Server 12:
zypper ar https://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools/SLE_12_SP3/Cloud:Tools.repo
- Ejecute el siguiente comando para actualizar el origen de instalación de red:
- Ejecute el siguiente comando para instalar Cloud-Init:
- Ejecute los siguientes comandos para habilitar Cloud-Init para que se inicie automáticamente al iniciar el sistema:
- SUSE 11
chkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final on
service cloud-init-local status; service cloud-init status; service cloud-config status; service cloud-final status
- SUSE 12 y openSUSE 12/13/42
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
Para SUSE y openSUSE, realice los siguientes pasos para deshabilitar el cambio dinámico del nombre de ECS:
- Ejecute el siguiente comando para abrir el archivo dhcp usando el editor vi:
vi etc/sysconfig/network/dhcp
- Cambie el valor de DHCLIENT_SET_HOSTNAME en el archivo dhcp a no.
- SUSE 11
- CentOS
Tabla 1 enumera las rutas de instalación de Cloud-Init para CentOS. Seleccione el paquete de instalación requerido en las siguientes direcciones.
Tabla 1 Direcciones del paquete de instalación de Cloud-Init Tipo de sistema operativo
Versión
Cómo obtenerlo
CentOS
6 32-bit
6 64-bit
https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/
7 64-bit
https://archives.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/e/
- Ejecute los siguientes comandos para instalar Cloud-Init:
yum install Cloud-Init installation package address/epel-release-x-y.noarch.rpm
yum install cloud-init
La dirección del paquete de instalación de Cloud-Init indica la dirección del paquete de instalación de Cloud-Init epel-release, y x-y indica la versión de Cloud-Init epel-release requerida por el sistema operativo actual. Reemplácelos con los valores reales según Tabla 1.
- Tome CentOS 6 de 64 bits como ejemplo. Si la versión es 6.8, el comando es el siguiente:
yum install https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm
- Tome CentOS 7 de 64 bits como ejemplo. Si la versión es 7.14, el comando es el siguiente:
yum install https://archives.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm
- Tome CentOS 6 de 64 bits como ejemplo. Si la versión es 6.8, el comando es el siguiente:
- Ejecute los siguientes comandos para habilitar Cloud-Init para que se inicie automáticamente al iniciar el sistema:
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
- Ejecute los siguientes comandos para instalar Cloud-Init:
- Fedora
Antes de instalar Cloud-Init, asegúrese de que la dirección de origen de instalación de red se ha configurado para el sistema operativo comprobando si el archivo /etc/yum.repo.d/fedora.repo contiene la dirección de origen de instalación del paquete de software. Si el archivo no contiene la dirección, configure la dirección siguiendo las instrucciones en el sitio web oficial de Fedora.
- Ejecute el siguiente comando para instalar Cloud-Init:
- Ejecute los siguientes comandos para habilitar Cloud-Init para que se inicie automáticamente al iniciar el sistema:
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
- Debian y Ubuntu
Antes de instalar Cloud-Init, asegúrese de que la dirección de origen de instalación de red se ha configurado para el sistema operativo comprobando si el archivo /etc/apt/sources.list contiene la dirección de origen de instalación del paquete de software. Si el archivo no contiene la dirección, configure la dirección siguiendo las instrucciones en el sitio web oficial de Debian o Ubuntu.
- Ejecute los siguientes comandos para instalar Cloud-Init:
apt-get install cloud-init
- Ejecute los siguientes comandos para habilitar Cloud-Init para que se inicie automáticamente al iniciar el sistema:
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
Cloud-Init-23.2.2 se utiliza como ejemplo para describir cómo instalar Cloud-Init en CentOS, Fedora, Ubuntu, Debian y SUSE.
Descargue el paquete de código fuente cloud-init-23.2.2.tar.gz desde https://launchpad.net/cloud-init/trunk/23.2.2/+download/cloud-init-23.2.2.tar.gz.
- Ejecute los siguientes comandos para instalar Cloud-Init:
- Centos 7/Fedora Server 36
Asegúrese de que Python 3 se ha instalado.
- Comprueba si se ha instalado Cloud-Init. Si se muestra algún resultado de comando, se ha instalado Cloud-Init.
cloud-init -v
- Elimine el directorio de caché de Cloud-Init.
rm -rf /var/lib/cloud/*
- Instale paquetes de dependencias de Cloud-Init.
yum install python3-pip -y yum install python3-devel
- Descargue el paquete Cloud-Init.
wget https://launchpad.net/cloud-init/trunk/23.2.2/+download/cloud-init-23.2.2.tar.gz
- Descomprima el paquete Cloud-Init.
tar -zxvf cloud-init 23.2.2.tar.gz
- Vaya al directorio cloud-init-23.2.2 e instale bibliotecas dependientes:
cd cloud-init23.2.2 pip3 install -r requirements.txt
- Instale Cloud-Init.
python3 setup.py build python3 setup.py install --init-system system
- (Opcional) Deshabilite la capacidad de configuración de red de Cloud-Init modificando el archivo /etc/cloud/cloud.cfg.
vi /etc/cloud/cloud.cfg
Agregue el siguiente contenido al archivo:
network: config: disabled
- Reinicie Cloud-Init y compruebe su estado.
systemctl restart cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

- Habilite los servicios relacionados con Cloud-Init para que se inicien automáticamente al iniciar el sistema.
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
- Comprueba si Cloud-Init se está ejecutando correctamente.
cloud-init -v cloud-init init --local

- Comprueba si se ha instalado Cloud-Init. Si se muestra algún resultado de comando, se ha instalado Cloud-Init.
- Ubuntu22.0.4/Debian 11
Asegúrese de que Python 3 se ha instalado.
- Compruebe y elimine los archivos de configuración redundantes de Cloud-Init.
rm -rf /var/lib/cloud/* rm -f /var/log/cloud-init*
Elimine todos los archivos excepto los archivos de configuración relacionados con el registro del directorio /etc/cloud/cloud.cfg.d/.
- Actualice su lista de paquetes y compruebe si Wget está instalado. Si no lo es, instálelo.
sudo apt update sudo apt install wget
- Instale paquetes de dependencias.
apt-get install cloud-guest-utils -y apt-get install python3-pip -y apt-get install python3-devel
- Descargue el paquete Cloud-Init.
wget https://launchpad.net/cloud-init/trunk/23.2.2/+download/cloud-init-23.2.2.tar.gz
- Descomprima el paquete Cloud-Init.
tar -zxvf cloud-init 23.2.2.tar.gz
- Vaya al directorio cloud-init.
cd cloud-init
- Instalar bibliotecas dependientes.
pip3 install -r requirements.txt
- Instale Cloud-Init.
python3 setup.py install
-
(Opcional) Desactive la capacidad de configuración de red de Cloud-Init.
Debe hacerlo cuando la versión de Cloud-Init sea 0.7.9 o posterior y desee configurar la red.
1. Abra el archivo /etc/cloud/cloud.cfg.
vi /etc/cloud/cloud.cfg
2. Ingrese i y configure network. (Si no hay tal elemento de configuración, agréguelo.)
network: config: disabled
- Reinicie Cloud-Init y compruebe su estado.
systemctl restart cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
- Habilite los servicios relacionados con Cloud-Init para que se inicien automáticamente al iniciar el sistema.
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
- Comprueba si Cloud-Init se está ejecutando correctamente.
cloud-init -v cloud-init init --local
- Compruebe y elimine los archivos de configuración redundantes de Cloud-Init.
- SUSE Enterprise Linux Server 15
Asegúrese de que Python 3 se ha instalado.
- Vea repositorios de SUSE existentes.
zypper lr
- Elimine los repositorios de SUSE.
zypper rr No. of repositories listed in 1
- Configure un repositorio de SUSE.
zypper ar https://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools/SLE_15_SP4/Cloud:Tools.repo
- Actualice el repositorio de SUSE.
zypper refresh
- Instale Cloud-Init.
zypper install cloud-init
- Ejecuta cloud-init -v. Si se muestran mensajes de error similares a los siguientes, instale los paquetes de dependencias.

pip install requests pyyaml oauthlib jsonschema jsonpatch jinja2 configobj
- Comprueba si Cloud-Init se ha instalado correctamente. Si aparece el siguiente mensaje de error, configure datasource_list en /etc/cloud/cloud.cfg.
datasource_list: [ OpenStack ] datasource: OpenStack: metadata_urls: ['http://169.254.169.254'] max_wait: 120 timeout: 5 apply_network_config: false - Modifique el archivo de configuración, reinicie Cloud-Init y compruebe el estado de Cloud-Init.
systemctl restart cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
- Habilite los servicios relacionados con Cloud-Init para que se inicien automáticamente al iniciar el sistema.
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service

- Comprueba si Cloud-Init se está ejecutando correctamente.
cloud-init -v cloud-init init --local
- Vea repositorios de SUSE existentes.
Instalar Cloud-Init usando el paquete oficial de código fuente y pip
Las siguientes operaciones usan Cloud-Init 0.7.9 como ejemplo para describir cómo instalar Cloud-Init.
- Descargue el paquete de código fuente cloud-init-0.7.9.tar.gz (se recomienda la versión 0.7.9) y súbalo al directorio /home/ del ECS.
Descargue cloud-init-0.7.9.tar.gz desde la siguiente ruta:
https://launchpad.net/cloud-init/trunk/0.7.9/+download/cloud-init-0.7.9.tar.gz
- Cree un archivo pip.conf en el directorio ~/.pip/ y edite el siguiente contenido:
Si el directorio ~/.pip/ no existe, ejecute el comando mkdir ~/.pip para crearlo.
[global] index-url = https://<$mirror>/simple/ trusted-host = <$mirror>
Reemplace <$mirror> con un origen PyPI de red pública.
Fuente de PyPI de la red pública https://pypi.python.org/
- Ejecute el siguiente comando para instalar el paquete de código fuente de Cloud-Init descargado (seleccione --upgrade según sea necesario durante la instalación):
pip install [--upgrade] /home/cloud-init-0.7.9.tar.gz
Para obtener más información sobre cómo instalar un paquete de código fuente de Cloud-Init, consulte Documentación de Cloud-Init.
- Ejecute el comando cloud-init -v. Cloud-Init se instala correctamente si se muestra la siguiente información:
cloud-init 0.7.9
- Habilite Cloud-Init para que se inicie automáticamente al iniciar el sistema.
- Si el sistema operativo utiliza SysVinit para gestionar el inicio automático de los servicios, ejecute los siguientes comandos:
chkconfig --add cloud-init-local; chkconfig --add cloud-init; chkconfig --add cloud-config; chkconfig --add cloud-final
chkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final on
service cloud-init-local status; service cloud-init status; service cloud-config status; service cloud-final status
- Si el sistema operativo utiliza Systemd para gestionar el inicio automático de servicios, ejecute los siguientes comandos:
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
- Si el sistema operativo utiliza SysVinit para gestionar el inicio automático de los servicios, ejecute los siguientes comandos:
Si instalas Cloud-Init usando el paquete de código fuente oficial y pip, presta atención a lo siguiente:
- Agregar usuario syslog al grupo adm durante la instalación. Si existe usuario syslog, agréguelo al grupo adm. Para algunos sistemas operativos (como CentOS y SUSE), es posible que el usuario syslog no exista. Ejecute los siguientes comandos para crear usuario de syslog y agregarlo al grupo adm:
useradd syslog
groupadd adm
usermod -g adm syslog
- Cambie el valor de distro en system_info en el archivo /etc/cloud/cloud.cfg basado en la versión de lanzamiento del sistema operativo, como distro: ubuntu, distro: sles, distro: debian, y distro: fedora.
Instalar Cloud-Init usando el código fuente oficial de GitHub
Puede obtener el código fuente de Cloud-Init de GitHub en https://github.com/canonical/cloud-init/
- Ejecute los siguientes comandos para descargar el paquete de código fuente y copiarlo a la carpeta /tmp/CLOUD-INIT :
Cloud-Init 0.7.6: https://github.com/canonical/cloud-init/archive/refs/tags/0.7.6.zip
Cloud-Init 0.7.9: https://github.com/canonical/cloud-init/archive/refs/tags/0.7.9.zip
Todas las versiones: https://github.com/canonical/cloud-init/releases
wget https://github.com/canonical/cloud-init/archive/refs/tags/0.7.6.zip
mkdir /tmp/CLOUD-INIT
cp cloud-init-0.7.6.zip /tmp/CLOUD-INIT
cd /tmp/CLOUD-INIT
- Ejecute el siguiente comando para descomprimir el paquete:
- Ejecute el siguiente comando para ingresar a la carpeta cloud-init-0.7.6:
cd cloud-init-0.7.6
- (Opcional) Si la versión de Cloud-Init es 18.3 a 22.3, ejecute los siguientes comandos:
sed -i '/VALID_DMI_ASSET_TAGS =/a\VALID_DMI_ASSET_TAGS += ["HUAWEICLOUD"]' cloudinit/sources/DataSourceOpenStack.py
cat cloudinit/sources/DataSourceOpenStack.py | grep VALID_DMI_ASSET_TAGS
Si se muestra la siguiente información, la ejecución se realiza correctamente.

- Instale Cloud-Init. Los comandos varían según el tipo de sistema operativo.
- Para CentOS 6.x o SUSE 11.x, ejecute los siguientes comandos:
python setup.py install --init-system sysvinit
- Para CentOS 7.x o SUSE 12.x, ejecute los siguientes comandos:
python setup.py install --init-system systemd
Agregar usuario syslog al grupo adm durante la instalación. Si existe usuario syslog, agréguelo al grupo adm. Para algunos sistemas operativos (como CentOS y SUSE), es posible que el usuario syslog no exista. Ejecute los siguientes comandos para crear usuario de syslog y agregarlo al grupo adm:
useradd syslog
groupadd adm
usermod -g adm syslog
- Para CentOS 6.x o SUSE 11.x, ejecute los siguientes comandos:
- Habilite Cloud-Init para que se inicie automáticamente al iniciar el sistema.
- Si el sistema operativo utiliza SysVinit para gestionar el inicio automático de los servicios, ejecute los siguientes comandos:
chkconfig --add cloud-init-local; chkconfig --add cloud-init; chkconfig --add cloud-config; chkconfig --add cloud-final
chkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final on
service cloud-init-local status; service cloud-init status; service cloud-config status; service cloud-final status
- Si el sistema operativo utiliza Systemd para gestionar el inicio automático de servicios, ejecute los siguientes comandos:
systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service
- Si el sistema operativo utiliza SysVinit para gestionar el inicio automático de los servicios, ejecute los siguientes comandos:
- Ejecute los siguientes comandos para comprobar si se ha instalado Cloud-Init:
cloud-init init --local
Cloud-Init se instala correctamente si se muestra la siguiente información:
cloud-init 0.7.6