메뉴
HN
Hacker News 39일 전

부티무스(Bootimus): 복잡한 설정 없는 단일 바이너리 PXE 부트 서버

IMP
7/10
핵심 요약

부티무스(Bootimus)는 복잡한 설정이나 기존 라우터 변경 없이도 네트워크를 통한 OS 설치(PXE 부팅)를 가능하게 해주는 오픈소스 서버 소프트웨어입니다. 단일 실행 파일 하나만으로 구동되며 내장 proxyDHCP를 통해 50여 종의 리눅스 및 운영체제 이미지를 자동으로 인식하고 네트워크 부팅 메뉴를 제공합니다. 시스템 관리자와 IT 실무자들이 대규모 PC나 서버에 OS를 빠르고 손쉽게 배포할 수 있도록 도와주는 매우 유용한 도구입니다.

번역된 본문

원문 제목: 부티무스(Bootimus) - 자체完結型 PXE 및 HTTP 부트 서버 소스: 해커뉴스(hackernews) 본문: v1.x · apache 2.0 go · iPXE · sqlite/postgres

더 이상의 골칫거리 없는 PXE 부팅. 자체完結型 PXE 및 HTTP 부트 서버. 단일 바이너리(실행 파일). 설정 제로(Zero config). 공유기(라우터) 설정을 건드릴 필요가 없는 내장 proxyDHCP 지원. 50개 이상의 배포판 자동 인식.

$ get bootimus 소스 보기 →

pts/0 bootimus — 빠른 시작

다운로드하고 실행하면 바로 PXE 부팅이 시작됩니다. 30초면 충분합니다.

$ 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

[0] bash * 1:vim 2:htop "bootimus" 14:11 50+개 배포판 인식됨 1개 바이너리, 의존성 0 0번의 DHCP 재설정 2개 아키텍처: amd64 · arm64

[01] 단일 바이너리 iPXE, 웹 UI, SQLite 및 모든 자산이 내장된 Go 바이너리입니다. 런타임 의존성이 없습니다. SCP로 복사해서 실행하기만 하면 됩니다.

[02] 내장 proxyDHCP 기존 DHCP 설정을 건드리지 않고 UDP/67에서 PXE 요청에 응답합니다. 공유기 재설정이 필요 없습니다. 어떤 근거리 통신망(LAN)에도 즉시 투입할 수 있습니다.

[03] 50개 이상의 배포판 Ubuntu, Debian, Arch, Fedora, NixOS, Alpine, FreeBSD, Windows(wimboot) 등에 대한 커널 및 initrd(초기 램 디스크)를 자동으로 추출합니다.

[04] MAC 기반 접근 제어(ACL) MAC 주소별로 특정 이미지를 할당합니다. 첫 PXE 부팅 시 새 클라이언트를 자동으로 검색합니다. 준비가 되면 할당된 임대 IP를 고정(static)으로 승격시킵니다.

[05] 원클릭 도구 GParted, Clonezilla, Memtest86+, SystemRescue, ShredOS, netboot.xyz를 지원합니다. UI에서 활성화하면 부팅 메뉴에 바로 나타납니다.

[06] JWT + LDAP bcrypt 기반 토큰 인증을 지원합니다. 그룹 기반 관리자 권한을 위해 LDAP/AD 백엔드를 선택적으로 사용할 수 있습니다. 로컬 계정은 폴백(대체 수단)으로 유지됩니다.

[07] REST API UI에서 수행하는 모든 작업은 API 호출로 이루어집니다. 부팅 할당, 스캔, WOL(네트워크 켜기) 트리거 등을 스크립팅할 수 있습니다. SSE를 통한 실시간 로그 스트리밍을 지원합니다.

[08] 어디서나 실행 가능 멀티 아키텍처 Docker(amd64/arm64), 정적 바이너리, 또는 USB에 플래시(굽기)할 수 있는 2GB 크기의 Alpine 기반 어플라이언스 이미지 형태로 실행할 수 있습니다.

[09] 무인 설치 autounattend.xml, kickstart, preseed 또는 cloud-init 파일을 넣기만 하면 됩니다. 이미지의 기본값으로 연결하거나 클라이언트마다 개별적으로 재정의할 수 있습니다. 부티무스가 부팅 시 해당 설정을 적용하므로 클릭이나 설치 마법사가 필요 없습니다.

pts/0 pxe 부팅 추적 — ubuntu-24.04

클라이언트가 부팅되어 DHCPDISCOVER 브로드캐스트를 전송합니다.

[dhcp] → b4:2e:99:01:5f:a3에서 오는 DHCPDISCOVER (기본 DHCP에는 PXE 옵션이 없음) [proxy] ← DHCPOFFER-PXE: 다음 서버=bootimus, 파일명=ipxe.efi [tftp] → RRQ ipxe.efi (198 KiB, 14 ms)

iPXE가 로드되고 HTTP 메뉴로 연결됩니다.

[http] → GET /menu.ipxe 200 2.1 KiB [menu] ↳ 17개 이미지 · 3개 그룹 · 6개 도구 [menu] ↳ 사용자 선택: ubuntu-24.04-live-server

커널 및 initrd가 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) · 클라이언트 부팅 중

[0] bash * 1:vim 2:htop "bootimus" 14:11 ✓ 단일 Go 바이너리 · 정적으로 링크됨, ldd 명령어 실행 시 "not a dynamic executable" 반환. make release를 통해 재현 가능한 빌드 제공. ✓ 독점 바이너리 블롭(blobs) 없음 · 내장된 iPXE는 업스트림 FOSS(GPL-2.0)입니다. 폐쇄형 소스 펌웨어가 포함되어 있지 않습니다. ✓ 텔레메트리 전면 불가 · 콜홈(데이터 전송) 없음. 분석 데이터 수집 없음. "익명 사용 통계" 수집 없음. 폐쇄망(Air-gapped LAN)에서 안전하게 사용 가능. ✓ Apache 2.0 · 허용적 라이선스. 상업 환경에서 사용, 내부 배포, 조건 없는 포크(fork)가 가능합니다. ✓ 종속성 포함, 모든 FOSS · 모든 전이적 Go 종속성은 오픈 소스입니다. 패키지마다 'go mod why'로 추적 가능합니다. ✤ 자체 부트로더 사용 가능 · 내장된 iPXE를 신뢰할 수 없습니까? 직접 서명한 바이너리를 넣어서 사용하세요. 아래 내용을 참조하십시오.

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 [0] bash * 1:vim 2:htop "bootimus" 14:11 iPXE · UEFI x86_64 ipxe.efi · 기본값. 업스트림 마스터에서 빌드되어 바이너리에 포함됨. 내장됨 · 대체용 iPXE · UEFI ARM64 ipxe-arm64.efi · 라즈베리 파이 4/5, 애플 실리콘 호스트, ARM 서버용. 내장됨 · 대체용 iPXE · 레거시 BIOS undionly.kpxe · UEFI를 지원하지 않는 구형 기기용. 2026년에도 여전히 쓸모가 있습니다. 내장됨 · 대체용 마이크로소프트 서명 shim 서명된 shimx64를 넣어서 사용하세요.

원문 보기
원문 보기 (영어)
v1.x · apache 2.0 go · iPXE · sqlite/postgres PXE boot, without the pain . Self-contained PXE and HTTP boot server. One binary. Zero config. Built-in proxyDHCP so you never touch your router. 50+ distros detected automatically. $ get bootimus view source → pts/0 bootimus — quickstart # 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 [0] bash * 1:vim 2:htop "bootimus" 14:11 50+ distros detected 1 binary, zero deps 0 DHCP reconfigs 2 arch: amd64 · arm64 [01] Single binary Go binary with embedded iPXE, web UI, SQLite, and all assets. No runtime deps. Scp it and run. [02] Built-in proxyDHCP Answers PXE on UDP/67 without touching your existing DHCP. Zero router reconfig. Drop in on any LAN. [03] 50+ distros Automatic kernel/initrd extraction for Ubuntu, Debian, Arch, Fedora, NixOS, Alpine, FreeBSD, Windows (wimboot), and more. [04] MAC-based ACL Assign specific images per MAC. Auto-discover new clients on first PXE. Promote leases to static when ready. [05] One-click tools GParted, Clonezilla, Memtest86+, SystemRescue, ShredOS, netboot.xyz. Enable from the UI, they show up in the menu. [06] JWT + LDAP Token auth with bcrypt. Optional LDAP/AD backend with group-based admin. Local accounts stay as fallback. [07] REST API Everything the UI does is an API call. Script boot assignments, scans, WOL triggers. Live log stream over SSE. [08] Runs anywhere Multi-arch Docker (amd64/arm64), static binary, or a 2GB Alpine-based appliance image you can flash to USB. [09] Unattended installs Drop autounattend.xml, kickstart, preseed, or cloud-init in. Attach to an image as the default, override per client. Bootimus stages it at boot — no clicks, no setup wizard. 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 [0] bash * 1:vim 2:htop "bootimus" 14:11 ✓ Single Go binary · statically linked, ldd returns "not a dynamic executable". Reproducible builds from make release. ✓ No proprietary blobs · embedded iPXE is upstream FOSS (GPL-2.0). No closed-source firmware shipped. ✓ No telemetry, ever · zero call-home. Zero analytics. Zero "anonymous usage stats". Air-gapped LAN safe. ✓ Apache 2.0 · permissive licence. Use in commercial environments, ship internally, fork without strings. ✓ Vendored deps, all FOSS · every transitive Go dependency is open source. go mod why any package. ✓ Bring your own bootloader · don't trust the embedded iPXE? Drop your own signed binaries in. See below. 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 [0] bash * 1:vim 2:htop "bootimus" 14:11 iPXE · UEFI x86_64 ipxe.efi · the default. Built from upstream master, embedded in the binary. embedded · fallback iPXE · UEFI ARM64 ipxe-arm64.efi · for Raspberry Pi 4/5, Apple Silicon hosts, ARM servers. embedded · fallback iPXE · Legacy BIOS undionly.kpxe · for old kit that won't UEFI. Still relevant in 2026. embedded · fallback Microsoft-signed shim Drop a signed shimx64.efi + grubx64.efi in for Secure-Boot-enforced fleets. No firmware MOK enrolment needed. custom · BYO Custom-themed iPXE Compile your own iPXE with branding, custom menu colours, embedded scripts. Drop the .efi in. custom · BYO GRUB / syslinux / pxelinux Not iPXE? No problem. Anything that speaks TFTP and HTTP works. Bootimus just serves bytes. 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) [0] bash * 1:vim 2:htop "bootimus" 14:11 Ready to stop babysitting tftpd? Docker, bare metal, or flashable USB. Pick your poison. $ get bootimus read the docs →