Skip to content

fix(dashboard): proot-safe copy (cp -a) instead of rsync -Aax#29

Merged
luisguzman-adfa merged 1 commit into
mainfrom
fix/dashboard-proot-safe-copy
Jun 23, 2026
Merged

fix(dashboard): proot-safe copy (cp -a) instead of rsync -Aax#29
luisguzman-adfa merged 1 commit into
mainfrom
fix/dashboard-proot-safe-copy

Conversation

@luisguzman-adfa

Copy link
Copy Markdown
Collaborator

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.

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.

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.

Tip: disable this comment in your organization's Code Review settings.

@luisguzman-adfa luisguzman-adfa merged commit 52e136e into main Jun 23, 2026
1 check passed
@luisguzman-adfa luisguzman-adfa deleted the fix/dashboard-proot-safe-copy branch June 23, 2026 15:42
Sign up for free to 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.

1 participant