LinuxイメージのオペレーティングシステムバージョンがElastic Compute Service (ECS) でサポートされておらず、イメージを使用してcloud-initを介してインスタンスを初期化できない場合、イメージは認識されないオペレーティングシステムから作成されたものとして識別されます。 イメージをECSインスタンスにインポートする前に、イメージに解析スクリプトを追加する必要があります。これは、インスタンスの最初の起動時にオペレーティングシステムを自動的に設定するために使用されます。
ECSでサポートされていないLinuxイメージは、非標準プラットフォームイメージと見なされます。 このようなイメージは、標準オペレーティングシステムプラットフォーム上で開発される。 ただし、重要なシステム構成ファイル、基本的なシステム環境、またはイメージのアプリケーションは、ECSの標準オペレーティングシステム要件に準拠していません。 サポートされているOSバージョンと、非標準プラットフォームイメージのインポートに関するガイドラインを次に示します。
Others Linux: ECSは、このタイプのすべてのイメージを他のLinuxイメージとして識別します。 その他のLinuxイメージをインポートし、それを使用してインスタンスを作成した場合、ECSは作成されたインスタンスを処理しません。 インスタンスを作成した後、インスタンスのIPアドレス、ルート、およびパスワードを設定する必要があります。
カスタマイズされたLinux: カスタマイズされたLinuxイメージをインポートする前に、このトピックの手順に従ってイメージを設定します。
前提条件
イメージは次の要件を満たす必要があります。
最初のパーティション (通常は /dev/sda1または /dev/vda1) は書き込み可能である必要があります。
最初のパーティションのファイルシステムタイプは、FAT32、ext2、ext3、ext4、またはUFSである必要があります。
説明blkid /dev/sdXn
コマンドを使用して、ファイルシステムタイプを確認できます。sdXnは、/sda1などの最初のパーティション名を表します。カスタマイズされた Linux イメージの仮想ファイルのサイズは 5 GiB より大きくなければなりません。
説明df -h /dev/sdXn
コマンドを使用してパーティションのサイズを確認できます。sdXnは /sda1などの最初のパーティション名です。
手順
イメージが作成されている仮想マシンにrootユーザーとしてログオンします。
イメージの作成元のサーバーの最初のパーティションのルートディレクトリに、
aliyun_custom_image
ディレクトリを作成します。mkdir /aliyun_custom_image
カスタマイズされたLinuxイメージから作成されたECSインスタンスが初めて起動されると、Alibaba Cloudは、ホスト名、パスワード、DNSサーバーなどのインスタンス設定を
aliyun_custom_image
ディレクトリのos.conf
ファイルに書き込みます。os.conf
ファイルが存在しない場合、Alibaba Cloudが作成します。次の例は、
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"
次の表に、前述の例のパラメーターを示します。 必要に応じてパラメーターを設定できます。
パラメーター
説明
ホスト名
ホスト名。
パスワード
rootユーザーのパスワード。
eth0_ip_addr
eth0 NICのIPアドレス。
eth0_mac_addr
eth0 NICのMACアドレス。
eth0_ネットマスク
eth0 NICのネットワークマスク。
eth0_gateway
eth0 NICのデフォルトゲートウェイ。
eth0_ルート
eth0内部ルート。 デフォルトでは、ルートはスペースで区切られています。
dns_nameserver
DNSアドレスリスト。 デフォルトでは、アドレスはスペースで区切られます。
customized-config. service
などの解析スクリプトをイメージ内に作成し、os.conf
ファイルからシステム構成を解釈して適用します。このスクリプトは、ECSインスタンスが初めて起動されたときに、ホスト名、ルートパスワード、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: Initialize system configuration ### END INIT INFO # Define the directory for the first partition and os.conf file 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 it exists load_os_conf() { if [[ -f $os_conf_file ]]; then . $os_conf_file return 0 else return 1 fi } # Cleanup function to remove os.conf and ensure directory exists cleanup() { rm $os_conf_file >& /dev/null mkdir -p $os_conf_dir } # Configure the root password config_password() { if [[ -n $password ]]; then password=$(echo $password | base64 -d) if [[ $? == 0 && -n $password ]]; then echo "root:$password" | chpasswd fi fi } # Set the hostname config_hostname() { if [[ -n $hostname ]]; then sed -i "s/^HOSTNAME=.*/HOSTNAME=$hostname/" /etc/sysconfig/network hostname $hostname fi } # Configure DNS settings 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 } # Determine if the network is classic or VPC is_classic_network() { grep -q 'eth1' $os_conf_file } # Configure network settings 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 } # Configure network interface 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 } # Set the default gateway config_default_gateway() { local gateway=$1 sed -i "s/^GATEWAY=.*/GATEWAY=$gateway/" /etc/sysconfig/network } # Configure routing 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 the configuration process 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 # Service action handling case "$1" in start) start RETVAL=$? ;; *) echo "Usage: $0 {start}" RETVAL=3 ;; esac exit $RETVAL
システム起動時に自動的に実行されるように解析スクリプトを設定します。
次のサンプルコマンドは、Ubuntuシステムに適用されます。 オペレーティングシステムに基づいて起動コマンドを変更します。
systemctl daemon-reload systemctl enable customized-config.service
説明カスタマイズされたLinuxイメージに基づいてカスタムイメージが作成されると、自動起動スクリプトも含まれます。 Alibaba Cloudは、インスタンスの初回起動時に
os.conf
ファイルの設定を実行します。
関連ドキュメント
イメージを設定した後、カスタムイメージをインポートするときに、オペレーティングシステムのバージョンとして [Customized Linux] を選択できます。 詳細については、「カスタムイメージのインポート」をご参照ください。