RudderVirt

#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