Monorepo for Aesthetic.Computer aesthetic.computer

fix: bundle partprobe in initramfs + robust partition re-read

partprobe was never in initramfs — all partition table re-reads
after sfdisk were silently failing, causing mkfs.vfat to fail on
NVMe because /dev/nvme0n1p1 didn't exist yet.

Now: partprobe bundled, plus blockdev/busybox/sfdisk --verify as
fallbacks, with 5s polling loop for device node appearance.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+9 -4
+1 -1
fedac/native/docker-build.sh
··· 286 286 done 287 287 288 288 # ── 2i2: Disk/EFI tools (for HD install + OTA flash) ── 289 - for tool in sfdisk mkfs.vfat efibootmgr; do 289 + for tool in sfdisk mkfs.vfat efibootmgr partprobe; do 290 290 SRC_BIN=$(command -v "$tool" 2>/dev/null) 291 291 if [ -n "$SRC_BIN" ]; then 292 292 cp -L "$SRC_BIN" "$IROOT/bin/"
+8 -3
fedac/native/src/ac-native.c
··· 973 973 snprintf(rcmd, sizeof(rcmd), "partprobe /dev/%s 2>&1 || blockdev --rereadpt /dev/%s 2>&1", 974 974 parent_blk, parent_blk); 975 975 system(rcmd); 976 + // Force kernel to re-read partition table (multiple methods) 977 + snprintf(rcmd, sizeof(rcmd), 978 + "partprobe /dev/%s 2>/dev/null; " 979 + "blockdev --rereadpt /dev/%s 2>/dev/null; " 980 + "busybox blockdev --rereadpt /dev/%s 2>/dev/null; " 981 + "sfdisk --verify /dev/%s 2>/dev/null", 982 + parent_blk, parent_blk, parent_blk, parent_blk); 983 + system(rcmd); 976 984 // Wait for partition device node to appear (up to 5s) 977 985 for (int wait = 0; wait < 10; wait++) { 978 986 usleep(500000); ··· 982 990 break; 983 991 } 984 992 ac_log("[install] waiting for %s... (%d)\n", devpath, wait); 985 - // Re-probe each iteration 986 - snprintf(rcmd, sizeof(rcmd), "partprobe /dev/%s 2>/dev/null", parent_blk); 987 - system(rcmd); 988 993 } 989 994 // Reformat 990 995 snprintf(rcmd, sizeof(rcmd), "mkfs.vfat -F 32 -n AC-NATIVE %s 2>&1", devpath);