All Products
Search
Document Center

Elastic Compute Service:Konfigurasikan custom image Linux

Last Updated:May 16, 2026

Tambahkan skrip parsing ke image Linux yang menggunakan versi OS tidak didukung oleh ECS dan tidak kompatibel dengan cloud-init agar memungkinkan konfigurasi otomatis saat boot pertama.

Catatan

Image Linux dengan versi OS tidak didukung dianggap sebagai image platform non-standar. Image ini berbasis sistem operasi standar tetapi memiliki sistem file, lingkungan, atau aplikasi yang tidak memenuhi persyaratan platform. Pilih salah satu opsi OS Version berikut saat mengimpor:

  • Others Linux: ECS tidak memproses instans yang dibuat dari jenis image ini. Anda harus mengonfigurasi alamat IP, entri rute, kata sandi, dan pengaturan lainnya secara manual setelah instans dibuat.

  • Customized Linux: Memerlukan konfigurasi yang dijelaskan dalam topik ini sebelum diimpor.

Prasyarat

Image harus memenuhi persyaratan berikut:

  • Partisi pertama (biasanya /dev/sda1 atau /dev/vda1) memiliki izin tulis.

  • Partisi pertama menggunakan FAT32, EXT2, EXT3, EXT4, atau UFS sebagai sistem file-nya.

    Catatan

    Jalankan blkid /dev/sdXn untuk memeriksa jenis sistem file. Ganti /dev/sdXn dengan path partisi pertama yang sebenarnya, misalnya /dev/sda1.

  • Ukuran virtual image melebihi 5 GiB.

    Catatan

    Jalankan df -h /dev/sdXn untuk memeriksa ruang partisi. Ganti /dev/sdXn dengan path partisi pertama yang sebenarnya, misalnya /dev/sda1.

Prosedur

  1. Login ke mesin virtual sumber sebagai pengguna root.

  2. Buat direktori bernama aliyun_custom_image di direktori root partisi pertama.

    mkdir /aliyun_custom_image

    Saat boot pertama, Alibaba Cloud menulis informasi instans—seperti hostname, password pengguna root, dan alamat Server DNS—ke file os.conf di direktori aliyun_custom_image. Sistem membuat file os.conf secara otomatis jika belum ada.

    Contoh isi file 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"

    Parameter dalam contoh:

    Parameter

    Deskripsi

    hostname

    Hostname instans.

    password

    Password pengguna root.

    eth0_ip_addr

    Alamat IP NIC eth0.

    eth0_mac_addr

    Alamat MAC NIC eth0.

    eth0_netmask

    Subnet mask NIC eth0.

    eth0_gateway

    Alamat IP gateway default eth0.

    eth0_route

    Entri rute internal untuk eth0. Dipisahkan dengan spasi.

    dns_nameserver

    Alamat Server DNS. Dipisahkan dengan spasi.

  3. Buat skrip parsing, misalnya file layanan bernama customized-config.service, untuk membaca dan menerapkan konfigurasi sistem dari file os.conf.

    Skrip ini dijalankan saat boot pertama untuk mengonfigurasi hostname, password pengguna root, alamat Server DNS, dan pengaturan jaringan.

    Contoh skrip:

    #!/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() {
        # pastikan $os_conf_file dihapus, untuk menghindari konfigurasi sistem berulang
        rm $os_conf_file >& /dev/null
        # pastikan $os_conf_dir tersedia
        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. Aktifkan skrip agar dijalankan saat startup sistem.

    Perintah berikut ditujukan untuk Ubuntu. Sesuaikan dengan sistem operasi Anda.

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

    Custom image yang dibuat dari instans Customized Linux mewarisi skrip startup ini. Alibaba Cloud hanya menerapkan pengaturan os.conf saat boot pertama.

Referensi

Setelah dikonfigurasi, pilih Customized Linux sebagai OS Version saat Anda mengimpor custom image.