Todos os produtos
Search
Central de documentação

Elastic Compute Service:Configure a custom Linux image

Última atualização: Jul 03, 2026

Adicione um script de análise a uma imagem Linux que utilize uma versão de sistema operacional não suportada pelo ECS e incompatível com cloud-init. Isso permite a configuração automática na primeira inicialização.

Nota

Uma imagem Linux com versão de sistema operacional não suportada é tratada como imagem de plataforma não padrão. Essas imagens baseiam-se em sistemas operacionais padrão, mas possuem arquivos de sistema, ambientes ou aplicações que não atendem aos requisitos da plataforma. Ao importar, selecione uma das seguintes opções de OS Version:

  • Others Linux: O ECS não processa instâncias criadas a partir deste tipo de imagem. É necessário configurar manualmente o endereço IP, rotas, senha e outras definições após a criação da instância.

  • Customized Linux: Exige a configuração descrita neste tópico antes da importação.

Pré-requisitos

A imagem deve atender aos seguintes requisitos:

  • A primeira partição (geralmente /dev/sda1 ou /dev/vda1) possui permissões de escrita.

  • O sistema de arquivos da primeira partição é FAT32, EXT2, EXT3, EXT4 ou UFS.

    Nota

    Execute blkid /dev/sdXn para verificar o tipo de sistema de arquivos. Substitua /dev/sdXn pelo caminho real da primeira partição, como /dev/sda1.

  • O tamanho virtual da imagem excede 5 GiB.

    Nota

    Execute df -h /dev/sdXn para verificar o espaço da partição. Substitua /dev/sdXn pelo caminho real da primeira partição, como /dev/sda1.

A imagem também precisa cumprir estes requisitos de segurança:

  • Não há vulnerabilidades de alto risco exploráveis remotamente na imagem.

  • Ao fazer login em uma instância pelo terminal de gerenciamento (VNC), altere a senha padrão no primeiro acesso antes de realizar qualquer operação.

  • O par de chaves SSH inicial deve ser gerado pela Alibaba Cloud. Pares de chaves SSH padrão não são suportados.

Procedimento

  1. Faça login na máquina virtual de source como usuário root.

  2. Crie um diretório chamado aliyun_custom_image no diretório raiz da primeira partição.

    mkdir /aliyun_custom_image

    Na primeira inicialização, a Alibaba Cloud grava informações da instância, como hostname, senha do usuário root e endereços de servidor DNS, no arquivo os.conf dentro do diretório aliyun_custom_image. O sistema cria o arquivo os.conf automaticamente caso ele não exista.

    Exemplo de conteúdo do arquivo os.conf:

    hostname=<yourHostName>
    password=<yourPassword>
    eth0_ip_addr=10.0.0.2
    eth0_mac_addr=00:xx:xx:xx:xx:23
    eth0_netmask=255.255.255.0
    eth0_gateway=10.0.0.1
    eth0_route="0.0.0.0/0 10.0.0.1"
    dns_nameserver="7.7.X.X 8.8.8.8"

    Parâmetros do exemplo:

    Parâmetro

    Descrição

    hostname

    Hostname da instância.

    password

    Senha do usuário root.

    eth0_ip_addr

    Endereço IP da NIC eth0.

    eth0_mac_addr

    Endereço MAC da NIC eth0.

    eth0_netmask

    Máscara de sub-rede da NIC eth0.

    eth0_gateway

    Endereço IP do gateway padrão da eth0.

    eth0_route

    Rotas internas para eth0. Separadas por espaço.

    dns_nameserver

    Endereços dos servidores DNS. Separados por espaço.

  3. Crie um script de análise, como um arquivo de serviço chamado customized-config.service, para ler e aplicar as configurações do sistema a partir do arquivo os.conf.

    Este script executa na primeira inicialização para definir o hostname, a senha do usuário root, os endereços de servidor DNS e as configurações de rede.

    Script de exemplo:

    #!/bin/bash
    
    ### BEGIN INIT INFO
    # Provides:          os-conf
    # Required-Start:    $local_fs $network $named $remote_fs
    # Required-Stop:
    # Should-Stop:
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: The initial os-conf job, config the system.
    ### END INIT INFO
    
    first_partition_dir='/boot/'
    os_conf_dir=${first_partition_dir}/aliyun_custom_image
    os_conf_file=${os_conf_dir}/os.conf
    
    load_os_conf() {
        if [[ -f $os_conf_file ]]; then
            . $os_conf_file
            return 0
        else
            return 1
        fi
    }
    
    cleanup() {
        # ensure $os_conf_file is deleted, to avoid repeating config system
        rm $os_conf_file >& /dev/null
        # ensure $os_conf_dir exists
        mkdir -p $os_conf_dir
    }
    
    config_password() {
        if [[ -n $password ]]; then
            password=$(echo $password | base64 -d)
            if [[ $? == 0 && -n $password ]]; then
                echo "root:$password" | chpasswd
            fi
        fi
    }
    
    config_hostname() {
        if [[ -n $hostname ]]; then
            sed -i "s/^HOSTNAME=.*/HOSTNAME=$hostname/" /etc/sysconfig/network
            hostname $hostname
        fi
    }
    
    config_dns() {
        if [[ -n $dns_nameserver ]]; then
            dns_conf=/etc/resolv.conf
            sed -i '/^nameserver.*/d' $dns_conf
            for i in $dns_nameserver; do
                echo "nameserver $i" >> $dns_conf
            done
        fi
    }
    
    is_classic_network() {
        # vpc: eth0
        # classic: eth0 eth1
        grep -q 'eth1' $os_conf_file
    }
    
    config_network() {
        /etc/init.d/network stop
        config_interface eth0 ${eth0_ip_addr} ${eth0_netmask} ${eth0_mac_addr}
        config_route eth0 "${eth0_route}"
        if is_classic_network ; then
            config_interface eth1 ${eth1_ip_addr} ${eth1_netmask} ${eth1_mac_addr}
            config_route eth1 "${eth1_route}"
        fi
        /etc/init.d/network start
    }
    
    config_interface() {
        local interface=$1
        local ip=$2
        local netmask=$3
        local mac=$4
        interface_cfg="/etc/sysconfig/network-scripts/ifcfg-${interface}"
        cat << EOF > $interface_cfg
    DEVICE=$interface
    IPADDR=$ip
    NETMASK=$netmask
    HWADDR=$mac
    ONBOOT=yes
    BOOTPROTO=static
    EOF
    }
    
    config_default_gateway() {
        local gateway=$1
        sed -i "s/^GATEWAY=.*/GATEWAY=$gateway/" /etc/sysconfig/network
    }
    
    config_route() {
        local interface=$1
        local route="$2"
        route_conf=/etc/sysconfig/network-scripts/route-${interface}
        > $route_conf
        echo $route | sed 's/;/\n/' | \
            while read line; do
                dst=$(echo $line | awk '{print $1}')
                gw=$(echo $line | awk '{print $2}')
                if ! grep -q "$dst" $route_conf 2> /dev/null; then
                    echo "$dst via $gw dev $interface" >> $route_conf
                fi
                if [[ "$dst" == "0.0.0.0/0" ]]; then
                    config_default_gateway $gw
                fi
            done
    }
    
    ################## sysvinit service portal ####################
    
    start() {
        if load_os_conf ; then
            config_password
            config_network
            config_hostname
            config_dns
            cleanup
            return 0
        else
            echo "not load $os_conf_file"
            return 0
        fi
    }
    
    RETVAL=0
    
    case "$1" in
        start)
            start
            RETVAL=$?
        ;;
        *)
            echo "Usage: $0 {start}"
            RETVAL=3
        ;;
    esac
    
    exit $RETVAL
  4. Ative a execução do script na inicialização do sistema.

    Os comandos abaixo aplicam-se ao Ubuntu. Adapte-os conforme seu sistema operacional.

    sudo systemctl daemon-reload
    sudo systemctl enable customized-config.service
    Nota

    Imagens personalizadas criadas a partir de uma instância Customized Linux herdam este script de inicialização. A Alibaba Cloud aplica as configurações do os.conf apenas na primeira inicialização.

Referências

Após concluir a configuração, selecione Customized Linux como OS Version ao importar a imagem personalizada.