This Packer template will generate a VHD suitable for use in Hyper-V or Azure.
- The Packer template downloads the Alpine 3.6 ISO from the official download site.
- It then uses
setup-alpine
to perform an installation to disk. - The
answers
file is served using Packer's built-in HTTP server. - It also installs the
hvtools
package and enables thehv_kvp_daemon
service so Hyper-V can detect the VM is running and retrieve its IP address. (Read more about Hyper-V Integration Services.)
The Packer provisioning step performs the following actions in order to prepare a proper Azure image:
- Installs Python and OpenSSL, plus
sudo
andbash
- Installs the
shadow
package (foruseradd
) - Installs the Azure Linux Agent
- Adds recommended boot parameters
- Sets the
ssh
client interval to 180 - Enables the Azure Agent to start at boot
The template also installs a custom useradd
script (in /usr/local/sbin
) that changes the behavior of adding password-less accounts (i.e. accounts that log in using SSH keys). By default useradd
locks the password-less account, preventing it from logging in. The custom script forces an illegal password, so that the password cannot be used to log in, but leaves the account unlocked so it can be access via SSH.
Check out the packer-qemu
branch for a WIP version that builds the Alpine image using qemu
, allowing you to generate the image from a Linux machine.
Detailed docs TBD, but the Windows instructions below should help.
The commands need to be run from an elevated PowerShell prompt so that they can interact with Hyper-V.
First run the template. This will generate a VHDX file locally, in output-hyperv-iso
.
packer build alpinehv.json
To use the image in Azure, you need to convert the image to VHD using convert.ps1
.
The deploy.cmd
script will upload the VHD to Azure and start a VM based on the image. Please amend the script variables as necessary.
Once the VM is started, you can log on via ssh
and make any additional changes. Then deprovision the VM to get it ready to be used as an image:
waagent -deprovision
Finally, makeimage.cmd
will deallocate the VM, capture it as an image, and start another VM based on that image.
- Review/tweak boot command based on ladar's comment
- Investigate
iptables
error messages