使用 Packer 和 VMware Player 构建 OVA

封隔器 OVA 示例

我遇到了一些其他人很幸运的好例子:

封隔器配置文件

在所有这些示例之间,我创建了自己的配置并确保它们没问题:

<> tree
.
├── ansible
│   ├── main.yml
│   └── requirements.yml
├── centos7.json
├── http
│   └── ks.cfg
├── iso
│   └── CentOS-7-x86_64-Minimal-1708.iso
└── scripts
    └── post-install.sh

首先让我们确保打包配置没问题:

<> packer validate centos7.json
Template validated successfully.

我也在kickstart文件上做了同样的事情(最初它给了我一个警告):

<> ksvalidator http/ks.cfg
The following problem occurred on line 5 of the kickstart file:

Unknown command: unsupported_hardware

但随后指定正确的版本摆脱了警告:

<> ksvalidator -v RHEL7 http/ks.cfg && echo $?
0

我也必须获得最新版本的Python模块来获得Kickstart中的验证工作(并修复一个文件指向正确的模块:orderedset VS有序集,修复程序中所描述的python-pykickstart)。这是使用pip安装的模块的版本:

<> pip2 show pykickstart
---
Metadata-Version: 1.1
Name: pykickstart
Version: 3.7
Summary: Python module for manipulating kickstart files
Home-page: http://fedoraproject.org/wiki/pykickstart
Author: Chris Lumens
Author-email: clumens@redhat.com
License: UNKNOWN
Location: /usr/local/lib/python2.7/dist-packages
Requires:
Classifiers:
  Programming Language :: Python :: 3

VMware Player 的 Packer 错误

期间我遇到了几个错误packer build,以下是我记得的错误:

缺少 Vmware-VIX

最初遇到一个错误,其中vmrum不存在(此处讨论)。为了修复这个错误,我安装了vmware-vix

<> chmod +x VMware-VIX-1.17.0-6661328.x86_64.bundle
<> sudo ./VMware-VIX-1.17.0-6661328.x86_64.bundle
Extracting VMware Installer...done.
You must accept the VMware VIX API End User License Agreement to
continue.  Press Enter to proceed.

然后我看到了 vmrun 可执行文件:

<> rehash
<> which vmrun
/usr/bin/vmrun

仅供参考的是我正在运行的vmplayer版本(这是在 ubuntu 16.04 上):

<> vmware-installer -l
Product Name         Product Version
==================== ====================
vmware-player        14.1.1.7528167
vmware-vix           1.17.0.6661328

缺少 qemu-img

然后我看到了以下内容:

<> packer build centos7.json
vmware-iso output will be in this color.

Build 'vmware-iso' errored: Failed creating VMware driver: Unable to initialize any driver for this platform. The errors
from each driver are shown below. Please fix at least one driver
to continue:
* exec: "vmware": executable file not found in $PATH
* exec: "vmware": executable file not found in $PATH
* Neither 'vmware-vdiskmanager', nor 'qemu-img' found in path.
One of these is required to configure disks for VMware Player.
* Neither 'vmware-vdiskmanager', nor 'qemu-img' found in path.
One of these is required to configure disks for VMware Player.

看起来我缺少qemu-img和(或)vmware-diskmanager(看起来我可以从社区论坛中讨论 的VMware Virtual Disk Development Kit 中获得vmware-diskmanager)。现在我安装了qemu-img,因为它更快:

<> sudo apt install qemu-utils

缺少 /etc/vmware/netmap.conf

然后我遇到了缺少vmplayer配置文件的问题:

<> packer build centos7.json
vmware-iso output will be in this color.

==> vmware-iso: Downloading or copying ISO
    vmware-iso: Downloading or copying: file:///usr/local/packer/iso/CentOS-7-x86_64-Minimal-1708.iso
==> vmware-iso: Creating virtual machine disk
==> vmware-iso: Building and writing VMX file
==> vmware-iso: Could not find netmap conf file: /etc/vmware/netmap.conf
==> vmware-iso: Deleting output directory...
Build 'vmware-iso' errored: Could not find netmap conf file: /etc/vmware/netmap.conf

==> Some builds didn't complete successfully and had errors:
--> vmware-iso: Could not find netmap conf file: /etc/vmware/netmap.conf

==> Builds finished but no artifacts were created.

因此,我使用How to Manually Configure VMWARE Networking on Linux Command Line站点的副本创建了一个示例文件,它最终看起来像这样:

<> cat /etc/vmware/netmap.conf
network0.name = "Bridged"
network0.device = "vmnet0"
network1.name = "HostOnly"
network1.device = "vmnet1"
network2.name = "VMNet2"
network2.device = "vmnet2"
network8.name = "NAT"
network8.device = "vmnet8"

缺少 ldconfig

然后我遇到了这条消息:

<> packer build centos7.json
vmware-iso output will be in this color.

==> vmware-iso: Downloading or copying ISO
    vmware-iso: Downloading or copying: file:///usr/local/packer/iso/CentOS-7-x86_64-Minimal-1708.iso
==> vmware-iso: Creating virtual machine disk
==> vmware-iso: Building and writing VMX file
==> vmware-iso: Starting HTTP server on port 8197
==> vmware-iso: Starting virtual machine...
    vmware-iso: The VM will be run headless, without a GUI. If you want to
    vmware-iso: view the screen of the VM, connect via VNC with the password "SXxWhTkw" to
    vmware-iso: vnc://127.0.0.1:5904
==> vmware-iso: Error starting VM: VMware error: /usr/lib/vmware/bin/vmware-vmx: error while loading shared libraries: libXcursor.so.1: cannot open shared object file: No such file or directory
==> vmware-iso: Waiting 4.655373739s to give VMware time to clean up...
==> vmware-iso: Deleting output directory...
Build 'vmware-iso' errored: Error starting VM: VMware error: /usr/lib/vmware/bin/vmware-vmx: error while loading shared libraries: libXcursor.so.1: cannot open shared object file: No such file or directory

我找到了文件

<> sudo updatedb
<> locate libXcursor.so.1
/usr/lib/vmware/lib/libXcursor.so.1
/usr/lib/vmware/lib/libXcursor.so.1/libXcursor.so.1
/usr/lib/vmware-installer/2.1.0/lib/lib/libXcursor.so.1
/usr/lib/vmware-installer/2.1.0/lib/lib/libXcursor.so.1/libXcursor.so.1

并创建了以下文件来加载库:

<> cat /etc/ld.so.conf.d/vmware.conf
/usr/lib/vmware/lib/libXcursor.so.1
<> sudo ldconfig -v | grep vmware -A 1
/usr/lib/vmware/lib/libXcursor.so.1:
	libXcursor.so.1 -> libXcursor.so.1

然后虚拟机启动。

dhcpd.conf 文件位置不正确

然后我又遇到了一个问题:

<> packer build centos7.json
vmware-iso output will be in this color.

==> vmware-iso: Downloading or copying ISO
    vmware-iso: Downloading or copying: file:///usr/local/packer/iso/CentOS-7-x86_64-Minimal-1708.iso
==> vmware-iso: Creating virtual machine disk
==> vmware-iso: Building and writing VMX file
==> vmware-iso: Starting HTTP server on port 8383
==> vmware-iso: Starting virtual machine...
    vmware-iso: The VM will be run headless, without a GUI. If you want to
    vmware-iso: view the screen of the VM, connect via VNC with the password "9B6EsmKN" to
    vmware-iso: vnc://127.0.0.1:5963
==> vmware-iso: Waiting 10s for boot...
==> vmware-iso: Connecting to VM via VNC (127.0.0.1:5963)
==> vmware-iso: Error detecting host IP: Could not find vmnetdhcp conf file: /etc/vmware/vmnet8/dhcp/dhcp.conf
==> vmware-iso: Stopping virtual machine...
==> vmware-iso: Deleting output directory...
Build 'vmware-iso' errored: Error detecting host IP: Could not find vmnetdhcp conf file: /etc/vmware/vmnet8/dhcp/dhcp.conf

看起来现在文件位于这里/etc/vmware/vmnet8/dhcpd/dhcpd.conf (vs /etc/vmware/vmnet8/dhcp/dhcp.conf ) ,所以我刚刚创建了一个指向目录和文件的符号链接

<> ls -l /etc/vmware/vmnet8/dhcp
lrwxrwxrwx 1 root root 5 Feb 11 12:39 /etc/vmware/vmnet8/dhcp -> dhcpd
<> ls -l /etc/vmware/vmnet8/dhcp/dhcp.conf
lrwxrwxrwx 1 root root 10 Feb 11 12:39 /etc/vmware/vmnet8/dhcp/dhcp.conf -> dhcpd.conf

然后它开始安装,我看到虚拟机正在运行:

<> vmrun -T player list
Total running VMs: 1
/usr/local/packer/output-ova-vmware-iso/packer-centos-7-x86_64.vmx
<> ps -ef | grep vmx
elatov    3592  1372  0 20:22 pts/3    00:00:00 grep --color=auto vmx
elatov   30788     1 99 20:18 ?        00:04:33 /usr/lib/vmware/bin/vmware-vmx -s vmx.noUIBuildNumberCheck=TRUE -# product=4;name=VMware Player;version=14.0.0;buildnumber=6661328;licensename=VMware Player;licenseversion=14.0; -@ duplex=3;msgs=ui /usr/local/packer/output-ova-vmware-iso/packer-centos-7-x86_64.vmx

检查 PXE 引导安装进度

Kickstart安装进行时,packer显示此消息,

<> packer build centos7.json
vmware-iso output will be in this color.

==> vmware-iso: Downloading or copying ISO
    vmware-iso: Downloading or copying: file:///usr/local/packer/iso/CentOS-7-x86_64-Minimal-1708.iso
==> vmware-iso: Creating virtual machine disk
==> vmware-iso: Building and writing VMX file
==> vmware-iso: Starting HTTP server on port 8863
==> vmware-iso: Starting virtual machine...
    vmware-iso: The VM will be run headless, without a GUI. If you want to
    vmware-iso: view the screen of the VM, connect via VNC with the password "O08ybVbP" to
    vmware-iso: vnc://127.0.0.1:5924
==> vmware-iso: Waiting 10s for boot...
==> vmware-iso: Connecting to VM via VNC (127.0.0.1:5924)
==> vmware-iso: Typing the boot command over VNC...
==> vmware-iso: Waiting for SSH to become available...

所以我决定连接到VNC服务。首先,我从我的 Mac 创建了一个 SSH 隧道:

<> ssh -L 1111:localhost:5924 ub

然后在我的 Mac 上,我运行了这个:

<> vncviewer localhost:1111

然后在输入密码后(来自打包程序的输出),我看到安装正在进行:

打包机-ks-going.png

很高兴确认安装正在进行。

Ansible 配置器和 Packer 的问题

我遇到了ansible供应商的另一个问题:

<> packer build centos7.json
vmware-iso output will be in this color.

==> vmware-iso: Downloading or copying ISO
    vmware-iso: Downloading or copying: file:///usr/local/packer/iso/CentOS-7-x86_64-Minimal-1708.iso
==> vmware-iso: Creating virtual machine disk
==> vmware-iso: Building and writing VMX file
==> vmware-iso: Starting HTTP server on port 8844
==> vmware-iso: Starting virtual machine...
    vmware-iso: The VM will be run headless, without a GUI. If you want to
    vmware-iso: view the screen of the VM, connect via VNC with the password "lWgi2eUn" to
    vmware-iso: vnc://127.0.0.1:5970
==> vmware-iso: Waiting 10s for boot...
==> vmware-iso: Connecting to VM via VNC (127.0.0.1:5970)
==> vmware-iso: Typing the boot command over VNC...
==> vmware-iso: Waiting for SSH to become available...
==> vmware-iso: Connected to SSH!
==> vmware-iso: Provisioning with shell script: scripts/post-install.sh
..
..
==> vmware-iso: Provisioning with Ansible...
    vmware-iso: Creating Ansible staging directory...
    vmware-iso: Creating directory: /tmp/packer-provisioner-ansible-local/5a80a166-018b-345f-29cb-6764bc9ad5bb
    vmware-iso: Uploading main Playbook file...
    vmware-iso: Uploading galaxy file...
{
    vmware-iso: Uploading inventory file...
    vmware-iso: Executing Ansible Galaxy: cd /tmp/packer-provisioner-ansible-local/5a80a166-018b-345f-29cb-6764bc9ad5bb && ansible-galaxy install -r /tmp/packer-provisioner-ansible-local/5a80a166-018b-345f-29cb-6764bc9ad5bb/requirements.yml -p /tmp/packer-provisioner-ansible-local/5a80a166-018b-345f-29cb-6764bc9ad5bb/roles
    vmware-iso: - downloading role 'chrony', owned by influxdata
    vmware-iso: - downloading role from https://github.com/influxdata/ansible-chrony/archive/master.tar.gz
    vmware-iso: - extracting influxdata.chrony to /tmp/packer-provisioner-ansible-local/5a80a166-018b-345f-29cb-6764bc9ad5bb/roles/influxdata.chrony
    vmware-iso: - influxdata.chrony (master) was installed successfully
    vmware-iso: Executing Ansible: cd /tmp/packer-provisioner-ansible-local/5a80a166-018b-345f-29cb-6764bc9ad5bb && ANSIBLE_FORCE_COLOR=1 PYTHONUNBUFFERED=1 ansible-playbook /tmp/packer-provisioner-ansible-local/5a80a166-018b-345f-29cb-6764bc9ad5bb/main.yml --extra-vars \"packer_build_name=vmware-iso packer_builder_type=vmware-iso packer_http_addr=172.16.197.1:8844\"  -c local -i /tmp/packer-provisioner-ansible-local/5a80a166-018b-345f-29cb-6764bc9ad5bb/packer-provisioner-ansible-local746234266
    vmware-iso: ERROR! the playbook: packer_builder_type=vmware-iso could not be found
==> vmware-iso: Stopping virtual machine...
==> vmware-iso: Deleting output directory...
Build 'vmware-iso' errored: Error executing Ansible: Non-zero exit status: 1

该问题特定于我的打包程序版本,并在此处进行了讨论(这是一个相当新的问题,因此我将等待下一个版本,看看是否可以修复它)。

完成封隔器构建

在我测试时,我禁用了ansible并只使用了shell配置器,并且构建成功了:

<> packer build centos7.json
vmware-iso output will be in this color.

==> vmware-iso: Downloading or copying ISO
    vmware-iso: Downloading or copying: file:///usr/local/packer/iso/CentOS-7-x86_64-Minimal-1708.iso
==> vmware-iso: Creating virtual machine disk
==> vmware-iso: Building and writing VMX file
==> vmware-iso: Starting HTTP server on port 8776
==> vmware-iso: Starting virtual machine...
    vmware-iso: The VM will be run headless, without a GUI. If you want to
    vmware-iso: view the screen of the VM, connect via VNC with the password "jxIgJ53t" to
    vmware-iso: vnc://127.0.0.1:5976
==> vmware-iso: Waiting 10s for boot...
==> vmware-iso: Connecting to VM via VNC (127.0.0.1:5976)
==> vmware-iso: Typing the boot command over VNC...
==> vmware-iso: Waiting for SSH to become available...
==> vmware-iso: Connected to SSH!
==> vmware-iso: Provisioning with shell script: scripts/post-install.sh
    vmware-iso: Loaded plugins: fastestmirror
    vmware-iso: base                                                     | 3.6 kB     00:00
    vmware-iso: extras                                                   | 3.4 kB     00:00
    vmware-iso: updates                                                  | 3.4 kB     00:00
    vmware-iso: (1/4): base/7/x86_64/group_gz                              | 156 kB   00:00
    vmware-iso: (2/4): extras/7/x86_64/primary_db                          | 166 kB   00:00
    vmware-iso: (3/4): updates/7/x86_64/primary_db                         | 6.0 MB   00:00
    vmware-iso: (4/4): base/7/x86_64/primary_db                            | 5.7 MB   00:01
    vmware-iso: Determining fastest mirrors
    vmware-iso:  * base: mirror.den1.denvercolo.net
    vmware-iso:  * extras: mirrors.umflint.edu
    vmware-iso:  * updates: mirrors.oit.uci.edu
    vmware-iso: Resolving Dependencies
    vmware-iso: --> Running transaction check
    vmware-iso: ---> Package ansible.noarch 0:2.4.2.0-2.el7 will be installed
    vmware-iso: --> Processing Dependency: sshpass for package: ansible-2.4.2.0-2.el7.noarch
    vmware-iso: --> Processing Dependency: python2-jmespath for package: ansible-2.4.2.0-2.el7.noarch
    vmware-iso: --> Processing Dependency: python-six for package: ansible-2.4.2.0-2.el7.noarch
    vmware-iso: --> Processing Dependency: python-setuptools for package: ansible-2.4.2.0-2.el7.noarch
    vmware-iso: --> Processing Dependency: python-passlib for package: ansible-2.4.2.0-2.el7.noarch
    vmware-iso: --> Processing Dependency: python-paramiko for package: ansible-2.4.2.0-2.el7.noarch
    vmware-iso: --> Processing Dependency: python-jinja2 for package: ansible-2.4.2.0-2.el7.noarch
    vmware-iso: --> Processing Dependency: python-httplib2 for package: ansible-2.4.2.0-2.el7.noarch
    vmware-iso: --> Processing Dependency: python-cryptography for package: ansible-2.4.2.0-2.el7.noarch
    vmware-iso: --> Processing Dependency: PyYAML for package: ansible-2.4.2.0-2.el7.noarch
    vmware-iso: --> Running transaction check
    vmware-iso: ---> Package PyYAML.x86_64 0:3.10-11.el7 will be installed
    vmware-iso: --> Processing Dependency: libyaml-0.so.2()(64bit) for package: PyYAML-3.10-11.el7.x86_64
    vmware-iso: ---> Package python-httplib2.noarch 0:0.9.2-1.el7 will be installed
    vmware-iso: ---> Package python-jinja2.noarch 0:2.7.2-2.el7 will be installed
    vmware-iso: --> Processing Dependency: python-babel >= 0.8 for package: python-jinja2-2.7.2-2.el7.noarch
    vmware-iso: --> Processing Dependency: python-markupsafe for package: python-jinja2-2.7.2-2.el7.noarch
    vmware-iso: ---> Package python-paramiko.noarch 0:2.1.1-2.el7 will be installed
    vmware-iso: ---> Package python-passlib.noarch 0:1.6.5-2.el7 will be installed
    vmware-iso: ---> Package python-setuptools.noarch 0:0.9.8-7.el7 will be installed
    vmware-iso: --> Processing Dependency: python-backports-ssl_match_hostname for package: python-setuptools-0.9.8-7.el7.noarch
    vmware-iso: ---> Package python-six.noarch 0:1.9.0-2.el7 will be installed
    vmware-iso: ---> Package python2-cryptography.x86_64 0:1.7.2-1.el7_4.1 will be installed
    vmware-iso: --> Processing Dependency: python-pyasn1 >= 0.1.8 for package: python2-cryptography-1.7.2-1.el7_4.1.x86_64
    vmware-iso: --> Processing Dependency: python-idna >= 2.0 for package: python2-cryptography-1.7.2-1.el7_4.1.x86_64
    vmware-iso: --> Processing Dependency: python-cffi >= 1.4.1 for package: python2-cryptography-1.7.2-1.el7_4.1.x86_64
    vmware-iso: --> Processing Dependency: python-ipaddress for package: python2-cryptography-1.7.2-1.el7_4.1.x86_64
    vmware-iso: --> Processing Dependency: python-enum34 for package: python2-cryptography-1.7.2-1.el7_4.1.x86_64
    vmware-iso: ---> Package python2-jmespath.noarch 0:0.9.0-3.el7 will be installed
    vmware-iso: ---> Package sshpass.x86_64 0:1.06-2.el7 will be installed
    vmware-iso: --> Running transaction check
    vmware-iso: ---> Package libyaml.x86_64 0:0.1.4-11.el7_0 will be installed
    vmware-iso: ---> Package python-babel.noarch 0:0.9.6-8.el7 will be installed
    vmware-iso: ---> Package python-backports-ssl_match_hostname.noarch 0:3.4.0.2-4.el7 will be installed
    vmware-iso: --> Processing Dependency: python-backports for package: python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch
    vmware-iso: ---> Package python-cffi.x86_64 0:1.6.0-5.el7 will be installed
    vmware-iso: --> Processing Dependency: python-pycparser for package: python-cffi-1.6.0-5.el7.x86_64
    vmware-iso: ---> Package python-enum34.noarch 0:1.0.4-1.el7 will be installed
    vmware-iso: ---> Package python-idna.noarch 0:2.4-1.el7 will be installed
    vmware-iso: ---> Package python-ipaddress.noarch 0:1.0.16-2.el7 will be installed
    vmware-iso: ---> Package python-markupsafe.x86_64 0:0.11-10.el7 will be installed
    vmware-iso: ---> Package python2-pyasn1.noarch 0:0.1.9-7.el7 will be installed
    vmware-iso: --> Running transaction check
    vmware-iso: ---> Package python-backports.x86_64 0:1.0-8.el7 will be installed
    vmware-iso: ---> Package python-pycparser.noarch 0:2.14-1.el7 will be installed
    vmware-iso: --> Processing Dependency: python-ply for package: python-pycparser-2.14-1.el7.noarch
    vmware-iso: --> Running transaction check
    vmware-iso: ---> Package python-ply.noarch 0:3.4-11.el7 will be installed
    vmware-iso: --> Finished Dependency Resolution
    vmware-iso:
    vmware-iso: Dependencies Resolved
    vmware-iso:
    vmware-iso: ================================================================================
    vmware-iso:  Package                              Arch    Version            Repository
    vmware-iso:                                                                            Size
    vmware-iso: ================================================================================
    vmware-iso: Installing:
    vmware-iso:  ansible                              noarch  2.4.2.0-2.el7      extras   7.6 M
    vmware-iso: Installing for dependencies:
    vmware-iso:  PyYAML                               x86_64  3.10-11.el7        base     153 k
    vmware-iso:  libyaml                              x86_64  0.1.4-11.el7_0     base      55 k
    vmware-iso:  python-babel                         noarch  0.9.6-8.el7        base     1.4 M
    vmware-iso:  python-backports                     x86_64  1.0-8.el7          base     5.8 k
    vmware-iso:  python-backports-ssl_match_hostname  noarch  3.4.0.2-4.el7      base      12 k
    vmware-iso:  python-cffi                          x86_64  1.6.0-5.el7        base     218 k
    vmware-iso:  python-enum34                        noarch  1.0.4-1.el7        base      52 k
    vmware-iso:  python-httplib2                      noarch  0.9.2-1.el7        extras   115 k
    vmware-iso:  python-idna                          noarch  2.4-1.el7          base      94 k
    vmware-iso:  python-ipaddress                     noarch  1.0.16-2.el7       base      34 k
    vmware-iso:  python-jinja2                        noarch  2.7.2-2.el7        base     515 k
    vmware-iso:  python-markupsafe                    x86_64  0.11-10.el7        base      25 k
    vmware-iso:  python-paramiko                      noarch  2.1.1-2.el7        extras   267 k
    vmware-iso:  python-passlib                       noarch  1.6.5-2.el7        extras   488 k
    vmware-iso:  python-ply                           noarch  3.4-11.el7         base     123 k
    vmware-iso:  python-pycparser                     noarch  2.14-1.el7         base     104 k
    vmware-iso:  python-setuptools                    noarch  0.9.8-7.el7        base     397 k
    vmware-iso:  python-six                           noarch  1.9.0-2.el7        base      29 k
    vmware-iso:  python2-cryptography                 x86_64  1.7.2-1.el7_4.1    updates  502 k
    vmware-iso:  python2-jmespath                     noarch  0.9.0-3.el7        extras    39 k
    vmware-iso:  python2-pyasn1                       noarch  0.1.9-7.el7        base     100 k
    vmware-iso:  sshpass                              x86_64  1.06-2.el7         extras    21 k
    vmware-iso:
    vmware-iso: Transaction Summary
    vmware-iso: ================================================================================
    vmware-iso: Install  1 Package (+22 Dependent packages)
    vmware-iso:
    vmware-iso: Total download size: 12 M
    vmware-iso: Installed size: 60 M
    vmware-iso: Downloading packages:
    vmware-iso: (1/23): libyaml-0.1.4-11.el7_0.x86_64.rpm                  |  55 kB   00:00
    vmware-iso: (2/23): PyYAML-3.10-11.el7.x86_64.rpm                      | 153 kB   00:00
    vmware-iso: (3/23): python-backports-1.0-8.el7.x86_64.rpm              | 5.8 kB   00:00
    vmware-iso: (4/23): python-backports-ssl_match_hostname-3.4.0.2-4.el7. |  12 kB   00:00
    vmware-iso: (5/23): python-cffi-1.6.0-5.el7.x86_64.rpm                 | 218 kB   00:00
    vmware-iso: (6/23): ansible-2.4.2.0-2.el7.noarch.rpm                   | 7.6 MB   00:01
    vmware-iso: (7/23): python-idna-2.4-1.el7.noarch.rpm                   |  94 kB   00:00
    vmware-iso: (8/23): python-babel-0.9.6-8.el7.noarch.rpm                | 1.4 MB   00:01
    vmware-iso: (9/23): python-enum34-1.0.4-1.el7.noarch.rpm               |  52 kB   00:00
    vmware-iso: (10/23): python-jinja2-2.7.2-2.el7.noarch.rpm              | 515 kB   00:00
    vmware-iso: (11/23): python-markupsafe-0.11-10.el7.x86_64.rpm          |  25 kB   00:00
    vmware-iso: (12/23): python-httplib2-0.9.2-1.el7.noarch.rpm            | 115 kB   00:00
    vmware-iso: (13/23): python-ipaddress-1.0.16-2.el7.noarch.rpm          |  34 kB   00:00
    vmware-iso: (14/23): python-setuptools-0.9.8-7.el7.noarch.rpm          | 397 kB   00:00
    vmware-iso: (15/23): python-six-1.9.0-2.el7.noarch.rpm                 |  29 kB   00:00
    vmware-iso: (16/23): python-paramiko-2.1.1-2.el7.noarch.rpm            | 267 kB   00:00
    vmware-iso: (17/23): python-ply-3.4-11.el7.noarch.rpm                  | 123 kB   00:00
    vmware-iso: (18/23): python-passlib-1.6.5-2.el7.noarch.rpm             | 488 kB   00:00
    vmware-iso: (19/23): python2-jmespath-0.9.0-3.el7.noarch.rpm           |  39 kB   00:00
    vmware-iso: (20/23): python-pycparser-2.14-1.el7.noarch.rpm            | 104 kB   00:00
    vmware-iso: (21/23): python2-cryptography-1.7.2-1.el7_4.1.x86_64.rpm   | 502 kB   00:00
    vmware-iso: (22/23): sshpass-1.06-2.el7.x86_64.rpm                     |  21 kB   00:00
    vmware-iso: (23/23): python2-pyasn1-0.1.9-7.el7.noarch.rpm             | 100 kB   00:00
    vmware-iso: --------------------------------------------------------------------------------
    vmware-iso: Total                                              6.0 MB/s |  12 MB  00:02
    vmware-iso: Running transaction check
    vmware-iso: Running transaction test
    vmware-iso: Transaction test succeeded
    vmware-iso: Running transaction
    vmware-iso:   Installing : python-six-1.9.0-2.el7.noarch                               1/23
    vmware-iso:   Installing : python2-pyasn1-0.1.9-7.el7.noarch                           2/23
    vmware-iso:   Installing : python-httplib2-0.9.2-1.el7.noarch                          3/23
    vmware-iso:   Installing : python-enum34-1.0.4-1.el7.noarch                            4/23
    vmware-iso:   Installing : python-ipaddress-1.0.16-2.el7.noarch                        5/23
    vmware-iso:   Installing : libyaml-0.1.4-11.el7_0.x86_64                               6/23
    vmware-iso:   Installing : PyYAML-3.10-11.el7.x86_64                                   7/23
    vmware-iso:   Installing : python-backports-1.0-8.el7.x86_64                           8/23
    vmware-iso:   Installing : python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch    9/23
    vmware-iso:   Installing : python-setuptools-0.9.8-7.el7.noarch                       10/23
    vmware-iso:   Installing : python-babel-0.9.6-8.el7.noarch                            11/23
    vmware-iso:   Installing : python-passlib-1.6.5-2.el7.noarch                          12/23
    vmware-iso:   Installing : python-ply-3.4-11.el7.noarch                               13/23
    vmware-iso:   Installing : python-pycparser-2.14-1.el7.noarch                         14/23
    vmware-iso:   Installing : python-cffi-1.6.0-5.el7.x86_64                             15/23
    vmware-iso:   Installing : python-markupsafe-0.11-10.el7.x86_64                       16/23
    vmware-iso:   Installing : python-jinja2-2.7.2-2.el7.noarch                           17/23
    vmware-iso:   Installing : python-idna-2.4-1.el7.noarch                               18/23
    vmware-iso:   Installing : python2-cryptography-1.7.2-1.el7_4.1.x86_64                19/23
    vmware-iso:   Installing : python-paramiko-2.1.1-2.el7.noarch                         20/23
    vmware-iso:   Installing : python2-jmespath-0.9.0-3.el7.noarch                        21/23
    vmware-iso:   Installing : sshpass-1.06-2.el7.x86_64                                  22/23
    vmware-iso:   Installing : ansible-2.4.2.0-2.el7.noarch                               23/23
    vmware-iso:   Verifying  : python-jinja2-2.7.2-2.el7.noarch                            1/23
    vmware-iso:   Verifying  : python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch    2/23
    vmware-iso:   Verifying  : sshpass-1.06-2.el7.x86_64                                   3/23
    vmware-iso:   Verifying  : python-setuptools-0.9.8-7.el7.noarch                        4/23
    vmware-iso:   Verifying  : python2-cryptography-1.7.2-1.el7_4.1.x86_64                 5/23
    vmware-iso:   Verifying  : python2-jmespath-0.9.0-3.el7.noarch                         6/23
    vmware-iso:   Verifying  : python-six-1.9.0-2.el7.noarch                               7/23
    vmware-iso:   Verifying  : python-idna-2.4-1.el7.noarch                                8/23
    vmware-iso:   Verifying  : python-markupsafe-0.11-10.el7.x86_64                        9/23
    vmware-iso:   Verifying  : python-ply-3.4-11.el7.noarch                               10/23
    vmware-iso:   Verifying  : python-passlib-1.6.5-2.el7.noarch                          11/23
    vmware-iso:   Verifying  : python-babel-0.9.6-8.el7.noarch                            12/23
    vmware-iso:   Verifying  : python-backports-1.0-8.el7.x86_64                          13/23
    vmware-iso:   Verifying  : python-cffi-1.6.0-5.el7.x86_64                             14/23
    vmware-iso:   Verifying  : python-paramiko-2.1.1-2.el7.noarch                         15/23
    vmware-iso:   Verifying  : python-pycparser-2.14-1.el7.noarch                         16/23
    vmware-iso:   Verifying  : libyaml-0.1.4-11.el7_0.x86_64                              17/23
    vmware-iso:   Verifying  : ansible-2.4.2.0-2.el7.noarch                               18/23
    vmware-iso:   Verifying  : python-ipaddress-1.0.16-2.el7.noarch                       19/23
    vmware-iso:   Verifying  : python-enum34-1.0.4-1.el7.noarch                           20/23
    vmware-iso:   Verifying  : python-httplib2-0.9.2-1.el7.noarch                         21/23
    vmware-iso:   Verifying  : python2-pyasn1-0.1.9-7.el7.noarch                          22/23
    vmware-iso:   Verifying  : PyYAML-3.10-11.el7.x86_64                                  23/23
    vmware-iso:
    vmware-iso: Installed:
    vmware-iso:   ansible.noarch 0:2.4.2.0-2.el7
    vmware-iso:
    vmware-iso: Dependency Installed:
    vmware-iso:   PyYAML.x86_64 0:3.10-11.el7
    vmware-iso:   libyaml.x86_64 0:0.1.4-11.el7_0
    vmware-iso:   python-babel.noarch 0:0.9.6-8.el7
    vmware-iso:   python-backports.x86_64 0:1.0-8.el7
    vmware-iso:   python-backports-ssl_match_hostname.noarch 0:3.4.0.2-4.el7
    vmware-iso:   python-cffi.x86_64 0:1.6.0-5.el7
    vmware-iso:   python-enum34.noarch 0:1.0.4-1.el7
    vmware-iso:   python-httplib2.noarch 0:0.9.2-1.el7
    vmware-iso:   python-idna.noarch 0:2.4-1.el7
    vmware-iso:   python-ipaddress.noarch 0:1.0.16-2.el7
    vmware-iso:   python-jinja2.noarch 0:2.7.2-2.el7
    vmware-iso:   python-markupsafe.x86_64 0:0.11-10.el7
    vmware-iso:   python-paramiko.noarch 0:2.1.1-2.el7
    vmware-iso:   python-passlib.noarch 0:1.6.5-2.el7
    vmware-iso:   python-ply.noarch 0:3.4-11.el7
    vmware-iso:   python-pycparser.noarch 0:2.14-1.el7
    vmware-iso:   python-setuptools.noarch 0:0.9.8-7.el7
    vmware-iso:   python-six.noarch 0:1.9.0-2.el7
    vmware-iso:   python2-cryptography.x86_64 0:1.7.2-1.el7_4.1
    vmware-iso:   python2-jmespath.noarch 0:0.9.0-3.el7
    vmware-iso:   python2-pyasn1.noarch 0:0.1.9-7.el7
    vmware-iso:   sshpass.x86_64 0:1.06-2.el7
    vmware-iso:
    vmware-iso: Complete!
==> vmware-iso: Gracefully halting virtual machine...
    vmware-iso: Waiting for VMware to clean up after itself...
==> vmware-iso: Deleting unnecessary VMware files...
    vmware-iso: Deleting: output-ova-vmware-iso/vmware.log
==> vmware-iso: Compacting the disk image
==> vmware-iso: Cleaning VMX prior to finishing up...
    vmware-iso: Unmounting floppy from VMX...
    vmware-iso: Detaching ISO from CD-ROM device...
    vmware-iso: Disabling VNC server...
==> vmware-iso: Skipping export of virtual machine (export is allowed only for ESXi and the format needs to be specified)...
==> vmware-iso: Running post-processor: shell-local
==> vmware-iso (shell-local): Post processing with local shell script: /tmp/packer-shell112690227
    vmware-iso (shell-local): Opening VMX source: output-ova-vmware-iso/packer-centos-7-x86_64.vmx
    vmware-iso (shell-local): Opening OVA target: output-ova-vmware-iso/test.ova
    vmware-iso (shell-local): Writing OVA package: output-ova-vmware-iso/test.ova
    vmware-iso (shell-local): Transfer Completed
    vmware-iso (shell-local): Completed successfully
Build 'vmware-iso' finished.

==> Builds finished. The artifacts of successful builds are:
--> vmware-iso: VM files in directory: output-ova-vmware-iso
--> vmware-iso:

我创建了我的 OVA:

<> tree output-ova-vmware-iso
output-ova-vmware-iso
├── disk.vmdk
├── packer-centos-7-x86_64.nvram
├── packer-centos-7-x86_64.vmsd
├── packer-centos-7-x86_64.vmx
├── packer-centos-7-x86_64.vmxf
└── test.ova

很酷。我还能够查询 OVA 以查看其属性:

<> ovftool output-ova-vmware-iso/test.ova
OVF version:   1.0
VirtualApp:    false
Name:          packer-centos-7-x86_64

Download Size:  782.63 MB

Deployment Sizes:
  Flat disks:   16.00 GB
  Sparse disks: 1.55 GB

Networks:
  Name:        nat
  Description: The nat network

Virtual Machines:
  Name:               packer-centos-7-x86_64
  Operating System:   centos7_64guest
  Virtual Hardware:
    Families:         vmx-13
    Number of CPUs:   2
    Cores per socket: 1
    Memory:           512.00 MB

    Disks:
      Index:          0
      Instance ID:    7
      Capacity:       16.00 GB
      Disk Types:     SCSI-lsilogic

    NICs:
      Adapter Type:   E1000
      Connection:     nat

看起来不错。

在 ESXi 主机上部署 OVA

作为快速测试,我在 ESXi 主机上部署了 OVA:

<> ovftool -dm=thin -ds=datastore1 "--net:nat=VM_VLAN3" output-ova-vmware-iso/test.ova "vi://root@hp.kar.int"
Opening OVA source: output-ova-vmware-iso/test.ova
The manifest validates
Enter login information for target vi://hp.kar.int/
Username: root
Password: ********
Opening VI target: vi://root@hp.kar.int:443/
Deploying to VI: vi://root@hp.kar.int:443/
Transfer Completed
Completed successfully

我能够打开 VM 并使用 root 用户登录。以下是虚拟机在 Web 客户端中的样子:

esxi-packer-ova-deployed.png

封隔器选项

我最终在我的打包程序配置中设置了一些选项(VMware Builder(来自 ISO)中涵盖了所有选项):

  • 我禁用了tools_upload_flavor选项,因为我稍后在配置过程中安装了open-vm-tools包。
  • 我将版本设置为13以匹配我的 ESXi 版本(即6.5),默认情况下它是9(即 ESXi 5.1)。
  • 我使用ovftool手动创建了 OVA,而不是将其上传到 ESXi 机器,仅用于测试(并且能够将其用于以后使用,因为我没有 vCenter 并且无法存储模板):

     "post-processors": [
      {
        "type": "shell-local",
        "inline": ["ovftool output-ova-vmware-iso/packer-centos-7-x86_64.vmx output-ova-vmware-iso/test.ova"]
      }
      ]
  • 我设置了guest_os_typecentos7-64,以确保它显示为CentOS的7,而不是CentOS 5的(OS类型的完整列表,请点击这里

这只是对我有用的一些选择。

包装工与詹金斯

不乏Jenkinsfile示例:

创建您选择的 Jenkins 作业并运行成功的作业(构建和存储 OVA 映像)后,您可能会在 Jenkins 作业结果中看到类似这样的内容(不要忘记使用阶段块):

jenkins-packer-job.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值