Thanks for the idea - I have the full log files here:
Tumbleweed: https://justpaste.it/gs2ue
Leap 16: https://justpaste.it/gd24l
Since these are 10K+ lines each and I’m not used to reading these, there is not all that much that I can see from them. I at least found the section that ultimately throws the error, which looks like this in Leap:
...
[pid 1834] mount(NULL, "/", NULL, MS_REC|MS_SILENT|MS_SLAVE, NULL) = 0
[pid 1834] mount("tmpfs", "/tmp", "tmpfs", MS_NOSUID|MS_NODEV, NULL) = 0
[pid 1834] newfstatat(AT_FDCWD, ".", {st_mode=S_IFDIR|0755, st_size=40, ...}, 0) = 0
[pid 1834] newfstatat(AT_FDCWD, "/home/user", {st_mode=S_IFDIR|0755, st_size=40, ...}, 0) = 0
[pid 1834] chdir("/tmp") = 0
[pid 1834] mkdir("newroot", 0755) = 0
[pid 1834] mount("newroot", "newroot", NULL, MS_MGC_VAL|MS_BIND|MS_REC|MS_SILENT, NULL) = 0
[pid 1834] mkdir("oldroot", 0755) = 0
[pid 1834] pivot_root("/tmp", "oldroot") = 0
[pid 1834] chdir("/") = 0
[pid 1834] mkdir("proc", 0755) = 0
[pid 1834] mount("oldroot/proc", "proc", NULL, MS_BIND|MS_REC|MS_SILENT, NULL) = 0
[pid 1834] openat(AT_FDCWD, "/oldroot", O_RDONLY|O_NOCTTY|O_CLOEXEC|O_PATH) = 4
[pid 1834] openat2(4, "/", {flags=O_RDONLY|O_PATH, resolve=RESOLVE_NO_MAGICLINKS|RESOLVE_IN_ROOT}, 24) = 5
[pid 1834] close(4) = 0
[pid 1834] fstat(5, {st_mode=S_IFDIR|0755, st_size=80, ...}) = 0
[pid 1834] openat(AT_FDCWD, "/newroot", O_RDONLY|O_NOCTTY|O_CLOEXEC|O_PATH) = 4
[pid 1834] openat2(4, "/", {flags=O_RDONLY|O_DIRECTORY, resolve=RESOLVE_NO_MAGICLINKS|RESOLVE_IN_ROOT}, 24) = 6
[pid 1834] close(4) = 0
[pid 1834] mkdirat(6, ".", 0755) = -1 EEXIST (File exists)
[pid 1834] openat(6, ".", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
[pid 1834] fstat(4, {st_mode=S_IFDIR|0755, st_size=40, ...}) = 0
[pid 1834] readlink("/proc/self/fd/4", "/newroot", 99) = 8
[pid 1834] mount("/proc/self/fd/5", "/proc/self/fd/4", NULL, MS_BIND|MS_REC|MS_SILENT, NULL) = -1 EINVAL (Invalid argument)
[pid 1821] <... read resumed>, "P\0\0\0\17\0\0\0\16\1\0\0\0\0\0\0b\34T\7\1\0\0\0\350\3\0\0\350\3\0\0"..., 135168) = 80
[pid 1821] writev(5, [{iov_base="\20@\1\0\0\0\0\0\16\1\0\0\0\0\0\0", iov_len=16}, {iov_base="\0\0\351\372\342\377\377\307\205\200\373\377\377\10\0\0\0\213\205P\373\377\377\211\205\204\373\377\377\351\300\366"..., iov_len=81920}], 2) = 81936
[pid 1834] write(2, "bwrap: ", 7 <unfinished ...>
bwrap: [pid 1821] read(5 <unfinished ...>
[pid 1834] <... write resumed>) = 7
[pid 1834] write(2, "Can't bind mount / on /", 23Can't bind mount / on /) = 23
[pid 1834] write(2, ": Unable to mount source on dest"..., 39: Unable to mount source on destination) = 39
[pid 1834] write(2, ": Invalid argument", 18: Invalid argument) = 18
...
On Tumbleweed, the comparable section does not contain the “EINVAL” return value and continues with several "mount"s - that would then probably be bubblewrap working its magic?
...
[pid 1698] mount(NULL, "/", NULL, MS_REC|MS_SILENT|MS_SLAVE, NULL) = 0
[pid 1696] <... signalfd4 resumed>) = 3
[pid 1698] mount("tmpfs", "/tmp", "tmpfs", MS_NOSUID|MS_NODEV, NULL) = 0
[pid 1696] poll([{fd=3, events=POLLIN}], 1, -1 <unfinished ...>
[pid 1698] newfstatat(AT_FDCWD, ".", {st_mode=S_IFDIR|0755, st_size=40, ...}, 0) = 0
[pid 1698] newfstatat(AT_FDCWD, "/home/user", {st_mode=S_IFDIR|0755, st_size=40, ...}, 0) = 0
[pid 1698] chdir("/tmp") = 0
[pid 1698] mkdir("newroot", 0755) = 0
[pid 1698] mount("newroot", "newroot", NULL, MS_MGC_VAL|MS_BIND|MS_REC|MS_SILENT, NULL) = 0
[pid 1698] mkdir("oldroot", 0755) = 0
[pid 1698] pivot_root("/tmp", "oldroot") = 0
[pid 1698] chdir("/") = 0
[pid 1698] mkdir("proc", 0755) = 0
[pid 1698] mount("oldroot/proc", "proc", NULL, MS_BIND|MS_REC|MS_SILENT, NULL) = 0
[pid 1698] openat(AT_FDCWD, "/oldroot", O_RDONLY|O_NOCTTY|O_CLOEXEC|O_PATH) = 4
[pid 1698] openat2(4, "/", {flags=O_RDONLY|O_PATH, resolve=RESOLVE_NO_MAGICLINKS|RESOLVE_IN_ROOT}, 24) = 5
[pid 1698] close(4) = 0
[pid 1698] fstat(5, {st_mode=S_IFDIR|0755, st_size=100, ...}) = 0
[pid 1698] openat(AT_FDCWD, "/newroot", O_RDONLY|O_NOCTTY|O_CLOEXEC|O_PATH) = 4
[pid 1698] openat2(4, "/", {flags=O_RDONLY|O_DIRECTORY, resolve=RESOLVE_NO_MAGICLINKS|RESOLVE_IN_ROOT}, 24) = 6
[pid 1698] close(4) = 0
[pid 1698] mkdirat(6, ".", 0755) = -1 EEXIST (File exists)
[pid 1698] openat(6, ".", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
[pid 1698] fstat(4, {st_mode=S_IFDIR|0755, st_size=40, ...}) = 0
[pid 1698] readlink("/proc/self/fd/4", "/newroot", 99) = 8
[pid 1698] mount("/proc/self/fd/5", "/proc/self/fd/4", NULL, MS_BIND|MS_REC|MS_SILENT, NULL) = 0
[pid 1698] openat(3, "self/mountinfo", O_RDONLY|O_CLOEXEC) = 7
[pid 1698] read(7, "361 474 0:72 / /oldroot rw,nodev"..., 4079) = 3996
[pid 1698] read(7, "475 474 0:93 /newroot /newroot r"..., 83) = 83
[pid 1698] read(7, "id=1000,gid=1000,inode64\n543 474"..., 4080) = 3988
[pid 1698] read(7, "", 92) = 0
[pid 1698] close(7) = 0
[pid 1698] mount("none", "/newroot", NULL, MS_NOSUID|MS_NODEV|MS_REMOUNT|MS_BIND|MS_SILENT|MS_RELATIME, NULL) = 0
[pid 1698] mount("none", "/newroot/dev", NULL, MS_NOSUID|MS_NODEV|MS_REMOUNT|MS_BIND|MS_SILENT|MS_RELATIME, NULL) = 0
[pid 1698] mount("none", "/newroot/dev/pts", NULL, MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_REMOUNT|MS_BIND|MS_SILENT|MS_RELATIME, NULL) = 0
[pid 1698] mount("none", "/newroot/dev/console", NULL, MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_REMOUNT|MS_BIND|MS_SILENT|MS_RELATIME, NULL) = 0
[pid 1698] mount("none", "/newroot/dev/tty", NULL, MS_NOSUID|MS_NODEV|MS_REMOUNT|MS_BIND|MS_SILENT, NULL) = 0
[pid 1698] mount("none", "/newroot/dev/null", NULL, MS_NOSUID|MS_NODEV|MS_REMOUNT|MS_BIND|MS_SILENT, NULL) = 0
[pid 1698] mount("none", "/newroot/dev/zero", NULL, MS_NOSUID|MS_NODEV|MS_REMOUNT|MS_BIND|MS_SILENT, NULL) = 0
[pid 1698] mount("none", "/newroot/dev/random", NULL, MS_NOSUID|MS_NODEV|MS_REMOUNT|MS_BIND|MS_SILENT, NULL) = 0
[pid 1698] mount("none", "/newroot/dev/urandom", NULL, MS_NOSUID|MS_NODEV|MS_REMOUNT|MS_BIND|MS_SILENT, NULL) = 0
[pid 1698] mount("none", "/newroot/sys/fs/selinux", NULL, MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_REMOUNT|MS_BIND|MS_SILENT|MS_RELATIME, NULL) = 0
[pid 1698] mount("none", "/newroot/etc/passwd", NULL, MS_NOSUID|MS_NODEV|MS_REMOUNT|MS_BIND|MS_SILENT|MS_RELATIME, NULL) = 0
[pid 1698] mount("none", "/newroot/etc/group", NULL, MS_NOSUID|MS_NODEV|MS_REMOUNT|MS_BIND|MS_SILENT|MS_RELATIME, NULL) = 0
...
Since I can’t reasonably expect anyone to go through 25K lines of logs for me, do you maybe have some tips what I could look out for?
Also, I did an additional experiment. To rule out the arch userland as a cause for problems / incompatablities with leap, I built an apptainer image with latest leap & bubblewrap inside. The behaviour is the same: It works as expected on the tumbleweed host and fails on the leap host.