全部产品
Search
文档中心

Elastic Compute Service:Mengonfigurasi gambar kustom untuk inisialisasi instance

更新时间:Jul 02, 2025

Jika versi sistem operasi dari gambar Linux Anda tidak didukung oleh Elastic Compute Service (ECS) dan gambar tersebut tidak dapat digunakan untuk menginisialisasi instance melalui cloud-init, maka gambar tersebut diidentifikasi sebagai dibuat dari sistem operasi yang tidak dikenali. Sebelum mengimpor gambar ke instance ECS, Anda harus menambahkan skrip penguraian ke dalam gambar untuk mengonfigurasi sistem operasi secara otomatis selama start pertama kali instance.

Catatan

Gambar Linux yang tidak didukung oleh ECS dianggap sebagai gambar platform non-standar. Gambar-gambar ini dikembangkan pada platform sistem operasi standar, tetapi file konfigurasi sistem kritis, lingkungan sistem dasar, atau aplikasi dari gambar tersebut tidak sesuai dengan persyaratan sistem operasi standar ECS. Berikut adalah OS Version yang didukung dan panduan untuk mengimpor gambar platform non-standar:

  • Others Linux: ECS mengidentifikasi semua gambar jenis ini sebagai gambar Linux lainnya. Jika Anda mengimpor gambar Others Linux dan menggunakannya untuk membuat instance, ECS tidak akan memproses instance yang dibuat. Setelah membuat instance, Anda harus mengonfigurasi alamat IP, rute, dan kata sandi dari instance tersebut.

  • Customized Linux: Sebelum mengimpor gambar Customized Linux, ikuti petunjuk dalam topik ini untuk mengonfigurasi gambar Anda.

Prasyarat

Gambar Anda harus memenuhi persyaratan berikut:

  • Partisi pertama, biasanya /dev/sda1 atau /dev/vda1, harus dapat ditulis.

  • Tipe sistem file partisi pertama harus FAT32, ext2, ext3, ext4, atau UFS.

    Catatan

    Anda dapat menggunakan perintah blkid /dev/sdXn untuk memverifikasi tipe sistem file, di mana sdXn mewakili nama partisi pertama, seperti /sda1.

  • Ukuran file virtual dari gambar Linux yang dikustomisasi harus lebih besar dari 5 GiB.

    Catatan

    Anda dapat memeriksa ukuran partisi menggunakan perintah df -h /dev/sdXn, di mana sdXn adalah nama partisi pertama, seperti /sda1.

Prosedur

  1. Masuk ke mesin virtual tempat gambar dibuat sebagai pengguna root.

  2. Buat direktori aliyun_custom_image di direktori root partisi pertama server tempat gambar dibuat.

    mkdir /aliyun_custom_image

    Saat instance ECS yang dibuat dari gambar Linux yang dikustomisasi dijalankan untuk pertama kalinya, Alibaba Cloud menulis konfigurasi instance seperti nama host, kata sandi, dan server DNS ke file os.conf di direktori aliyun_custom_image. Jika file os.conf tidak ada, Alibaba Cloud akan membuat satu.

    Contoh berikut menunjukkan 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"

    Tabel berikut menjelaskan parameter dalam contoh di atas. Anda dapat mengonfigurasi parameter berdasarkan kebutuhan Anda.

    Parameter

    Deskripsi

    hostname

    Nama host.

    password

    Kata sandi pengguna root.

    eth0_ip_addr

    Alamat IP NIC eth0.

    eth0_mac_addr

    Alamat MAC NIC eth0.

    eth0_netmask

    Netmask jaringan NIC eth0.

    eth0_gateway

    Gateway default NIC eth0.

    eth0_route

    Rute internal eth0. Secara default, rute dipisahkan dengan spasi.

    dns_nameserver

    Daftar alamat DNS. Secara default, alamat dipisahkan dengan spasi.

  3. Buat skrip penguraian di dalam gambar, seperti customized-config.service, untuk menafsirkan dan menerapkan konfigurasi sistem dari file os.conf.

    Skrip ini mengotomatiskan tugas konfigurasi awal seperti mengatur nama host, kata sandi root, server DNS, dan konfigurasi jaringan saat instance ECS dijalankan untuk pertama kalinya.

    Lihat contoh skrip berikut:

    #!/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: Inisialisasi konfigurasi sistem
    ### END INIT INFO
    
    # Tentukan direktori untuk partisi pertama dan file os.conf
    first_partition_dir='/boot/'
    os_conf_dir=${first_partition_dir}/aliyun_custom_image
    os_conf_file=${os_conf_dir}/os.conf
    
    # Muat os.conf jika ada
    load_os_conf() {
        if [[ -f $os_conf_file ]]; then
            . $os_conf_file
            return 0
        else
            return 1
        fi
    }
    
    # Fungsi pembersihan untuk menghapus os.conf dan memastikan direktori ada
    cleanup() {
        rm $os_conf_file >& /dev/null
        mkdir -p $os_conf_dir
    }
    
    # Konfigurasikan kata sandi root
    config_password() {
        if [[ -n $password ]]; then
            password=$(echo $password | base64 -d)
            if [[ $? == 0 && -n $password ]]; then
                echo "root:$password" | chpasswd
            fi
        fi
    }
    
    # Atur nama host
    config_hostname() {
        if [[ -n $hostname ]]; then
            sed -i "s/^HOSTNAME=.*/HOSTNAME=$hostname/" /etc/sysconfig/network
            hostname $hostname
        fi
    }
    
    # Konfigurasikan pengaturan DNS
    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
    }
    
    # Tentukan apakah jaringan adalah klasik atau VPC
    is_classic_network() {
        grep -q 'eth1' $os_conf_file
    }
    
    # Konfigurasikan pengaturan jaringan
    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
    }
    
    # Konfigurasikan antarmuka jaringan
    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
    }
    
    # Atur gateway default
    config_default_gateway() {
        local gateway=$1
        sed -i "s/^GATEWAY=.*/GATEWAY=$gateway/" /etc/sysconfig/network
    }
    
    # Konfigurasikan rute
    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
    }
    
    ################## portal layanan sysvinit ####################
    
    # Mulai proses konfigurasi
    start() {
        if load_os_conf ; then
            config_password
            config_network
            config_hostname
            config_dns
            cleanup
            return 0
        else
            echo "tidak memuat $os_conf_file"
            return 0
        fi
    }
    
    RETVAL=0
    
    # Penanganan aksi layanan
    case "$1" in
        start)
            start
            RETVAL=$?
        ;;
        *)
            echo "Penggunaan: $0 {start}"
            RETVAL=3
        ;;
    esac
    
    exit $RETVAL
  4. Atur skrip penguraian untuk dijalankan secara otomatis saat startup sistem.

    Perintah sampel berikut berlaku untuk sistem Ubuntu. Modifikasi perintah startup berdasarkan sistem operasi Anda.

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

    Saat gambar kustom dibuat berdasarkan gambar Customized Linux, skrip startup otomatis juga disertakan. Alibaba Cloud akan mengeksekusi konfigurasi file os.conf saat instance dijalankan untuk pertama kalinya.

Referensi

Setelah mengonfigurasi gambar, Anda dapat memilih Customized Linux sebagai versi sistem operasi saat mengimpor gambar kustom. Untuk informasi lebih lanjut, lihat Impor Gambar Kustom.