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

Elastic Compute Service:cloud-init のインストール

最終更新日:Dec 02, 2024

cloud-initは、初期パスワードの生成、ホスト名の設定、ユーザーデータスクリプトの実行など、Linuxオペレーティングシステムの初期化操作を自動化するオープンソースの初期化ツールです。 cloud-initがインストールされていないオンプレミスのカスタムイメージをAlibaba Cloudに移行する場合は、cloud-initを手動でインストールできます。 cloud-initをインストールしない場合、カスタムイメージから作成されたElastic Compute Service (ECS) インスタンスは、ホスト名やネットワーク設定などの初期化タスクを自動的に実行できません。 これは、ECSインスタンスの自動デプロイと構成の効率に影響を与える可能性があります。 このトピックでは、Linuxオペレーティングシステムにcloud-initをインストールする方法について説明します。

cloud-initの詳細については、「Cloud-initドキュメント」をご参照ください。

シナリオ

デフォルトでは、すべてのAlibaba cloudパブリックイメージにCloud-initがインストールされます。 オンプレミスのカスタムイメージから作成されたECSインスタンスが自動的にシステム設定を初期化できるようにするには、次の提案を参照し、実際のシナリオに基づいて関連する操作を実行することを推奨します。

  • Cloud-initは、Alibaba Cloudに移行するLinuxサーバーにインストールされていません。

    cloud-initがインストールされていないLinuxサーバーをAlibaba Cloudに移行する前に、サーバーにcloud-initをインストールします。 これにより、Linuxサーバーに基づいて作成されたECSインスタンスは、システムブート中に自動的に初期化できます。

    説明

    LinuxサーバーをAlibaba Cloudに移行したくない場合、サーバーにcloud-initをインストールすると、不必要な複雑さやリソースの使用が発生する可能性があります。 実際の環境に基づいてcloud-initをインストールするかどうかを決定します。

  • Cloud-init 0.7.9以前はLinuxサーバーにインストールされています。

    ほとんどの場合、最近のcloud-initバージョンには、最新のクラウドプラットフォーム機能との互換性を確保するためのより多くの機能と修正が含まれています。 Linuxサーバーに古いバージョンのcloud-initがインストールされている場合は、互換性とセキュリティを最大限に高めるために、cloud-initを0.7.9以降のバージョンにアップグレードすることをお勧めします。

  • Cloud-initはECSインスタンスにインストールされていません。

    ECSインスタンスにcloud-initがインストールされていない場合は、インスタンスにcloud-initをインストールして、インスタンスを自動的に初期化できるようにすることを推奨します。

手順1: cloud-initをインストールまたはアップグレードする必要があるかどうかを確認する

  1. ソースサーバーにログインします。

  2. ソースサーバーにcloud-initがインストールされているかどうかを確認します。

    CentOSシリーズ

    rpm -qa | grep -i cloud-init 
    pip list | grep -i cloud-init

    Ubuntuシリーズ

    dpkg -l | grep -i cloud-init 
    pip list | grep -i cloud-init
    • バージョン番号が返されない場合、またはcloud-initのバージョンが0.7.9以前の場合は、手順2: cloud-initのインストールに進みます。

      重要

      cloud-init 0.7.9は、ネイティブcloud-initの初期バージョンであり、ECSインスタンスには適していないため、アップグレードする必要があります。

    • cloud-init 18以降が使用されている場合、cloud-initはインスタンスの初期化中にネットワークを自動的に設定できます。 ネットワーク構成がビジネス要件を満たしていない場合は、ニーズに応じてネットワーク構成をカスタマイズできます。

    • cloud-init 19.1.21が使用されている場合は、Alibaba Cloud cloud-init 23.2.2にアップグレードすることを推奨します。 Alibaba Cloud cloud-init 19.1.21と比較して、Alibaba Cloud cloud-init 23.2.2は以下の改善と新機能を提供します。

      • Cloud-init 23.2.2では、セキュリティ強化モードでインスタンスメタデータにアクセスできます。 インスタンスメタデータの詳細については、「インスタンスメタデータの取得」をご参照ください。

      • その他の機能強化、パフォーマンスの改善、エラー修正、およびコミュニティへの貢献。 詳細は、「ChangeLog」をご参照ください。

    • cloud-initの他のバージョン番号が返された場合は、このトピックの [次の操作] セクションで説明されている操作を実行します。

  3. cloud-initインストール中の誤操作によるデータ損失を防ぐため、事前に移行元サーバーのデータをバックアップすることをお勧めします。 たとえば、スナップショットを作成して、ソースサーバーのデータをバックアップできます。

ステップ2: cloud-initのインストール

  • (推奨) Alibaba Cloud cloud-init 23.2.2: このバージョンではPython 3.6以降が必要で、データソースとしてAliyunが使用されます。

  • Alibaba Cloud cloud-init 19.1.21: このバージョンでは、Python 3.6以降が必要で、データソースとしてAliyunが使用されます。

  • Alibaba Cloud cloud-init 0.7.6 a17: このバージョンのcloud-initを、CentOS 6、Debian 9、SUSE Linux Enterprise Server (SLES) 12などの以前の特定のオペレーティングシステムバージョンにインストールします。 Alibaba Cloud cloud-init 0.7.6 a17にはPython 2.7が必要で、データソースとしてAliyunを使用します。

    重要

    Pythonコミュニティは、Python 2.7のテクニカルサポートを提供しなくなりました。 依存関係ライブラリに関連するリスクを防ぐために、新しいバージョンのcloud-initを使用することを推奨します。

  • Native cloud-init: コミュニティバージョンのcloud-initは、プロジェクトに貢献する開発者のコミュニティによって公開および管理されている公式バージョンです。 Alibaba Cloud cloud-initの最新バージョンは23.2.2です。 最新バージョンのcloud-initを使用する場合は、コミュニティバージョンのcloud-initをインストールします。 詳細については、公式cloud-init Webサイトをご覧ください。

Alibaba Cloud cloud-initは、Alibaba Cloudサービス向けに最適化されており、より良いサポートを提供できます。 互換性を確保するために、Alibaba Cloud cloud-initの使用を推奨します。 ビジネス要件に基づいてインストールするcloud-initバージョンを選択します。

(推奨) Alibaba Cloud cloud-initのインストール23.2.2

Alibaba Cloud cloud-initの最新バージョンは23.2.2です。 Alibaba Cloud cloud-init 23.2.2はパッケージとして維持されます。 オペレーティングシステムのバージョンに適したパッケージをダウンロードするか、ソースコードパッケージを使用してAlibaba Cloud cloud-init 23.2.2をインストールできます。

異なるオペレーティングシステム用のAlibaba Cloud cloud-init 23.2.2パッケージのダウンロードリンク

オペレーティングシステムの配布

オペレーティングシステムのバージョン

バイナリパッケージ

MD5チェックサム

ソースコードパッケージ

Debian

12

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-5_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-5_all.deb.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/debian12-cloud-init_23.2.2-5-bd18eafc764973b6cef608786eac317e63ec22c0.tar.gz

11

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian11/cloud-init_23.2.2-5_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian11/cloud-init_23.2.2-5_all.deb.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian11/debian11-cloud-init_23.2.2-5-bd18eafc764973b6cef608786eac317e63ec22c0.tar.gz

CentOSストリーム

9

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-5.el9.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-5.el9.noarch.rpm.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/centosstream9-cloud-init_23.2.2-5-bd18eafc764973b6cef608786eac317e63ec22c0.tar.gz

8

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream8/cloud-init-23.2.2-5.el8.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream8/cloud-init-23.2.2-5.el8.noarch.rpm.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream8/centosstream8-cloud-init_23.2.2-5-bd18eafc764973b6cef608786eac317e63ec22c0.tar.gz

フェドラ

40

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora40/cloud-init-23.2.2-5.fc40.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora40/cloud-init-23.2.2-5.fc40.noarch.rpm.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora40/fedora40-cloud-init_23.2.2-5-5febbb46a4cdcb4716dc5a73359a5a73e454607a.tar.gz

39

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora39/cloud-init-23.2.2-5.fc39.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora39/cloud-init-23.2.2-5.fc39.noarch.rpm.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora39/fedora39-cloud-init_23.2.2-5-bd18eafc764973b6cef608786eac317e63ec22c0.tar.gz

38

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora38/cloud-init-23.2.2-5.fc38.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora38/cloud-init-23.2.2-5.fc38.noarch.rpm.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/fedora38/fedora38-cloud-init_23.2.2-5-bd18eafc764973b6cef608786eac317e63ec22c0.tar.gz

AlmaLinux

9

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux9/cloud-init-23.2.2-5.el9.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux9/cloud-init-23.2.2-5.el9.noarch.rpm.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux9/almalinux9-cloud-init_23.2.2-5-bd18eafc764973b6cef608786eac317e63ec22c0.tar.gz

8

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux8/cloud-init-23.2.2-5.el8.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux8/cloud-init-23.2.2-5.el8.noarch.rpm.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/almalinux8/almalinux8-cloud-init_23.2.2-5-bd18eafc764973b6cef608786eac317e63ec22c0.tar.gz

ロッキーLinux

9

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux9/cloud-init-23.2.2-5.el9.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux9/cloud-init-23.2.2-5.el9.noarch.rpm.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux9/rockylinux9-cloud-init_23.2.2-5-bd18eafc764973b6cef608786eac317e63ec22c0.tar.gz

8

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux8/cloud-init-23.2.2-5.el8.noarch.rpm

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux8/cloud-init-23.2.2-5.el8.noarch.rpm.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/rockylinux8/rockylinux8-cloud-init_23.2.2-5-bd18eafc764973b6cef608786eac317e63ec22c0.tar.gz

Ubuntu

24

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu24/cloud-init_23.2.2-5_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu24/cloud-init_23.2.2-5_all.deb.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu24/ubuntu24-cloud-init_23.2.2-5-bd18eafc764973b6cef608786eac317e63ec22c0.tar.gz

22

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu22/cloud-init_23.2.2-5_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu22/cloud-init_23.2.2-5_all.deb.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu22/ubuntu22-cloud-init_23.2.2-5-bd18eafc764973b6cef608786eac317e63ec22c0.tar.gz

20

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu20/cloud-init_23.2.2-5_all.deb

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu20/cloud-init_23.2.2-5_all.deb.md5sum

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/ubuntu20/ubuntu20-cloud-init_23.2.2-5-bd18eafc764973b6cef608786eac317e63ec22c0.tar.gz

次のセクションでは、cloud-initのバイナリパッケージをダウンロードし、Debian 12およびCentOS Stream 9にcloud-initをインストールする方法について説明します。

デビアン12

  1. 次のコマンドを実行して、Alibaba Cloud cloud-initパッケージをダウンロードします。

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-5_all.deb
  2. 次のコマンドを実行して、Alibaba Cloud cloud-initパッケージをインストールします。

    sudo apt-get install -y ./cloud-init_23.2.2-5_all.deb
  3. (オプション) Alibaba Cloud cloud-initパッケージが自動的に更新されたり、最新のオープンソースバージョンにアップグレードされたりしないようにするには、次のコマンドを実行してパッケージを現在のバージョンに保持することを推奨します。

    sudo apt-mark hold cloud-init
  4. 次のコマンドを実行して、cloud-initのバージョンが期待どおりかどうかを確認します。

    cloud-init --version

CentOSストリーム9

  1. 次のコマンドを実行して、Alibaba Cloud cloud-initパッケージをダウンロードします。

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-5.el9.noarch.rpm
  2. 次のコマンドを実行して、Alibaba Cloud cloud-initパッケージをインストールします。

    sudo yum install -y ./cloud-init-23.2.2-5.el9.noarch.rpm
  3. (オプション) Alibaba Cloud cloud-initパッケージが自動的に更新されたり、最新のオープンソースバージョンにアップグレードされたりしないようにするには、次のコマンドを実行してパッケージを現在のバージョンに保持することを推奨します。

    sudo sh -c 'echo "exclude=cloud-init" >> /etc/dnf/dnf.conf'
  4. 次のコマンドを実行して、cloud-initのバージョンが期待どおりかどうかを確認します。

    cloud-init --version
説明

Alibaba Cloud cloud-init 23.2.2は、/etc/hostsファイルにホスト名からプライベートIPv4アドレスへのマッピングを自動的に追加しなくなりました。 ビジネス要件に基づいて、マッピングをファイルに手動で追加できます。 最近のオペレーティングシステムバージョンでは、nss-myhostnameモジュールを使用してホスト名の解決を提供しています。 Red Hatオペレーティングシステムでは、nss-myhostnameモジュールはsystemd-libsパッケージに含まれています。 Debianオペレーティングシステムでは、nss-myhostnameモジュールはlibnss-myhostnameパッケージに含まれています。 /etc/nsswitch.conf設定ファイルは、nss-myhostnameモジュールを有効にするために使用されます。 詳細については、「nss-myhostname(8) - Linuxマニュアルページ」をご参照ください。

Alibaba Cloud cloud-initのインストール19.1.21

  1. python-pip依存関係ライブラリがソースサーバーにインストールされていることを確認します。

    例では、python3-pip依存関係ライブラリが使用されます。 次のいずれかのコマンドを実行して、移行元サーバーのオペレーティングシステムに基づいてpython-pip依存関係ライブラリをインストールします。

    CentOSおよびRed Hat Enterprise Linux (RHEL)

    sudo yum -y install python3-pip

    UbuntuとDebian

    sudo apt-get -y install python3-pip

    openSUSEとSUSE

    sudo zypper -n install python3-pip
  2. 次のコマンドを実行して、Alibaba Cloud cloud-initインストールパッケージをダウンロードします。

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
  3. 次のコマンドを実行して、Alibaba Cloud cloud-initインストールパッケージを現在のディレクトリに解凍します。

    tar -zxvf cloud-init-19.1.21.tgz
  4. 次のコマンドを実行してcloud-initディレクトリに移動し、依存関係ライブラリをインストールします。

    cd ./cloud-init-19.1.21
    pip3 install -r ./requirements.txt
  5. 次のコマンドを実行して、cloud-initディレクトリのtoolsサブディレクトリに移動します。

    cd ./tools
  6. 次のコマンドを実行してdeploy.shスクリプトを実行し、Alibaba Cloud cloud-initをインストールします。

    sudo bash ./deploy.sh <issue> <major_version>

    次の表に、deploy.shスクリプトのパラメーターと対応する値を示します。

    パラメーター

    説明

    <issue>

    オペレーティングシステムのタイプ。 有効な値: centosredhatrheldebianubuntuopensusesles。 このパラメーターの値は大文字と小文字が区別されます。 slesはSUSEまたはSLESを指定します。

    説明

    オペレーティングシステムがCentOS Streamの場合、このパラメーターをcentosに設定します。

    centos

    <major_version>

    オペレーティングシステムのメジャーバージョン番号。

    説明

    Alibaba Cloud cloud-init 19.1.21をUbuntu 14にインストールすることはできません。

    CentOS 7.6のメジャーバージョン番号は7です。

    たとえば、現在のオペレーティングシステムがCentOS 7の場合、スードバッシュ。/deploy.sh centos 7コマンドを実行します。

  7. Alibaba Cloud cloud-initがインストールされているかどうかを確認します。

    Alibaba Cloud cloud-initがインストールされている場合、"description": "success" が返されます。阿里云cloud-init安装成功

  8. 次のコマンドを実行して、cloud-initのバージョンが期待どおりかどうかを確認します。

    cloud-init --version

次のセクションでは、Alibaba Cloud cloud-initをさまざまなLinuxディストリビューションにインストールするために使用できるサンプルのシェルスクリプトを提供します。 オペレーティングシステムに基づいてシェルスクリプトを変更します。

CentOS 7およびCentOS 8

# Check whether the python3-pip dependency library is installed. If the python3-pip dependency library is not installed, install the dependency library.
if !  python3 -c 'import setuptools' >& /dev/null; then
  yum -y install python3-pip
fi
# Back up cloud-init of an earlier version.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init installation package.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install Alibaba Cloud cloud-init.
issue_major=$( cat /etc/redhat-release | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh centos "$issue_major"

RHEL 7およびRHEL 8

# Check whether the python3-pip dependency library is installed. If the python3-pip dependency library is not installed, install the dependency library.
if !  python3 -c 'import setuptools' >& /dev/null; then
  yum -y install python3-pip
fi
# Back up cloud-init of an earlier version.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init installation package.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install Alibaba Cloud cloud-init.
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh rhel "$issue_major"

Ubuntu 16、Ubuntu 18、およびUbuntu 20

# Check whether the python3-pip dependency library is installed. If the python3-pip dependency library is not installed, install the dependency library.
if !  python3 -c 'import setuptools' >& /dev/null; then
  apt-get install python36 python3-pip -y
fi
# Back up cloud-init of an earlier version.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init installation package.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install Alibaba Cloud cloud-init.
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh ubuntu "$issue_major"

デビアン9とデビアン10

# Check whether the python3-pip dependency library is installed. If the python3-pip dependency library is not installed, install the dependency library.
if !  python3 -c 'import setuptools' >& /dev/null; then
  apt-get -y install python3-pip
fi
# Back up cloud-init of an earlier version.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init installation package.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install Alibaba Cloud cloud-init.
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh debian "$issue_major"

SUSE 12とSUSE 15

# Check whether the python3-pip dependency library is installed. If the python3-pip dependency library is not installed, install the dependency library.
if !  python3 -c 'import setuptools'>& /dev/null; then
  zypper -n install python3-pip
fi
# Back up cloud-init of an earlier version.
test -d /etc/cloud && mv /etc/cloud/etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init installation package.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install Alibaba Cloud cloud-init.
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh sles "$issue_major"

openSUSE 15

# Check whether the python3-pip dependency library is installed. If the python3-pip dependency library is not installed, install the dependency library.
if !  python3 -c 'import setuptools'>& /dev/null; then
  zypper -n install python3-pip
fi
# Back up cloud-init of an earlier version.
test -d /etc/cloud && mv /etc/cloud/etc/cloud-old
# Download and decompress the Alibaba Cloud cloud-init installation package.
wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
tar -zxvf ./cloud-init-19.1.21.tgz
# Install Alibaba Cloud cloud-init.
issue_major=$( cat /etc/os-release | grep VERSION_ID | grep -Eo '[0-9]+\.?[0-9]+' | head -1 | awk -F'.' '{printf $1}')
bash ./cloud-init-*/tools/deploy.sh opensuse"$issue_major"

Alibaba Cloud cloud-init 0.7.6 a17のインストール

説明

デフォルトでは、CentOS 6、Debian 9、およびSLES 12のAlibaba Cloud cloud-init-0.7.6a1 7がAlibaba Cloudパブリックイメージにインストールされます。 Alibaba Cloud cloud-init 0.7.6 a17をテストする場合は、sudo mv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bakコマンドを実行して、最初に設定ファイルをバックアップします。

  1. 次のコマンドを実行して、オペレーティングシステムのバージョンがCentOS 6、Debian 9、またはSLES 12であるかどうかを確認します

    cat /etc/issue
  2. python-pip依存関係ライブラリがソースサーバーにインストールされていることを確認します。

    この例では、python2-pip依存関係ライブラリが使用されます。 次のコマンドを実行して、python2-pip依存関係ライブラリをインストールします。

    CentOS 6とSLES 12

    sudo yum -y install python2-pip

    デビアン9

    sudo apt-get -y install python2-pip
  3. 次のコマンドを実行して、Alibaba Cloud cloud-init 0.7.6 a17インストールパッケージをダウンロードして解凍します

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloud-init-0.7.6a17.tgz
    tar -zxvf cloud-init-0.7.6a17.tgz
  4. 次のコマンドを実行して、cloud-initディレクトリのtoolsサブディレクトリに移動します。

    cd cloud-init-0.7.6a17/tools/
  5. 次のコマンドを実行してdeploy.shスクリプトを実行し、Alibaba Cloud cloud-initをインストールします。

    sudo bash ./deploy.sh <issue> <major_version>

    たとえば、現在のオペレーティングシステムがCentOS 6の場合、スードバッシュ。/deploy.sh centos 6コマンドを実行して、Alibaba Cloud cloud-initをインストールします。

    次の表に、deploy.shスクリプトのパラメーターと対応する値を示します。

    パラメーター

    説明

    <issue>

    オペレーティングシステムのタイプ。 有効な値: centosdebiansles。 このパラメーターの値は大文字と小文字が区別されます。 slesはSUSEまたはSLESを指定します。

    centos

    <major_version>

    オペレーティングシステムのメジャーバージョン番号。

    CentOS 6.5のメジャーバージョン番号は6です。

  6. 次のコマンドを実行して、cloud-initのバージョンが期待どおりかどうかを確認します。

    cloud-init --version

native cloud-initのインストール

  1. Git、Python、およびpython-pip依存関係ライブラリがソースサーバーにインストールされていることを確認します。

    例では、Git、Python 3.6、およびpython3-pipが使用されています。 次のコマンドを実行して、特定のLinuxディストリビューション用のGit、Python、およびpython-pip依存ライブラリをインストールします。

    CentOSとRHEL

    sudo yum -y install git python36 python3-pip

    UbuntuとDebian

    sudo apt-get -y install git python36 python3-pip

    openSUSEとSUSE

    sudo zypper -n install git python36 python3-pip
  2. 次のコマンドを実行して、Gitからcloud-initソースコードリポジトリをダウンロードします。

    git clone https://git.launchpad.net/cloud-init
  3. 次のコマンドを実行してcloud-initディレクトリに移動します。

    cd ./cloud-init
  4. 次のコマンドを実行して、必要なすべての依存関係ライブラリをインストールします。

    sudo pip3 install -r ./requirements.txt
  5. 次のコマンドを実行してcloud-initをインストールします。

    python3 setup.py install
  6. 変更します。Modify thecloud.cfg設定ファイル。

    1. cloud.cfg設定ファイルを開きます。

      sudo vi /etc/cloud/cloud.cfg

      vi /etc/cloud/cloud.cfg

    2. cloud_init_modules: の前のコンテンツを次のコンテンツに置き換えます。

      # Example datasource config
      # The top level settings are used as module
      # and system configuration.
      # A set of users which may be applied and/or used by various modules
      # when a 'default' entry is found it will reference the 'default_user'
      # from the distro configuration specified below
      users:
         - default
      user:
          name: root
          lock_passwd: False
      # If this is set, 'root' will not be able to ssh in and they 
      # will get a message to login instead as the above $user
      disable_root: false
      # This will cause the set+update hostname module to not operate (if true)
      preserve_hostname: false
      syslog_fix_perms: root:root
      datasource_list: [ AliYun ]
      # Example datasource config
      datasource:
          AliYun:
              support_xen: false
              timeout: 5 # (defaults to 50 seconds)
              max_wait: 60 # (defaults to 120 seconds)
      #      metadata_urls: [ 'blah.com' ]
      # The modules that run in the 'init' stage
      cloud_init_modules:
  7. 次のコマンドを実行して、cloud-initのバージョンが期待どおりかどうかを確認します。

    cloud-init --version

(オプション) 手順3: cloud-initの設定

ネットワーク設定のカスタマイズ

cloud-init 18以降のバージョンでは、次のネットワーク設定を自動的に適用するために初期化が実行されます。BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no。 デフォルトのネットワーク設定がビジネス要件を満たしていない場合は、次の操作を実行してcloud-init設定ファイルを変更し、ネットワーク設定をカスタマイズできます。

  1. 次のコマンドを実行して、cloud-initのデフォルト設定ファイルを開きます。 Iキーを押して挿入モードに入ります。

    sudo vim /etc/cloud/cloud.cfg
  2. 自動ネットワーク設定を無効にするには、Example datasource configの前に次の無効設定を追加します。

    network:
      config: disabled

    cloud-init-disable-config

    設定を追加した後、cloud-initはネットワーク設定を管理しないため、/etc/sysconfig/network-scripts/ ディレクトリ内のifcfg-eth0などのネットワーク設定ファイルを手動で管理する必要があります。

  3. Escキーを押して挿入モードを終了し、:wqと入力し、enterキーを押してcloud-init設定ファイルを保存して閉じます。

  4. ビジネス要件に基づいて、/etc/sysconfig/network-scripts/ ディレクトリのIPアドレス、サブネットマスク、ゲートウェイなどのネットワーク設定をカスタマイズします。

自動ホスト名設定の無効化

デフォルトでは、cloud-initはインスタンスの起動時にECSインスタンスのホスト名および /etc/hostnameファイルを自動的に変更します。 ECSインスタンスのホスト名または /etc/hostsファイルを変更したくない場合は、以下の操作を実行してcloud-init設定ファイルを変更できます。

  1. 次のコマンドを実行して、cloud-initのデフォルト設定ファイルを開きます。 Iキーを押して挿入モードに入ります。

    sudo vim /etc/cloud/cloud.cfg
  2. preserve_hostname: falsepreserve_hostname: trueに変更します。

    hostname

  3. Escキーを押して挿入モードを終了し、:wqと入力し、enterキーを押してcloud-init設定ファイルを保存して閉じます。

次のステップ

  • Server Migration Center (SMC) を使用して、LinuxサーバーをAlibaba Cloudに移行できます。 詳細については、「ECSインスタンスへのサーバーの移行」をご参照ください。

  • Linuxカスタムイメージを実行するECSインスタンスにcloud-initをインストールした後、インスタンスを再起動してcloud-initが期待どおりにインストールされているかどうかを確認できます。 ECSインスタンスのホスト名、ネットワーク設定、およびnetwork Time Protocol (NTP) 設定を自動的に設定できる場合、cloud-initは期待どおりにインストールされます。 たとえば、次のcatコマンドを実行して、ECSインスタンスの再起動後にネットワーク設定ファイルを表示します。

    sudo reboot
    cat /etc/sysconfig/network-scripts/ifcfg-eth0

    次のコマンド出力は、システムがDHCP、ネットワークデバイス、デバイスタイプなどのネットワーク設定を自動的に構成したことを示しています。

    BOOTPROTO=dhcp
    DEVICE=eth0
    ONBOOT=yes
    STARTMODE=auto
    TYPE=Ethernet
    USERCTL=no

よくある質問

  • Python 3を使用してcloud-initをインストールした後、必要な依存関係ライブラリがない場合はどうすればよいですか?

    欠落している依存関係ライブラリは、イメージによって異なる場合があります。 pipを使用して、不足している依存関係ライブラリをインストールし、cloud-initを再インストールできます。

  • cloud-initが期待どおりに実行されず、エラーメッセージが返された場合はどうすればよいですか?

    デフォルトのソフトウェアパッケージマネージャー (YUMなど) とpipマネージャーを使用して異なるバージョンの依存関係ライブラリをインストールすると、ライブラリのバージョンが競合し、cloud-initでエラーが発生する可能性があります。 エラーメッセージに基づいて依存関係ライブラリをダウンロードすることを推奨します。

    エラーメッセージ

    原因

    トラブルシューティングコマンド

    no setuptools module in python

    python setuptoolsモジュールがありません。

    たとえば、Python 3.6を使用する場合は、オペレーティングシステムに基づいて次のいずれかのコマンドを実行して、python setuptoolsモジュールをインストールします。

    • CentOSとRed Hat: yum -y install python3-pip

    • UbuntuとDebian: apt-get -y install python3-pip

    • openSUSEとSUSE: zypper -n install python3-pip

    File "/home/testuser/cloud-init/cloudinit/log.py", line 19, in <module>
          import six
      ImportError: No module named six  )

    6つの依存関係ライブラリがありません。

    pip3 install six
    File "/home/testuser/cloud-init/cloudinit/url_helper.py", line 20, in <module>
          import oauthlib.oauth1 as oauth1
      ImportError: No module named oauthlib.oauth1  )

    oauthlib依存関係ライブラリがありません。

    pip3 install oauthlib

    依存関係ライブラリの欠落の表示はありません。

    エラーメッセージは原因を示していません。

    次のコマンドを実行して、cloud-initのrequirements.txtファイルに表示されるすべての依存関係ライブラリをインストールします。

    pip3 install -r requirements.txt
  • インスタンスにPython 3の新しいバージョンをインストールした後、ECSインスタンスでcloud-initが期待どおりに実行されない場合はどうすればよいですか?

    Python 3.9などのPython 3の新しいバージョンをECSインスタンスにインストールし、そのバージョンにシンボリックリンク (ln -s /usr/bin/python3.9 /usr/bin/python3など) を作成してインストールされたバージョンをデフォルトバージョンとして設定した場合、cloud-initはインスタンスで期待どおりに実行されません。 たとえば、cloud-init -- versionコマンドを実行すると、エラーが報告されます。

    $cloud-init --version
    Traceback (most recent call last):
      File "/usr/local/bin/cloud-init", line 33, in <module>
        sys.exit(load_entry_point('cloud-init==19.1.9', 'console_scripts', 'cloud-init')())
      File "/usr/local/bin/cloud-init", line 22, in importlib_load_entry_point
        for entry_point in distribution(dist_name).entry_points
      File "/usr/lib64/python3.9/importlib/metadata.py", line 524, in distribution
        return Distribution.from_name(distribution_name)
      File "/usr/lib64/python3.9/importlib/metadata.py", line 187, in from_name
        raise PackageNotFoundError(name)
    importlib.metadata.PackageNotFoundError: cloud-init

    以下のいずれかの方法を使用して問題を解決できます。

    • 方法1: 新しいバージョンのPython 3を使用してcloud-initを再インストールします。

    • 方法2: cloud-init実行可能ファイルを変更して、Pythonインタープリターのパスを以前のPython 3バージョンのパスに設定します。 この例では、Python 3.6が使用されます。 cloud-init実行可能ファイルのPythonインタプリタパスを変更するには、次の操作を実行します。

      1. 次のコマンドを実行して、cloud-init実行可能ファイルを開きます。

        vim   /usr/local/bin/cloud-init
      2. Iキーを押して挿入モードに入ります。 実行可能ファイルの先頭で、次の内容を置き換えます #! をPython 3.6のパスに置き換えます。

        #! で始まる行の新しいコンテンツの例:

        #!/usr/bin/python3.6
      3. Escキーを押して挿入モードを終了し、:wqと入力し、enterキーを押してファイルを保存して閉じます。

  • インスタンスの作成中にインスタンスに指定したユーザーデータが、インスタンスにcloud-initをインストールした後に実行されない、または実行できない場合はどうすればよいですか。

    1. インスタンスで次のコマンドを実行して、インスタンスメタデータにユーザーデータが存在するかどうかを確認します。

      curl http://100.100.100.200/latest/user-data

      コマンド出力:

      • ユーザーデータがインスタンスメタデータに存在する場合、コマンド出力にはユーザーデータが含まれます。 この場合、他の操作を実行して問題をトラブルシューティングします。

      • ユーザーデータがインスタンスメタデータに存在しない場合、コマンド出力は返されません。

    2. ユーザーデータが実行されない、または実行できない理由を特定します。

      • ユーザーデータが有効な形式であるかどうかを確認します。

        cloud-initがユーザーデータを実行できるようにするには、ユーザーデータが有効な形式である必要があります。 たとえば、ユーザーデータの最初の行は #! で始まる必要があります。 詳細については、「インスタンスユーザーデータ」トピックの「インスタンスの初期化設定のカスタマイズ」セクションをご参照ください。

      • cloud-initの /var/log/cloud-init.logファイルのユーザーデータの実行結果を確認し、返されたエラーメッセージに基づいて問題をトラブルシューティングします。

        ログファイル内のユーザーデータの実行结果の例:

         util.py[DEBUG]: Running command ['/var/lib/cloud/instance/scripts/part-001'] with allowed return codes [0] (shell=False, capture=False)
      • ユーザーデータの実行時に生成される標準出力 (stdout) および標準エラー (stderr) を確認してください。

        systemd (Linuxのシステム初期化ツール) では、ユーザーデータはcloud-final.serviceシステムサービスによって実行されます。 次のコマンドを実行して、ユーザーデータの実行時に生成されたstdoutとstderrを確認できます。 次に、コマンド出力に基づいて問題をトラブルシューティングできます。

        journalctl -u cloud-final.service
      • 上記の操作を実行した後、ユーザーデータが実行されない、または実行されない理由を特定できない場合は、ユーザーデータをオンプレミスのコンピューターにコピーして、ユーザーデータが実行できるかどうかを確認することをお勧めします。

  • インスタンスのシステム設定を初期化できず、インスタンスにcloud-initがインストールされた後にユーザーデータスクリプトを実行できない場合はどうすればよいですか。

    1. 次のコマンドを実行して、4つのcloud-initサービスがシステム起動時に自動的に実行されるように設定されているかどうかを確認します。

      systemctl is-enabled cloud-init-local.service
      systemctl is-enabled cloud-init.service
      systemctl is-enabled cloud-config.service
      systemctl is-enabled cloud-final.service

      cloud-initサービスに対してエラーメッセージまたはdisabledが表示された場合、サービスはシステム起動時に自動的に実行されるように構成されていません。

    2. 次のコマンドを実行して、システムの起動時に自動的に実行される4つのcloud-initサービスを設定します。

      systemctl enable cloud-init-local.service
      systemctl enable cloud-init.service
      systemctl enable cloud-config.service
      systemctl enable cloud-final.service
  • インスタンスの作成時にディスクのサイズを変更した後、システムディスクのルートパーティションが自動的に拡張されない場合はどうすればよいですか?

    Cloud-initは、Linuxインスタンスのパーティションのサイズを自動的に変更します。 growpartツールがインストールされていること、およびcloud.cfgファイルの設定が正しいことを確認してください。

    1. 次のコマンドを実行して、growpartツールがインスタンスオペレーティングシステムにインストールされているかどうかを確認します。

      which growpart
    2. (条件付きで必要) groupartツールがインスタンスオペレーティングシステムにインストールされていない場合は、オペレーティングシステムに基づいて次のいずれかのコマンドを実行してgroupartツールをインストールします。

      • RHELシリーズ:

        sudo yum -y install cloud-utils-growpart
      • Debianシリーズ:

        sudo apt -y install cloud-guest-utils
    3. 次のコマンドを実行して、/etc/cloud/cloud.cfgファイルに次の図に示す内容が含まれているかどうかを確認します。

      cat /etc/cloud/cloud.cfg

      配置内容

    4. (条件付きで必要) /etc/cloud/cloud.cfgファイルにコンテンツが含まれていない場合は、ファイルにコンテンツを追加します。

  • ECSコンソールでインスタンスのホスト名を変更してインスタンスを再起動した後、cloud-init 0.7.6 a16以前がインストールされているECSインスタンスの新しいホスト名が有効にならない場合はどうすればよいですか。

    • 問題の内容

      ECSコンソールでECSインスタンスのホスト名を変更してインスタンスを再起動した後、新しいホスト名は有効になりません。 ECSインスタンスでcloud-init -- versionコマンドを実行すると、インスタンスにインストールされているcloud-initのバージョンが0.7.6 a16以前であることがコマンド出力に示されます。

    • 原因

      cloud-initがupdate_hostnameモジュールを使用してホスト名を更新する場合、cloud-initはhostnameコマンドを実行して現在のシステムホスト名を取得し、cloud-initキャッシュ内のホスト名を /var/lib/cloud/data/previous-hostnameファイルから読み取りホスト名と照合します。 ホスト名が同じ場合、cloud-initはホスト名の更新を実行します。 ホスト名が異なる場合、cloud-initはホスト名が手動で変更されたと判断し、ホスト名の更新を実行しません。

      Red Hatオペレーティングシステムでは、/var/lib/cloud/data/previous-hostnameファイルから読み取られたコンテンツに改行が追加されますが、改行はhostnameコマンドの出力には追加されません。 その結果、読み取り内容がコマンド出力と異なり、ホスト名の更新に失敗します。

    • ソリューション

      以下のいずれかの方法を使用して問題を解決できます。

      • cloud-initバージョンをアップグレードします。 詳細については、このトピックの手順2: Install cloud-initセクションを参照してください。

        • CentOS 6以前の場合、cloud-init 0.7.6 a17にアップグレードします。

        • CentOS 7の場合、cloud-init 19.1.21にアップグレードします。

        • CentOS 8以降の場合、cloud-init 23.2.2以降にアップグレードします。

      • ラインフィードを追加します。

        cloud-initのcloudinit/distros/rhel.pyファイルを変更し、hostnameコマンド出力に改行を追加します。 find / -name rhel.pyコマンドを実行して、cloudinit/distros/rhel.pyファイルのパスを取得できます。 hostnameコマンド出力に改行を追加する方法については、「distros/rhel.py: _read_hostname() missing strip on "hostname" 」をご参照ください。 hostnameコマンド出力にラインフィードを追加する方法の例:

        diff --git a/cloudinit/distros/rhel.py b/cloudinit/distros/rhel.py
        index 0b68414e..65176e99 100644
        --- a/cloudinit/distros/rhel.py
        +++ b/cloudinit/distros/rhel.py
        @@ -143,6 +143,7 @@ class Distro(distros.Distro):
                     return util.load_file(filename).strip()
                 elif self.uses_systemd():
                     (out, _err) = util.subp(['hostname'])
        +            out = out.strip()
                     if len(out):
                         return out
                     else: