カスタムイメージをAlibaba Cloudにインポートするか、Alibaba Cloud Marketplaceでカスタムイメージをリリースする前に、イメージはイメージ要件を満たし、Elastic Compute Service (ECS) インスタンスタイプとの互換性に関するテストに合格する必要があります。 これにより、カスタムイメージの可用性とインポート効率が向上し、その後のさまざまなビジネス要件を満たすECSインスタンスの作成が容易になります。 このトピックでは、Alibaba Cloud Linuxイメージの要件について説明します。
ディスクパーティション
イメージの作成中にAlibaba Cloudイメージのディスクを分割する場合は、次の要件を満たしていることを確認してください。
ディスクのサイズ変更
ディスクは、物理パーティションに基づいて論理パーティションに分割されます。 各ディスクの最後の論理パーティションはルートパーティションとして使用され、システムディスクのパーティションの障害を防ぎます。
オンラインディスクのサイズ変更をサポートするオペレーティングシステムの場合、
cloud-utils-growpart
パッケージをインストールし、growpart
ユーティリティを使用してパーティションを拡張し、使用可能なディスク領域を占有することを推奨します。 詳細については、「Linuxインスタンス上のディスクのパーティションとファイルシステムの拡張」をご参照ください。
パーティションの交換
イメージを作成するときは、スワップパーティションを使用しないでください。
ディスクの取り付け
fstabファイルとgrubファイルでUUIDを設定する必要があります。 詳細については、「データディスクを自動的にマウントするためのfstabファイルのUUIDの設定」および「Linux Image Grubファイルでファイルディスク識別子をUUIDに変更する方法」をご参照ください。
重要ECSインスタンスに対してfstabファイルが正しく設定されていない場合、インスタンスの再起動後にインスタンスが期待どおりに実行されないことがあります。
ディスクサイズ
システムディスクのサイズは20 GiB以上に設定する必要があります。
必要なソフトウェアとツール
virtioドライバーのインストール
イメージをリリースする前に、イメージのvirtioドライバーがインストールされていること、およびvirtioドライバーが一時ファイルシステムに追加されていることを確認してください。 virtioドライバーは、イメージがECSインスタンスで期待どおりに使用できるようにします。 詳細については、「virtioドライバーのインストール」をご参照ください。
NVMeドライバーのインストール
ecs.g7se、ecs.c7se、ecs.r7seなどの特定のインスタンスファミリーでは、NVMe (Non-Volatile Memory Express) プロトコルを使用してディスクを接続できます。 イメージを使用して上記のインスタンスファミリーのいずれかのECSインスタンスを作成し、インスタンスが期待どおりに実行されるようにする場合は、イメージにNVMeドライバーをインストールします。 詳細については、「」をご参照ください。カスタムイメージ用のNVMeドライバをインストールするにはどうすればよいですか?
cloud-init のインストール
イメージを作成するときは、cloud-initをインストールして、イメージを実行するECSインスタンスを初期化できるようにします。 詳細については、「cloud-init のインストール」をご参照ください。
説明cloud-initを使用してパスワードを変更する場合は、イメージのオペレーティングシステムカーネルが
CONFIG_FW_CFG_SYSFS
機能をサポートしていることを確認してください。 デフォルトでは、Linuxコミュニティカーネル4.6以降とCentOSカーネル3.10.0-826.el7以降は、CONFIG_FW_CFG_SYSFS機能をサポートしています。 この機能がサポートされているかどうかを確認するには、イメージのソースサーバーでgrep -nr CONFIG_FW_CFG_SYSFS /boot/config-$(uname -r)
コマンドを実行します。 コマンド出力にCONFIG_FW_CFG_SYSFS=y
が含まれる場合、イメージのカーネルはCONFIG_FW_CFG_SYSFS
機能をサポートします。Cloud Assistant のインストール
イメージを作成するときは、Cloud Assistantをインストールします。 Cloud Assistantは、ECS用に開発されたネイティブの自動O&Mツールです。 Cloud Assistantを使用すると、シェル、PowerShell、バッチコマンドなどのコマンドをバッチ実行して、インスタンスにログインしたり、ジャンプサーバーを使用したりすることなく、パスワードなしでECSインスタンス上でさまざまなタスクを実行できます。 Cloud Assistantを使用して、自動化されたO&Mタスクの実行、ポーリングプロセス、ソフトウェアのインストールまたはアンインストール、サービスの開始または停止、パッチまたはセキュリティアップデートのインストールを行うことができます。 詳細については、「Cloud Assistant Agentのインストール」をご参照ください。
Security Centerを使用してイメージのソースサーバーを保護する
イメージを作成するときは、Alibaba Cloud Security Centerを使用してサーバーを保護することを推奨します。 Security Centerは、アラート通知、ウイルスの検出と削除、Webシェルの検出と削除、クライアント保護、画像スキャンなどのセキュリティ機能を提供し、クラウドアセットとオンプレミスサーバーを保護します。
システム構成
クロックの設定
イメージのハードウェアクロックは、協定世界時 (UTC) またはローカルタイムゾーンにあります。 イメージを作成するときにUTC時間を使用します。 サンプルコマンド:
cat > $dst << EOF 0.0 0 0.0 0 UTC EOF timedatectl set-local-rtc 0
詳細については、「Linuxのタイムゾーンとタイムゾーン」をご参照ください。
sshdサービスの設定
イメージを作成するときに、sshdサービスを設定します。
sshdは、Linuxオペレーティングシステムにリモートでログオンして管理するために使用されるLinuxサービスです。 sshdはSSHを使用して暗号化通信チャネルを確立し、リモートログオンを保護します。 次の例では、
/etc/ssh/sshd_config
ファイルに対して次の変更を実行します。UseDNS no AddressFamily inet SyslogFacility AUTHPRIV PermitRootLogin yes PasswordAuthentication yes
chronyサービスまたはNTPサービスの設定
イメージを作成するときは、chronyサービスまたはNetwork Time Protocol (NTP) サービスを設定することを推奨します。
chronyとNTPは、コンピュータクロックをタイムソースと同期させて時間の正確さを確保し、時間の不一致によって引き起こされる問題を防ぐために使用されるネットワークプロトコルです。
chronyサービスの設定に使用されるサンプルコマンド
chrony_file=/etc/chrony.conf cat >$chrony_file <<EOF # Use Alibaba NTP server # Public NTP # Alicloud NTP server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp.aliyun.com minpoll 4 maxpoll 10 iburst server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp11.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp12.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp2.aliyun.com minpoll 4 maxpoll 10 iburst server ntp2.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp3.aliyun.com minpoll 4 maxpoll 10 iburst server ntp3.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp4.aliyun.com minpoll 4 maxpoll 10 iburst server ntp4.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp5.aliyun.com minpoll 4 maxpoll 10 iburst server ntp5.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp6.aliyun.com minpoll 4 maxpoll 10 iburst server ntp6.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp7.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp8.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst server ntp9.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst # Ignore stratum in source selection. stratumweight 0.05 # Record the rate at which the system clock gains/losses time. driftfile /var/lib/chrony/drift # Enable kernel RTC synchronization. rtcsync # In first three updates step the system clock instead of slew # if the adjustment is larger than 10 seconds. makestep 10 3 # Allow NTP client access from local network. #allow 192.168/16 # Listen for commands only on localhost. bindcmdaddress 127.0.0.1 bindcmdaddress ::1 # Disable logging of client accesses. noclientlog # Send a message to syslog if a clock adjustment is larger than 0.5 seconds. logchange 0.5 logdir /var/log/chrony #log measurements statistics tracking EOF
NTPサービスの設定に使用されるサンプルコマンド
ntp_conf=/etc/ntp.conf cat > $ntp_conf << EOF driftfile /var/lib/ntp/drift pidfile /var/run/ntpd.pid logfile /var/log/ntp.log # Access Control Support restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap nopeer noquery restrict 172.16.0.0 mask 255.240.0.0 nomodify notrap nopeer noquery restrict 100.64.0.0 mask 255.192.0.0 nomodify notrap nopeer noquery restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap nopeer noquery # local clock server 127.127.1.0 fudge 127.127.1.0 stratum 10 restrict ntp.aliyun.com nomodify notrap nopeer noquery restrict ntp.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp1.aliyun.com nomodify notrap nopeer noquery restrict ntp1.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp10.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp11.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp12.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp2.aliyun.com nomodify notrap nopeer noquery restrict ntp2.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp3.aliyun.com nomodify notrap nopeer noquery restrict ntp3.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp4.aliyun.com nomodify notrap nopeer noquery restrict ntp4.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp5.aliyun.com nomodify notrap nopeer noquery restrict ntp5.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp6.aliyun.com nomodify notrap nopeer noquery restrict ntp6.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp7.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp8.cloud.aliyuncs.com nomodify notrap nopeer noquery restrict ntp9.cloud.aliyuncs.com nomodify notrap nopeer noquery server ntp.aliyun.com iburst minpoll 4 maxpoll 10 server ntp.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp1.aliyun.com iburst minpoll 4 maxpoll 10 server ntp1.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp10.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp11.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp12.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp2.aliyun.com iburst minpoll 4 maxpoll 10 server ntp2.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp3.aliyun.com iburst minpoll 4 maxpoll 10 server ntp3.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp4.aliyun.com iburst minpoll 4 maxpoll 10 server ntp4.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp5.aliyun.com iburst minpoll 4 maxpoll 10 server ntp5.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp6.aliyun.com iburst minpoll 4 maxpoll 10 server ntp6.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp7.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp8.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server ntp9.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 EOF
MOTDサービスの設定
イメージを作成するときは、Message of the Day (MOTD) サービスを設定することをお勧めします。
MOTDサービスは、Linuxオペレーティングシステムにログオンするときにメッセージやアナウンスを表示するために使用されるLinux機能です。 サンプルコマンド:
echo -e "\nWelcome to Alibaba Cloud Elastic Compute Service ! \n" > /etc/motd
Firewalldサービスを無効にする
イメージを作成するときは、Firewalldサービスを無効にすることを推奨します。 Firewalldは、Linuxオペレーティングシステム用のファイアウォール管理サービスです。 Firewalldではなくセキュリティグループがクラウドで保護されます。 サンプルコマンド:
systemctl stop firewalld systemctl disable firewalld
pipリポジトリの設定
pipリポジトリが設定されている場合は、Alibaba Cloud pipリポジトリのアドレスを使用して、Alibaba Cloudから最新のソフトウェアパッケージを取得することを推奨します。
~/.pip/pip.conf
ファイルのサンプルコンテンツ:[global] index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/ [install] trusted-host=mirrors.cloud.aliyuncs.com
ネットワーク設定を構成するConfigure the network settings
NetworkManagerまたはネットワークサービスを使用する場合は、
/etc/sysconfig/network-scripts/ifcfg-eth0
ファイルを設定します。DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes
その他のネットワークサービス設定については、「セカンダリENIの設定」をご参照ください。
カーネルパラメーターの設定
kerneloptパラメーターの設定
イメージを作成するときは、GRand Unified Bootloader (GRUB) のkernelopeカーネルパラメーターを設定して、オペレーティングシステムが期待どおりに起動できるようにします。 次の例では、Debianオペレーティングシステムが使用されています。
/etc/default/grub
ファイルで、次のデータをGRUB_CMDLINE_LINUX=
行に追加します。x86_64アーキテクチャ
net.ifnames=0 console=tty0 console=ttyS0,115200n 8
Arm64アーキテクチャ
net.ifnames=0 console=tty0 console=ttyAMA0,115200n 8
sudo update-grub2
コマンドを実行して、GRUB設定を有効にします。説明GRUB構成ファイルのパスは、オペレーティングシステムによって異なります。 詳細については、「」をご参照ください。カスタムイメージ用のNVMeドライバをインストールするにはどうすればよいですか?
sysctlパラメーターの設定
イメージを作成するときは、sysctlパラメーターを設定して、Linuxカーネルのランタイムパラメーターを調整および最適化することを推奨します。
/etc/sysctl.conf
ファイルで次の変更を実行します。vm.swappiness = 0 kernel.sysrq = 1 net.ipv4.neigh.default.gc_stale_time = 120 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_slow_start_after_idle = 0
sudo sysctl -p
コマンドを実行して、カーネルパラメーターの変更を有効にします。
システムセキュリティの推奨事項
Alibaba Cloudにカスタムイメージをインポートする前に、システムのセキュリティを向上させるために、次の項目に注意してください。
rootアカウントをロックします。 これにより、rootパスワードが設定されていても、他のユーザーはrootアカウントとパスワードを使用してシステムにログインできなくなります。
パスワードベースのログインを無効にするには、PasswordAuthenticationパラメーターを変更します。
説明インスタンスの初期化にルートパスワードを設定した場合、
PasswordAuthentication
パラメーターをyesに設定します。これは、パスワードベースのログインが有効になっていることを示します。
サンプルコード:
dst=/etc/ssh/sshd_config
sed -i 's/^SyslogFacility.*//' $dst
sed -i 's/^PermitRootLogin.*//' $dst
sed -i 's/^PasswordAuthentication.*//' $dst
echo UseDNS no >> $dst
echo SyslogFacility AUTHPRIV >> $dst
echo PasswordAuthentication no >> $dst
passwd -l root
sed -i -e 's/root:[^:]*:/root:*:/g' /etc/shadow
イメージ情報をクリア
独立系ソフトウェアベンダー (ISV) がイメージをリリースする前に、ISVはビジネス要件に基づいて履歴レコードとログをクリアできます。