v1.x · apache 2.0 go · iPXE · sqlite/postgres

PXE-Boot,
ohne das Gefummel.

Eigenständiger PXE- und HTTP-Boot-Server. Ein Binary. Keine Konfiguration. Eingebautes proxyDHCP — du fasst deinen Router nie wieder an. 50+ Distros werden automatisch erkannt.

pts/0
bootimus — schnellstart
# Pull, run, PXE boots. Thirty seconds.
$ docker run -d --name bootimus \
    --cap-add NET_BIND_SERVICE \
    -p 67:67/udp -p 69:69/udp \
    -p 8080:8080/tcp -p 8081:8081/tcp \
    -v $(pwd)/data:/data \
    garybowers/bootimus:latest

$ docker logs bootimus | grep Password
admin: Password: 7f3a-plum-swift-echo

$ open http://localhost:8081
50+
distros erkannt
1
binary, keine abhängigkeiten
0
DHCP-anpassungen
2
arch: amd64 · arm64
// features

Alles, was ein modernes Netboot-Setup sein sollte.

Kein Fork von 15 Jahre alten Perl-Skripten. Kein Wrapper um dnsmasq. Ein richtiger Server — in Go geschrieben, alles inklusive.

[01]

Ein Binary

Go-Binary mit eingebettetem iPXE, Web-UI, SQLite und allen Assets. Keine Laufzeit-Abhängigkeiten. scp und los.

[02]

Eingebautes proxyDHCP

Antwortet auf PXE über UDP/67, ohne dein bestehendes DHCP anzufassen. Null Router-Umbau. In jedes LAN einklinken.

[03]

50+ Distros

Automatische Kernel/initrd-Extraktion für Ubuntu, Debian, Arch, Fedora, NixOS, Alpine, FreeBSD, Windows (wimboot) und mehr.

[04]

MAC-basierte ACL

Ordne spezifische Images pro MAC zu. Neue Clients werden beim ersten PXE-Request automatisch erkannt. Leases zu statischen Einträgen hochstufen, wenn du bereit bist.

[05]

Tools per Klick

GParted, Clonezilla, Memtest86+, SystemRescue, ShredOS, netboot.xyz. Im UI aktivieren — und sie erscheinen im Menü.

[06]

JWT + LDAP

Token-Auth mit bcrypt. Optionales LDAP/AD-Backend mit gruppenbasierter Admin-Vergabe. Lokale Accounts bleiben als Fallback.

[07]

REST-API

Alles, was das UI kann, ist auch ein API-Call. Boot-Zuweisungen, Scans, WoL-Trigger scriptbar. Live-Log-Stream per SSE.

[08]

Läuft überall

Multi-Arch-Docker (amd64/arm64), statisches Binary oder ein 2-GB-Appliance-Image auf Alpine-Basis, das du per USB flashen kannst.

[09]

Unbeaufsichtigte Installationen

autounattend.xml, Kickstart, Preseed oder cloud-init reinwerfen. Pro Image als Standard hinterlegen, pro Client überschreiben. Bootimus reicht es beim Boot durch — kein Klick, kein Setup-Wizard.

// funktionsweise

Der Lebenszyklus eines PXE-Boots.

Client schickt DHCPDISCOVER. Bootimus beantwortet die PXE-Details per proxyDHCP, während dein normales DHCP weiter die IPs verteilt. iPXE lädt über TFTP, chained zu HTTP, holt das Menü. Nutzer wählt ein Image. Kernel und initrd streamen vom Server. Fertig.

pts/0
pxe boot trace — ubuntu-24.04
# Client boots, sends DHCPDISCOVER broadcast
[dhcp]   DHCPDISCOVER from b4:2e:99:01:5f:a3 (no PXE options from primary DHCP)
[proxy]  DHCPOFFER-PXE: next-server=bootimus, filename=ipxe.efi
[tftp]   RRQ ipxe.efi  (198 KiB, 14 ms)

# iPXE loads, chains to HTTP menu
[http]   GET /menu.ipxe  200  2.1 KiB
[menu]  17 images · 3 groups · 6 tools
[menu]  user selected: ubuntu-24.04-live-server

# Kernel + initrd stream over HTTP
[http]   GET /iso/ubuntu-24.04/vmlinuz  200  14 MiB · 612 MB/s
[http]   GET /iso/ubuntu-24.04/initrd   200  76 MiB · 598 MB/s
[boot]  handoff ok · client booting
// transparenz

100% offen. Durchgängig nachprüfbar.

Keine proprietären Blobs. Keine Telemetrie. Keine klammheimlich eingebundene Binary-Firmware. Der gesamte Stack liegt unter Apache 2.0 auf GitHub — klonen, prüfen, forken, selbst betreiben.

  • Ein einziges Go-Binary · statisch gelinkt, ldd sagt "not a dynamic executable". Reproduzierbare Builds über make release.
  • Keine proprietären Blobs · eingebettetes iPXE ist upstream-FOSS (GPL-2.0). Keine Closed-Source-Firmware im Lieferumfang.
  • Keine Telemetrie, nie · null call-home. Null Analytics. Null "anonyme Nutzungsstatistik". Air-gap-tauglich.
  • Apache 2.0 · permissive Lizenz. Kommerziell einsetzen, intern ausrollen, ohne Fallstricke forken.
  • Vendored Deps, alles FOSS · jede transitive Go-Abhängigkeit ist Open Source. go mod why für jedes Package.
  • Bring deinen eigenen Bootloader · dem eingebetteten iPXE nicht über den Weg trauen? Eigene signierte Binaries reinlegen. Siehe unten.
pts/0
bootimus version --verbose
$ bootimus version --verbose
bootimus      1.0.0
commit       8e87824 (clean)
go           1.23.4 linux/amd64
build        static · reproducible
licence      Apache-2.0

embedded
  ipxe        1.21.1+upstream  GPL-2.0
  proprietary 0 blobs
  telemetry   disabled (compile-time)

$ ldd ./bootimus
not a dynamic executable

$ sha256sum ./bootimus
7f3a9b0c…  bootimus
// bootloaders

Tausch iPXE gegen das, was du brauchst.

Bootimus bringt eingebettetes iPXE für jede gängige Architektur mit. Brauchst du Microsoft-signierte Binaries für Secure Boot, ein custom-gebrandetes iPXE, GRUB, syslinux oder deinen eigenen von der Internal-CA signierten Loader? Ordner in data/bootloaders/ ablegen, im UI wählen, fertig. Fehlende Dateien fallen transparent auf das eingebettete Set zurück — nie ein kaputter Boot.

iPXE · UEFI x86_64

ipxe.efi · der Default. Aus Upstream-Master gebaut, im Binary eingebettet.

eingebettet · fallback

iPXE · UEFI ARM64

ipxe-arm64.efi · für Raspberry Pi 4/5, Apple-Silicon-Hosts, ARM-Server.

eingebettet · fallback

iPXE · Legacy BIOS

undionly.kpxe · für alte Hardware ohne UEFI. Auch 2026 noch relevant.

eingebettet · fallback

Microsoft-signierter Shim

Signierte shimx64.efi + grubx64.efi reinwerfen — für Flotten mit erzwungenem Secure Boot. Kein Firmware-MOK-Enrolment nötig.

custom · BYO

Custom-gebrandetes iPXE

Bau dein eigenes iPXE mit Branding, individuellen Menüfarben, eingebetteten Skripten. Die .efi reinlegen.

custom · BYO

GRUB / syslinux / pxelinux

Nicht iPXE? Kein Problem. Alles, was TFTP und HTTP spricht, funktioniert. Bootimus liefert einfach Bytes aus.

custom · BYO
pts/0
bootloader-sets — file fallthrough
$ tree /var/lib/bootimus/bootloaders
data/bootloaders
├── ipxe-builtin/          # embedded — always available
│   ├── ipxe.efi
│   ├── ipxe-arm64.efi
│   └── undionly.kpxe
├── ipxe-secureboot/       # your custom set
│   ├── shimx64.efi             (signed by Microsoft)
│   ├── grubx64.efi             (signed by Microsoft)
│   └── ipxe.efi                (signed by your CA)
└── ipxe-themed/
    └── ipxe.efi                (custom branding)

$ bootimus bootloaders use ipxe-secureboot
 active set: ipxe-secureboot
 falls back to ipxe-builtin for: ipxe-arm64.efi, undionly.kpxe

# PXE boot trace, Secure Boot client
[tftp] RRQ shimx64.efi      → ipxe-secureboot/shimx64.efi
[tftp] RRQ ipxe-arm64.efi   → ipxe-builtin/ipxe-arm64.efi (fallback)

Keine Lust mehr, tftpd zu babysitten?

Docker, Bare Metal oder flashbarer USB-Stick. Such dir aus, was dir taugt.