31 Commits

Author SHA1 Message Date
Antony Messerli
988fe91078 Decouple Secure Boot download from menu first-run check
Address review feedback:
- Move Secure Boot download to its own conditional block that checks
  for the secureboot-x86_64 directory, so existing installs pick up
  Secure Boot binaries on the next container restart
- Resolve MENU_VERSION once at the top (from env, menuversion.txt,
  or GitHub API) so it's available to both blocks
- Use curl -fsSL for autoexec.ipxe download to fail on HTTP errors
  instead of silently saving HTML error pages
- Update README note to reflect that Secure Boot downloads run
  independently of menu downloads
2026-03-15 17:35:59 -05:00
Antony Messerli
ee9d2300bb Download Secure Boot binaries directly from upstream iPXE release
Pull signed EFI binaries unmodified from the iPXE project release
(ipxeboot.tar.gz) and the autoexec.ipxe boot script from the
netboot.xyz release. This preserves provenance of the Microsoft-signed
and iPXE Secure Boot CA-signed binaries rather than redistributing
them through netboot.xyz.

The iPXE Secure Boot version defaults to v2.0.0 and can be overridden
via the IPXE_SB_VERSION environment variable.

Documents the upstream source and version for both the signed binaries
and the boot script in init.sh comments and README.
2026-03-15 16:56:27 -05:00
Antony Messerli
263fb8aaf0 Add UEFI Secure Boot support
Download Secure Boot tarballs (secureboot-x86_64.tar.gz,
secureboot-arm64.tar.gz) from netboot.xyz releases during container
init. These contain Microsoft-signed iPXE shim binaries and a
templated autoexec.ipxe that chains into the netboot.xyz menu system.

Files are extracted into /config/menus/secureboot-{x86_64,arm64}/
and served via TFTP alongside existing boot files. Gracefully skips
download if the release doesn't include Secure Boot assets (e.g.
older pinned MENU_VERSION).

Also adds Secure Boot DHCP configuration examples and boot file
documentation to the README.
2026-03-15 16:29:52 -05:00
Antony Messerli
ca7a3390c2
Implement rootless Docker container with enhanced security and preserved TFTP logging (#87)
* Implement rootless Docker container with preserved TFTP logging

- Convert all processes to run as non-root user (nbxyz) for enhanced security
- Add customizable PUID/PGID environment variables for volume permission management
- Implement privilege dropping using gosu for secure initialization
- Optimize Dockerfile with multi-stage build and better caching
- Create dnsmasq wrapper script to ensure TFTP logs appear in docker logs
- Configure supervisord to properly forward dnsmasq output to container stdout
- Maintain full TFTP/PXE boot debugging functionality for users

Security improvements:
- All application processes (nginx, webapp, dnsmasq) run as nbxyz user
- Only supervisord initialization runs as root, then drops privileges
- Proper permission management for all service directories
- Configurable user/group IDs via PUID/PGID environment variables

Performance optimizations:
- Multi-stage Docker build reduces final image size
- Better layer caching for faster rebuilds
- Optimized package installation and cleanup

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Update Dockerfile

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update root/init.sh

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-06-12 00:19:27 -05:00
Antony Messerli
1e511d23e2 Update README for dnsmasq example
Removes deprecated isc-dhcp-server example
2025-02-08 21:22:03 -06:00
Antony Messerli
d785a122d5
Update README.md 2025-02-08 21:17:22 -06:00
Antony Messerli
7963d1d72b Add link to readme 2025-02-01 14:53:27 -06:00
Antony Messerli
61e63e7b10 Bump version, add docker pulls to readme 2025-02-01 13:43:16 -06:00
dezeroku
fe00be36f4
Replace in.tftp with dnsmasq, to add support for single-port TFTP 2024-07-13 00:20:28 +02:00
Mohamed Assaleh
728b8e82f4
Update docker-compose command to docker compose 2024-06-17 17:08:21 +02:00
Kelly Shutt
c4014a0a6e Make web app port configurable. 2024-02-02 08:10:30 -05:00
Antony Messerli
2a36c1a8e0 Bump menu version in readme, nginx port 2024-01-19 01:31:33 -06:00
Kelly Shutt
959f24bc59 Make nginx port configurable through ENV variable. 2024-01-11 20:38:42 -05:00
Antony Messerli
541d9d54e0
Update README.md 2022-10-04 23:23:21 -05:00
Antony Messerli
4371d50e7a Move image 2022-06-25 21:39:25 -05:00
Antony Messerli
1d924525b1 Minor edits 2022-06-25 12:03:01 -05:00
Antony Messerli
80ed795746 Bump example 2022-06-25 11:05:04 -05:00
Antony Messerli
01ec2af7ad Add webapp pic, docs on local access 2022-06-25 10:59:48 -05:00
Antony Messerli
008b8c3c1f
Update badges 2022-06-14 07:12:04 -05:00
Dan MacDonald
ef32e14d3b Add docker (image) installation commands and improve isc-dhcp-server section of the README 2022-06-12 12:29:17 +01:00
Antony Messerli
d73c116fc2
drop unused pxe build from sample config 2022-06-04 15:29:56 -05:00
Antony Messerli
7302293949 Small edits to README 2022-02-27 11:44:11 -06:00
Antony Messerli
26efb62284
Update README.md 2022-01-02 17:07:40 -06:00
Felix Wong
8af812b791
add example docker-compose file 2021-12-09 07:56:15 +00:00
Tim Freund
ce09a2cf0e Update isc-dhcp-server configuration
The arch option must be defined.  Without the option definition, dhcpd will
fail with the following message: "no option named arch in space dhcp"

Solution found via: https://www.kraxel.org/blog/2021/09/vm-network-boot/
2021-10-16 23:16:08 -04:00
Antony Messerli
f679e98ce0 Update README 2021-10-11 09:41:38 -05:00
Antony Messerli
7b008e92d2
Update README.md 2021-10-07 20:59:58 -05:00
Antony Messerli
0ccfa874fc
Update README.md 2021-09-06 22:03:01 -05:00
Antony Messerli
039947ef85
Update README.md 2021-09-06 21:57:34 -05:00
Antony Messerli
7b96357238 Update readme 2021-09-06 21:56:10 -05:00
Antony Messerli
027cd38089 first commit 2021-09-06 19:07:15 -05:00