この記事の内容は、カスタム イメージをインポートする際のカスタマイズされたイメージの選択方法に関するものです。必要な方は参考にしていただければ幸いです。
Linux カスタム イメージのカスタマイズ
イメージ オペレーティング システムが Alibaba Cloud でサポートされている既存のプラットフォーム タイプに含まれておらず、cloud-init をインストールできない場合は、カスタム イメージをインポートできます。「カスタマイズされた Linux」を選択します。 (カスタマイズされたバージョンの画像)。 Alibaba Cloud は、カスタマイズされた Linux イメージを認識されないオペレーティング システム タイプとして扱い、ECS インスタンスの初期起動に必要な標準構成情報を欠いています。イメージをインポートしやすくするために、この記事で説明されているように、カスタマイズされたイメージに解析スクリプトを追加する必要があります。自動化された初期設定の例。
制限事項
カスタマイズされた Linux イメージの最初のパーティションは書き込み可能である必要があります。
カスタマイズされた Linux イメージの最初のパーティション タイプは、FAT32、EXT2、EXT3、EXT4、または UFS をサポートします。
カスタマイズされた Linux イメージの仮想ファイル サイズは 5 GiB より大きくなければなりません。
カスタマイズされた Linux イメージには、次のセキュリティ要件があります。
リモートから悪用される可能性のある高リスクの脆弱性があってはなりません。
コンソールの管理端末を使用してインスタンスにログインする場合、初期デフォルトのパスワードがある場合は、初回ログイン時に変更する必要があります。インスタンスを使用して、パスワードを変更する前に操作を実行します。
デフォルトの SSH キー ペアはサポートされていないため、最初の SSH キー ペアは Alibaba Cloud によってランダムに生成される必要があります。
設定方法
イメージの最初のパーティションのルート ディレクトリに新しいディレクトリ aliyun_custom_image を作成します。
このカスタマイズされた Linux イメージを使用して作成されたインスタンスが初めて起動されると、Alibaba Cloud はインスタンス関連の設定情報を aliyun_custom_image ディレクトリの os.conf ファイルに書き込みます。 os.conf ファイルが存在しない場合は、システムが自動的に作成します。
イメージ内に解析スクリプトを作成して、os.conf ファイルのシステム構成を解析します。スクリプトについては、「解析スクリプトの考慮事項」と「解析スクリプトの例」を参照してください。
os.conf ファイルの例
クラシック ネットワーク タイプの例
hostname=iZ23r29djmjZ password=cXdlcjEyMzQK eth0_ip_addr=10.171.254.123 eth0_mac_addr=00:8c:fa:5e:14:23 eth0_netmask=255.255.255.0 eth0_gateway=10.171.254.1 eth0_route="10.0.0.0/8 10.171.254.1;172.16.0.0/12 10.171.254.1" eth1_ip_addr=42.120.74.105 eth1_mac_addr=00:8c:fa:5e:14:24 eth1_netmask=255.255.255.0 eth1_gateway=42.120.74.1 eth1_route="0.0.0.0/0 42.120.74.1" dns_nameserver="7.7.7.7 8.8.8.8"
パラメータの説明は次の表のとおりです。
プライベート ネットワーク VPC タイプ インスタンス
hostname=iZ23r29djmjZ password=cXdlcjEyMzQK eth0_ip_addr=10.171.254.123 eth0_mac_addr=00:8c:fa:5e:14:23 eth0_netmask=255.255.255.0 eth0_gateway=10.171.254.1 eth0_route="0.0.0.0/0 10.171.254.1" dns_nameserver="7.7.7.7 8.8.8.8"
パラメータの説明は次の表のとおりです。
スクリプト解析に関する注意事項
インスタンスが初めて起動されるとき、通常の状況では、Alibaba Cloud は関連するスクリプトを自動的に書き込みます。 aliyun_custom_image ディレクトリの os.conf ファイル内の最初のパーティションのルートに設定項目の情報を追加します。カスタマイズされた Linux イメージを構成するには、事前定義された解析スクリプトをイメージ内に作成して、os.conf ファイルからインスタンス構成情報を読み取り、インスタンス構成を完了する必要があります。スクリプトを解析するには次の条件を満たす必要があります。
起動時に開始: 解析スクリプトは起動時に自動的に開始されるように設定する必要があります。たとえば、解析スクリプトを /etc/init.d/ ディレクトリに保存します。
構成項目の値のルール: os.conf ファイルの例の構成項目で説明されているように、構成項目の数と一部の構成項目の値のルールは、VPC とクラシック ネットワーク インスタンスの間で異なります。
構成ファイル読み取りパス: カスタマイズされた Linux イメージの I/O 最適化インスタンスまたは非 I/O 最適化インスタンスを作成する場合、最初のパーティションに割り当てられるデバイス名はデフォルトで異なります。したがって、解析スクリプトで最初のパーティションのデバイスを識別するには、uuid または label を使用するのが最善です。ユーザーのパスワードは Base64 でエンコードされた文字列であり、パスワードの設定時に関連する処理を行う必要があります。
VPC またはクラシック ネットワークの決定: スクリプトを解析してネットワーク タイプを決定するときに、eth1_route またはその他の eth1 関連の構成項目があるかどうかを確認できます。現在のインスタンスのネットワーク タイプを特定し、対象を絞った方法で分析して処理します。
VPC タイプのインスタンスは、os.conf ファイルの eth0_route パラメータでデフォルトのパブリック ネットワーク ルートを構成します。
クラシック ネットワーク タイプのインスタンスの場合、デフォルトのパブリック ネットワーク ルートは os.conf ファイルの eth1_route パラメータで構成され、内部ネットワーク ルートは eth0_route で構成されます。
構成の最適化: os.conf ファイル内の構成は、インスタンスのライフサイクル全体で 1 回実行できます。解析スクリプトが正常に実行された後、os.conf ファイルを削除することをお勧めします。同時に、解析スクリプトが os.conf ファイル構成を読み取らない場合、ファイル内の構成は実行されません。
カスタム イメージ処理: カスタマイズされた Linux イメージによって作成されたインスタンスに基づいてカスタム イメージを作成する場合、イメージにはこのブート スクリプトも含まれます。 Alibaba Cloud は、インスタンスの初回起動時に os.conf 設定を書き込み、解析スクリプトは設定を検出すると関連する設定を実行できます。
修改相关配置时的处理:当实例的配置信息通过阿里云的控制台或 API 发生变更时,阿里云将相关信息写入到 os.conf 文件中,解析脚本将被再次执行从而下发这些更改。
解析脚本示例
以下为以 CentOS 操作系统为例的解析脚本示例,仅供参考,您需要根据实际的操作系统类型调整脚本内容。在使用脚本前,务必在镜像中调试脚本,并保证调试通过。
#!/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 is exitst 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 inteface_cfg="/etc/sysconfig/network-scripts/ifcfg-${interface}" cat << EOF > $inteface_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
以上がカスタム イメージをインポートするときにカスタマイズされた Linux を選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。