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.
CatatanUntuk 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.
CatatanUkuran 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)
Jalankan perintah berikut untuk memeriksa apakah server lokal mendukung KVM. Dalam contoh ini, server sumber menjalankan Ubuntu 16.04.
egrep "(svm|vmx)" /proc/cpuinfoOutput 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 cmovJika 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-utilsPeriksa apakah KVM diinstal sesuai harapan.
Periksa apakah modul kernel KVM dimuat.
sudo lsmod | grep kvmJika modul kernel KVM dimuat, output perintah yang berisi
kvmdankvm_intelatau kvm dankvm_amddikembalikan.
Periksa apakah libvirt diinstal.
sudo dpkg -l libvirt-binJika libvirt diinstal, output perintah yang berisi
libvirt-bindikembalikan.
Periksa apakah QEMU diinstal.
sudo dpkg -l qemu-kvmJika QEMU diinstal, output perintah yang berisi
qemu-kvmdikembalikan.
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.
Jalankan perintah berikut pada server sumber untuk mengubah direktori kerja ke direktori /usr/local:
cd /usr/localUnduh file konfigurasi centos.json yang disediakan oleh Alibaba Cloud.
sudo wget https://raw.githubusercontent.com/hashicorp/packer-plugin-alicloud/main/builder/examples/local/centos.jsonUnduh 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.cfgBuat direktori. Dalam contoh ini, direktori http/centos-6.9 dibuat.
sudo mkdir -p http/centos-6.9Pindahkan 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
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.Impor Rahasia AccessKey Anda.
export ALICLOUD_SECRET_KEY=<AccessKey Secret>Dalam perintah sebelumnya, ganti
<AccessKey Secret>dengan Rahasia AccessKey Anda yang sebenarnya.Buat gambar lokal dan impor gambar ke Alibaba Cloud.
sudo packer build centos.jsonOutput 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: XXXXXXXXKunjungi ECS console - Images.
Di sudut kiri atas bilah navigasi atas, pilih wilayah tempat file konfigurasi centos.json berada. Dalam contoh ini, China (Beijing) dipilih.
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:
|
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:
|
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, |
image_name | string | Nama gambar lokal yang ingin Anda unggah.
|
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:
|
image_platform | string | Distribusi gambar lokal. Dalam contoh ini, CentOS digunakan. |
image_architecture | string | Arsitektur gambar lokal. Nilai valid:
|
format | string | Format gambar lokal. Nilai valid:
|