All Products
Search
Document Center

Elastic Compute Service:Gunakan Packer untuk membuat dan mengimpor gambar lokal

Last Updated:Jul 06, 2025

Packer adalah alat sumber terbuka ringan yang digunakan untuk membuat gambar secara paralel untuk sistem operasi utama seperti Windows, Linux, dan macOS. Topik ini menjelaskan cara menggunakan Packer untuk membuat gambar lokal dan mengunggahnya ke Alibaba Cloud. Dalam topik ini, sebuah gambar CentOS 6.9 dibuat pada server lokal yang menjalankan Ubuntu 16.04.

Prasyarat

  • Sepasang AccessKey yang terdiri dari ID AccessKey dan Rahasia AccessKey telah diperoleh. Untuk informasi lebih lanjut, lihat Memperoleh Sepasang AccessKey.

    Catatan
    • Untuk mencegah kebocoran pasangan AccessKey akun Alibaba Cloud Anda, kami sarankan Anda membuat Pengguna Resource Access Management (RAM) dan menggunakan kredensial Pengguna RAM untuk membuat sepasang AccessKey. Untuk informasi tentang cara membuat Pengguna RAM, lihat Buat Pengguna RAM.

    • Rahasia AccessKey untuk Pengguna RAM hanya ditampilkan saat Anda membuat sepasang AccessKey untuk Pengguna RAM. Anda tidak dapat menanyakan Rahasia AccessKey setelah sepasang AccessKey dibuat. Catat dan simpan Rahasia AccessKey Anda dengan aman.

  • Object Storage Service (OSS) telah diaktifkan dan Bucket OSS telah dibuat. Untuk informasi lebih lanjut, lihat Aktifkan OSS.

    Catatan

    Ukuran disk gambar Anda tidak boleh lebih besar dari 5 GB. Untuk informasi lebih lanjut, lihat PutObject.

Informasi latar belakang

Packer terdiri dari berbagai komponen, seperti Builders, Provisioners, dan Post-Processors. Packer menggunakan template dalam Bahasa Konfigurasi Hashicorp (HCL) atau format JSON untuk menyederhanakan proses pembuatan gambar kustom. Selain itu, Packer menstandarisasi dan mengotomatiskan proses pembuatan gambar serta memungkinkan Anda mendefinisikan gambar sebagai kode untuk memfasilitasi migrasi cloud. Untuk informasi lebih lanjut tentang Packer, lihat Dokumentasi Resmi Packer.

Prosedur

Dalam contoh ini, versi perangkat lunak berikut digunakan. Operasi dapat bervariasi berdasarkan versi perangkat lunak Anda.

  • Sistem operasi server lokal: Ubuntu 16.04

  • Sistem operasi untuk mana Anda ingin membuat gambar: CentOS 6.9

Langkah 1: Instal Kernel-based Virtual Machine (KVM)

  1. Jalankan perintah berikut untuk memeriksa apakah server lokal mendukung KVM. Dalam contoh ini, server sumber menjalankan Ubuntu 16.04.

    egrep "(svm|vmx)" /proc/cpuinfo

    Output perintah sampel berikut menunjukkan bahwa server sumber mendukung KVM.

    pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
    flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
  2. Jika server lokal mendukung KVM, jalankan perintah berikut untuk menginstal KVM dan kontrol terkait:

    sudo apt-get update
    sudo apt-get install qemu-kvm qemu virt-manager virt-viewer  libvirt-bin bridge-utils
  3. Periksa apakah KVM diinstal sesuai harapan.

    1. Periksa apakah modul kernel KVM dimuat.

      sudo lsmod | grep kvm

      Jika modul kernel KVM dimuat, output perintah yang berisi kvm dan kvm_intel atau kvm dan kvm_amd dikembalikan.KVM内核

    2. Periksa apakah libvirt diinstal.

      sudo dpkg -l libvirt-bin

      Jika libvirt diinstal, output perintah yang berisi libvirt-bin dikembalikan.libvirt

    3. Periksa apakah QEMU diinstal.

      sudo dpkg -l qemu-kvm

      Jika QEMU diinstal, output perintah yang berisi qemu-kvm dikembalikan.QEMU

    Jika output perintah sesuai harapan, KVM telah diinstal. Jika salah satu output perintah tidak sesuai harapan, Anda mungkin perlu menginstal ulang KVM.

Langkah 2: Instal Packer

Instal Packer pada server lokal. Untuk informasi lebih lanjut, lihat bagian "Langkah 1: Instal Packer" dalam topik Gunakan Packer untuk Membuat Gambar Kustom.

Langkah 3: Definisikan template Packer

Dalam contoh ini, sebuah gambar CentOS 6.9 dibuat. Untuk membuat gambar untuk sistem operasi lain, ubah file konfigurasi template Packer centos.json sesuai kebutuhan Anda. Untuk informasi lebih lanjut, lihat Buat Template Packer.

  1. Jalankan perintah berikut pada server sumber untuk mengubah direktori kerja ke direktori /usr/local:

    cd /usr/local
  2. Unduh file konfigurasi centos.json yang disediakan oleh Alibaba Cloud.

    sudo wget https://raw.githubusercontent.com/hashicorp/packer-plugin-alicloud/main/builder/examples/local/centos.json
  3. Unduh file konfigurasi ks.cfg yang disediakan oleh Alibaba Cloud.

    sudo wget https://raw.githubusercontent.com/hashicorp/packer-plugin-alicloud/main/builder/examples/local/http/centos-6.8/ks.cfg
  4. Buat direktori. Dalam contoh ini, direktori http/centos-6.9 dibuat.

    sudo mkdir -p http/centos-6.9
  5. Pindahkan file konfigurasi ks.cfg ke direktori http/centos-6.9.

    sudo mv ks.cfg http/centos-6.9/

Langkah 4: Gunakan Packer untuk membuat gambar lokal dan mengimpor gambar

  1. Jalankan perintah berikut pada server lokal untuk mengimpor ID AccessKey Anda:

    export ALICLOUD_ACCESS_KEY=<AccessKey ID>

    Dalam perintah sebelumnya, ganti <AccessKey ID> dengan ID AccessKey Anda yang sebenarnya.

  2. Impor Rahasia AccessKey Anda.

    export ALICLOUD_SECRET_KEY=<AccessKey Secret>

    Dalam perintah sebelumnya, ganti <AccessKey Secret> dengan Rahasia AccessKey Anda yang sebenarnya.

  3. Buat gambar lokal dan impor gambar ke Alibaba Cloud.

    sudo packer build centos.json

    Output perintah sampel berikut menunjukkan bahwa gambar lokal diimpor sebagai gambar kustom ke wilayah China (Beijing).

    qemu output akan berwarna ini.
     ==> qemu: Mengunduh atau menyalin ISO
         qemu: Mengunduh atau menyalin: http://mirrors.aliyun.com/centos/6.9/isos/x86_64/CentOS-6.9-x86_64-minimal.iso
     ................................................
     ==> qemu: Menjalankan post-processor: alicloud-import
         qemu (alicloud-import): Menghapus sumber impor https://oss-cn-beijing.aliyuncs.com/packer/centos_x86_64
     Build 'qemu' selesai.
     ==> Builds selesai. Artefak dari builds yang berhasil adalah:
     --> qemu: Gambar Alicloud telah dibuat:
     cn-beijing: XXXXXXXX
  4. Kunjungi ECS console - Images.

  5. Di sudut kiri atas bilah navigasi atas, pilih wilayah tempat file konfigurasi centos.json berada. Dalam contoh ini, China (Beijing) dipilih.

  6. Pada tab Custom Images, periksa image CentOS 6.9.

Buat template Packer

Kode JSON berikut menjelaskan cara membuat template Packer yang digunakan untuk membuat gambar CentOS 6.9. Untuk membuat gambar untuk sistem operasi lain, ubah kode berdasarkan kebutuhan Anda.

{"variables": {
        "box_basename": "centos-6.9",
        "build_timestamp": "{{isotime \"20060102150405\"}}",
        "cpus": "1",
        "disk_size": "4096",
        "git_revision": "__unknown_git_revision__",
        "headless": "",
        "http_proxy": "{{env `http_proxy`}}",
        "https_proxy": "{{env `https_proxy`}}",
        "iso_checksum_type": "md5",
        "iso_checksum": "af4axxxxxxxxxxxxxxxxx192a2",
        "iso_name": "CentOS-6.9-x86_64-minimal.iso",
        "ks_path": "centos-6.9/ks.cfg",
        "memory": "512",
        "metadata": "floppy/dummy_metadata.json",
        "mirror": "http://mirrors.aliyun.com/centos",
        "mirror_directory": "6.9/isos/x86_64",
        "name": "centos-6.9",
        "no_proxy": "{{env `no_proxy`}}",
        "template": "centos-6.9-x86_64",
        "version": "2.1.TIMESTAMP"
      },
    "builders":[
        {
          "boot_command": [
            "<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `ks_path`}}<enter><wait>"
          ],
          "boot_wait": "10s",
          "disk_size": "{{user `disk_size`}}",
          "headless": "{{ user `headless` }}",
          "http_directory": "http",
          "iso_checksum": "{{user `iso_checksum`}}",
          "iso_checksum_type": "{{user `iso_checksum_type`}}",
          "iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}",
          "output_directory": "packer-{{user `template`}}-qemu",
          "shutdown_command": "echo 'vagrant'|sudo -S /sbin/halt -h -p",
          "ssh_password": "vagrant",
          "ssh_port": 22,
          "ssh_username": "root",
          "ssh_wait_timeout": "10000s",
          "type": "qemu",
          "vm_name": "{{ user `template` }}.raw",
          "net_device": "virtio-net",
          "disk_interface": "virtio",
          "format": "raw"
        }
      ],
    "provisioners": [{
          "type": "shell",
          "inline": [
                "sleep 30",
                "yum install cloud-util cloud-init -y"
              ]
        }],
      "post-processors":[
        {
          "type":"alicloud-import",
          "oss_bucket_name": "packer",
          "image_name": "packer_import",
          "image_os_type": "linux",
          "image_platform": "CentOS",
          "image_architecture": "x86_64",
          "image_system_size": "40",
          "region":"cn-beijing"
        }
      ]
}

Parameter wajib untuk QEMU Packer builder

QEMU Packer builder digunakan untuk membuat gambar mesin virtual KVM. Tabel berikut menjelaskan parameter wajib untuk builder. Untuk informasi tentang parameter opsional, lihat QEMU Builder.

Parameter wajib

Tipe

Deskripsi

iso_checksum

string

Ceksum untuk file ISO sistem operasi. Packer memverifikasi parameter ini sebelum mesin virtual yang file ISO-nya dilampirkan dimulai. Pastikan Anda menentukan setidaknya satu dari parameter iso_checksum dan iso_checksum_url. Jika Anda menentukan parameter iso_checksum, nilai iso_checksum_url diabaikan secara otomatis.

iso_checksum_type

string

Tipe ceksum file ISO sistem operasi yang ditentukan. Nilai valid:

  • none: mengabaikan proses ceksum. Kami sarankan Anda tidak menggunakan nilai ini.

  • md5

  • sha1

  • sha256

  • sha512

iso_checksum_url

string

URL yang menunjuk ke file ceksum gaya GNU atau BSD yang berisi ceksum untuk file ISO sistem operasi. Pastikan Anda menentukan setidaknya satu dari parameter iso_checksum dan iso_checksum_url. Jika Anda menentukan parameter iso_checksum, nilai iso_checksum_url diabaikan secara otomatis.

iso_url

string

URL yang menunjuk ke file ISO dan berisi gambar. URL bisa berupa URL HTTP atau jalur file:

  • Jika URL adalah URL HTTP, Packer mengunduh file dari URL HTTP dan menyimpan file tersebut untuk menjalankannya nanti.

  • Jika URL adalah jalur file ke file IMG atau QCOW2, QEMU Packer builder menggunakan file tersebut untuk membuat gambar kustom. Jika Anda menentukan jalur file, atur disk_image ke true.

headless

boolean

Secara default, Packer menggunakan GUI untuk membangun mesin virtual QEMU. Jika Anda mengatur headless ke True, mesin virtual tanpa konsol dimulai.

Parameter wajib untuk provisioner Packer

Provisioner Packer berisi modul Post-Processor yang memungkinkan pengunggahan otomatis gambar lokal ke Alibaba Cloud. Tabel berikut menjelaskan parameter wajib untuk provisioner Packer. Untuk informasi tentang parameter opsional, lihat Post-Processors.

Parameter wajib

Tipe

Deskripsi

access_key

string

ID AccessKey yang digunakan untuk mengimpor gambar lokal. Untuk informasi tentang cara memperoleh ID AccessKey Pengguna RAM, lihat Lihat informasi tentang pasangan AccessKey Pengguna RAM.

secret_key

string

Rahasia AccessKey yang digunakan untuk mengimpor gambar lokal. Rahasia AccessKey Pengguna RAM hanya ditampilkan saat Anda membuat pasangan AccessKey untuk Pengguna RAM. Anda tidak dapat menanyakan Rahasia AccessKey setelah pasangan AccessKey dibuat. Untuk informasi lebih lanjut, lihat Memperoleh pasangan AccessKey.

region

string

ID wilayah tempat Anda ingin mengunggah gambar lokal. Dalam contoh ini, cn-beijing digunakan. Untuk informasi lebih lanjut, lihat Wilayah dan zona.

image_name

string

Nama gambar lokal yang ingin Anda unggah.

  • Nama harus memiliki panjang 2 hingga 128 karakter.

  • Nama harus dimulai dengan huruf.

  • Nama dapat berisi huruf, angka, garis bawah (_), dan tanda hubung (-).

  • Nama tidak boleh dimulai dengan http:// atau https://.

oss_bucket_name

string

Nama Bucket OSS tempat gambar lokal diunggah. Jika Bucket OSS yang ditentukan tidak ada, Packer secara otomatis membuat Bucket OSS dengan nama yang ditentukan saat Packer mengunggah gambar.

image_os_type

string

Tipe gambar lokal. Nilai valid:

  • linux

  • windows

image_platform

string

Distribusi gambar lokal. Dalam contoh ini, CentOS digunakan.

image_architecture

string

Arsitektur gambar lokal. Nilai valid:

  • i386

  • x86_64

format

string

Format gambar lokal. Nilai valid:

  • RAW

  • VHD