Tous les produits
Search
Centre de documentation

Elastic Compute Service:Configure a custom Linux image

Dernière mise à jour :Aug 18, 2026

Ajoutez un script d'analyse à une image Linux utilisant une version du système d'exploitation non prise en charge par ECS et incompatible avec cloud-init, afin de permettre une configuration automatique au premier démarrage.

Remarque

Une image Linux dont la version du système d'exploitation n'est pas prise en charge est considérée comme une image de plateforme non standard. Ces images reposent sur des systèmes d'exploitation standards, mais leurs fichiers système, environnements ou applications ne répondent pas aux exigences de la plateforme. Lors de l'importation, sélectionnez l'une des options suivantes pour le champ OS Version :

  • Others Linux : ECS ne traite pas les instances créées à partir de ce type d'image. Vous devez configurer manuellement l'adresse IP, les routes, le mot de passe et les autres paramètres après la création de l'instance.

  • Customized Linux : Requiert la configuration décrite dans cette rubrique avant l'importation.

Prérequis

L'image doit répondre aux exigences suivantes :

  • La première partition (généralement /dev/sda1 ou /dev/vda1) dispose des autorisations d'écriture.

  • La première partition utilise FAT32, EXT2, EXT3, EXT4 ou UFS comme système de fichiers.

    Remarque

    Exécutez blkid /dev/sdXn pour vérifier le type de système de fichiers. Remplacez /dev/sdXn par le chemin réel de la première partition, par exemple /dev/sda1.

  • La taille virtuelle de l'image dépasse 5 GiB.

    Remarque

    Exécutez df -h /dev/sdXn pour vérifier l'espace de la partition. Remplacez /dev/sdXn par le chemin réel de la première partition, par exemple /dev/sda1.

Procédure

  1. Connectez-vous à la machine virtuelle source en tant qu'utilisateur root.

  2. Créez un répertoire nommé aliyun_custom_image dans le répertoire racine de la première partition.

    mkdir /aliyun_custom_image

    Lors du premier démarrage, Alibaba Cloud écrit les informations de l'instance, telles que le nom d'hôte, le mot de passe de l'utilisateur root et les adresses des serveurs DNS, dans le fichier os.conf situé dans le répertoire aliyun_custom_image. Le système crée automatiquement os.conf s'il n'existe pas.

    Exemple de contenu du fichier 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"

    Paramètres de l'exemple :

    Parameter

    Description

    hostname

    Nom d'hôte de l'instance.

    password

    Mot de passe de l'utilisateur root.

    eth0_ip_addr

    Adresse IP de la carte réseau eth0.

    eth0_mac_addr

    Adresse MAC de la carte réseau eth0.

    eth0_netmask

    Masque de sous-réseau de la carte réseau eth0.

    eth0_gateway

    Adresse IP de la passerelle par défaut d'eth0.

    eth0_route

    Routes internes pour eth0. Séparées par des espaces.

    dns_nameserver

    Adresses des serveurs DNS. Séparées par des espaces.

  3. Créez un script d'analyse, tel qu'un fichier de service nommé customized-config.service, pour lire et appliquer les configurations système à partir du fichier os.conf.

    Ce script s'exécute au premier démarrage pour configurer le nom d'hôte, le mot de passe de l'utilisateur root, les adresses des serveurs DNS et les paramètres réseau.

    Exemple de script :

    #!/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. Activez le script pour qu'il s'exécute au démarrage du système.

    Les commandes suivantes sont destinées à Ubuntu. Adaptez-les à votre système d'exploitation.

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

    Les images personnalisées créées à partir d'une instance Customized Linux héritent de ce script de démarrage. Alibaba Cloud applique les paramètres os.conf uniquement lors du premier démarrage.

Références

Après la configuration, sélectionnez Customized Linux comme version du système d'exploitation lorsque vous importez l'image personnalisée.