Rudder Virt

#Linux from an ISO

Use an ISO when there is no cloud image or you need a specific install layout. This recipe drives the installer with a preseed or kickstart file served from the HTTP directory.

Paste the 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: boot_command 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 ...
http_directory:
    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:
          ssh_username: skills
          ssh_password: skills
          ssh_timeout: 60m
      nics:
          - name: eth0
            subnet: lan
            ip: '10.0.0.10'
      efi_firmware:
          secure_boot: false
      boot_command:
          - '<wait20>'
          - '<down><down><enter>'
          - '<wait><down><down><enter>'
          - '<wait70>'
          - '<leftCtrlOn>a<leftCtrlOff>'
          - 'http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg'
          - '<enter>'
      provisioners:
          - name: verify
            type: shell
            shell:
                execute_command: "echo 'skills' | sudo -S sh -c '{{ .Command }}'"
                inline: |
                    cat /etc/debian_version
                    uname -a
timeout: 90m