#Linux from an ISO
When there is no cloud image (or you need a specific install layout), boot from an ISO and drive the installer with a preseed/kickstart file served via the HTTP directory.
Paste this complete manifest into the editor's YAML tab. See Sources, Files, Boot Commands, and Networking for the fields it uses.
sequenceDiagram
participant Aileron
participant VM as VM<br/>(blank disk + ISO)
Aileron->>VM: power on
VM->>VM: boots from ISO
Aileron->>VM: bootCommand types preseed URL via VNC
VM->>Aileron: HTTP GET /preseed.cfg
Aileron-->>VM: preseed.cfg content
VM->>VM: runs unattended install
VM->>VM: reboots into installed system
Aileron->>VM: SSH connects
Aileron->>VM: runs provisioners
network:
subnets:
- name: lan
cidr: '10.0.0.0/24'
files:
- name: preseed.cfg
inline: |
d-i auto-install/enable boolean true
d-i debian-installer/locale string en_US.UTF-8
d-i keyboard-configuration/xkb-keymap select us
d-i mirror/country string manual
d-i mirror/http/hostname string deb.debian.org
d-i mirror/http/directory string /debian
d-i passwd/user-fullname string skills
d-i passwd/username string skills
d-i passwd/user-password password skills
d-i passwd/user-password-again password skills
# ... full preseed ...
httpDirectory:
files:
- name: preseed.cfg
vms:
- name: builder
source:
blank: true
resources:
cpu: 2
memory: '4Gi'
disks:
- name: rootdisk
size: '25Gi'
isos:
- url: 'https://cdimage.debian.org/.../debian-12.9.0-amd64-netinst.iso'
checksum: '1257373c...'
communicator:
sshUsername: skills
sshPassword: skills
sshTimeout: 60m
nics:
- name: eth0
subnet: lan
ip: '10.0.0.10'
efiFirmware:
secureBoot: false
bootCommand:
- '<wait20>'
- '<down><down><enter>'
- '<wait><down><down><enter>'
- '<wait70>'
- '<leftCtrlOn>a<leftCtrlOff>'
- 'http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg'
- '<enter>'
provisioners:
- name: verify
type: shell
shell:
executeCommand: "echo 'skills' | sudo -S sh -c '{{ .Command }}'"
inline: |
cat /etc/debian_version
uname -a
timeout: 90m