62 lines
2.4 KiB
JSON
62 lines
2.4 KiB
JSON
# Copyright 2024 Signal Messenger, LLC
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
# Builds our first image, which is just a default Debian image
|
|
# with some pre-installed packages etc. to make things easier for
|
|
# us. Most of the work here is done in the `debian1/preseed.txt`
|
|
# file. Packer serves that up via HTTP and passes it to the Debian
|
|
# installer for an "unattended install".
|
|
{
|
|
"builders": [
|
|
{
|
|
"type": "qemu",
|
|
"format": "raw",
|
|
"headless": "false",
|
|
"communicator": "ssh",
|
|
"disk_size": "5G",
|
|
"memory": 4096, # Using the default amount of memory will crash, we need more.
|
|
|
|
# Use UEFI so our install can be more easily modified for secure-boot.
|
|
"efi_boot": "true",
|
|
"efi_firmware_code": "/usr/share/OVMF/OVMF_CODE_4M.ms.fd",
|
|
"efi_firmware_vars": "/usr/share/OVMF/OVMF_VARS_4M.ms.fd",
|
|
"machine_type": "q35",
|
|
|
|
"accelerator": "kvm",
|
|
"vm_name": "disk.raw",
|
|
"net_device": "virtio-net",
|
|
"disk_interface": "virtio",
|
|
"output_directory": "build/debian1.out",
|
|
"shutdown_command": "sudo shutdown -h now",
|
|
"http_directory": "debian1",
|
|
"ssh_username": "svr3",
|
|
"ssh_password": "svr3", # Super secret, don't tell anyone.
|
|
"ssh_timeout": "15m",
|
|
"iso_url": "https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.4.0-amd64-netinst.iso",
|
|
"iso_checksum": "64d727dd5785ae5fcfd3ae8ffbede5f40cca96f1580aaa2820e8b99dae989d94",
|
|
|
|
# Our 'boot_steps' do all the actual work here.
|
|
"boot_wait": "2s",
|
|
"boot_key_interval": "10ms",
|
|
"boot_steps": [
|
|
# These steps interact with the MSFT UEFI firmware and tell it
|
|
# "don't boot into the UEFI shell, we actually want to boot to our disk".
|
|
# It appears that as of 2024/02/16, the firmware may have updated
|
|
# to no longer require this.
|
|
# "<enter>",
|
|
# "bcfg boot rm 0<enter>",
|
|
# "bcfg boot rm 0<enter>",
|
|
# "reset<enter>",
|
|
# "<wait5>",
|
|
|
|
# Now we're in the Debian installer UI. We select "advanced", then
|
|
# tell it to use a preseed, then once it's ready, we give it the URL
|
|
# we're serving up over HTTP for the 'debian1/preseed.txt' file.
|
|
"<down><down><enter><wait>",
|
|
"<down><down><down><down><down><enter><wait45>",
|
|
"http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.txt<enter>"
|
|
]
|
|
}
|
|
]
|
|
}
|