全部产品
Search
文档中心

Elastic Compute Service:Instal cloud-init

更新时间:Nov 09, 2025

cloud-init adalah alat sumber terbuka yang menginisialisasi sistem operasi Linux dengan melakukan tugas-tugas seperti mengatur kata sandi awal, mengonfigurasi hostname, dan menjalankan skrip kustom. Jika Anda berencana memigrasikan citra kustom lokal ke Alibaba Cloud dan citra tersebut tidak memiliki cloud-init, Anda harus menginstalnya secara manual. Jika tidak, Instans Elastic Compute Service (ECS) yang dibuat dari citra tersebut tidak dapat secara otomatis melakukan tugas-tugas inisialisasi, seperti mengatur hostname dan mengonfigurasi jaringan. Hal ini dapat menghambat penerapan dan konfigurasi instans otomatis. Topik ini menjelaskan cara menginstal cloud-init di sistem operasi Linux.

Untuk informasi lebih lanjut tentang cloud-init, lihat dokumentasi resmi cloud-init.

Skenario

cloud-init diinstal secara default pada semua gambar publik Alibaba Cloud. Untuk memastikan bahwa Instance ECS yang dibuat dari gambar kustom lokal Anda dapat menginisialisasi konfigurasi sistem secara otomatis, ikuti saran untuk skenario Anda.

  • Server Linux tanpa cloud-init yang direncanakan untuk migrasi ke cloud

    Jika Anda berencana untuk memigrasikan server yang tidak memiliki cloud-init ke Alibaba Cloud, instal cloud-init sebelum melakukan migrasi. Hal ini memastikan bahwa Instance ECS yang dihasilkan dapat menjalankan tugas inisialisasi secara otomatis saat startup.

    Catatan

    Untuk server yang tidak direncanakan untuk migrasi ke cloud, menginstal cloud-init mungkin menambah kompleksitas yang tidak perlu atau menggunakan sumber daya tambahan. Anda dapat memutuskan apakah akan menginstalnya berdasarkan lingkungan spesifik Anda.

  • Server Linux dengan versi cloud-init lebih lama dari 0.7.9

    Versi cloud-init yang lebih baru biasanya mencakup lebih banyak fitur dan perbaikan bug untuk meningkatkan kompatibilitas dengan fitur platform cloud terbaru. Jika server Anda memiliki versi cloud-init yang lebih lama, Anda harus meningkatkannya ke versi yang lebih baru untuk memastikan kompatibilitas dan keamanan yang optimal.

  • Instance ECS di Alibaba Cloud yang tidak memiliki cloud-init terinstal

    Jika Instance ECS Anda tidak memiliki cloud-init, Anda dapat menginstalnya secara manual pada instans tersebut untuk memastikan bahwa ia dapat menyelesaikan konfigurasi inisialisasi.

Langkah 1: Periksa apakah akan menginstal atau meningkatkan cloud-init

  1. Masuk ke server sumber.

  2. Jalankan perintah berikut untuk memeriksa apakah cloud-init telah diinstal.

    Seri CentOS

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

    Seri Ubuntu

    dpkg -l | grep -i cloud-init 
    pip list | grep -i cloud-init
    • Jika tidak ada output yang dikembalikan atau versinya lebih lama dari 0.7.9: Lanjutkan ke Langkah 2: Instal cloud-init.

      Penting

      Versi 0.7.9 adalah versi komunitas awal dari cloud-init yang tidak cocok untuk inisialisasi Instance ECS. Anda harus meningkatkannya ke versi yang lebih baru.

    • Jika versinya 18 atau lebih baru: Anda tidak perlu menginstal cloud-init. Namun, cloud-init secara otomatis mengonfigurasi jaringan selama inisialisasi instans. Jika konfigurasi default tidak memenuhi kebutuhan Anda, Anda dapat menonaktifkan fitur inisialisasi jaringan. Untuk informasi lebih lanjut, lihat Nonaktifkan inisialisasi jaringan otomatis oleh Alibaba Cloud.

    • Jika versinya 19.1.21: Tingkatkan ke Alibaba Cloud cloud-init 23.2.2. Alibaba Cloud cloud-init 23.2.2 memberikan peningkatan dan fitur baru berikut dibandingkan dengan versi 19.1.21:

      • Instans yang menggunakan cloud-init 23.2.2 mendukung akses ke metadata dalam mode Penguatan Keamanan. Untuk informasi lebih lanjut tentang metadata instans, lihat Metadata Instans.

      • Perubahan lainnya mencakup peningkatan fitur, perbaikan kinerja, perbaikan bug, dan kontribusi komunitas. Untuk informasi lebih lanjut, lihat file ChangeLog.

    • Versi lainnya: Anda tidak perlu menginstal cloud-init. Lanjutkan ke Langkah selanjutnya.

  3. Untuk mencegah kehilangan data akibat operasi yang salah selama instalasi, kami sarankan Anda terlebih dahulu mencadangkan data server sumber Anda. Sebagai contoh, Anda dapat membuat Snapshot.

Langkah 2: Instal cloud-init

  • (Direkomendasikan) Alibaba Cloud cloud-init 23.2.2: Memerlukan Python 3.6 atau yang lebih baru. Sumber data adalah Aliyun.

  • Alibaba Cloud cloud-init 19.1.21: Memerlukan Python 3.6 atau yang lebih baru. Sumber data adalah Aliyun.

  • Alibaba Cloud cloud-init 0.7.6a17: Versi ini diperlukan untuk beberapa sistem operasi yang lebih lama, seperti CentOS 6, Debian 9, dan SUSE Linux Enterprise Server 12. Memerlukan Python 2.7. Sumber data adalah Aliyun.

    Penting

    Karena komunitas Python tidak lagi memberikan dukungan teknis untuk Python 2.7, kami menyarankan Anda menggunakan versi cloud-init yang lebih baru untuk menghindari masalah potensial dengan pustaka dependensi.

  • Versi komunitas cloud-init: Versi komunitas dipelihara oleh komunitas cloud-init. Versi terbaru dari Alibaba Cloud cloud-init adalah 23.2.2. Jika Anda membutuhkan versi yang lebih baru, Anda dapat menginstal versi komunitas. Untuk informasi versi lebih lanjut, lihat situs resmi cloud-init.

Versi komunitas cloud-init adalah versi resmi dari proyek tersebut. Versi Alibaba Cloud dioptimalkan untuk platform Alibaba Cloud dan memberikan dukungan yang lebih baik untuk layanannya. Oleh karena itu, kami menyarankan Anda menggunakan versi Alibaba Cloud dari cloud-init. Anda dapat memilih versi untuk diinstal berdasarkan kebutuhan Anda.

(Direkomendasikan) Alibaba Cloud cloud-init 23.2.2

Versi terbaru dari Alibaba Cloud cloud-init adalah 23.2.2. Versi ini dipelihara sebagai paket perangkat lunak. Anda dapat menginstal paket untuk sistem operasi Anda atau menginstalnya dari paket sumber.

Tabel berikut mencantumkan tautan unduhan untuk paket berbagai sistem operasi.

Jenis sistem operasi

Versi sistem operasi

Paket binari

Pemeriksaan MD5SUM

Paket sumber

Debian

12

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

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

https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-23.2.2-8.tar.gz

11

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

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

CentOS Stream

9

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

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

8

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

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

Fedora

40

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

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

39

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

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

38

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

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

AlmaLinux

9

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

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

8

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

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

Rocky Linux

9

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

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

8

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

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

Ubuntu

24

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

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

22

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

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

20

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

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

Prosedur berikut menggunakan Debian 12 dan CentOS Stream 9 sebagai contoh untuk menunjukkan cara mengunduh dan menginstal paket binari.

Debian 12

  1. Jalankan perintah berikut untuk mengunduh paket cloud-init.

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/debian12/cloud-init_23.2.2-5_all.deb
  2. Jalankan perintah berikut untuk menginstal paket.

    sudo apt-get install -y ./cloud-init_23.2.2-5_all.deb
  3. (Opsional) Untuk mencegah paket diperbarui atau ditingkatkan ke versi open source yang lebih baru, Anda dapat menjalankan perintah berikut untuk menahan paket cloud-init pada versi saat ini.

    sudo apt-mark hold cloud-init
  4. Jalankan perintah berikut untuk memeriksa apakah versi cloud-init adalah versi yang diharapkan.

    cloud-init --version

CentOS Stream 9

  1. Jalankan perintah berikut untuk mengunduh paket cloud-init.

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/centosstream9/cloud-init-23.2.2-5.el9.noarch.rpm
  2. Jalankan perintah berikut untuk menginstal paket.

    sudo yum install -y ./cloud-init-23.2.2-5.el9.noarch.rpm
  3. (Opsional) Untuk mencegah paket diperbarui atau ditingkatkan ke versi open source yang lebih baru, Anda dapat menjalankan perintah berikut untuk mengunci paket cloud-init pada versi saat ini.

    sudo sh -c 'echo "exclude=cloud-init" >> /etc/dnf/dnf.conf'
  4. Jalankan perintah berikut untuk memeriksa apakah versi cloud-init adalah versi yang diharapkan.

    cloud-init --version
Catatan

Secara default, Alibaba Cloud cloud-init 23.2.2 tidak lagi menambahkan pemetaan dari nama host ke alamat IPv4 pribadi dalam file `/etc/hosts`. Jika bisnis Anda memerlukan konfigurasi ini, Anda harus mengonfigurasinya sendiri. Versi sistem operasi yang lebih baru menggunakan komponen nss-myhostname untuk memastikan konektivitas dengan nama host. Komponen ini disediakan oleh paket systemd-libs (untuk seri Red Hat) atau paket libnss-myhostname (untuk seri Debian) dan diaktifkan melalui file konfigurasi `/etc/nsswitch.conf`. Untuk informasi lebih lanjut, lihat manual nss-myhostname.

Alibaba Cloud cloud-init 19.1.21

  1. Pastikan bahwa pustaka dependensi Python PIP terinstal di server sumber.

    Contoh berikut menunjukkan cara menginstal pustaka dependensi `python3-pip` pada distribusi Linux yang berbeda.

    CentOS/Red Hat Enterprise Linux

    sudo yum -y install python3-pip

    Ubuntu/Debian

    sudo apt-get -y install python3-pip

    OpenSUSE/SUSE

    sudo zypper -n install python3-pip
  2. Jalankan perintah berikut untuk mengunduh Alibaba Cloud cloud-init.

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/cloudinit/cloud-init-19.1.21.tgz
  3. Jalankan perintah berikut untuk mengekstrak paket instalasi cloud-init ke direktori saat ini.

    tar -zxvf cloud-init-19.1.21.tgz
  4. Masuk ke direktori cloud-init dan instal pustaka dependensi.

    cd ./cloud-init-19.1.21
    pip3 install -r ./requirements.txt
  5. Masuk ke subdirektori tools dari direktori cloud-init.

    cd ./tools
  6. Jalankan perintah berikut untuk menjalankan skrip deploy.sh dan menginstal cloud-init.

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

    Tabel berikut menjelaskan parameter skrip deploy.sh dan menyediakan nilai contoh.

    Parameter

    Deskripsi

    Contoh

    <issue>

    Jenis platform sistem operasi. Nilai yang valid: centos, redhat, rhel, debian, ubuntu, opensuse, dan sles. Parameter ini bersifat case-sensitive. sles menentukan SUSE/SLES.

    Catatan

    Jika sistem operasi adalah CentOS Stream, atur parameter ini ke centos.

    centos

    <major_version>

    Nomor versi utama platform sistem operasi.

    Catatan

    Anda tidak dapat menginstal Alibaba Cloud cloud-init 19.1.21 pada Ubuntu 14.

    Nomor versi utama CentOS 7.6 adalah 7.

    Sebagai contoh, jika sistem operasi Anda saat ini adalah CentOS 7, jalankan perintah sudo bash ./deploy.sh centos 7.

  7. Konfirmasikan bahwa cloud-init telah terinstal.

    Jika "description": "success" dikembalikan, instalasi berhasil.阿里云cloud-init安装成功

  8. Jalankan perintah berikut untuk memeriksa apakah versi cloud-init adalah versi yang diharapkan.

    cloud-init --version

Berikut adalah contoh skrip shell untuk menginstal Alibaba Cloud cloud-init pada distribusi Linux yang berbeda sebagai referensi Anda. Anda dapat memodifikasi skrip berdasarkan sistem operasi Anda.

CentOS 7/8

# Periksa dan instal python3-pip.
if ! python3 -c 'import setuptools' >& /dev/null; then
  yum -y install python3-pip
fi
# Cadangkan versi lama cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Unduh dan ekstrak paket Alibaba Cloud cloud-init.
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
# Instal 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"

Red Hat Enterprise Linux 7/8

# Periksa dan instal python3-pip.
if ! python3 -c 'import setuptools' >& /dev/null; then
  yum -y install python3-pip
fi
# Cadangkan versi lama cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Unduh dan ekstrak paket Alibaba Cloud cloud-init.
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
# Instal 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/18/20

# Periksa dan instal python3-pip.
if ! python3 -c 'import setuptools' >& /dev/null; then
  apt-get install python36 python3-pip -y
fi
# Cadangkan versi lama cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Unduh dan ekstrak paket Alibaba Cloud cloud-init.
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
# Instal 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"

Debian 9/10

# Periksa dan instal python3-pip.
if ! python3 -c 'import setuptools' >& /dev/null; then
  apt-get -y install python3-pip
fi
# Cadangkan versi lama cloud-init.
test -d /etc/cloud && mv /etc/cloud /etc/cloud-old
# Unduh dan ekstrak paket Alibaba Cloud cloud-init.
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
# Instal 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/15

# Periksa dan instal python3-pip.
if ! python3 -c 'import setuptools'>& /dev/null; then
  zypper -n install python3-pip
fi
# Cadangkan versi lama cloud-init.
test -d /etc/cloud && mv /etc/cloud/etc/cloud-old
# Unduh dan ekstrak paket Alibaba Cloud cloud-init.
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
# Instal 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

# Periksa dan instal python3-pip.
if ! python3 -c 'import setuptools'>& /dev/null; then
  zypper -n install python3-pip
fi
# Cadangkan versi lama cloud-init.
test -d /etc/cloud && mv /etc/cloud/etc/cloud-old
# Unduh dan ekstrak paket Alibaba Cloud cloud-init.
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
# Instal 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.6a17

Catatan

Secara default, gambar publik Alibaba Cloud untuk CentOS 6, Debian 9, dan SUSE Linux Enterprise Server 12 memiliki cloud-init-0.7.6a17 terinstal. Untuk melakukan pengujian, Anda dapat menjalankan perintah sudo mv /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg_bak untuk mencadangkan file konfigurasi terlebih dahulu.

  1. Jalankan perintah berikut untuk memeriksa apakah sistem operasi adalah CentOS 6, Debian 9, atau SUSE Linux Enterprise Server 12.

    cat /etc/issue
  2. Pastikan bahwa pustaka dependensi Python PIP terinstal di server sumber.

    Contoh berikut menunjukkan cara menginstal pustaka dependensi `python2-pip`.

    CentOS 6/SUSE Linux Enterprise Server 12

    sudo yum -y install python2-pip

    Debian 9

    sudo apt-get -y install python2-pip
  3. Jalankan perintah berikut untuk mengunduh dan mengekstrak Alibaba Cloud cloud-init 0.7.6a17.

    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. Masuk ke subdirektori tools dari direktori cloud-init.

    cd cloud-init-0.7.6a17/tools/
  5. Jalankan perintah berikut untuk menginstal cloud-init.

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

    Sebagai contoh, jika sistem operasi Anda saat ini adalah CentOS 6, jalankan perintah sudo bash ./deploy.sh centos 6.

    Tabel berikut menjelaskan parameter skrip deploy.sh dan menyediakan nilai contoh.

    Parameter

    Deskripsi

    Contoh

    <issue>

    Jenis platform sistem operasi. Nilai yang valid: centos, debian, dan sles. Parameter ini bersifat case-sensitive. sles menentukan SUSE/SLES.

    centos

    <major_version>

    Nomor versi utama platform sistem operasi.

    Nomor versi utama CentOS 6.5 adalah 6.

  6. Jalankan perintah berikut untuk memeriksa apakah versi cloud-init adalah versi yang diharapkan.

    cloud-init --version

Versi komunitas cloud-init

  1. Pastikan bahwa Git, Python, dan pustaka dependensi Python PIP terinstal di server sumber.

    Contoh berikut menunjukkan cara menginstal Git, Python 3.6, dan pustaka dependensi `python3-pip` pada distribusi Linux yang berbeda.

    CentOS/Red Hat Enterprise Linux

    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. Jalankan perintah berikut untuk mengunduh paket sumber cloud-init menggunakan Git.

    git clone https://git.launchpad.net/cloud-init
  3. Masuk ke direktori cloud-init.

    cd ./cloud-init
  4. Jalankan perintah berikut untuk menginstal semua pustaka dependensi.

    sudo pip3 install -r ./requirements.txt
  5. Jalankan perintah berikut untuk menginstal cloud-init.

    python3 setup.py install
  6. Modifikasi file konfigurasi cloud.cfg.

    1. Buka file konfigurasi.

      sudo vi /etc/cloud/cloud.cfg

      vi /etc/cloud/cloud.cfg

    2. Ganti konfigurasi sebelum cloud_init_modules: dengan konten berikut.

      # Contoh konfigurasi datasource
      # Pengaturan tingkat atas digunakan sebagai modul
      # dan konfigurasi sistem.
      # Sekumpulan pengguna yang dapat diterapkan dan/atau digunakan oleh berbagai modul
      # ketika entri 'default' ditemukan, itu akan merujuk ke 'default_user'
      # dari konfigurasi distro yang ditentukan di bawah ini
      users:
         - default
      user:
          name: root
          lock_passwd: False
      # Jika ini disetel, 'root' tidak akan dapat masuk melalui ssh dan mereka 
      # akan mendapatkan pesan untuk masuk sebagai pengguna di atas $user
      disable_root: false
      # Ini akan menyebabkan modul set+update hostname tidak beroperasi (jika true)
      preserve_hostname: false
      syslog_fix_perms: root:root
      datasource_list: [ AliYun ]
      # Contoh konfigurasi datasource
      datasource:
          AliYun:
              support_xen: false
              timeout: 5 # (default ke 50 detik)
              max_wait: 60 # (default ke 120 detik)
      #      metadata_urls: [ 'blah.com' ]
      # Modul-modul yang berjalan di tahap 'init'
      cloud_init_modules:
  7. Jalankan perintah berikut untuk memeriksa apakah versi cloud-init adalah versi yang diharapkan.

    cloud-init --version

(Opsional) Langkah 3: Konfigurasi cloud-init

Nonaktifkan inisialisasi jaringan otomatis oleh Alibaba Cloud

Jika versi cloud-init Anda adalah 18 atau lebih baru, ia secara otomatis menyelesaikan inisialisasi jaringan dengan konfigurasi berikut: BOOTPROTO=dhcp DEVICE=eth0 ONBOOT=yes STARTMODE=auto TYPE=Ethernet USERCTL=no. Jika konfigurasi jaringan default tidak memenuhi kebutuhan bisnis Anda, Anda dapat memodifikasi file konfigurasi cloud-init untuk menyesuaikan konfigurasi jaringan.

  1. Jalankan perintah berikut untuk membuka file konfigurasi cloud-init default. Kemudian, tekan tombol i untuk masuk ke mode penyisipan.

    sudo vim /etc/cloud/cloud.cfg
  2. Sebelum Contoh konfigurasi datasource, tambahkan konfigurasi disabled untuk menonaktifkan fitur konfigurasi jaringan otomatis dari cloud-init.

    network:
      config: disabled

    image

    Setelah Anda menambahkan konfigurasi ini, cloud-init tidak lagi mengelola file konfigurasi jaringan, seperti ifcfg-eth0, di direktori /etc/sysconfig/network-scripts/. Anda harus mengelola file-file ini sendiri.

  3. Tekan tombol Esc, masukkan :wq, dan tekan tombol Enter untuk menyimpan dan menutup file.

  4. Sesuai kebutuhan, Anda dapat menyesuaikan konfigurasi jaringan di direktori /etc/sysconfig/network-scripts/, seperti alamat IP, subnet mask, dan gerbang.

Nonaktifkan pengaturan hostname otomatis oleh Alibaba Cloud

Secara default, cloud-init secara otomatis menetapkan hostname dan memperbarui file /etc/hostname saat Instans dimulai. Jika Anda tidak ingin hostname diubah, Anda dapat memodifikasi file konfigurasi cloud-init sebagai berikut.

  1. Jalankan perintah berikut untuk membuka file konfigurasi cloud-init default. Kemudian, tekan tombol i untuk masuk ke mode edit.

    sudo vim /etc/cloud/cloud.cfg
  2. Di dalam file konfigurasi, ubah preserve_hostname: false menjadi preserve_hostname: true.

    image

  3. Tekan tombol Esc, masukkan :wq, dan tekan tombol Enter untuk menyimpan dan menutup file.

Apa yang harus dilakukan selanjutnya

  • Untuk server Linux yang Anda rencanakan untuk migrasi ke cloud, Anda dapat menggunakan Server Migration Center (SMC) untuk melakukan migrasi. Untuk informasi lebih lanjut, lihat Migrasikan server ke Elastic Compute Service (ECS).

  • Untuk instance ECS yang sudah menjalankan gambar kustom Linux di Alibaba Cloud, Anda dapat me-restart sistem untuk memverifikasi hasilnya. Jika hostname, jaringan, dan Network Time Protocol (NTP) dikonfigurasi secara otomatis, cloud-init telah berhasil diinstal. Sebagai contoh, Anda dapat menjalankan perintah berikut untuk melihat file konfigurasi jaringan:

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

    Keluaran berikut menunjukkan bahwa sistem telah mengonfigurasi pengaturan jaringan secara otomatis, seperti protokol DHCP, perangkat jaringan, dan tipe perangkat, menggunakan cloud-init.

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

FAQ

  • Apa yang harus saya lakukan jika pustaka dependensi tidak ditemukan saat saya menginstal cloud-init menggunakan Python 3?

    Pustaka yang hilang dapat bervariasi tergantung pada citra. Anda dapat menginstalnya menggunakan pip dan kemudian menginstal cloud-init lagi.

  • Apa yang harus saya lakukan jika cloud-init berjalan tidak normal dan mengembalikan pesan kesalahan?

    Jika manajer paket default (seperti yum) dan manajer pip telah menginstal versi berbeda dari pustaka dependensi yang sama, konflik versi mungkin terjadi dan menyebabkan cloud-init berjalan tidak normal. Anda dapat mengunduh pustaka dependensi yang diperlukan berdasarkan pesan kesalahan.

    Pesan kesalahan

    Penyebab

    Perintah pemecahan masalah

    no setuptools module in python

    Modul python setuptools tidak ditemukan.

    Untuk Python 3.6:

    • 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  )

    Pustaka dependensi six tidak ditemukan.

    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  )

    Pustaka dependensi oauthlib tidak ditemukan.

    pip3 install oauthlib

    Pesan kesalahan tidak menentukan pustaka dependensi yang hilang.

    Pesan kesalahan terkait tidak dipetakan.

    Berdasarkan daftar pustaka dalam file requirements.txt milik cloud-init, jalankan perintah berikut untuk menginstal semua pustaka dependensi:

    pip3 install -r requirements.txt
  • Apa yang harus saya lakukan jika cloud-init berjalan tidak normal setelah versi baru Python 3 diinstal pada instans?

    Jika Anda menginstal versi baru Python 3, seperti Python 3.9, pada instans dan menyetelnya sebagai versi default dengan membuat tautan simbolik (misalnya, ln -s /usr/bin/python3.9 /usr/bin/python3), cloud-init yang terinstal mungkin berjalan tidak normal. Sebagai contoh, ketika Anda menjalankan perintah cloud-init --version, sebuah kesalahan dilaporkan:

    $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

    Anda dapat menggunakan salah satu metode berikut untuk menyelesaikan masalah ini:

    • Metode 1: Instal ulang cloud-init menggunakan versi baru Python 3.

    • Metode 2: Modifikasi file yang dapat dieksekusi cloud-init untuk mengubah path interpreter Python ke path versi sebelumnya Python 3. Contoh berikut menunjukkan cara mengubah interpreter dalam file yang dapat dieksekusi cloud-init menjadi Python 3.6:

      1. Jalankan perintah berikut untuk membuka file cloud-init.

        vim   /usr/local/bin/cloud-init
      2. Tekan i untuk masuk ke mode edit. Di awal file, ubah konten setelah #! ke path tempat Python 3.6 berada.

        Setelah dimodifikasi, baris yang dimulai dengan #! akan tampak seperti berikut:

        #!/usr/bin/python3.6
      3. Tekan tombol Esc untuk keluar dari mode edit. Kemudian, masukkan :wq dan tekan tombol Enter untuk menyimpan dan menutup file.

  • Setelah saya menginstal cloud-init, mengapa data pengguna instans yang saya atur selama pembuatan instans gagal dijalankan?

    1. Jalankan perintah berikut pada instans untuk memeriksa apakah data pengguna ada dalam metadata instans.

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

      Deskripsi hasil:

      • Jika data pengguna diatur, data pengguna akan dikembalikan. Anda harus melanjutkan ke langkah berikutnya untuk memecahkan masalah.

      • Jika tidak ada informasi yang dikembalikan, Anda tidak mengatur data pengguna.

    2. Gunakan salah satu metode berikut untuk mengidentifikasi alasan mengapa data pengguna gagal dijalankan.

      • Periksa apakah data pengguna dalam format yang benar.

        Data pengguna dijalankan oleh cloud-init. Anda harus memastikan bahwa format datanya benar. Misalnya, baris pertama data pengguna harus dimulai dengan #!. Untuk informasi lebih lanjut, lihat Kustomisasi konfigurasi inisialisasi instans.

      • Periksa hasil eksekusi data pengguna dalam file log /var/log/cloud-init.log milik cloud-init dan pecahkan masalah berdasarkan pesan kesalahan.

        Berikut adalah contoh informasi yang dicatat dalam file log:

         util.py[DEBUG]: Running command ['/var/lib/cloud/instance/scripts/part-001'] with allowed return codes [0] (shell=False, capture=False)
      • Lihat output standar dan output kesalahan standar dari proses eksekusi data pengguna.

        Dalam systemd, alat inisialisasi sistem Linux, data pengguna dijalankan oleh layanan sistem `cloud-final.service`. Anda dapat menjalankan perintah berikut untuk melihat output standar dan output kesalahan standar dari proses eksekusi data pengguna dan memecahkan masalah berdasarkan output tersebut.

        journalctl -u cloud-final.service
      • Jika Anda tidak dapat mengidentifikasi alasan mengapa data pengguna gagal dijalankan menggunakan metode sebelumnya, Anda dapat menyalin konten data pengguna ke host lokal untuk debugging untuk memeriksa apakah dapat dijalankan dengan sukses.

  • Setelah saya menginstalcloud-init, mengapa konfigurasi inisialisasi sistem dan skrip data pengguna instans tidak berjalan sesuai harapan?

    1. Jalankan perintah berikut untuk memeriksa apakah empat layanan cloud-init diaktifkan untuk mulai saat boot.

      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

      Jika pesan kesalahan atau pesan disabled dikembalikan, cloud-init tidak diaktifkan untuk mulai saat boot.

    2. Jalankan perintah berikut untuk mengaktifkan cloud-init agar mulai saat boot.

      systemctl enable cloud-init-local.service
      systemctl enable cloud-init.service
      systemctl enable cloud-config.service
      systemctl enable cloud-final.service
  • Saya mengubah ukuran disk sistem saat saya membuat instans, tetapi partisi root tidak secara otomatis diubah ukurannya. Apa yang harus saya lakukan?

    Penyesuaian ukuran partisi otomatis untuk instans Linux didukung oleh cloud-init. Pastikan alat `growpart` terinstal pada sistem dan file cloud.cfg dikonfigurasi dengan benar.

    1. Jalankan perintah berikut untuk memeriksa apakah alat `growpart` terinstal pada sistem.

      which growpart
    2. (Diperlukan jika berlaku) Jika alat tersebut tidak terinstal, jalankan salah satu perintah berikut untuk menginstalnya.

      • Seri RHEL:

        sudo yum -y install cloud-utils-growpart
      • Seri Debian:

        sudo apt -y install cloud-guest-utils
    3. Jalankan perintah berikut untuk memeriksa apakah file /etc/cloud/cloud.cfg berisi konten yang ditampilkan pada gambar berikut.

      cat /etc/cloud/cloud.cfg

      配置内容

    4. (Diperlukan jika berlaku) Jika konten tersebut tidak ada, tambahkan ke file /etc/cloud/cloud.cfg.

  • Untuk instans ECS dengan cloud-init 0.7.6a16 atau lebih lama, nama host tidak diperbarui setelah saya mengubahnya di konsol dan me-restart instans. Apa yang harus saya lakukan?

    • Deskripsi masalah

      Setelah Anda memperbarui nama host di Konsol ECS dan me-restart instans ECS, nama host baru tidak berlaku. Saat Anda menjalankan perintah cloud-init --version, output menunjukkan bahwa versi cloud-init adalah 0.7.6a16 atau lebih lama.

    • Penyebab

      Ketika cloud-init menggunakan modul update_hostname untuk memperbarui nama host, ia menjalankan perintah hostname untuk mendapatkan nama host sistem saat ini dan membaca file /var/lib/cloud/data/previous-hostname untuk mendapatkan nama host dari cache data cloud-init. Kemudian membandingkan kedua nama host tersebut. Jika mereka sama, ia memperbarui nama host. Jika mereka berbeda, ia mengasumsikan bahwa nama host telah diubah secara manual dan tidak memperbaruinya.

      Pada sistem operasi berbasis Red Hat, konten yang dibaca dari /var/lib/cloud/data/previous-hostname diproses dengan baris baru, tetapi output dari perintah hostname tidak. Hal ini menyebabkan ketidakcocokan, dan nama host tidak diperbarui.

    • Solusi

      Anda dapat menggunakan salah satu solusi berikut untuk menyelesaikan masalah ini:

      • Tingkatkan versi cloud-init. Untuk informasi lebih lanjut, lihat Langkah 2: Instal cloud-init.

        • Jika Anda menggunakan CentOS 6 atau sistem operasi sebelumnya, gunakan cloud-init 0.7.6a17.

        • Jika Anda menggunakan CentOS 7, gunakan cloud-init 19.1.21.

        • Jika Anda menggunakan CentOS 8 atau sistem operasi yang lebih baru, kami sarankan Anda menggunakan cloud-init 23.2.2 atau versi yang lebih baru.

      • Secara manual tangani baris baru.

        Secara manual modifikasi file yang rusak cloudinit/distros/rhel.py dalam cloud-init (gunakan perintah find / -name rhel.py untuk menemukan path file). Referensi distros/rhel.py: _read_hostname() missing strip on "hostname" untuk memproses baris baru dalam output perintah hostname. Contoh berikut menunjukkan cara memproses baris baru:

        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: