7.4 KiB
Executable File
7.4 KiB
Executable File
Changelog
All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
[0.4.0] - 2026-08-29
Added
- DriveStage project naming — the prior codename carried a trademark conflict; the rename is deliberate and complete across source, docs, install paths, partition labels, GRUB cfg identifiers, env vars, lock files, and git remote URL
- BlkStage is the formal name for the internal bash backend (the
blkstage.shengine) - Internal
PAYLOAD_CATEGORIEStable in the bash engine — single source of truth for bothlist_payloadsandscan_payloadssummary (eliminates 4 near-duplicate if-compgen+for blocks) is_critical_mount()helper in the bash engine — singlecasestatement replaces the innerfor cm in $critical_mounts; do if [[ ... ]]; fi; doneloop inguard_root_diskinstall_grub2()andresolve_install_argv()helpers ingui/src/core/bootloader.rs— step-down dispatch replaces the nested if-then-return + match-with-inline-early-return pattern- Iterator-chain form of
is_disk_safe_to_wipe()ingui/src/core/disk.rs— single expression replaces nested for-loop+if
Changed
- Public project name: BootPrep → DriveStage
- Internal backend name: (informal) → BlkStage (formal)
- Engine file:
scripts/bootprep.sh→scripts/blkstage.sh(andgui/assets/blkstage.sh) - GUI binary:
bootprep-gui→drivestage-gui - Install path:
/usr/local/lib/bootprep/→/usr/local/lib/drivestage/ - Mount base:
/mnt/bootprep→/mnt/drivestage - Config file:
/etc/bootprep.conf→/etc/drivestage.conf - Lock file:
/var/lock/bootprep.lock→/var/lock/drivestage.lock - Env var:
BOOTPREP_SH→DRIVESTAGE_SH - Partition labels:
BOOTPREP/BOOTPREP-EFI→DRIVESTAGE/DRIVESTAGE-EFI - GRUB cfg identifiers:
mb_iso_entry/mb_rootfs_entry/mb_payload_uuid→ds_iso_entry/ds_rootfs_entry/ds_payload_uuid - Extraction marker:
.mb_extracted→.ds_extracted - iced application id:
dev.bootprep.gui→dev.drivestage.gui - Git remote URL:
dcosnet/BootPrep→dcosnet/DriveStage check_commandsGRUB binary check uses step-downcommand -v ... || command -v ... || missing+=(...)instead of anif ! cmd1 && ! cmd2; thenblockgrub_install_cmduses step-downcommand -v ... && { printf ...; return; }instead ofif/elif/elsecascadeunmount_allconsolidates inlinep1/p3resolution into a singlefor p instep-downbootloader.rs::installreordered to a clean step-down sequence: GRUB2 dispatch → resolve argv → run → generate configsis_disk_safe_to_wiperewritten as a single iterator-chain expression withflat_map().any()instead of nestedfor c in &disk.children { for m in &c.mountpoints { if critical_mounts.iter().any(...) { return false; } } }- LICENSE extended with a Project Naming section documenting DriveStage + BlkStage
- Author email
info@dcos.netadded to all author references (docs, source comments, Cargo manifests, LICENSE, GUI about panel) - BLOG.md phrasing updated: "accumulated workarounds" → "accumulated design constraints of that era"
Removed
- Stale reference to
emit_iso_menuentryfunction in README.md (the function was removed in v0.2.0 per QA-8) - Stale "v0.2.0 experimental" warning in README.md (superseded by v0.4.0)
Security
- No new findings. The trademark conflict motivating the rename did not involve any code-execution or privilege-escalation vector.
[0.3.0] - 2026-08-14
Added
- Bootloader config generation for non-GRUB2 bootloaders — systemd-boot (
loader.conf+ entry stubs), Limine (limine.conf), and rEFInd (refind.conf) are now automatically generated from discovered payloads after binary install - New
gui/src/core/config_gen.rsmodule — table-driven config generation with distro detection and filename sanitization - Loop device smoke test (
scripts/test_loop_device.sh) — end-to-end test on a sparse loop device covering setup → list → clean with partition, mount, grub.cfg, and BOOTX64.EFI verification - cargo-audit step in CI workflow — security vulnerability scanning via rustsec/audit-check
- Expanded Rust unit test suite — 16 tests across
disk.rs,payload.rs, andconfig_gen.rscovering parse_lsblk_size, NVMe JSON parsing, is_disk_safe_to_wipe, is_tarball_ext, kind_rank ordering, payload size formatting, config generation, and distro detection
Changed
- Bootloader install now generates config files automatically after binary install for non-GRUB2 bootloaders
- BootloaderPage UI shows config generation status in the install completion message
- GRUB2 install message clarifies it uses boot-time auto-scan (no host-side config needed)
Fixed
- Non-GRUB2 bootloaders previously installed binaries but generated no config files — now fully functional
[0.2.0] - 2026-08-14
Added
- Boot-time auto-scan grub.cfg — GRUB discovers payloads at boot, no host-side scan required for ISOs
- Bootloader switcher in GUI (GRUB2, systemd-boot, Limine, rEFInd)
- Custom menuentry editor in GUI
- Drive diagnostics tab (SMART, partition table, filesystem info)
--versionflag on the bash scriptgrub_install_cmd()resolver — handles grub-install vs grub2-install naming- LVM/LUKS/mdadm detection in guard_root_disk via lsblk PKNAME chain
- Cleanup trap on EXIT/INT/TERM
- Flock-based concurrent invocation protection
- Free-space check before rsync in deploy_payload
- .mb_extracted idempotency marker for tarball extraction
- test_distro_detection.sh — 30 distro pattern tests
- CI/CD pipeline (GitHub Actions)
- CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, CODEOWNERS
- Makefile with dist/release targets
- Root Cargo.toml workspace manifest
Changed
- GRUB install failures are now fatal (prevents unbootable drives)
- GRUB regexp cascade is now case-insensitive (--ignore-case)
- unmount_all is now recursive (umount -R)
- ESP no longer sets LegacyBIOSBootable GPT attribute
- check_commands now verifies wipefs, blockdev, partprobe, udevadm
- CONF_FILE sourcing now validates ownership and mode
- Fedora install instructions: added grub2-tools, grub2-common
- Arch install instructions: replaced non-existent pcboot with efibootmgr
- Cargo.toml repository URL corrected to dcosnet/BootPrep (renamed to dcosnet/DriveStage in v0.4.0)
- Rust list_payloads refactored to table-driven approach
- Rust PayloadKind now derives Copy, PartialEq, Eq
Fixed
- LICENSE typo "grantsofar" → "granted, free of charge"
- GRUB --checkpoint=.100 → --checkpoint=100 --checkpoint-action=dot
- Cargo.toml placeholder repo URL
- Missing test_distro_detection.sh (was referenced in README but didn't exist)
Security
- guard_root_disk now detects LVM/LUKS/mdadm-backed root filesystems
- CONF_FILE now requires root ownership and mode 0644 or stricter
- Sudo password wrapped in Zeroizing (zeroized on drop)
[0.1.0] - 2026-08-14
Added
- Initial release
- Single-file bash engine (bootprep.sh at the time; renamed to blkstage.sh in v0.4.0) with 6 subcommands: setup, deploy, scan, list, shell, clean
- GPT partition layout: ESP (FAT32) + BIOS Boot (1MB) + Payloads (ext4)
- Dual-target GRUB2 install (x86_64-efi + i386-pc)
- Boot-time auto-scan grub.cfg with 30+ distro patterns
- Rust + Iced GUI companion app (experimental)
- Dark tech utility theme
- README.md, QUICKSTART.md, BLOG.md, LICENSE