Thought I’d come back and show our final setup since people might be interested:
Build script
$env:PACKER_CACHE_DIR = "$env:TEMP\packer_cache"
try {
Get-VMSwitch packer -ErrorAction Stop
} catch {
# the default switch doesn't have internet access so that's a no go
New-VMSwitch packer -NetAdapterName Ethernet -AllowManagementOS $true
# Windows sets some stuff up before the interface has internet
Start-Sleep -Seconds 1
}
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue output-rocky8
# packer build -var type=internal .\build.pkr.hcl
packer build .\build.pkr.hcl
Remove-VMSwitch packer -Force
build.pkr.hcl
source "hyperv-iso" "rocky8" {
boot_command = [
"c",
"setparams 'kickstart'<enter>",
"linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=Rocky-8-4-x86_64-dvd inst.ks=hd:LABEL=ksdata:ks.cfg<enter>",
"initrdefi /images/pxeboot/initrd.img<enter>",
"boot<enter>"
]
boot_wait = "2s"
enable_dynamic_memory = true
enable_virtualization_extensions = false
generation = 2
iso_checksum = "sha256:ffe2fae67da6702d859cfb0b321561a5d616ce87a963d8a25b018c9c3d52d9a4"
iso_url = "https://download.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-8.4-x86_64-dvd1.iso"
disable_shutdown = true
shutdown_timeout = "10m"
communicator = "none"
vm_name = "packer_vdl-rocky8"
switch_name = "packer"
cd_files = [
"ks.cfg",
]
cd_label = "ksdata"
}
build {
sources = ["source.hyperv-iso.rocky8"]
post-processor "compress" {
keep_input_artifact = true
output = "{{.BuildName}}_{{.BuilderType}}.zip"
}
# post-processor "vagrant" {
# keep_input_artifact = true
# output = "build/vdl-rocky8_hyperv.box"
# vagrantfile_template = "./Vagrantfile.template"
# }
}
ks.cfg
cdrom
lang en_US.UTF-8 --addsupport=en_GB.UTF-8,fr_BE.UTF-8
keyboard be
network --bootproto=dhcp
rootpw --iscrypted ...
firewall --disabled
timezone UTC
bootloader --location=mbr
text
skipx
zerombr
clearpart --all --initlabel
autopart --nohome --type=lvm
firstboot --disabled
eula --agreed
services --enabled=NetworkManager,sshd,hypervfcopyd,hypervkvpd,hypervvssd
user --name=dsi --lock --groups=wheel
poweroff
%packages --excludedocs
@Base
@Core
openssh-clients
sudo
net-tools
curl
# hyperv stuff
hyperv-daemons
# unnecessary stuff for servers
-cockpit
-quota
-fprintd*
-parted
# unnecessary firmware
-aic94xx-firmware
-alsa-firmware
-alsa-tools-firmware
-atmel-firmware
-b43-openfwwf
-bfa-firmware
-dracut-config-rescue
-ipw*-firmware
-irqbalance
-ivtv-firmware
-iwl*-firmware
-kernel-firmware
-libertas-usb8388-firmware
-microcode_ctl
-ql*-firmware
-rt61pci-firmware
-rt73usb-firmware
-xorg-x11-drv-ati-firmware
-zd1211-firmware
%end
%post
set -x
dnf update -y
dnf clean all
echo 'SUBSYSTEM=="memory", ACTION=="add", ATTR{state}="online"' > /etc/udev/rules.d/100-hyperv-dynamic-memory.rules
echo 'ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="none"' > /etc/udev/rules.d/100-hyperv-none-scheduler.rules
# sudo
echo "dsi ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/dsi
sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers
mkdir -p /home/dsi/.ssh
(umask 0077 && echo '...' >> /home/dsi/.ssh/authorized_keys)
chown -R dsi: /home/dsi/.ssh
%end