すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:カスタム Linux イメージの構成

最終更新日:May 16, 2026

Elastic Compute Service (ECS) でサポートされていない OS バージョンを使用していて cloud-init を使用できない Linux イメージに解析スクリプトを追加し、初回起動時に自動構成ができるようにします。

説明

サポートされていない OS バージョンの Linux イメージは、非標準プラットフォームイメージとして扱われます。これらのイメージは、標準オペレーティングシステムをベースとしていますが、システムファイル、環境、またはアプリケーションがプラットフォーム要件を満たしていません。インポートする際に、次のいずれかの [OS バージョン] オプションを選択します。

  • [その他][ Linux]: ECS は、このイメージタイプから作成されたインスタンスの自動構成を行いません。インスタンスの作成後、IP アドレス、ルート、パスワード、およびその他の設定を手動で設定する必要があります。

  • [カスタム Linux]: インポート前に、本トピックに記載の設定が必要です。

前提条件

イメージは、次の要件を満たす必要があります:

  • 最初のパーティション (通常は /dev/sda1 または /dev/vda1) に書き込み権限があること。

  • 最初のパーティションのファイルシステムが FAT32、EXT2、EXT3、EXT4、または UFS であること。

    説明

    blkid /dev/sdXn を実行して、ファイルシステムの種類を確認してください。/dev/sdXn は、/dev/sda1 などの実際の最初のパーティションパスに置き換えてください。

  • イメージの仮想サイズが 5 GiB を超えていること。

    説明

    df -h /dev/sdXn を実行して、パーティションの空き容量を確認してください。/dev/sdXn は、/dev/sda1 などの実際の最初のパーティションパスに置き換えてください。

手順

  1. root ユーザーとしてソース仮想マシンにログオンします。

  2. 最初のパーティションのルートディレクトリに aliyun_custom_image という名前のディレクトリを作成します。

    mkdir /boot/aliyun_custom_image

    初回起動時に Alibaba Cloud は、ホスト名、root ユーザーのパスワード、DNS サーバーアドレスなどのインスタンス情報を、aliyun_custom_image ディレクトリ内の os.conf ファイルに書き込みます。 os.conf が存在しない場合、システムによって自動的に作成されます。

    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"

    例に含まれるパラメーター:

    パラメーター

    説明

    hostname

    インスタンスのホスト名。

    password

    root ユーザーのパスワード。

    eth0_ip_addr

    eth0 NIC の IP アドレス。

    eth0_mac_addr

    eth0 NIC の MAC アドレス。

    eth0_netmask

    eth0 NIC のサブネットマスク。

    eth0_gateway

    eth0 のデフォルトゲートウェイ IP アドレス。

    eth0_route

    eth0 の内部ルート。スペース区切り。

    dns_nameserver

    DNS サーバーアドレス。スペース区切り。

  3. os.conf ファイルからシステム構成を読み取り、適用するための解析スクリプトを作成します (例:customized-config.service という名前のサービスファイル)。

    このスクリプトは初回起動時に実行され、ホスト名、root ユーザーのパスワード、DNS サーバーアドレス、およびネットワーク設定を構成します。

    スクリプト例:

    #!/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: 初期 os-conf ジョブ。システムを構成。
    ### 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() {
        # システム構成の繰り返しを避けるため、$os_conf_file を削除します
        rm $os_conf_file >& /dev/null
        # $os_conf_dir が存在するようにします
        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. スクリプトがシステム起動時に実行されるように有効化します。

    次のコマンドは Ubuntu 向けです。ご使用のオペレーティングシステムに合わせて調整してください。

    sudo systemctl daemon-reload
    sudo systemctl enable customized-config.service
    説明

    Customized Linux インスタンスから作成されたカスタムイメージは、この起動スクリプトを継承します。 Alibaba Cloud は、初回起動時にのみ os.conf の設定を適用します。

関連ドキュメント

設定後、カスタムイメージをインポートする際に、OS バージョンとして [Customized Linux] を選択します。