switch to systemd-boot+clover for iso - #140

Open
Eeems wants to merge 24 commits into
masterfrom
clover
Open

switch to systemd-boot+clover for iso#140
Eeems wants to merge 24 commits into
masterfrom
clover

Conversation

@Eeems

@EeemsEeems commented Aug 28, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • ISO images now boot using Clover and systemd-boot, with serial console support at 115200 baud.
    • Added a command to list valid build targets.
    • Added quiet checks that show output only when failures occur.
    • Added BIOS boot testing for ISO releases.
    • VPN setup now uses automatic routing and DNS handling.
  • Bug Fixes

    • ISO files are removed only after successful completion.
    • Invalid build targets now produce clear errors.
  • Changes

    • Removed legacy GRUB and Syslinux boot entries.
    • Updated validation documentation.

@coderabbitai

coderabbitaiBot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The ISO pipeline now uses Clover and systemd-boot instead of GRUB and Syslinux. Build commands validate targets through a shared target list. The check command supports quiet output. VPN setup uses sshuttle. QEMU tests now cover legacy BIOS boots in CI.

Changes

ISO bootloader migration

Layer / File(s)Summary
Clover staging and build integration
overlay/base/etc/system/Isofile, overlay/base/etc/system/clover-config.plist
The image definition downloads and verifies Clover, stages its files, passes the UUID to create_live_bootloader, and installs the Clover configuration.
Systemd-boot and Clover image creation
overlay/base/usr/lib/system/create_live_bootloader
The script creates a 256 MB FAT EFI image, installs systemd-boot, stages UUID-specific loader files, and copies Clover and its CD boot image into the archiso tree.
Archiso boot configuration and assembly
overlay/base/etc/system/archiso/..., overlay/base/usr/lib/system/_os/cli/iso.py
The systemd-boot entry enables serial output. Legacy GRUB and Syslinux configuration is removed. GRUB-specific UUID substitution and xorriso handling are removed.
ISO target handling
make/iso.py
The ISO command validates targets, uses typed Podman storage metadata, and deletes matching ISO files after the build completes.

Build target tooling

Layer / File(s)Summary
Target discovery and validation
make/config.py, make/build.py, make/checkupdates.py, make/hash.py, make/run.py, make/scan.py
all_targets() defines valid targets. Build commands reject unknown targets before starting their operations.
Target listing command
make/targets.py
The new targets command prints all valid targets in sorted order.

Quiet check mode

Layer / File(s)Summary
Quiet check output and documentation
make/check.py, AGENTS.md
Quiet mode captures check output and replays it to stderr when a check fails. The check suite verifies traceback replay. Documentation describes unit-test execution and the updated quiet validation command.

SSH VPN transport

Layer / File(s)Summary
sshuttle transport and tunnel verification
overlay/eeems/usr/bin/sshvpn, variants/eeems.Containerfile
The VPN script uses sshuttle, records its process ID, uses HTTPS for public-IP checks, and verifies a changed public IP while the process remains active. The image installs sshuttle.

BIOS boot testing

Layer / File(s)Summary
QEMU BIOS control and test runner
make/boot.py, make/test.py
QEMU supports legacy BIOS mode, QMP control, and configurable login timeouts. The test runner sends boot keys through QMP and captures diagnostics.
BIOS CI release gate
.github/workflows/iso.yaml
CI runs a BIOS installation test and requires it before release.

Base image cleanup

Layer / File(s)Summary
Base package cleanup
variants/base.Containerfile
The package layer removes /usr/bin/su with hook files and no longer removes resolver utilities.

Estimated code review effort: 5 (Critical) | ~90 minutes

Merge Risk:🟠 High · up to 26c6b

The PR changes both ISO boot behavior and VPN networking, but the BIOS boot path may lack the configuration required for the intended systemd-boot selection, while VPN startup, routing, listener exposure, and teardown can produce incorrect or unsafe behavior. The PR should not merge until these boot and networking issues are fixed or explicitly accepted by the owners.

Sequence Diagram(s)

sequenceDiagram
participant TestCommand
participant QEMU
participant QMP
participant Login
TestCommand->>QEMU: Start legacy BIOS boot
QEMU->>QMP: Expose TCP monitor
TestCommand->>QMP: Send Enter key events
QMP->>QEMU: Drive bootloader
TestCommand->>Login: Wait with BIOS timeout
Loading

Poem

A rabbit packs Clover with care
Into an EFI image square
Old boot paths fade away
New targets list the way
BIOS boots join the tests
Quiet checks report the rest

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: …Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary ISO bootloader change from GRUB to systemd-boot with Clover integration.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: 4 unsupported.)


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@EeemsEeems linked an issue Aug 28, 2026 that may be closed by this pull request
Base automatically changed from iso_skopeo to masterAugust 28, 2026 19:36
@Eeems
Eeems marked this pull request as ready for review August 28, 2026 19:36
coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix booting from BIOS

1 participant

@Eeems
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

switch to systemd-boot+clover for iso - #140

Open
Eeems wants to merge 24 commits into
masterfrom
clover
Open

switch to systemd-boot+clover for iso#140
Eeems wants to merge 24 commits into
masterfrom
clover

Conversation

@Eeems

@EeemsEeems commented Aug 28, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • ISO images now boot using Clover and systemd-boot, with serial console support at 115200 baud.
    • Added a command to list valid build targets.
    • Added quiet checks that show output only when failures occur.
    • Added BIOS boot testing for ISO releases.
    • VPN setup now uses automatic routing and DNS handling.
  • Bug Fixes

    • ISO files are removed only after successful completion.
    • Invalid build targets now produce clear errors.
  • Changes

    • Removed legacy GRUB and Syslinux boot entries.
    • Updated validation documentation.

@coderabbitai

coderabbitaiBot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The ISO pipeline now uses Clover and systemd-boot instead of GRUB and Syslinux. Build commands validate targets through a shared target list. The check command supports quiet output. VPN setup uses sshuttle. QEMU tests now cover legacy BIOS boots in CI.

Changes

ISO bootloader migration

Layer / File(s)Summary
Clover staging and build integration
overlay/base/etc/system/Isofile, overlay/base/etc/system/clover-config.plist
The image definition downloads and verifies Clover, stages its files, passes the UUID to create_live_bootloader, and installs the Clover configuration.
Systemd-boot and Clover image creation
overlay/base/usr/lib/system/create_live_bootloader
The script creates a 256 MB FAT EFI image, installs systemd-boot, stages UUID-specific loader files, and copies Clover and its CD boot image into the archiso tree.
Archiso boot configuration and assembly
overlay/base/etc/system/archiso/..., overlay/base/usr/lib/system/_os/cli/iso.py
The systemd-boot entry enables serial output. Legacy GRUB and Syslinux configuration is removed. GRUB-specific UUID substitution and xorriso handling are removed.
ISO target handling
make/iso.py
The ISO command validates targets, uses typed Podman storage metadata, and deletes matching ISO files after the build completes.

Build target tooling

Layer / File(s)Summary
Target discovery and validation
make/config.py, make/build.py, make/checkupdates.py, make/hash.py, make/run.py, make/scan.py
all_targets() defines valid targets. Build commands reject unknown targets before starting their operations.
Target listing command
make/targets.py
The new targets command prints all valid targets in sorted order.

Quiet check mode

Layer / File(s)Summary
Quiet check output and documentation
make/check.py, AGENTS.md
Quiet mode captures check output and replays it to stderr when a check fails. The check suite verifies traceback replay. Documentation describes unit-test execution and the updated quiet validation command.

SSH VPN transport

Layer / File(s)Summary
sshuttle transport and tunnel verification
overlay/eeems/usr/bin/sshvpn, variants/eeems.Containerfile
The VPN script uses sshuttle, records its process ID, uses HTTPS for public-IP checks, and verifies a changed public IP while the process remains active. The image installs sshuttle.

BIOS boot testing

Layer / File(s)Summary
QEMU BIOS control and test runner
make/boot.py, make/test.py
QEMU supports legacy BIOS mode, QMP control, and configurable login timeouts. The test runner sends boot keys through QMP and captures diagnostics.
BIOS CI release gate
.github/workflows/iso.yaml
CI runs a BIOS installation test and requires it before release.

Base image cleanup

Layer / File(s)Summary
Base package cleanup
variants/base.Containerfile
The package layer removes /usr/bin/su with hook files and no longer removes resolver utilities.

Estimated code review effort: 5 (Critical) | ~90 minutes

Merge Risk:🟠 High · up to 26c6b

The PR changes both ISO boot behavior and VPN networking, but the BIOS boot path may lack the configuration required for the intended systemd-boot selection, while VPN startup, routing, listener exposure, and teardown can produce incorrect or unsafe behavior. The PR should not merge until these boot and networking issues are fixed or explicitly accepted by the owners.

Sequence Diagram(s)

sequenceDiagram
participant TestCommand
participant QEMU
participant QMP
participant Login
TestCommand->>QEMU: Start legacy BIOS boot
QEMU->>QMP: Expose TCP monitor
TestCommand->>QMP: Send Enter key events
QMP->>QEMU: Drive bootloader
TestCommand->>Login: Wait with BIOS timeout
Loading

Poem

A rabbit packs Clover with care
Into an EFI image square
Old boot paths fade away
New targets list the way
BIOS boots join the tests
Quiet checks report the rest

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: …Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary ISO bootloader change from GRUB to systemd-boot with Clover integration.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: 4 unsupported.)


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@EeemsEeems linked an issue Aug 28, 2026 that may be closed by this pull request
Base automatically changed from iso_skopeo to masterAugust 28, 2026 19:36
@Eeems
Eeems marked this pull request as ready for review August 28, 2026 19:36
coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix booting from BIOS

1 participant

@Eeems
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

switch to systemd-boot+clover for iso - #140

Open
Eeems wants to merge 24 commits into
masterfrom
clover
Open

switch to systemd-boot+clover for iso#140
Eeems wants to merge 24 commits into
masterfrom
clover

Conversation

@Eeems

@EeemsEeems commented Aug 28, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • ISO images now boot using Clover and systemd-boot, with serial console support at 115200 baud.
    • Added a command to list valid build targets.
    • Added quiet checks that show output only when failures occur.
    • Added BIOS boot testing for ISO releases.
    • VPN setup now uses automatic routing and DNS handling.
  • Bug Fixes

    • ISO files are removed only after successful completion.
    • Invalid build targets now produce clear errors.
  • Changes

    • Removed legacy GRUB and Syslinux boot entries.
    • Updated validation documentation.

@coderabbitai

coderabbitaiBot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The ISO pipeline now uses Clover and systemd-boot instead of GRUB and Syslinux. Build commands validate targets through a shared target list. The check command supports quiet output. VPN setup uses sshuttle. QEMU tests now cover legacy BIOS boots in CI.

Changes

ISO bootloader migration

Layer / File(s)Summary
Clover staging and build integration
overlay/base/etc/system/Isofile, overlay/base/etc/system/clover-config.plist
The image definition downloads and verifies Clover, stages its files, passes the UUID to create_live_bootloader, and installs the Clover configuration.
Systemd-boot and Clover image creation
overlay/base/usr/lib/system/create_live_bootloader
The script creates a 256 MB FAT EFI image, installs systemd-boot, stages UUID-specific loader files, and copies Clover and its CD boot image into the archiso tree.
Archiso boot configuration and assembly
overlay/base/etc/system/archiso/..., overlay/base/usr/lib/system/_os/cli/iso.py
The systemd-boot entry enables serial output. Legacy GRUB and Syslinux configuration is removed. GRUB-specific UUID substitution and xorriso handling are removed.
ISO target handling
make/iso.py
The ISO command validates targets, uses typed Podman storage metadata, and deletes matching ISO files after the build completes.

Build target tooling

Layer / File(s)Summary
Target discovery and validation
make/config.py, make/build.py, make/checkupdates.py, make/hash.py, make/run.py, make/scan.py
all_targets() defines valid targets. Build commands reject unknown targets before starting their operations.
Target listing command
make/targets.py
The new targets command prints all valid targets in sorted order.

Quiet check mode

Layer / File(s)Summary
Quiet check output and documentation
make/check.py, AGENTS.md
Quiet mode captures check output and replays it to stderr when a check fails. The check suite verifies traceback replay. Documentation describes unit-test execution and the updated quiet validation command.

SSH VPN transport

Layer / File(s)Summary
sshuttle transport and tunnel verification
overlay/eeems/usr/bin/sshvpn, variants/eeems.Containerfile
The VPN script uses sshuttle, records its process ID, uses HTTPS for public-IP checks, and verifies a changed public IP while the process remains active. The image installs sshuttle.

BIOS boot testing

Layer / File(s)Summary
QEMU BIOS control and test runner
make/boot.py, make/test.py
QEMU supports legacy BIOS mode, QMP control, and configurable login timeouts. The test runner sends boot keys through QMP and captures diagnostics.
BIOS CI release gate
.github/workflows/iso.yaml
CI runs a BIOS installation test and requires it before release.

Base image cleanup

Layer / File(s)Summary
Base package cleanup
variants/base.Containerfile
The package layer removes /usr/bin/su with hook files and no longer removes resolver utilities.

Estimated code review effort: 5 (Critical) | ~90 minutes

Merge Risk:🟠 High · up to 26c6b

The PR changes both ISO boot behavior and VPN networking, but the BIOS boot path may lack the configuration required for the intended systemd-boot selection, while VPN startup, routing, listener exposure, and teardown can produce incorrect or unsafe behavior. The PR should not merge until these boot and networking issues are fixed or explicitly accepted by the owners.

Sequence Diagram(s)

sequenceDiagram
participant TestCommand
participant QEMU
participant QMP
participant Login
TestCommand->>QEMU: Start legacy BIOS boot
QEMU->>QMP: Expose TCP monitor
TestCommand->>QMP: Send Enter key events
QMP->>QEMU: Drive bootloader
TestCommand->>Login: Wait with BIOS timeout
Loading

Poem

A rabbit packs Clover with care
Into an EFI image square
Old boot paths fade away
New targets list the way
BIOS boots join the tests
Quiet checks report the rest

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: …Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary ISO bootloader change from GRUB to systemd-boot with Clover integration.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: 4 unsupported.)


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@EeemsEeems linked an issue Aug 28, 2026 that may be closed by this pull request
Base automatically changed from iso_skopeo to masterAugust 28, 2026 19:36
@Eeems
Eeems marked this pull request as ready for review August 28, 2026 19:36
coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix booting from BIOS

1 participant

@Eeems
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

switch to systemd-boot+clover for iso - #140

Open
Eeems wants to merge 24 commits into
masterfrom
clover
Open

switch to systemd-boot+clover for iso#140
Eeems wants to merge 24 commits into
masterfrom
clover

Conversation

@Eeems

@EeemsEeems commented Aug 28, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • ISO images now boot using Clover and systemd-boot, with serial console support at 115200 baud.
    • Added a command to list valid build targets.
    • Added quiet checks that show output only when failures occur.
    • Added BIOS boot testing for ISO releases.
    • VPN setup now uses automatic routing and DNS handling.
  • Bug Fixes

    • ISO files are removed only after successful completion.
    • Invalid build targets now produce clear errors.
  • Changes

    • Removed legacy GRUB and Syslinux boot entries.
    • Updated validation documentation.

@coderabbitai

coderabbitaiBot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The ISO pipeline now uses Clover and systemd-boot instead of GRUB and Syslinux. Build commands validate targets through a shared target list. The check command supports quiet output. VPN setup uses sshuttle. QEMU tests now cover legacy BIOS boots in CI.

Changes

ISO bootloader migration

Layer / File(s)Summary
Clover staging and build integration
overlay/base/etc/system/Isofile, overlay/base/etc/system/clover-config.plist
The image definition downloads and verifies Clover, stages its files, passes the UUID to create_live_bootloader, and installs the Clover configuration.
Systemd-boot and Clover image creation
overlay/base/usr/lib/system/create_live_bootloader
The script creates a 256 MB FAT EFI image, installs systemd-boot, stages UUID-specific loader files, and copies Clover and its CD boot image into the archiso tree.
Archiso boot configuration and assembly
overlay/base/etc/system/archiso/..., overlay/base/usr/lib/system/_os/cli/iso.py
The systemd-boot entry enables serial output. Legacy GRUB and Syslinux configuration is removed. GRUB-specific UUID substitution and xorriso handling are removed.
ISO target handling
make/iso.py
The ISO command validates targets, uses typed Podman storage metadata, and deletes matching ISO files after the build completes.

Build target tooling

Layer / File(s)Summary
Target discovery and validation
make/config.py, make/build.py, make/checkupdates.py, make/hash.py, make/run.py, make/scan.py
all_targets() defines valid targets. Build commands reject unknown targets before starting their operations.
Target listing command
make/targets.py
The new targets command prints all valid targets in sorted order.

Quiet check mode

Layer / File(s)Summary
Quiet check output and documentation
make/check.py, AGENTS.md
Quiet mode captures check output and replays it to stderr when a check fails. The check suite verifies traceback replay. Documentation describes unit-test execution and the updated quiet validation command.

SSH VPN transport

Layer / File(s)Summary
sshuttle transport and tunnel verification
overlay/eeems/usr/bin/sshvpn, variants/eeems.Containerfile
The VPN script uses sshuttle, records its process ID, uses HTTPS for public-IP checks, and verifies a changed public IP while the process remains active. The image installs sshuttle.

BIOS boot testing

Layer / File(s)Summary
QEMU BIOS control and test runner
make/boot.py, make/test.py
QEMU supports legacy BIOS mode, QMP control, and configurable login timeouts. The test runner sends boot keys through QMP and captures diagnostics.
BIOS CI release gate
.github/workflows/iso.yaml
CI runs a BIOS installation test and requires it before release.

Base image cleanup

Layer / File(s)Summary
Base package cleanup
variants/base.Containerfile
The package layer removes /usr/bin/su with hook files and no longer removes resolver utilities.

Estimated code review effort: 5 (Critical) | ~90 minutes

Merge Risk:🟠 High · up to 26c6b

The PR changes both ISO boot behavior and VPN networking, but the BIOS boot path may lack the configuration required for the intended systemd-boot selection, while VPN startup, routing, listener exposure, and teardown can produce incorrect or unsafe behavior. The PR should not merge until these boot and networking issues are fixed or explicitly accepted by the owners.

Sequence Diagram(s)

sequenceDiagram
participant TestCommand
participant QEMU
participant QMP
participant Login
TestCommand->>QEMU: Start legacy BIOS boot
QEMU->>QMP: Expose TCP monitor
TestCommand->>QMP: Send Enter key events
QMP->>QEMU: Drive bootloader
TestCommand->>Login: Wait with BIOS timeout
Loading

Poem

A rabbit packs Clover with care
Into an EFI image square
Old boot paths fade away
New targets list the way
BIOS boots join the tests
Quiet checks report the rest

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: …Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary ISO bootloader change from GRUB to systemd-boot with Clover integration.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: 4 unsupported.)


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@EeemsEeems linked an issue Aug 28, 2026 that may be closed by this pull request
Base automatically changed from iso_skopeo to masterAugust 28, 2026 19:36
@Eeems
Eeems marked this pull request as ready for review August 28, 2026 19:36
coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix booting from BIOS

1 participant

@Eeems
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

switch to systemd-boot+clover for iso - #140

Open
Eeems wants to merge 24 commits into
masterfrom
clover
Open

switch to systemd-boot+clover for iso#140
Eeems wants to merge 24 commits into
masterfrom
clover

Conversation

@Eeems

@EeemsEeems commented Aug 28, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • ISO images now boot using Clover and systemd-boot, with serial console support at 115200 baud.
    • Added a command to list valid build targets.
    • Added quiet checks that show output only when failures occur.
    • Added BIOS boot testing for ISO releases.
    • VPN setup now uses automatic routing and DNS handling.
  • Bug Fixes

    • ISO files are removed only after successful completion.
    • Invalid build targets now produce clear errors.
  • Changes

    • Removed legacy GRUB and Syslinux boot entries.
    • Updated validation documentation.

@coderabbitai

coderabbitaiBot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The ISO pipeline now uses Clover and systemd-boot instead of GRUB and Syslinux. Build commands validate targets through a shared target list. The check command supports quiet output. VPN setup uses sshuttle. QEMU tests now cover legacy BIOS boots in CI.

Changes

ISO bootloader migration

Layer / File(s)Summary
Clover staging and build integration
overlay/base/etc/system/Isofile, overlay/base/etc/system/clover-config.plist
The image definition downloads and verifies Clover, stages its files, passes the UUID to create_live_bootloader, and installs the Clover configuration.
Systemd-boot and Clover image creation
overlay/base/usr/lib/system/create_live_bootloader
The script creates a 256 MB FAT EFI image, installs systemd-boot, stages UUID-specific loader files, and copies Clover and its CD boot image into the archiso tree.
Archiso boot configuration and assembly
overlay/base/etc/system/archiso/..., overlay/base/usr/lib/system/_os/cli/iso.py
The systemd-boot entry enables serial output. Legacy GRUB and Syslinux configuration is removed. GRUB-specific UUID substitution and xorriso handling are removed.
ISO target handling
make/iso.py
The ISO command validates targets, uses typed Podman storage metadata, and deletes matching ISO files after the build completes.

Build target tooling

Layer / File(s)Summary
Target discovery and validation
make/config.py, make/build.py, make/checkupdates.py, make/hash.py, make/run.py, make/scan.py
all_targets() defines valid targets. Build commands reject unknown targets before starting their operations.
Target listing command
make/targets.py
The new targets command prints all valid targets in sorted order.

Quiet check mode

Layer / File(s)Summary
Quiet check output and documentation
make/check.py, AGENTS.md
Quiet mode captures check output and replays it to stderr when a check fails. The check suite verifies traceback replay. Documentation describes unit-test execution and the updated quiet validation command.

SSH VPN transport

Layer / File(s)Summary
sshuttle transport and tunnel verification
overlay/eeems/usr/bin/sshvpn, variants/eeems.Containerfile
The VPN script uses sshuttle, records its process ID, uses HTTPS for public-IP checks, and verifies a changed public IP while the process remains active. The image installs sshuttle.

BIOS boot testing

Layer / File(s)Summary
QEMU BIOS control and test runner
make/boot.py, make/test.py
QEMU supports legacy BIOS mode, QMP control, and configurable login timeouts. The test runner sends boot keys through QMP and captures diagnostics.
BIOS CI release gate
.github/workflows/iso.yaml
CI runs a BIOS installation test and requires it before release.

Base image cleanup

Layer / File(s)Summary
Base package cleanup
variants/base.Containerfile
The package layer removes /usr/bin/su with hook files and no longer removes resolver utilities.

Estimated code review effort: 5 (Critical) | ~90 minutes

Merge Risk:🟠 High · up to 26c6b

The PR changes both ISO boot behavior and VPN networking, but the BIOS boot path may lack the configuration required for the intended systemd-boot selection, while VPN startup, routing, listener exposure, and teardown can produce incorrect or unsafe behavior. The PR should not merge until these boot and networking issues are fixed or explicitly accepted by the owners.

Sequence Diagram(s)

sequenceDiagram
participant TestCommand
participant QEMU
participant QMP
participant Login
TestCommand->>QEMU: Start legacy BIOS boot
QEMU->>QMP: Expose TCP monitor
TestCommand->>QMP: Send Enter key events
QMP->>QEMU: Drive bootloader
TestCommand->>Login: Wait with BIOS timeout
Loading

Poem

A rabbit packs Clover with care
Into an EFI image square
Old boot paths fade away
New targets list the way
BIOS boots join the tests
Quiet checks report the rest

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: …Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary ISO bootloader change from GRUB to systemd-boot with Clover integration.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: 4 unsupported.)


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@EeemsEeems linked an issue Aug 28, 2026 that may be closed by this pull request
Base automatically changed from iso_skopeo to masterAugust 28, 2026 19:36
@Eeems
Eeems marked this pull request as ready for review August 28, 2026 19:36
coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix booting from BIOS

1 participant

@Eeems
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

switch to systemd-boot+clover for iso - #140

Open
Eeems wants to merge 24 commits into
masterfrom
clover
Open

switch to systemd-boot+clover for iso#140
Eeems wants to merge 24 commits into
masterfrom
clover

Conversation

@Eeems

@EeemsEeems commented Aug 28, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • ISO images now boot using Clover and systemd-boot, with serial console support at 115200 baud.
    • Added a command to list valid build targets.
    • Added quiet checks that show output only when failures occur.
    • Added BIOS boot testing for ISO releases.
    • VPN setup now uses automatic routing and DNS handling.
  • Bug Fixes

    • ISO files are removed only after successful completion.
    • Invalid build targets now produce clear errors.
  • Changes

    • Removed legacy GRUB and Syslinux boot entries.
    • Updated validation documentation.

@coderabbitai

coderabbitaiBot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The ISO pipeline now uses Clover and systemd-boot instead of GRUB and Syslinux. Build commands validate targets through a shared target list. The check command supports quiet output. VPN setup uses sshuttle. QEMU tests now cover legacy BIOS boots in CI.

Changes

ISO bootloader migration

Layer / File(s)Summary
Clover staging and build integration
overlay/base/etc/system/Isofile, overlay/base/etc/system/clover-config.plist
The image definition downloads and verifies Clover, stages its files, passes the UUID to create_live_bootloader, and installs the Clover configuration.
Systemd-boot and Clover image creation
overlay/base/usr/lib/system/create_live_bootloader
The script creates a 256 MB FAT EFI image, installs systemd-boot, stages UUID-specific loader files, and copies Clover and its CD boot image into the archiso tree.
Archiso boot configuration and assembly
overlay/base/etc/system/archiso/..., overlay/base/usr/lib/system/_os/cli/iso.py
The systemd-boot entry enables serial output. Legacy GRUB and Syslinux configuration is removed. GRUB-specific UUID substitution and xorriso handling are removed.
ISO target handling
make/iso.py
The ISO command validates targets, uses typed Podman storage metadata, and deletes matching ISO files after the build completes.

Build target tooling

Layer / File(s)Summary
Target discovery and validation
make/config.py, make/build.py, make/checkupdates.py, make/hash.py, make/run.py, make/scan.py
all_targets() defines valid targets. Build commands reject unknown targets before starting their operations.
Target listing command
make/targets.py
The new targets command prints all valid targets in sorted order.

Quiet check mode

Layer / File(s)Summary
Quiet check output and documentation
make/check.py, AGENTS.md
Quiet mode captures check output and replays it to stderr when a check fails. The check suite verifies traceback replay. Documentation describes unit-test execution and the updated quiet validation command.

SSH VPN transport

Layer / File(s)Summary
sshuttle transport and tunnel verification
overlay/eeems/usr/bin/sshvpn, variants/eeems.Containerfile
The VPN script uses sshuttle, records its process ID, uses HTTPS for public-IP checks, and verifies a changed public IP while the process remains active. The image installs sshuttle.

BIOS boot testing

Layer / File(s)Summary
QEMU BIOS control and test runner
make/boot.py, make/test.py
QEMU supports legacy BIOS mode, QMP control, and configurable login timeouts. The test runner sends boot keys through QMP and captures diagnostics.
BIOS CI release gate
.github/workflows/iso.yaml
CI runs a BIOS installation test and requires it before release.

Base image cleanup

Layer / File(s)Summary
Base package cleanup
variants/base.Containerfile
The package layer removes /usr/bin/su with hook files and no longer removes resolver utilities.

Estimated code review effort: 5 (Critical) | ~90 minutes

Merge Risk:🟠 High · up to 26c6b

The PR changes both ISO boot behavior and VPN networking, but the BIOS boot path may lack the configuration required for the intended systemd-boot selection, while VPN startup, routing, listener exposure, and teardown can produce incorrect or unsafe behavior. The PR should not merge until these boot and networking issues are fixed or explicitly accepted by the owners.

Sequence Diagram(s)

sequenceDiagram
participant TestCommand
participant QEMU
participant QMP
participant Login
TestCommand->>QEMU: Start legacy BIOS boot
QEMU->>QMP: Expose TCP monitor
TestCommand->>QMP: Send Enter key events
QMP->>QEMU: Drive bootloader
TestCommand->>Login: Wait with BIOS timeout
Loading

Poem

A rabbit packs Clover with care
Into an EFI image square
Old boot paths fade away
New targets list the way
BIOS boots join the tests
Quiet checks report the rest

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: …Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary ISO bootloader change from GRUB to systemd-boot with Clover integration.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: 4 unsupported.)


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@EeemsEeems linked an issue Aug 28, 2026 that may be closed by this pull request
Base automatically changed from iso_skopeo to masterAugust 28, 2026 19:36
@Eeems
Eeems marked this pull request as ready for review August 28, 2026 19:36
coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix booting from BIOS

1 participant

@Eeems
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

switch to systemd-boot+clover for iso - #140

Open
Eeems wants to merge 24 commits into
masterfrom
clover
Open

switch to systemd-boot+clover for iso#140
Eeems wants to merge 24 commits into
masterfrom
clover

Conversation

@Eeems

@EeemsEeems commented Aug 28, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • ISO images now boot using Clover and systemd-boot, with serial console support at 115200 baud.
    • Added a command to list valid build targets.
    • Added quiet checks that show output only when failures occur.
    • Added BIOS boot testing for ISO releases.
    • VPN setup now uses automatic routing and DNS handling.
  • Bug Fixes

    • ISO files are removed only after successful completion.
    • Invalid build targets now produce clear errors.
  • Changes

    • Removed legacy GRUB and Syslinux boot entries.
    • Updated validation documentation.

@coderabbitai

coderabbitaiBot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The ISO pipeline now uses Clover and systemd-boot instead of GRUB and Syslinux. Build commands validate targets through a shared target list. The check command supports quiet output. VPN setup uses sshuttle. QEMU tests now cover legacy BIOS boots in CI.

Changes

ISO bootloader migration

Layer / File(s)Summary
Clover staging and build integration
overlay/base/etc/system/Isofile, overlay/base/etc/system/clover-config.plist
The image definition downloads and verifies Clover, stages its files, passes the UUID to create_live_bootloader, and installs the Clover configuration.
Systemd-boot and Clover image creation
overlay/base/usr/lib/system/create_live_bootloader
The script creates a 256 MB FAT EFI image, installs systemd-boot, stages UUID-specific loader files, and copies Clover and its CD boot image into the archiso tree.
Archiso boot configuration and assembly
overlay/base/etc/system/archiso/..., overlay/base/usr/lib/system/_os/cli/iso.py
The systemd-boot entry enables serial output. Legacy GRUB and Syslinux configuration is removed. GRUB-specific UUID substitution and xorriso handling are removed.
ISO target handling
make/iso.py
The ISO command validates targets, uses typed Podman storage metadata, and deletes matching ISO files after the build completes.

Build target tooling

Layer / File(s)Summary
Target discovery and validation
make/config.py, make/build.py, make/checkupdates.py, make/hash.py, make/run.py, make/scan.py
all_targets() defines valid targets. Build commands reject unknown targets before starting their operations.
Target listing command
make/targets.py
The new targets command prints all valid targets in sorted order.

Quiet check mode

Layer / File(s)Summary
Quiet check output and documentation
make/check.py, AGENTS.md
Quiet mode captures check output and replays it to stderr when a check fails. The check suite verifies traceback replay. Documentation describes unit-test execution and the updated quiet validation command.

SSH VPN transport

Layer / File(s)Summary
sshuttle transport and tunnel verification
overlay/eeems/usr/bin/sshvpn, variants/eeems.Containerfile
The VPN script uses sshuttle, records its process ID, uses HTTPS for public-IP checks, and verifies a changed public IP while the process remains active. The image installs sshuttle.

BIOS boot testing

Layer / File(s)Summary
QEMU BIOS control and test runner
make/boot.py, make/test.py
QEMU supports legacy BIOS mode, QMP control, and configurable login timeouts. The test runner sends boot keys through QMP and captures diagnostics.
BIOS CI release gate
.github/workflows/iso.yaml
CI runs a BIOS installation test and requires it before release.

Base image cleanup

Layer / File(s)Summary
Base package cleanup
variants/base.Containerfile
The package layer removes /usr/bin/su with hook files and no longer removes resolver utilities.

Estimated code review effort: 5 (Critical) | ~90 minutes

Merge Risk:🟠 High · up to 26c6b

The PR changes both ISO boot behavior and VPN networking, but the BIOS boot path may lack the configuration required for the intended systemd-boot selection, while VPN startup, routing, listener exposure, and teardown can produce incorrect or unsafe behavior. The PR should not merge until these boot and networking issues are fixed or explicitly accepted by the owners.

Sequence Diagram(s)

sequenceDiagram
participant TestCommand
participant QEMU
participant QMP
participant Login
TestCommand->>QEMU: Start legacy BIOS boot
QEMU->>QMP: Expose TCP monitor
TestCommand->>QMP: Send Enter key events
QMP->>QEMU: Drive bootloader
TestCommand->>Login: Wait with BIOS timeout
Loading

Poem

A rabbit packs Clover with care
Into an EFI image square
Old boot paths fade away
New targets list the way
BIOS boots join the tests
Quiet checks report the rest

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: …Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary ISO bootloader change from GRUB to systemd-boot with Clover integration.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: 4 unsupported.)


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@EeemsEeems linked an issue Aug 28, 2026 that may be closed by this pull request
Base automatically changed from iso_skopeo to masterAugust 28, 2026 19:36
@Eeems
Eeems marked this pull request as ready for review August 28, 2026 19:36
coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix booting from BIOS

1 participant

@Eeems
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

switch to systemd-boot+clover for iso - #140

Open
Eeems wants to merge 24 commits into
masterfrom
clover
Open

switch to systemd-boot+clover for iso#140
Eeems wants to merge 24 commits into
masterfrom
clover

Conversation

@Eeems

@EeemsEeems commented Aug 28, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features

    • ISO images now boot using Clover and systemd-boot, with serial console support at 115200 baud.
    • Added a command to list valid build targets.
    • Added quiet checks that show output only when failures occur.
    • Added BIOS boot testing for ISO releases.
    • VPN setup now uses automatic routing and DNS handling.
  • Bug Fixes

    • ISO files are removed only after successful completion.
    • Invalid build targets now produce clear errors.
  • Changes

    • Removed legacy GRUB and Syslinux boot entries.
    • Updated validation documentation.

@coderabbitai

coderabbitaiBot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The ISO pipeline now uses Clover and systemd-boot instead of GRUB and Syslinux. Build commands validate targets through a shared target list. The check command supports quiet output. VPN setup uses sshuttle. QEMU tests now cover legacy BIOS boots in CI.

Changes

ISO bootloader migration

Layer / File(s)Summary
Clover staging and build integration
overlay/base/etc/system/Isofile, overlay/base/etc/system/clover-config.plist
The image definition downloads and verifies Clover, stages its files, passes the UUID to create_live_bootloader, and installs the Clover configuration.
Systemd-boot and Clover image creation
overlay/base/usr/lib/system/create_live_bootloader
The script creates a 256 MB FAT EFI image, installs systemd-boot, stages UUID-specific loader files, and copies Clover and its CD boot image into the archiso tree.
Archiso boot configuration and assembly
overlay/base/etc/system/archiso/..., overlay/base/usr/lib/system/_os/cli/iso.py
The systemd-boot entry enables serial output. Legacy GRUB and Syslinux configuration is removed. GRUB-specific UUID substitution and xorriso handling are removed.
ISO target handling
make/iso.py
The ISO command validates targets, uses typed Podman storage metadata, and deletes matching ISO files after the build completes.

Build target tooling

Layer / File(s)Summary
Target discovery and validation
make/config.py, make/build.py, make/checkupdates.py, make/hash.py, make/run.py, make/scan.py
all_targets() defines valid targets. Build commands reject unknown targets before starting their operations.
Target listing command
make/targets.py
The new targets command prints all valid targets in sorted order.

Quiet check mode

Layer / File(s)Summary
Quiet check output and documentation
make/check.py, AGENTS.md
Quiet mode captures check output and replays it to stderr when a check fails. The check suite verifies traceback replay. Documentation describes unit-test execution and the updated quiet validation command.

SSH VPN transport

Layer / File(s)Summary
sshuttle transport and tunnel verification
overlay/eeems/usr/bin/sshvpn, variants/eeems.Containerfile
The VPN script uses sshuttle, records its process ID, uses HTTPS for public-IP checks, and verifies a changed public IP while the process remains active. The image installs sshuttle.

BIOS boot testing

Layer / File(s)Summary
QEMU BIOS control and test runner
make/boot.py, make/test.py
QEMU supports legacy BIOS mode, QMP control, and configurable login timeouts. The test runner sends boot keys through QMP and captures diagnostics.
BIOS CI release gate
.github/workflows/iso.yaml
CI runs a BIOS installation test and requires it before release.

Base image cleanup

Layer / File(s)Summary
Base package cleanup
variants/base.Containerfile
The package layer removes /usr/bin/su with hook files and no longer removes resolver utilities.

Estimated code review effort: 5 (Critical) | ~90 minutes

Merge Risk:🟠 High · up to 26c6b

The PR changes both ISO boot behavior and VPN networking, but the BIOS boot path may lack the configuration required for the intended systemd-boot selection, while VPN startup, routing, listener exposure, and teardown can produce incorrect or unsafe behavior. The PR should not merge until these boot and networking issues are fixed or explicitly accepted by the owners.

Sequence Diagram(s)

sequenceDiagram
participant TestCommand
participant QEMU
participant QMP
participant Login
TestCommand->>QEMU: Start legacy BIOS boot
QEMU->>QMP: Expose TCP monitor
TestCommand->>QMP: Send Enter key events
QMP->>QEMU: Drive bootloader
TestCommand->>Login: Wait with BIOS timeout
Loading

Poem

A rabbit packs Clover with care
Into an EFI image square
Old boot paths fade away
New targets list the way
BIOS boots join the tests
Quiet checks report the rest

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: …Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title clearly and concisely describes the primary ISO bootloader change from GRUB to systemd-boot with Clover integration.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 25 functions across 11 files. (4 skipped: 4 unsupported.)


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@EeemsEeems linked an issue Aug 28, 2026 that may be closed by this pull request
Base automatically changed from iso_skopeo to masterAugust 28, 2026 19:36
@Eeems
Eeems marked this pull request as ready for review August 28, 2026 19:36
coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix booting from BIOS

1 participant

@Eeems