Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
7910ac0
Work on PXE boot provisioning via Linux initrd
hach-que Dec 29, 2025
5bda6e1
Implement reboot provisioning steps on server side
hach-que Dec 30, 2025
48804e0
HTTPS certificate negotiation via TPM AIK now works in tests
hach-que Dec 31, 2025
7d56a2f
PXE boot provisioning steps now work in local testing
hach-que Jan 1, 2026
cdda67e
Implement CreateOrUpdateRkmNodeByAttestationIdentityKeyPemAsync
hach-que Jan 1, 2026
0767e31
Clean up namespaces
hach-que Jan 1, 2026
166ed77
Implement reboot provisioning on client
hach-que Jan 1, 2026
2dc37ec
Build "prebuilt" buildroot container
hach-que Jan 1, 2026
4ae62a7
Add Dockerfile and script for final pxeboot image
hach-que Jan 1, 2026
e4488b1
wip
hach-que Jan 1, 2026
6999773
update prebuilt image
hach-que Jan 2, 2026
3e0286e
wip: boot cycle now works in hyper-v
hach-que Jan 2, 2026
5b2939b
wip: build and copy
hach-que Jan 2, 2026
5b94c6b
add recovery shell
hach-que Jan 3, 2026
966e2b5
load provisioner steps from yaml
hach-que Jan 3, 2026
1f4bdb1
fix prebuilt
hach-que Jan 3, 2026
cddc04b
Enable NLS, zstd compression for initrd
hach-que Jan 3, 2026
6917937
more buildroot work
hach-que Jan 3, 2026
f9835de
Kubernetes-based configuration now works
hach-que Jan 3, 2026
c7592a5
refactor pxeboot server
hach-que Jan 3, 2026
3dda9fc
Fix certificate exchange on hardware TPMs with a max of 32 bytes
hach-que Jan 3, 2026
fd95f29
Provisioning now works on bare metal hardware
hach-que Jan 3, 2026
a8de743
Implement EFI boot manager configuration and recovery fallback process
hach-que Jan 4, 2026
01632ad
Fix Wine WOW64, install FAT32 fsck, fix SSL support under Wine
hach-que Jan 4, 2026
38a82cb
Detect invalid reboot scripts
hach-que Jan 4, 2026
ff7fe90
Run fsck on partitions before mount
hach-que Jan 4, 2026
e9791d5
Add executeProcess provisioning step, start work on Windows 24H2 prov…
hach-que Jan 4, 2026
60d129b
Enable Xvfb server
hach-que Jan 5, 2026
67ab0e1
Patch Xorg Makefile
hach-que Jan 5, 2026
9f01aee
Enable more X server tools, fbdev and mouse support
hach-que Jan 5, 2026
5be8e36
Enable xterm, libevdev and libinput
hach-que Jan 5, 2026
bd387b8
Get window manager working
hach-que Jan 5, 2026
5119468
Include additional utilities in buildroot (sed, grep, etc.)
hach-que Jan 5, 2026
1308703
Include feh tool in buildroot
hach-que Jan 5, 2026
ac41348
Run provisioning under X window server
hach-que Jan 5, 2026
19b0b00
More work on provisioning code
hach-que Jan 5, 2026
073d179
Fix buildroot Docker build
hach-que Jan 6, 2026
8b6a2fe
Install wimlib, FUSE, show different background in recovery
hach-que Jan 6, 2026
271208e
Update scripts, more work on provisioning
hach-que Jan 6, 2026
c796658
Add async version of Tftp.Net
hach-que Jan 6, 2026
8d52ccc
Refactoring and reliability
hach-que Jan 6, 2026
7a733b8
provision-client now continues steps inside Windows PE
hach-que Jan 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/buildroot-container.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
fetch-depth: 0
- name: Build Container
run: |
docker build UET/Lib/Container/rkm-initrd-builder -f UET/Lib/Container/rkm-initrd-builder/prebuilt.Dockerfile --tag ghcr.io/redpointgames/uet/buildroot-prebuilt-base:latest
docker build UET/Lib/Container/rkm-initrd-builder -f UET/Lib/Container/rkm-initrd-builder/buildroot.Dockerfile --tag ghcr.io/redpointgames/uet/buildroot-prebuilt-base:latest
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
if: github.ref == 'refs/heads/main'
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
launchSettings.json
*.csproj.user
TestResults/
TestResults/
UET/Lib/Container/rkm-initrd-builder/static
UET/Lib/Container/rkm-initrd-builder/storage/
222 changes: 111 additions & 111 deletions UET/Directory.Packages.props

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions UET/Lib/Container/rkm-initrd-builder/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
static/
static-old/
BuildAndCopy.ps1
2 changes: 2 additions & 0 deletions UET/Lib/Container/rkm-initrd-builder/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
static/
!bin/
45 changes: 45 additions & 0 deletions UET/Lib/Container/rkm-initrd-builder/BuildAndCopy.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
param([switch] $SkipDotNet, [switch] $OnlyDotNet)

if (!$SkipDotNet) {
Push-Location $PSScriptRoot\..\..\..\uet
try {
dotnet publish -c Release -r linux-x64
if ($LastExitCode -ne 0) { exit $LastExitCode }
dotnet publish -c Release -r win-x64
if ($LastExitCode -ne 0) { exit $LastExitCode }

Copy-Item -Force ".\bin\Release\net9.0\linux-x64\publish\uet" "$PSScriptRoot\static"
Copy-Item -Force ".\bin\Release\net9.0\win-x64\publish\uet.exe" "$PSScriptRoot\static"
} finally {
Pop-Location
}
}

if ($OnlyDotNet) {
exit 0
}

Push-Location $PSScriptRoot
try {
docker build . -f .\copy.Dockerfile --tag copy-buildroot
if ($LastExitCode -ne 0) { exit $LastExitCode }

$ContainerId = $(docker run --rm --detach copy-buildroot)
$ContainerId = $ContainerId.Trim()

docker cp "${ContainerId}:/static/vmlinuz" static/vmlinuz
if ($LastExitCode -ne 0) { exit $LastExitCode }
docker cp "${ContainerId}:/static/initrd" static/initrd
if ($LastExitCode -ne 0) { exit $LastExitCode }
docker cp "${ContainerId}:/static/ipxe.efi" static/ipxe.efi
if ($LastExitCode -ne 0) { exit $LastExitCode }
docker cp "${ContainerId}:/static/wimboot" static/wimboot
if ($LastExitCode -ne 0) { exit $LastExitCode }
docker cp "${ContainerId}:/static/background.png" static/background.png
if ($LastExitCode -ne 0) { exit $LastExitCode }

docker stop -t 0 $ContainerId
if ($LastExitCode -ne 0) { exit $LastExitCode }
} finally {
Pop-Location
}
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
source "$BR2_EXTERNAL_REDPOINT_PATH/package/wimlib/Config.in"
source "$BR2_EXTERNAL_REDPOINT_PATH/package/wine64/Config.in"
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
config BR2_PACKAGE_WIMLIB
bool "wimlib"
select BR2_PACKAGE_NTFS_3G
select BR2_PACKAGE_LIBFUSE3
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
sha256 3633db2b6c8b255eb86d3bf3df3059796bd1f08e50b8c9728c7eb66662e51300 wimlib-1.14.4.tar.gz
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
################################################################################
#
# wimlib
#
################################################################################

WIMLIB_VERSION = 1.14.4
WIMLIB_SOURCE = wimlib-1.14.4.tar.gz
WIMLIB_SITE = https://wimlib.net/downloads
WIMLIB_LICENSE = GPL3
WIMLIB_DEPENDENCIES = ntfs-3g libfuse3

#define WIMLIB_CONFIGURE_CMDS
# :
#endef

#define WIMLIB_BUILD_CMDS
# $(TARGET_MAKE_ENV) EXTRA_CFLAGS="-I $(HOST_DIR)/include/freetype2 -I $(HOST_DIR)/include" EXTRA_LDFLAGS="-L $(HOST_DIR)/lib" make $(WIMLIB_MAKE_OPTS) -C $(@D)
#endef

#define WIMLIB_INSTALL_TARGET_CMDS
# strip $(@D)/fbtextdemo
# $(INSTALL) -D -m 755 $(@D)/fbtextdemo $(TARGET_DIR)/usr/bin
#endef

$(eval $(autotools-package))
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ HOST_WINE64_DEPENDENCIES = host-bison host-flex
WINE64_CONF_OPTS = \
--with-wine-tools=../host-wine64-$(WINE64_VERSION) \
--disable-tests \
--enable-win64 \
--enable-archs=i386,x86_64 \
--without-capi \
--without-coreaudio \
--without-gettext \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
FROM ubuntu:noble AS common-deps

RUN apt update
RUN apt install -y sed make binutils build-essential diffutils gcc g++ patch gzip bzip2 perl tar cpio unzip rsync file bc findutils gawk wget libncurses-dev curl git
RUN apt install -y sed make binutils build-essential diffutils gcc g++ patch gzip bzip2 perl tar cpio unzip rsync file bc findutils gawk wget libncurses-dev curl git gcc-mingw-w64-i686-posix gcc-mingw-w64-x86-64-posix

# Build iPXE, which doesn't need to change
FROM common-deps AS build-ipxe
Expand All @@ -27,9 +27,8 @@ RUN cd src && \
mkdir -pv /static && \
mv wimboot /static/wimboot

# Prebuild buildroot so that we can quickly build the final image
# with UET later.
FROM common-deps
# Build buildroot, for vmlinuz and initrd.
FROM common-deps AS build-buildroot

RUN mkdir /build
WORKDIR /build
Expand All @@ -38,19 +37,30 @@ RUN curl -L -o buildroot.tar.xz https://buildroot.org/downloads/buildroot-2025.1
RUN tar -xf buildroot.tar.xz && mv buildroot-2025.11 buildroot

WORKDIR /build/buildroot
COPY xserver_xorg-server.mk package/x11r7/xserver_xorg-server/xserver_xorg-server.mk
COPY buildroot.config .config
RUN mkdir output

COPY br2-external /build/br2-external
COPY kernel.config /build/kernel.config
COPY boot-image.png /build/boot-image.png
COPY setup.sh /build/setup.sh
COPY files /build/files
RUN chmod a+x /build/setup.sh

ENV BR2_EXTERNAL=/build/br2-external

RUN make syncconfig
RUN bash -c 'echo -e "\n.PHONY: redpoint-target-finalize\nredpoint-target-finalize: \$(PACKAGES) \$(TARGET_DIR) host-finalize\n"' >> Makefile
RUN make redpoint-target-finalize
RUN make
RUN mkdir /static
RUN cp output/images/rootfs.cpio.zst /static/initrd && \
cp output/images/bzImage /static/vmlinuz

# Final image just has static builds all together.
FROM scratch

COPY --from=build-ipxe /static/ipxe.efi /static/ipxe.efi
COPY --from=build-wimboot /static/wimboot /static/wimboot
COPY --from=build-buildroot /static/vmlinuz /static/vmlinuz
COPY --from=build-buildroot /static/initrd /static/initrd
COPY background.png /static/background.png
Loading