Buat gambar CentOS 6.9 pada server Ubuntu 16.04 menggunakan Packer dan KVM, lalu impor ke Alibaba Cloud sebagai custom image.
Prasyarat
-
Pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) telah diperoleh.
Catatan-
Untuk mencegah kebocoran AccessKey, buat RAM user dan gunakan kredensial RAM user tersebut. Lihat Buat RAM user.
-
Rahasia AccessKey hanya ditampilkan saat pasangan AccessKey dibuat. Catat dan simpan secara rahasia.
-
-
OSS telah diaktifkan dan bucket OSS telah dibuat.
CatatanUkuran disk gambar tidak boleh melebihi 5 GB. Lihat PutObject.
Latar Belakang
Packer menggunakan Builders, Provisioners, dan Post-Processors untuk mengubah templat HCL atau JSON menjadi custom image, menggantikan pembuatan gambar manual dengan pendekatan konfigurasi sebagai kode. Untuk informasi selengkapnya, lihat dokumentasi Packer.
Buat dan impor gambar
Contoh ini menggunakan versi perangkat lunak berikut. Langkah-langkahnya mungkin berbeda tergantung pada versi perangkat lunak yang Anda gunakan.
-
Sistem operasi server on-premises: Ubuntu 16.04
-
Sistem operasi gambar target: CentOS 6.9
Langkah 1: Instal KVM
-
Periksa apakah server on-premises mendukung KVM:
egrep "(svm|vmx)" /proc/cpuinfoJika output berisi
vmxatausvm, berarti server 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 -
Jika server mendukung KVM, instal KVM dan alat terkait:
sudo apt-get update sudo apt-get install qemu-kvm qemu virt-manager virt-viewer libvirt-bin bridge-utils -
Verifikasi bahwa KVM telah terinstal.
-
Verifikasi bahwa modul kernel KVM telah dimuat:
sudo lsmod | grep kvmJika modul telah dimuat, output akan berisi
kvmdankvm_intelataukvm_amd.
-
Verifikasi bahwa libvirt telah terinstal:
sudo dpkg -l libvirt-binJika terinstal, output akan berisi
libvirt-bin.
-
Verifikasi bahwa QEMU telah terinstal:
sudo dpkg -l qemu-kvmJika terinstal, output akan berisi
qemu-kvm.
Jika ada output yang tidak sesuai harapan, instal ulang KVM.
-
Langkah 2: Instal Packer
Instal Packer pada server on-premises. Lihat bagian "Langkah 1: Instal Packer" dalam Buat custom image dengan Packer.
Langkah 3: Definisikan templat Packer
Contoh ini membuat gambar CentOS 6.9. Untuk membuat gambar sistem operasi lain, ubah templat centos.json. Lihat Buat templat Packer.
-
Ubah direktori kerja ke /usr/local:
cd /usr/local -
Unduh templat centos.json:
sudo wget https://raw.githubusercontent.com/hashicorp/packer-plugin-alicloud/main/builder/examples/local/centos.json -
Unduh file kickstart ks.cfg:
sudo wget https://raw.githubusercontent.com/hashicorp/packer-plugin-alicloud/main/builder/examples/local/http/centos-6.8/ks.cfg -
Buat direktori http/centos-6.9:
sudo mkdir -p http/centos-6.9 -
Pindahkan file konfigurasi ks.cfg ke direktori http/centos-6.9.
sudo mv ks.cfg http/centos-6.9/
Langkah 4: Buat dan impor gambar
-
Ekspor ID AccessKey Anda:
export ALICLOUD_ACCESS_KEY=<AccessKey ID>Ganti
<AccessKey ID>dengan ID AccessKey aktual Anda. -
Ekspor rahasia AccessKey Anda:
export ALICLOUD_SECRET_KEY=<AccessKey Secret>Ganti
<AccessKey Secret>dengan rahasia AccessKey aktual Anda. -
Buat gambar on-premises dan impor ke Alibaba Cloud:
sudo packer build centos.jsonOutput berikut menunjukkan bahwa gambar telah diimpor sebagai custom image ke wilayah China (Beijing).
qemu output will be in this color. ==> qemu: Downloading or copying ISO qemu: Downloading or copying: http://mirrors.aliyun.com/centos/6.9/isos/x86_64/CentOS-6.9-x86_64-minimal.iso ................................................ ==> qemu: Running post-processor: alicloud-import qemu (alicloud-import): Deleting import source https://oss-cn-beijing.aliyuncs.com/packer/centos_x86_64 Build 'qemu' finished. ==> Builds finished. The artifacts of successful builds are: --> qemu: Alicloud images were created: cn-beijing: XXXXXXXX Buka ECS console - Images.
-
Pilih wilayah yang ditentukan dalam centos.json. Dalam contoh ini, pilih China (Beijing).
-
Pada tab Custom Images, verifikasi bahwa gambar CentOS 6.9 muncul.
Referensi templat Packer
Templat JSON berikut membuat gambar CentOS 6.9. Ubah sesuai kebutuhan untuk sistem operasi lain.
{"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 builder QEMU
Builder QEMU membuat gambar mesin virtual KVM. Tabel berikut mencantumkan parameter yang diperlukan. Untuk parameter opsional, lihat QEMU Builder.
|
Parameter |
Type |
Description |
|
iso_checksum |
string |
Checksum untuk file ISO sistem operasi. Packer memverifikasi nilai ini sebelum menjalankan mesin virtual. Tentukan setidaknya salah satu dari iso_checksum dan iso_checksum_url. Jika iso_checksum ditentukan, iso_checksum_url akan diabaikan. |
|
iso_checksum_type |
string |
Jenis checksum untuk file ISO sistem operasi. Nilai yang valid:
|
|
iso_checksum_url |
string |
URL yang mengarah ke file checksum bergaya GNU atau BSD untuk ISO sistem operasi. Tentukan setidaknya salah satu dari iso_checksum dan iso_checksum_url. Jika iso_checksum ditentukan, iso_checksum_url akan diabaikan. |
|
iso_url |
string |
URL atau path file ke gambar ISO:
|
|
headless |
boolean |
Secara default, Packer membuat mesin virtual QEMU dengan GUI. Atur headless ke True untuk menjalankan mesin virtual tanpa antarmuka grafis. |
Parameter post-processor Packer
Modul Post-Processor mengunggah gambar on-premises ke Alibaba Cloud. Tabel berikut mencantumkan parameter yang diperlukan. Untuk parameter opsional, lihat Post-Processors.
|
Parameter |
Type |
Description |
|
access_key |
string |
ID AccessKey untuk mengimpor gambar. Lihat Lihat detail pasangan AccessKey. |
|
secret_key |
string |
Rahasia AccessKey untuk mengimpor gambar. Rahasia ini hanya ditampilkan saat pembuatan. Lihat Buat pasangan AccessKey. |
|
region |
string |
Wilayah tujuan untuk gambar. Contoh: |
|
image_name |
string |
Nama gambar yang akan diunggah.
|
|
oss_bucket_name |
string |
Bucket OSS untuk mengunggah gambar. Jika bucket belum ada, Packer akan membuatnya secara otomatis. |
|
image_os_type |
string |
Jenis sistem operasi gambar. Nilai yang valid:
|
|
image_platform |
string |
Distribusi sistem operasi. Contoh: CentOS. |
|
image_architecture |
string |
Arsitektur gambar. Nilai yang valid:
|
|
format |
string |
Format gambar. Nilai yang valid:
|