Ubuntu 16.04 サーバー上で Packer および KVM を使用して CentOS 6.9 イメージをビルドし、それを Alibaba Cloud のカスタムイメージとしてインポートします。
前提条件
-
AccessKey ペア(AccessKey ID および AccessKey Secret)を取得済みである必要があります。
説明-
AccessKey の漏洩を防ぐため、RAM ユーザーを作成し、その認証情報を使用してください。詳細については、「RAM ユーザーの作成」をご参照ください。
-
AccessKey Secret は AccessKey ペアの作成時のみ表示されます。必ず記録し、秘密にしてください。
-
-
OSS が有効化されており、OSS バケットが作成されています。
説明イメージディスクサイズは 5 GB を超えることはできません。詳細については、「PutObject」をご参照ください。
背景情報
Packer は Builders、Provisioners、および Post-Processors を使用して、HCL または JSON テンプレートからカスタムイメージを生成し、手動でのイメージ作成をコードによる構成(Infrastructure as Code)に置き換えます。詳細については、Packer ドキュメントをご参照ください。
イメージのビルドとインポート
この例では、以下のソフトウェアバージョンを使用しています。ご利用のソフトウェアバージョンによって操作が異なる場合があります。
-
オンプレミスサーバー OS: Ubuntu 16.04
-
ターゲットイメージ OS: CentOS 6.9
ステップ 1:KVM のインストール
-
オンプレミスサーバーが KVM をサポートしているか確認します。
egrep "(svm|vmx)" /proc/cpuinfo出力に
vmxまたはsvmが含まれている場合、サーバーは 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 -
サーバーが KVM をサポートしている場合、KVM および関連ツールをインストールします。
sudo apt-get update sudo apt-get install qemu-kvm qemu virt-manager virt-viewer libvirt-bin bridge-utils -
KVM が正しくインストールされていることを確認します。
-
KVM カーネルモジュールがロードされていることを確認します。
sudo lsmod | grep kvmモジュールがロードされている場合、出力に
kvmおよびkvm_intelまたはkvm_amdが含まれます。
-
libvirt がインストールされていることを確認します。
sudo dpkg -l libvirt-binインストール済みの場合、出力に
libvirt-binが含まれます。
-
QEMU がインストールされていることを確認します。
sudo dpkg -l qemu-kvmインストール済みの場合、出力に
qemu-kvmが含まれます。
いずれかの出力が期待どおりでない場合は、KVM を再インストールしてください。
-
ステップ 2:Packer のインストール
オンプレミスサーバーに Packer をインストールします。「Packer を使用したカスタムイメージの作成」の「ステップ 1:Packer のインストール」セクションをご参照ください。
ステップ 3:Packer テンプレートの定義
この例では CentOS 6.9 イメージを作成します。他のオペレーティングシステムのイメージを作成するには、centos.json テンプレートを変更してください。詳細については、「Packer テンプレートの作成」をご参照ください。
-
作業ディレクトリを /usr/local に変更します。
cd /usr/local -
centos.json テンプレートをダウンロードします。
sudo wget https://raw.githubusercontent.com/hashicorp/packer-plugin-alicloud/main/builder/examples/local/centos.json -
ks.cfg kickstart ファイルをダウンロードします。
sudo wget https://raw.githubusercontent.com/hashicorp/packer-plugin-alicloud/main/builder/examples/local/http/centos-6.8/ks.cfg -
http/centos-6.9 ディレクトリを作成します。
sudo mkdir -p http/centos-6.9 -
ks.cfg 構成ファイルを http/centos-6.9 ディレクトリに移動します。
sudo mv ks.cfg http/centos-6.9/
ステップ 4:イメージの作成とインポート
-
AccessKey ID をエクスポートします。
export ALICLOUD_ACCESS_KEY=<AccessKey ID><AccessKey ID>を実際の AccessKey ID に置き換えてください。 -
AccessKey Secret をエクスポートします。
export ALICLOUD_SECRET_KEY=<AccessKey Secret><AccessKey Secret>を実際の AccessKey Secret に置き換えてください。 -
オンプレミスイメージをビルドし、Alibaba Cloud にインポートします。
sudo packer build centos.json次の出力は、イメージが中国 (北京) リージョンにカスタムイメージとしてインポートされたことを示しています。
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 ECS コンソール - イメージ にアクセスします。
-
centos.json で指定されたリージョンを選択します。この例では、中国 (北京) を選択します。
-
カスタムイメージ タブで、CentOS 6.9 イメージが表示されることを確認します。
Packer テンプレートリファレンス
次の JSON テンプレートは CentOS 6.9 イメージを作成します。他のオペレーティングシステム用に必要に応じて変更してください。
{"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"
}
]
}
QEMU ビルダーのパラメーター
QEMU ビルダーは KVM 仮想マシンイメージを作成します。次の表に必須パラメーターを示します。オプションのパラメーターについては、QEMU Builder をご参照ください。
|
パラメーター |
タイプ |
説明 |
|
iso_checksum |
文字列 |
OS ISO ファイルのチェックサムです。Packer は仮想マシンの起動前にこれを検証します。iso_checksum および iso_checksum_url のいずれか一方以上を指定する必要があります。iso_checksum を指定した場合、iso_checksum_url は無視されます。 |
|
iso_checksum_type |
文字列 |
OS ISO ファイルのチェックサムタイプです。有効な値:
|
|
iso_checksum_url |
文字列 |
OS ISO の GNU または BSD スタイルのチェックサムファイルを指す URL です。iso_checksum および iso_checksum_url のいずれか一方以上を指定する必要があります。iso_checksum を指定した場合、iso_checksum_url は無視されます。 |
|
iso_url |
文字列 |
ISO イメージへの URL またはファイルパスです。
|
|
headless |
ブール値 |
デフォルトでは、Packer は GUI を備えた QEMU 仮想マシンをビルドします。headless を True に設定すると、ヘッドレス仮想マシンが起動します。 |
Packer ポストプロセッサーのパラメーター
ポストプロセッサーモジュールはオンプレミスイメージを Alibaba Cloud にアップロードします。次の表に必須パラメーターを示します。オプションのパラメーターについては、Post-Processors をご参照ください。
|
パラメーター |
タイプ |
説明 |
|
access_key |
文字列 |
イメージのインポートに使用する AccessKey ID です。詳細については、「AccessKey ペアの詳細の確認」をご参照ください。 |
|
secret_key |
文字列 |
イメージのインポートに使用する AccessKey Secret です。シークレットは作成時のみ表示されます。詳細については、「AccessKey ペアの作成」をご参照ください。 |
|
region |
文字列 |
イメージのターゲットリージョンです。例: |
|
image_name |
文字列 |
アップロードするイメージの名前です。
|
|
oss_bucket_name |
文字列 |
イメージをアップロードする OSS バケットです。バケットが存在しない場合、Packer が自動的に作成します。 |
|
image_os_type |
文字列 |
イメージの OS タイプです。有効な値:
|
|
image_platform |
文字列 |
OS ディストリビューションです。例: CentOS。 |
|
image_architecture |
文字列 |
イメージのアーキテクチャです。有効な値:
|
|
format |
文字列 |
イメージのフォーマットです。有効な値:
|