ホームページ > 運用・保守 > Linuxの運用と保守 > カスタム イメージをインポートするときにカスタマイズされた Linux を選択する方法

カスタム イメージをインポートするときにカスタマイズされた Linux を選択する方法

坏嘻嘻
リリース: 2018-09-18 14:59:15
オリジナル
2612 人が閲覧しました

この記事の内容は、カスタム イメージをインポートする際のカスタマイズされたイメージの選択方法に関するものです。必要な方は参考にしていただければ幸いです。

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"
ログイン後にコピー

パラメータの説明は次の表のとおりです。

カスタム イメージをインポートするときにカスタマイズされた Linux を選択する方法

プライベート ネットワーク 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"
ログイン後にコピー

パラメータの説明は次の表のとおりです。

カスタム イメージをインポートするときにカスタマイズされた Linux を選択する方法

スクリプト解析に関する注意事項

インスタンスが初めて起動されるとき、通常の状況では、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 &#39;s/;/\n/&#39; | \
while read line; do
dst=$(echo $line | awk &#39;{print $1}&#39;)
gw=$(echo $line | awk &#39;{print $2}&#39;)
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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート