📣 Call for testers: new armbian-install - #10176
Conversation
The installer was redesigned as an armbian-config module (module_partitioner, backed by module_install_engine) so its logic is unit- and loopback-tested in CI instead of hand-verified on hardware. - armbian-install becomes a thin wrapper that execs `armbian-config --api module_partitioner "$@"`, preserving the historical /usr/bin/armbian-install entrypoint and CLI. - Drop the nand-sata-install symlink and the a10/a13/a20 NAND bootloader assets (legacy sunxi NAND is no longer supported). exclude.txt is kept. - armbianmonitor now also collects /var/log/armbian-install.log. Signed-off-by: Igor Pecovnik <igor@armbian.com>
📝 WalkthroughWalkthroughThe legacy installer implementation and bootloader assets were removed. ChangesInstaller and support diagnostics
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/bsp/common/usr/bin/armbian-install`:
- Line 18: Remove the Docker restart command from the shim-level INT/TERM trap
in armbian-install, since it is discarded by exec. Handle interrupt recovery
within the module_partitioner implementation if needed, preserving the existing
exit behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: b03d8c90-adc1-4e13-8705-441f21566eee
⛔ Files ignored due to path filters (3)
packages/bsp/common/usr/lib/armbian-install/a10/bootloader/u-boot.binis excluded by!**/*.binpackages/bsp/common/usr/lib/armbian-install/a13/bootloader/linux/u-boot.binis excluded by!**/*.binpackages/bsp/common/usr/lib/armbian-install/a20/bootloader/linux/u-boot.binis excluded by!**/*.bin
📒 Files selected for processing (12)
packages/bsp/common/usr/bin/armbian-installpackages/bsp/common/usr/bin/armbianmonitorpackages/bsp/common/usr/bin/nand-sata-installpackages/bsp/common/usr/lib/armbian-install/a10/bootloader/boot.axfpackages/bsp/common/usr/lib/armbian-install/a10/bootloader/boot.inipackages/bsp/common/usr/lib/armbian-install/a10/bootloader/linux/linux.inipackages/bsp/common/usr/lib/armbian-install/a13/bootloader/boot.axfpackages/bsp/common/usr/lib/armbian-install/a13/bootloader/boot.inipackages/bsp/common/usr/lib/armbian-install/a13/bootloader/linux/linux.inipackages/bsp/common/usr/lib/armbian-install/a20/bootloader/boot.axfpackages/bsp/common/usr/lib/armbian-install/a20/bootloader/boot.inipackages/bsp/common/usr/lib/armbian-install/a20/bootloader/linux/linux.ini
💤 Files with no reviewable changes (7)
- packages/bsp/common/usr/lib/armbian-install/a20/bootloader/boot.ini
- packages/bsp/common/usr/lib/armbian-install/a20/bootloader/linux/linux.ini
- packages/bsp/common/usr/lib/armbian-install/a13/bootloader/linux/linux.ini
- packages/bsp/common/usr/lib/armbian-install/a10/bootloader/boot.ini
- packages/bsp/common/usr/lib/armbian-install/a10/bootloader/linux/linux.ini
- packages/bsp/common/usr/bin/nand-sata-install
- packages/bsp/common/usr/lib/armbian-install/a13/bootloader/boot.ini
| mountpoint -q "${TempDir}"/bootfs && umount "${TempDir}"/bootfs | ||
| } # create_armbian | ||
|
|
||
| trap "systemctl start docker >/dev/null 2>&1; exit" INT TERM |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Inspect the shim and related installer logic.
git ls-files 'packages/bsp/common/usr/bin/armbian-install' 'packages/bsp/common/usr/lib/*' 'packages/bsp/common/usr/*' | sed -n '1,120p'
printf '\n--- armbian-install ---\n'
cat -n packages/bsp/common/usr/bin/armbian-install
printf '\n--- search for module_partitioner / docker handling ---\n'
rg -n --hidden --no-messages 'module_partitioner|docker|systemctl start docker|systemctl stop docker|trap .*INT|trap .*TERM|exec .*armbian-config|armbian-config' packages/bsp/common/usrRepository: armbian/build
Length of output: 5361
Move the Docker restart out of the shim The trap is discarded by exec, so it never applies while armbian-config --api module_partitioner is doing the real work. If partitioning stops Docker and the user aborts, Docker can stay down; handle the interrupt in module_partitioner instead, or drop the shim-level trap.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/bsp/common/usr/bin/armbian-install` at line 18, Remove the Docker
restart command from the shim-level INT/TERM trap in armbian-install, since it
is discarded by exec. Handle interrupt recovery within the module_partitioner
implementation if needed, preserving the existing exit behavior.
|
Didn't work on BeaglePlay (26.5.1 Resolute) - Error code 73 armbian-install.log -
[ERR] verify: '/mnt/armbian-install.33QN5x/boot' is not bootable (kernel=1 script=0) Not sure if this is related to installer behavior or how k3 does write_uboot_platform in the first place (old installer doesn't work either) but thought I'd add my report. |
|
Thanks @Grippy98 — that report surfaced two real issues, both now fixed in configng#951: 1. 2. u-boot files went to the wrong Still board-side (not the installer):
Could you re-test with the latest |
I had mentioned this problem to him, and flashing the bootloader is a real hassle because everything stops working as soon as you try to install the system on the eMMC—even with the old armbian-install. I don't know what happened to that binary file, but we need to fix the problem at its source. |
Yes. My reffered PR is blind attempt to repair that. This will need to be tested by @Grippy98 Still we need feedback from some eMMC / UFS enabled devices. Also USB boot, updating SPI bootloader only ... |
|
Tested on YYT-R1-V3 @igorpecovnik: It seems there are no instructions on how to install it, as mentioned earlier in the armbian-install guide. In other words, how do I update or install the bootloader? Some boards don’t have a Spinor like this one, and to work around the problem, the bootloader is usually installed on an SD card or eMMC, but that isn’t specified here.
Like that:
Once you've selected NVMe ext4
It doesn't seem to be booting, but I notice some discrepancies in the nvme0n1p1 partition:
|
|
Try now. |
Yes I'm planning to look at the functions that need to be added to K3.conf to enable mmc flashing to work correctly soon - just been busy with other bits. Sysfw.itb is an older binary that was only needed for one early platform (AM65x I believe) so it's "always" safe to ignore for the boards targeted here. (If codeRabbit wants to learn from this) |
|
MTD: error propagation confirmed (not a ✅ for the matrix row) Tested the MTD path on a ROCK Pi 4A (RK3399, XT25F32B SPI NOR on The engine is UI-free, so it can be driven directly: source tools/modules/functions/module_install_engine.sh
source /usr/lib/u-boot/platform_install.sh
INSTALL_LOG=/root/install.log \
install_write_bootloader mtd "" "" /usr/lib/linux-u-boot-edge-<board> mtd0Result: The status makes it all the way up: Side note for anyone else testing MTD: with a non-tty stdout, |
|
@copilot resolve the merge conflicts in this pull request |
# Conflicts: # packages/bsp/common/usr/bin/armbian-install Co-authored-by: igorpecovnik <6281704+igorpecovnik@users.noreply.github.com>
Merge conflicts resolved — kept our shim in |
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
|
I made second round of extensive testing. Found and adress few bugs. Most used scenarios tested and works. Since our current installer is worse, I would propose to merge so it can be tested further. |




armbian-installwas rewritten from scratch as a tested armbian-config module (engine + tests: armbian/configng#951; this PR is just the bsp shim). Before merge it needs real-world testing across all install variants.Long-standing
armbian-installbugs this fixesThe old monolith failed the same way for years because detection, partitioning, and boot-population were tangled in one 420-line function. The rewrite splits them into separate, unit-tested functions, which eliminates these by construction:
/bootempty on single-partition sunxi boards (unbootable) → target/bootis always populated and then asserted non-empty (kernel + boot script present) before finishing, matching the Orange Pi PC Plus / Banana Pi M3 symptom in the report.armbian-installwhen using multiple partitions #6905 — an install into a manually-wiped partition was unbootable for want of a boot flag → the layout is now declarative with explicit boot / ESP / bios_grub flags. (The broader "install into pre-existing partitions" ask isn't implemented — it still repartitions the target.)uefi ∨ >2 TiB ∨ 4Kn, so the empty-4 TB-NVMe-UEFI case gets GPT) and [Bug]: BTRFS Install fails due to missing btrfs-progs package on Trixie configng#662 (missingbtrfs-progs/f2fs-toolsare now pre-flighted with a clear "install <pkg>" message instead of a mkfs crash).Not fixed here: #10064 (Radxa Dragon Q6A) is a Qualcomm QCS6490 board with no u-boot (
BOOTCONFIG=none). The new pre-flight makes an eMMC install there fail fast with a clear message instead of silently producing an unbootable card — but it still needs a board-specific boot flow to actually install, so this rewrite alone doesn't resolve it.Status
✅ tested & boots · ⬜ needs testing
Hardware confirmed (real boards, boots to a running system)
/emmc_storage) boots standalone (~6 s, SD removed).Windows 10/11 dual-boot works end to end on KVM: shrink NTFS, install alongside, GRUB + os-prober menu with both OSes, both boot. Also re-validated on real UEFI hardware (Armbian live ISO on a UEFI PC with a real Windows-on-NVMe install): Windows detection, the shrink pre-flight, and the fixes below all behave correctly.
Companion fixes surfaced by this testing (please apply when testing the relevant board)
f2fsneeds.CONFIG_CRYPTO_CRC32C=yon all kernels, so btrfs mounts (rockchip64 etc. lacked it →open_ctree failed).manage-bde -offfrom an unclean/hibernated NTFS → Fast Startup off +chkdsk) instead of a log-only failure; and don't offer the live-ISO boot medium (the USB you booted from) as a destination.main.How to test
On a running Armbian:
Or drive it non-interactively:
sudo bin/armbian-config --api module_partitioner install \ --target /dev/sdX --boot <mode> --fs <fs> --yes # --boot = uefi | bios | uefi-dualboot | emmc | sd | mtd | ufs | split-emmc # --fs = ext4 | btrfs | f2fs (dual-boot adds --size <GiB>)Then reboot into the target and confirm it boots.
Per variant:
uefi-dualboot. In Windows first: disable BitLocker / Device Encryption (manage-bde -off C:, wait for full decryption) and Fast Startup (powercfg /h off) — otherwise the NTFS volume is encrypted/dirty and cannot be shrunk. The installer tells you if so.Report back
Comment with board or firmware · boot mode · filesystem · result (boots / fails).
/var/log/armbian-install.log, orsudo armbianmonitor -uand paste the URL it prints.¹ Odroid M1 MTD/SPI→NVMe needs #10351 (and #10350 for btrfs). ² "boot eMMC / root NVMe" (
--boot split-emmc) is a new mode for boards whose bootrom can't load u-boot from NVMe; the eMMC remainder is auto-mounted at/emmc_storage.Summary by CodeRabbit
New Features
Improvements