Todos os produtos
Search
Central de documentação

Elastic Compute Service:Instalar cloud-init

Última atualização: Sep 07, 2026

O cloud-init é uma ferramenta de inicialização de código aberto que oferece recursos de configuração inicial para sistemas operacionais Linux, como definição de senhas, configuração de nomes de host e execução de scripts personalizados. Se você criou uma imagem personalizada localmente sem o cloud-init instalado e precisa migrá-la para a nuvem, instale o cloud-init manualmente. Caso contrário, as instâncias ECS criadas a partir dessa imagem personalizada não conseguirão executar automaticamente tarefas de inicialização, como definir nomes de host e configurar redes, o que compromete a eficiência da implantação e configuração automatizadas. Este tópico descreve como instalar o cloud-init em sistemas operacionais Linux.

Para obter mais informações sobre o cloud-init, consulte a documentação oficial do cloud-init.

Cenários

Todas as imagens públicas da Alibaba Cloud já possuem o cloud-init instalado por padrão. Para garantir que as instâncias ECS criadas a partir das suas imagens personalizadas locais possam inicializar automaticamente as configurações do sistema, siga as orientações abaixo e execute as operações correspondentes conforme sua situação específica.

  • Servidores Linux a serem migrados para a nuvem sem o cloud-init instalado

    Se o seu servidor está programado para migração para a Alibaba Cloud, mas ainda não tem o cloud-init instalado, instale-o antes da migração. Isso garante que as novas instâncias ECS executem automaticamente as tarefas de inicialização na primeira execução.

    Nota

    Para servidores que não serão migrados para a nuvem, a instalação do cloud-init pode introduzir complexidade ou consumo de recursos desnecessários. Avalie se a instalação é adequada com base no seu ambiente real.

  • Servidores Linux com versão do cloud-init anterior à 0.7.9

    Versões mais recentes do cloud-init geralmente incluem novos recursos e correções que garantem compatibilidade com os recursos mais atuais da plataforma em nuvem. Se a versão do cloud-init no seu servidor for antiga, atualize-a para assegurar compatibilidade e segurança ideais.

  • Instâncias ECS em execução na Alibaba Cloud sem o cloud-init instalado

    Caso sua instância ECS não possua o cloud-init, instale-o manualmente dentro da instância para garantir que ela conclua todas as configurações de inicialização.

Etapa 1: Verificar a necessidade de instalar ou atualizar o cloud-init

  1. Faça login no servidor de origem.

  2. Execute os comandos a seguir para verificar se o cloud-init está instalado.

    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
    • Se nenhum resultado for retornado ou se a versão for anterior à 0.7.9: Execute a Etapa 2: Instalar o cloud-init.

      Importante

      A versão 0.7.9 é uma edição antiga da comunidade do cloud-init e não pode ser usada para inicializar instâncias ECS. É obrigatório atualizar para uma versão mais recente.

    • Se a versão for 18 ou superior: Não é necessário instalar o cloud-init. No entanto, ele configura a rede automaticamente durante a inicialização da instância. Caso a configuração padrão não atenda aos seus requisitos, desative o recurso de inicialização de rede. Para mais detalhes, consulte Desativar a inicialização automática de rede pela Alibaba Cloud.

    • Se a versão for 19.1.21: Atualize para o cloud-init da Alibaba Cloud versão 23.2.2. Em comparação com a versão 19.1.21, o cloud-init da Alibaba Cloud 23.2.2 oferece as seguintes melhorias e recursos:

      • Instâncias com a versão 23.2.2 do cloud-init suportam acesso a metadados no modo de reforço de segurança. Para mais informações sobre metadados de instância, consulte Metadados da instância.

      • Outras melhorias de recursos, otimizações de desempenho, correções de bugs e contribuições da comunidade. Para mais detalhes, veja o arquivo ChangeLog.

    • Demais casos: Não é necessário instalar o cloud-init. Prossiga diretamente com as operações descritas em Próximos passos.

  3. Para evitar perda de dados devido a operações acidentais durante a instalação do cloud-init, faça backup dos dados do servidor de origem antes de começar, por exemplo, criando snapshots.

Etapa 2: Instalar o cloud-init

  • Alibaba Cloud cloud-init 23.2.2: recomendado. Esta versão depende do Python 3.6 ou superior e utiliza a fonte de dados Aliyun.

  • Alibaba Cloud cloud-init 19.1.21: Esta versão depende do Python 3.6 ou superior e utiliza a fonte de dados Aliyun.

  • Alibaba Cloud cloud-init 0.7.6a18: Necessária para sistemas operacionais antigos específicos, como CentOS 6, Debian 9 e SUSE Linux Enterprise Server 12. Esta versão depende do Python 2.7 e utiliza a fonte de dados Aliyun.

    Importante

    A comunidade Python encerrou o suporte técnico para o Python 2.7. Sempre que possível, utilize uma versão mais recente do cloud-init para evitar problemas potenciais com bibliotecas de dependência.

  • Cloud-init da comunidade: A edição comunitária do cloud-init é mantida pela comunidade. A versão mais recente do cloud-init da Alibaba Cloud é a 23.2.2. Se precisar de uma versão superior, instale a edição da comunidade. Para mais informações sobre versões, visite o site oficial do cloud-init.

A edição comunitária do cloud-init é a versão oficial do projeto, enquanto o cloud-init da Alibaba Cloud é otimizado especificamente para a plataforma Alibaba Cloud, oferecendo melhor suporte aos services da plataforma. Por isso, use o cloud-init da Alibaba Cloud. Escolha a edição do cloud-init a ser instalada conforme suas necessidades reais.

(Recomendado) Alibaba Cloud cloud-init 23.2.2

A versão mais recente do cloud-init da Alibaba Cloud é a 23.2.2. Esta versão é mantida como pacotes de software. Instale o pacote adequado à versão do seu sistema operacional ou faça a instalação a partir do pacote de código-fonte.

A tabela a seguir lista as URLs de download dos pacotes de software para cada sistema operacional:

Tipo de sistema operacional

Versão do sistema operacional

Pacote binário

Checksum MD5SUM

Pacote de código-fonte

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

Os exemplos a seguir mostram como instalar o cloud-init baixando e instalando os pacotes binários no Debian 12 e no CentOS Stream 9.

Debian 12

  1. Baixe o pacote do cloud-init com o comando a seguir.

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-8_all.deb
  2. Instale o pacote com o comando a seguir.

    sudo apt-get install -y ./cloud-init_23.2.2-8_all.deb
  3. (Opcional) Para impedir que o pacote seja atualizado para uma versão open source mais recente, fixe a versão do pacote cloud-init executando o comando abaixo.

    sudo apt-mark hold cloud-init
  4. Verifique se a versão do cloud-init atende às suas expectativas com o comando a seguir.

    cloud-init --version

CentOS Stream 9

  1. Baixe o pacote do cloud-init com o comando a seguir.

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-8.el9.noarch.rpm
  2. Instale o pacote com o comando a seguir.

    sudo yum install -y ./cloud-init-23.2.2-8.el9.noarch.rpm
  3. (Opcional) Para impedir que o pacote seja atualizado para uma versão open source mais recente, fixe a versão do pacote cloud-init executando o comando abaixo.

    sudo sh -c 'echo "exclude=cloud-init" >> /etc/dnf/dnf.conf'
  4. Verifique se a versão do cloud-init atende às suas expectativas com o comando a seguir.

    cloud-init --version
Nota

Por padrão, o cloud-init da Alibaba Cloud 23.2.2 não mapeia mais o nome do host para private-ipv4 no arquivo /etc/hosts. Se o seu negócio exigir essa configuração, defina-a manualmente. Sistemas operacionais mais recentes implementam a conectividade de nome de host por meio do componente nss-myhostname, fornecido pelo pacote systemd-libs (série Red Hat) ou pelo pacote libnss-myhostname (série Debian), habilitado através do arquivo de configuração /etc/nsswitch.conf. Para mais informações, consulte o manual do nss-myhostname.

Alibaba Cloud cloud-init 19.1.21

  1. Certifique-se de que a biblioteca de dependências Python PIP esteja instalada no servidor de origem.

    Os exemplos a seguir mostram os comandos usados para instalar a biblioteca de dependências Python3-pip em algumas distribuições 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. Baixe o cloud-init da Alibaba Cloud com o comando a seguir.

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
  3. Descompacte o pacote de instalação do cloud-init no diretório atual com o comando a seguir.

    tar -zxvf cloud-init-19.1.21.tgz
  4. Acesse o diretório cloud-init e instale as bibliotecas de dependências.

    cd ./cloud-init-19.1.21
    pip3 install -r ./requirements.txt
  5. Acesse o diretório tools do cloud-init.

    cd ./tools
  6. Execute o script deploy.sh para instalar o cloud-init com o comando a seguir.

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

    A tabela a seguir descreve os parâmetros e valores de exemplo do script deploy.sh:

    Parâmetro

    Descrição

    Exemplo

    <issue>

    O tipo de plataforma do sistema operacional. Valores válidos: centos | redhat |rhel | debian | ubuntu | opensuse | sles. Os valores diferenciam maiúsculas de minúsculas. sles indica SUSE/SLES.

    Nota

    Se o sistema operacional for CentOS Stream, selecione centos como tipo de plataforma.

    centos

    <major_version>

    O número da versão principal da plataforma do sistema operacional.

    Nota

    O Ubuntu 14 não suporta o cloud-init da Alibaba Cloud 19.1.21.

    O número da versão principal do CentOS 7.6 é 7

    Por exemplo, se o seu sistema operacional for CentOS 7, execute o comando sudo bash ./deploy.sh centos 7.

  7. Verifique se o cloud-init foi instalado corretamente.

    Se "description": "success" for retornado, a instalação foi bem-sucedida.

    {
      "status_code": 0,
      "description": "success"
    }
  8. Verifique se a versão do cloud-init atende às suas expectativas com o comando a seguir.

    cloud-init --version

Os scripts shell de exemplo a seguir mostram como instalar o cloud-init da Alibaba Cloud em diferentes distribuições Linux. Ajuste os scripts conforme o seu sistema operacional antes da instalação.

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

Nota

As imagens públicas da Alibaba Cloud CentOS 6, Debian 9 e SUSE Linux Enterprise Server 12 possuem o cloud-init-0.7.6a18 instalado por padrão. Se precisar realizar testes, execute o comando sudo mv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bak para fazer backup do arquivo de configuração primeiro.

  1. Confirme que a versão do sistema operacional é CentOS 6, Debian 9 ou SUSE Linux Enterprise Server 12 com o comando a seguir.

    cat /etc/issue
  2. Certifique-se de que a biblioteca de dependências Python PIP esteja instalada no servidor de origem.

    Os exemplos a seguir mostram os comandos usados para instalar a biblioteca de dependências 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. Baixe e descompacte o cloud-init da Alibaba Cloud 0.7.6a18 com os comandos a seguir.

    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. Acesse o diretório tools do cloud-init.

    cd cloud-init-0.7.6a18/tools/
  5. Instale o cloud-init com o comando a seguir.

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

    Por exemplo, se o seu sistema operacional for CentOS 6, execute o comando sudo bash ./deploy.sh centos 6.

    A tabela a seguir descreve os parâmetros e valores de exemplo do script deploy.sh:

    Parâmetro

    Descrição

    Exemplo

    <issue>

    O tipo de plataforma do sistema operacional. Valores válidos: centos

    debian

    sles. Os valores diferenciam maiúsculas de minúsculas. sles indica SUSE/SLES.

    centos

    <major_version>

    O número da versão principal da plataforma do sistema operacional.

    O número da versão principal do CentOS 6.5 é 6

  6. Verifique se a versão do cloud-init atende às suas expectativas com o comando a seguir.

    cloud-init --version

Cloud-init da comunidade

  1. Certifique-se de que o git, o Python e a biblioteca de dependências Python PIP estejam instalados no servidor de origem.

    Os exemplos a seguir mostram os comandos usados para instalar o git, o Python 3.6 e a biblioteca de dependências Python3-pip em algumas distribuições 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. Baixe o pacote de código-fonte do cloud-init usando o git com o comando a seguir.

    git clone https://git.launchpad.net/cloud-init
  3. Acesse o diretório do cloud-init.

    cd ./cloud-init
  4. Instale todas as bibliotecas de dependências com o comando a seguir.

    sudo pip3 install -r ./requirements.txt
  5. Instale o cloud-init com o comando a seguir.

    python3 setup.py install
  6. Modifique o arquivo de configuração cloud.cfg.

    1. Abra o arquivo de configuração.

      sudo vi /etc/cloud/cloud.cfg

      Localize a seção cloud_init_modules: no arquivo.

      # 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. Altere as configurações antes de cloud_init_modules: para o conteúdo a seguir.

      # 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. Verifique se a versão do cloud-init atende às suas expectativas com o comando a seguir.

    cloud-init --version

(Opcional) Etapa 3: Configurar o cloud-init

Desativar a inicialização automática de rede pela Alibaba Cloud

Se a sua versão do cloud-init for 18 ou superior, ele inicializa automaticamente a configuração de rede. A rede configurada automaticamente é BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no. Caso a configuração de rede padrão não atenda aos requisitos do seu negócio, modifique o arquivo de configuração do cloud-init seguindo as operações abaixo para personalizar a rede.

  1. Abra o arquivo de configuração padrão do cloud-init com o comando a seguir e pressione i para entrar no modo de inserção.

    sudo vim /etc/cloud/cloud.cfg
  2. Adicione a configuração disabled antes de Example datasource config para desativar o recurso de configuração automática de rede do 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

    Após adicionar essa configuração, o cloud-init deixará de gerenciar os arquivos de configuração de rede no diretório /etc/sysconfig/network-scripts/, como o ifcfg-eth0. Gerencie esses arquivos manualmente.

  3. Pressione a tecla Esc, digite :wq e pressione a tecla Enter para salvar e fechar o arquivo de configuração.

  4. Personalize as configurações de rede no diretório /etc/sysconfig/network-scripts/ conforme suas necessidades, definindo endereço IP, máscara de sub-rede e gateway.

Desativar a configuração automática de nome de host pela Alibaba Cloud

Por padrão, o cloud-init define automaticamente o nome do host e atualiza o arquivo /etc/hostname quando a instância inicia. Se você não quiser que o nome do host seja modificado, altere o arquivo de configuração do cloud-init seguindo as operações abaixo.

  1. Abra o arquivo de configuração padrão do cloud-init com o comando a seguir e pressione i para entrar no modo de edição.

    sudo vim /etc/cloud/cloud.cfg
  2. Altere preserve_hostname: false no arquivo de configuração para preserve_hostname: true.

    # This will cause the set+update hostname module to not operate (if true)
    preserve_hostname: true
  3. Pressione a tecla Esc, digite :wq e pressione a tecla Enter para salvar e fechar o arquivo de configuração.

Próximos passos

  • Para servidores Linux que serão migrados para a nuvem, utilize o Server Migration Center (SMC) para realizar a migração. Para mais informações, consulte Migrar servidores para o ECS.

  • Para instâncias ECS que executam imagens personalizadas Linux na Alibaba Cloud, reinicie o sistema para verificar os resultados. Se o sistema configurar automaticamente o nome do host, a rede e as definições de NTP, significa que o cloud-init está instalado. Por exemplo, visualize o arquivo de configuração de rede com os comandos a seguir:

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

    A saída a seguir indica que o sistema configurou automaticamente as definições de rede, como protocolo DHCP, dispositivo de rede e tipo de dispositivo, por meio do cloud-init.

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

Perguntas frequentes

  • O que fazer se houver bibliotecas de dependências ausentes ao instalar o cloud-init usando Python 3?

    Imagens diferentes podem ter bibliotecas distintas faltando. Instale as bibliotecas ausentes usando o pip e tente instalar o cloud-init novamente.

  • O que fazer se o cloud-init apresentar funcionamento anormal e relatar uma mensagem de erro?

    Se o gerenciador de pacotes padrão do sistema (como yum) e o gerenciador pip tiverem instalado versões diferentes das mesmas bibliotecas de dependências, poderão ocorrer conflitos de versão, causando mau funcionamento do cloud-init. Baixe as bibliotecas de dependências necessárias com base nas mensagens de erro.

    Mensagem de erro

    Causa

    Comando de solução de problemas

    no setuptools module in python

    O módulo python setuptools está ausente

    Tomando o Python 3.6 como exemplo:

    • 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  )

    A biblioteca de dependências six está ausente

    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  )

    A biblioteca de dependências oauthlib está ausente

    pip3 install oauthlib

    A mensagem de erro não especifica a biblioteca de dependência ausente

    A mensagem de erro não está mapeada

    Com base nas bibliotecas listadas no arquivo requirements.txt do cloud-init, instale todas as bibliotecas de dependências com o comando:

    pip3 install -r requirements.txt
  • O que fazer se uma nova versão do Python 3 instalada na instância causar mau funcionamento do cloud-init?

    Se você instalar uma nova versão do Python 3 (como Python 3,9) na instância e defini-la como versão padrão (ou seja, criar um link simbólico para a nova versão do Python 3, por exemplo, ln -s /usr/bin/python3.9 /usr/bin/python3), o cloud-init instalado apresentará falhas. Por exemplo, ao executar cloud-init --version, o seguinte erro é relatado:

    $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

    Utilize um dos métodos a seguir para resolver esse problema:

    • Método 1: Reinstale o cloud-init usando a nova versão do Python 3.

    • Método 2: Modifique o arquivo executável do cloud-init para alterar o caminho do interpretador Python para a versão anterior do Python 3. Tomando o Python 3.6 como exemplo, siga as operações abaixo para modificar o interpretador no arquivo executável do cloud-init:

      1. Abra o arquivo cloud-init com o comando a seguir.

        vim   /usr/local/bin/cloud-init
      2. Pressione i para entrar no modo de edição e altere o conteúdo após #! no início do arquivo para o caminho do Python 3.6.

        Após a modificação, a linha #! ficará assim:

        #!/usr/bin/python3.6
      3. Pressione a tecla Esc para sair do modo de edição, digite :wq e pressione Enter para salvar e sair do arquivo.

  • O que fazer se os dados do usuário especificados nos metadados da instância durante a criação não forem executados ou falharem após a instalação do cloud-init?

    1. Verifique se existem user-data nos metadados da instância com o comando a seguir.

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

      Descrição do resultado da verificação:

      • Se o user-data estiver definido, as informações correspondentes serão retornadas. Prossiga para a próxima etapa de solução de problemas.

      • Se nenhuma informação for retornada, o user-data não está definido.

    2. Use os métodos a seguir para solucionar por que o user-data não foi executado ou falhou.

      • Verifique se o formato do user-data está correto.

        O cloud-init executa o user-data. Certifique-se de que o formato dos dados esteja correto. Por exemplo, a primeira linha do user-data deve começar com #!. Para mais informações, consulte Personalizar configurações de inicialização da instância.

      • Verifique os resultados da execução do user-data no arquivo de log do cloud-init /var/log/cloud-init.log e solucione o problema com base nas mensagens de erro.

        O exemplo a seguir mostra as informações registradas no arquivo de log:

         util.py[DEBUG]: Running command ['/var/lib/cloud/instance/scripts/part-001'] with allowed return codes [0] (shell=False, capture=False)
      • Visualize a saída padrão e a saída de erro padrão do processo de execução do user-data.

        No systemd, a ferramenta de inicialização do sistema Linux, o service de sistema cloud-final.service executa o user-data. Visualize a saída padrão e a saída de erro padrão do processo de execução do user-data e solucione o problema com base na saída usando o comando a seguir.

        journalctl -u cloud-final.service
      • Se nenhum dos métodos anteriores identificar o motivo pelo qual o user-data não foi executado ou falhou, copie o conteúdo do user-data para um host local para depuração, verificando se ele consegue ser executado com sucesso.

  • O que fazer se as configurações de inicialização do sistema e os scripts de dados do usuário da instância não forem executados conforme esperado após a instalação do cloud-init?

    1. Verifique se os quatro services do cloud-init estão configurados para iniciar junto com o sistema usando os comandos a seguir.

      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

      Se uma mensagem de erro ou disabled for retornado, o cloud-init não está configurado para iniciar com o sistema.

    2. Configure o cloud-init para iniciar junto com o sistema usando os comandos a seguir.

      systemctl enable cloud-init-local.service
      systemctl enable cloud-init.service
      systemctl enable cloud-config.service
      systemctl enable cloud-final.service
  • O que fazer se a partição raiz não for expandida automaticamente dentro da instância após eu expandir o disco do sistema durante a criação da instância?

    O cloud-init suporta a expansão automática de partições para instâncias Linux. Certifique-se de que a ferramenta growpart esteja instalada no sistema e que o arquivo cloud.cfg esteja configurado corretamente.

    1. Verifique se a ferramenta growpart está instalada no sistema com o comando a seguir.

      which growpart
    2. (Condicionalmente necessário) Se a ferramenta não estiver instalada, instale a ferramenta growpart com os comandos a seguir.

      • Série RHEL:

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

        sudo apt -y install cloud-guest-utils
    3. Verifique se o conteúdo abaixo existe no arquivo /etc/cloud/cloud.cfg com o comando a seguir.

      cat /etc/cloud/cloud.cfg

      Certifique-se de que a frequência de growpart e resizefs seja 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. (Condicionalmente necessário) Se o conteúdo não existir, adicione-o ao arquivo /etc/cloud/cloud.cfg.

  • O que fazer se o novo nome de host não entrar em vigor após eu atualizar o nome de host no console e reiniciar uma instância ECS cuja versão do cloud-init é 0.7.6a16 ou anterior?

    • Descrição do problema

      Após atualizar o nome de host no console ECS e reiniciar a instância ECS, o novo nome de host não é definido. Ao executar o comando cloud-init --version, a versão do cloud-init é 0.7.6a16 ou anterior.

    • Causa

      Quando o cloud-init atualiza o nome de host através do módulo update_hostname, ele executa o comando hostname para obter o nome de host atual do sistema, lê o arquivo /var/lib/cloud/data/previous-hostname para obter o nome de host no cache de dados do cloud-init e verifica se ambos são consistentes. Se forem consistentes, o nome de host é atualizado. Se forem inconsistentes, o cloud-init assume que o nome de host foi modificado manualmente e não realiza a atualização.

      Em sistemas operacionais da série Red Hat, a quebra de linha no arquivo /var/lib/cloud/data/previous-hostname é processada quando o arquivo é lido, mas a saída do comando hostname não passa pelo mesmo tratamento de quebras de linha. Como resultado, os dois valores tornam-se inconsistentes e o nome de host não é atualizado.

    • Solução

      Utilize uma das soluções a seguir para resolver este problema:

      • Atualize a versão do cloud-init. Para mais informações, consulte Etapa 2: Instalar o cloud-init.

        • Se você usa CentOS 6 ou anterior, utilize o cloud-init 0.7.6a18.

        • Se você usa CentOS 7, utilize o cloud-init 19.1.21.

        • Se você usa CentOS 8 ou superior, utilize o cloud-init 23.2.2 ou posterior.

      • Processe a quebra de linha manualmente.

        Modifique manualmente o arquivo defeituoso do cloud-init cloudinit/distros/rhel.py (obtenha o caminho do arquivo executando o comando find / -name rhel.py). Consulte distros/rhel.py: _read_hostname() missing strip on "hostname" para processar a quebra de linha na saída do comando hostname. O exemplo a seguir mostra como processar a quebra de linha:

        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: