From 01fcffe0bdfa8df56be88900ae7508bfa651bc08 Mon Sep 17 00:00:00 2001 From: AppDevForAll Date: Tue, 23 Jun 2026 01:57:02 +0000 Subject: [PATCH] fix(dashboard): proot-safe copy (cp -a) instead of rsync -Aax rsync sets perms without following symlinks via lchmod = fchmodat(AT_SYMLINK_NOFOLLOW); glibc >=2.39 (Debian trixie 2.41) services that with the fchmodat2() syscall (Linux >=6.6). proot does not translate fchmodat2's path arg, so under proot on a 6.6+ kernel the guest path reaches the host untranslated and chmod returns ENOENT -> rsync exits 23 -> install_iiaboa_dashboard aborts (set -e) -> rootfs lacks flag_install_ready and the dashboard never starts. Reproduced building the rootfs off-device on a Raspberry Pi 5 (kernel 6.8) for BOTH armeabi-v7a and arm64-v8a; it worked on kernel 6.1 hosts and in the APK -> host-kernel-dependent, not arch-specific. cp uses plain chmod (old fchmodat), which proot translates, so the copy is reliable. Device-to-device sync is unaffected: its rsync is the static librsync.so built with lchmod disabled (ac_cv_func_lchmod=no), so it never calls fchmodat2. --- iiab-android | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/iiab-android b/iiab-android index ff3b342..f2a334e 100644 --- a/iiab-android +++ b/iiab-android @@ -414,7 +414,9 @@ install_iiaboa_dashboard() { # Copy dashboard files mkdir -p "$dash_dest" - rsync -Aax "${dash_src}/" "$dash_dest/" + # Proot-safe copy: rsync's lchmod -> fchmodat2 (glibc>=2.39, kernel>=6.6) isn't + # translated by proot (rc=23 under proot on 6.6+ kernels); cp -a is reliable. + cp -a "${dash_src}/." "$dash_dest/" # Install node dependencies log "Installing Node dependencies for the dashboard..."