全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
云服务器 ECS

使用 Packer 创建并导入本地镜像

更新时间:2017-11-03 17:23:52

Packer 是一个便捷的创建本地镜像的开源工具,能运行在大多数主流操作系统上。自行创建本地镜像并上传到云平台是一个非常繁复的过程,此处示范了如何在 Ubuntu 16.04 服务器中创建 CentOS 6.9 本地镜像并上传到阿里云云平台,如果您需要制作其他操作系统类型的镜像,请根据需要自定义 Packer 模板。


前提条件

操作步骤

  1. 依次执行以下命令安装 KVM:

    1. egrep "(svm|vmx)" /proc/cpuinfo #查看服务器 CPU 是否支持 KVM(Kernel-based Virtual Machine)。
    2. sudo apt-get install qemu-kvm qemu virt-manager virt-viewer libvirt-bin bridge-utils #安装 KVM 及相关控件。
    3. sudo virt-manager #开启 virt-manager。

    如果可以通过 GUI 创建虚拟机,表示您已经成功安装 KVM。

    KVMInterface

  2. 安装 Packer。

    您可以参阅 使用 Packer 创建自定义镜像 部分内容安装 Packer。

  3. 依次执行以下命令定义 Packer 模板:

    注意

    • 安装 Packer 后,您所在目录为 /usr/local/bin。
    • 以下示例制作的本地镜像基于 CentOS 6.9 操作系统,如果您需要创建其他类型操作系统的镜像,您可以根据需要自定义配置文件 centos.json。
    1. cd /user/local #切换所在目录。
    2. wget https://raw.githubusercontent.com/alibaba/packer-provider/master/examples/alicloud/local/centos.json #下载阿里云官方发行的 centos.json 配置文件。
    3. wget https://raw.githubusercontent.com/alibaba/packer-provider/master/examples/alicloud/local/http/centos-6.9/ks.cfg #下载阿里云官方发行的 ks.cfg 配置文件。
    4. mkdir -p http/centos-6.9 #创建目录。
    5. mv ks.cfg http/centos-6.9/ #移动文件 ks.cfg 到目录 http/centos-6.9 中。
  4. 依次执行以下命令创建本地镜像:

    1. export ALICLOUD_ACCESS_KEY=您的 AccessKeyID #导入您的 AccessKeyID。
    2. export ALICLOUD_SECRET_KEY=您的 AccessKeySecret #导入您的 AccessKeySecret。
    3. packer build centos.json #创建本地镜像。

    示例运行结果如下:

    1. qemu output will be in this color.
    2. ==> qemu: Downloading or copying ISO
    3. qemu: Downloading or copying: http://mirrors.aliyun.com/centos/6.9/isos/x86_64/CentOS-6.9-x86_64-minimal.iso
    4. ................................................
    5. ==> qemu: Running post-processor: alicloud-import
    6. qemu (alicloud-import): Deleting import source https://oss-cn-beijing.aliyuncs.com/packer/centos_x86_64
    7. Build 'qemu' finished.
    8. ==> Builds finished. The artifacts of successful builds are:
    9. --> qemu: Alicloud images were created:
    10. cn-beijing: XXXXXXXX
  5. 等待一段时间后,在对应地域的 ECS 控制台镜像详情页 查看上传结果,如示例中的华北二。

后续操作

您可以使用该自定义镜像创建 ECS 实例,具体步骤参阅 使用自定义镜像创建实例

自定义 Packer 模板

以上示例制作的本地镜像基于 CentOS 6.9 操作系统,如果您需要创建其他类型操作系统的镜像,您可以根据需要自定义 Packer 模板,如示例中的 centos.json 配置文件。

Packer 生成器部分参数说明

示例生成器为 QEMU Builder,该生成器用于创建虚拟机镜像。其必需参数如下所示:

必需参数 类型 描述
iso_checksum string 操作系统的 ISO 文件的校验和。Packer 在启动挂载了 ISO 的虚拟机之前检查该参数。至少指定 iso_checksum 或者 iso_checksum_url 参数;当您指定了参数iso_checksum时,参数 iso_checksum_url 的值被自动忽略。
iso_checksum_type string 已指定的操作系统的 ISO 文件的校验和类型。取值范围:
  • none:忽略校验和过程。不推荐指定该值
  • md5
  • sha1
  • sha256
  • sha512
iso_checksum_url string 一个包含了操作系统 ISO 文件校验和的检验和文件的链接(URL),样式为 GNU 或者 BSD。您需要至少指定 iso_checksum 或者 iso_checksum_url 参数;当您指定了参数iso_checksum时,参数 iso_checksum_url 的值被自动忽略。
iso_url string 一个指向 ISO 并包含安装镜像的 URL。这个 URL 可以是一个 HTTP 链接,也可以是一个文件路径:
  • 如果是 HTTP 链接,Packer 从 HTTP 链接下载文件并缓存运行。
  • 如果是 IMG 或者 QCOW2 文件 链接,QEMU直接在文件基础上启动。当您指定了文件路径时,请将参数 disk_image 置为 true
headless boolean Packer 默认通过启动图形化虚拟机界面构建 QEMU 虚拟机。当您将 headless 置为 True 时,将启动一个没有控制台的虚拟机。

其余可选参数可参阅 Packer QEMU Builder 页面。

Packer 配置器部分参数说明

示例配置器中包含了 Post-Processor 模块,该模块实现自动化上传本地镜像到 ECS 云平台。其必需参数如下所示:

必需参数 类型 描述
access_key string 您的 AccessKeyID。由于 Access Key 权限过大,为防止数据泄露,建议您 创建 RAM 用户子账号,并使用 RAM 用户子账号 创建 Access Key
secret_key string 您的 AccessKeySecret。
region string 本地镜像上传的地域,如本示例中的 cn-beijing。请参阅 地域和可用区 查看更多地域信息。
image_name string 您的本地镜像的名称。
  • 由 [2, 128] 位英文或中文字符组成。
  • 必须以大小写字母或中文字符开始。
  • 可以包含数字、下划线(_)或者连字符(-)。
  • 不能以 http:// or https:// 开头。
oss_bucket_name string 您的 OSS Bucket 名称。若您指定了一个不存在的 Bucket 名称,Packer 上传镜像时自动创建一个同名 Bucket。
image_os_type string 镜像类型,取值范围:
  • linux
  • windows
image_platform string 镜像发行版本,如本示例中的 CentOS。
image_architecture string 镜像发行版本的架构平台,取值范围:
  • i386
  • x86_64
format string 镜像的格式,取值范围:
  • RAW
  • VHD

其余可选参数可参阅 Packer Alicloud Post-Processor 页面。

参考链接

  • 您可以参阅 Packer 官方文档 了解 Packer 使用详情。
  • 您可以访问 GitHub Packer 仓库 packer 获取更多信息。
  • 您可以访问 GitHub Alibaba 仓库 opstools 获取更多信息。
  • 您可以访问 GitHub Alibaba&Packer 仓库 packer-provider 获取更多信息。

参考信息

  • 您可以参阅 Anaconda Kickstart 了解配置文件 ks.cfg 的更多信息。
  • 当您在服务器上执行 egrep "(svm|vmx)" /proc/cpuinfo 输出以下信息时,表示您的服务器支持 KVM 配置。

    1. 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
    2. flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
  • centos.json 文件用于使用 Packer 创建本地镜像,以下为该文件的内容。

    1. {"variables": {
    2. "box_basename": "centos-6.9",
    3. "build_timestamp": "{{isotime \"20060102150405\"}}",
    4. "cpus": "1",
    5. "disk_size": "4096",
    6. "git_revision": "__unknown_git_revision__",
    7. "headless": "",
    8. "http_proxy": "{{env `http_proxy`}}",
    9. "https_proxy": "{{env `https_proxy`}}",
    10. "iso_checksum_type": "md5",
    11. "iso_checksum": "af4a1640c0c6f348c6c41f1ea9e192a2",
    12. "iso_name": "CentOS-6.9-x86_64-minimal.iso",
    13. "ks_path": "centos-6.9/ks.cfg",
    14. "memory": "512",
    15. "metadata": "floppy/dummy_metadata.json",
    16. "mirror": "http://mirrors.aliyun.com/centos",
    17. "mirror_directory": "6.9/isos/x86_64",
    18. "name": "centos-6.9",
    19. "no_proxy": "{{env `no_proxy`}}",
    20. "template": "centos-6.9-x86_64",
    21. "version": "2.1.TIMESTAMP"
    22. },
    23. "builders":[
    24. {
    25. "boot_command": [
    26. "<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `ks_path`}}<enter><wait>"
    27. ],
    28. "boot_wait": "10s",
    29. "disk_size": "{{user `disk_size`}}",
    30. "headless": "{{ user `headless` }}",
    31. "http_directory": "http",
    32. "iso_checksum": "{{user `iso_checksum`}}",
    33. "iso_checksum_type": "{{user `iso_checksum_type`}}",
    34. "iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}",
    35. "output_directory": "packer-{{user `template`}}-qemu",
    36. "shutdown_command": "echo 'vagrant'|sudo -S /sbin/halt -h -p",
    37. "ssh_password": "vagrant",
    38. "ssh_port": 22,
    39. "ssh_username": "root",
    40. "ssh_wait_timeout": "10000s",
    41. "type": "qemu",
    42. "vm_name": "{{ user `template` }}.raw",
    43. "net_device": "virtio-net",
    44. "disk_interface": "virtio",
    45. "format": "raw"
    46. }
    47. ],
    48. "provisioners": [{
    49. "type": "shell",
    50. "inline": [
    51. "sleep 30",
    52. "yum install cloud-util cloud-init -y"
    53. ]
    54. }],
    55. "post-processors":[
    56. {
    57. "type":"alicloud-import",
    58. "oss_bucket_name": "packer",
    59. "image_name": "packer_import",
    60. "image_os_type": "linux",
    61. "image_platform": "CentOS",
    62. "image_architecture": "x86_64",
    63. "image_system_size": "40",
    64. "region":"cn-beijing"
    65. }
    66. ]
    67. }
本文导读目录