Description of problem: I was debugging some failures(segfault) in tests with fakeroot related to stat64 It looks like issue are introduced in glibc-2.32.9000-11.fc34 https://koji.fedoraproject.org/koji/buildinfo?buildID=1627018 Its changelog mentioned stat/mknod related changes: - linux: Use INTERNAL_SYSCALL on fstatat{64} - statfs: add missing f_flags assignment - y2038: Remove not used __fstatat_time64 define - Add missing stat/mknod symbol on libc.abilist some ABIs - linux: Move xmknod{at} to compat symbols - linux: Add {f}stat{at} y2038 support - linux: Move {f}xstat{at} to compat symbols - linux: Disentangle fstatat from fxstatat - linux: Implement {l}fstat{at} in terms of fstatat - linux: Move the struct stat{64} to struct_stat.h - Remove mknod wrapper functions, move them to symbols - Remove stat wrapper functions, move them to exported symbols I tried to rebuild fakeroot with latest glibc but unit tests failed Version-Release number of selected component (if applicable): sh$ rpm -q glibc fakeroot glibc-2.32.9000-11.fc34 fakeroot-1.25.3-1.fc34 How reproducible: Deterministic Steps to Reproduce: 1. dnf install -y fedpkg 2. fedpkg clone --anonymous fakeroot 3. cd fakeroot 4. fedpkg build --scratch Actual results: Failed scratch build https://koji.fedoraproject.org/koji/taskinfo?taskID=53849715 Expected results: It should pass in the same way as in f33 https://koji.fedoraproject.org/koji/taskinfo?taskID=53851079 Additional info: make check-TESTS make[2]: Entering directory '/builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/test' make[3]: Entering directory '/builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/test' FAIL: t.chmod_dev PASS: t.cp-a PASS: t.echoarg PASS: t.falsereturn FAIL: t.mknod PASS: t.no_ld_preload PASS: t.no_ld_preload_link PASS: t.option FAIL: t.tar PASS: t.touchinstall PASS: t.truereturn PASS: t.xattr ========================================== fakeroot 1.25.3: test/test-suite.log ========================================== # TOTAL: 12 # PASS: 9 # SKIP: 0 # XFAIL: 0 # FAIL: 3 # XPASS: 0 # ERROR: 0 .. contents:: :depth: 2 FAIL: t.chmod_dev ================= mknod: t.chmod_dev.dir/hda3: Operation not permitted FAIL t.chmod_dev (exit status: 1) FAIL: t.mknod ============= mknod: t.mknod.dir/hda3: Operation not permitted ls: cannot access 't.mknod.dir/hda3': No such file or directory FAIL t.mknod (exit status: 1) FAIL: t.tar =========== tartest: compare-tar: tar files differ: 1,66c1,66 < --------- root/root 0 tar/hello/ < --------- root/root 0 tar/hello/1/ < --------- root/root 0 tar/hello/1289/ < --------- root/root 0 tar/hello/2/ < --------- root/root 0 tar/hello/3/ < --------- root/root 0 tar/hello/4/ < --------- root/root 0 tar/hello/5/ < --------- root/root 0 tar/hello/6/ < --------- root/root 0 tar/hello/fjsdk/ < --------- root/root 0 tar/hello/vn.34.654l./ < rw-r--r-- daemon/root 0 tar/3/3/file < rw-r--r-- daemon/root 0 tar/4/4/file < rw-r--r-- root/root 0 tar/1.file < rw-r--r-- root/root 0 tar/1/1/file < rw-r--r-- root/root 0 tar/1289.file < rw-r--r-- root/root 0 tar/1289/1289/file < rw-r--r-- root/root 0 tar/2.file < rw-r--r-- root/root 0 tar/3.file < rw-r--r-- root/root 0 tar/4.file < rw-r--r-- root/root 0 tar/5.file < rw-r--r-- root/root 0 tar/5/5/file < rw-r--r-- root/root 0 tar/6.file < rw-r--r-- root/root 0 tar/6/6/file < rw-r--r-- root/root 0 tar/fjsdk.file < rw-r--r-- root/root 0 tar/fjsdk/fjsdk/file < rw-r--r-- root/root 0 tar/hello/1/file < rw-r--r-- root/root 0 tar/hello/1289/file < rw-r--r-- root/root 0 tar/hello/2/file < rw-r--r-- root/root 0 tar/hello/3/file < rw-r--r-- root/root 0 tar/hello/4/file < rw-r--r-- root/root 0 tar/hello/5/file < rw-r--r-- root/root 0 tar/hello/6/file < rw-r--r-- root/root 0 tar/hello/fjsdk/file < rw-r--r-- root/root 0 tar/hello/vn.34.654l./file < rw-r--r-- root/root 0 tar/vn.34.654l..file < rw-r--r-- root/root 0 tar/vn.34.654l./vn.34.654l./file < rw-r--r-- root/root 14 tar/hello/hello < rwsr--r-- daemon/sys 0 tar/2/2/file < rwsr-xr-x daemon/sys 0 tar/2/ < rwsr-xr-x daemon/sys 0 tar/2/2/ < rwsr-xr-x daemon/sys 0 tar/2/2/2.hello/ < rwsr-xr-x root/root 0 tar/5/ < rwxr-xr-x daemon/root 0 tar/3/ < rwxr-xr-x daemon/root 0 tar/3/3/ < rwxr-xr-x daemon/root 0 tar/3/3/3.hello/ < rwxr-xr-x daemon/root 0 tar/4/ < rwxr-xr-x daemon/root 0 tar/4/4/ < rwxr-xr-x daemon/root 0 tar/4/4/4.hello/ < rwxr-xr-x root/root 0 tar/ < rwxr-xr-x root/root 0 tar/1/ < rwxr-xr-x root/root 0 tar/1/1/ < rwxr-xr-x root/root 0 tar/1/1/1.hello/ < rwxr-xr-x root/root 0 tar/1289/ < rwxr-xr-x root/root 0 tar/1289/1289/ < rwxr-xr-x root/root 0 tar/1289/1289/1289.hello/ < rwxr-xr-x root/root 0 tar/5/5/ < rwxr-xr-x root/root 0 tar/5/5/5.hello/ < rwxr-xr-x root/root 0 tar/6/ < rwxr-xr-x root/root 0 tar/6/6/ < rwxr-xr-x root/root 0 tar/6/6/6.hello/ < rwxr-xr-x root/root 0 tar/fjsdk/ < rwxr-xr-x root/root 0 tar/fjsdk/fjsdk/ < rwxr-xr-x root/root 0 tar/fjsdk/fjsdk/fjsdk.hello/ < rwxr-xr-x root/root 0 tar/vn.34.654l./ < rwxr-xr-x root/root 0 tar/vn.34.654l./vn.34.654l./ < rwxr-xr-x root/root 0 tar/vn.34.654l./vn.34.654l./vn.34.654l..hello/ --- > rw-r--r-- mockbuild/mock 0 tar/1.file > rw-r--r-- mockbuild/mock 0 tar/1/1/file > rw-r--r-- mockbuild/mock 0 tar/1289.file > rw-r--r-- mockbuild/mock 0 tar/1289/1289/file > rw-r--r-- mockbuild/mock 0 tar/2.file > rw-r--r-- mockbuild/mock 0 tar/3.file > rw-r--r-- mockbuild/mock 0 tar/3/3/file > rw-r--r-- mockbuild/mock 0 tar/4.file > rw-r--r-- mockbuild/mock 0 tar/4/4/file > rw-r--r-- mockbuild/mock 0 tar/5.file > rw-r--r-- mockbuild/mock 0 tar/5/5/file > rw-r--r-- mockbuild/mock 0 tar/6.file > rw-r--r-- mockbuild/mock 0 tar/6/6/file > rw-r--r-- mockbuild/mock 0 tar/fjsdk.file > rw-r--r-- mockbuild/mock 0 tar/fjsdk/fjsdk/file > rw-r--r-- mockbuild/mock 0 tar/hello/1/file > rw-r--r-- mockbuild/mock 0 tar/hello/1289/file > rw-r--r-- mockbuild/mock 0 tar/hello/2/file > rw-r--r-- mockbuild/mock 0 tar/hello/3/file > rw-r--r-- mockbuild/mock 0 tar/hello/4/file > rw-r--r-- mockbuild/mock 0 tar/hello/5/file > rw-r--r-- mockbuild/mock 0 tar/hello/6/file > rw-r--r-- mockbuild/mock 0 tar/hello/fjsdk/file > rw-r--r-- mockbuild/mock 0 tar/hello/vn.34.654l./file > rw-r--r-- mockbuild/mock 0 tar/vn.34.654l..file > rw-r--r-- mockbuild/mock 0 tar/vn.34.654l./vn.34.654l./file > rw-r--r-- mockbuild/mock 14 tar/hello/hello > rwsr--r-- mockbuild/mock 0 tar/2/2/file > rwsr-xr-x mockbuild/mock 0 tar/2/ > rwsr-xr-x mockbuild/mock 0 tar/2/2/ > rwsr-xr-x mockbuild/mock 0 tar/2/2/2.hello/ > rwsr-xr-x mockbuild/mock 0 tar/5/ > rwx------ mockbuild/mock 0 tar/hello/ > rwx------ mockbuild/mock 0 tar/hello/1/ > rwx------ mockbuild/mock 0 tar/hello/1289/ > rwx------ mockbuild/mock 0 tar/hello/2/ > rwx------ mockbuild/mock 0 tar/hello/3/ > rwx------ mockbuild/mock 0 tar/hello/4/ > rwx------ mockbuild/mock 0 tar/hello/5/ > rwx------ mockbuild/mock 0 tar/hello/6/ > rwx------ mockbuild/mock 0 tar/hello/fjsdk/ > rwx------ mockbuild/mock 0 tar/hello/vn.34.654l./ > rwxr-xr-x mockbuild/mock 0 tar/ > rwxr-xr-x mockbuild/mock 0 tar/1/ > rwxr-xr-x mockbuild/mock 0 tar/1/1/ > rwxr-xr-x mockbuild/mock 0 tar/1/1/1.hello/ > rwxr-xr-x mockbuild/mock 0 tar/1289/ > rwxr-xr-x mockbuild/mock 0 tar/1289/1289/ > rwxr-xr-x mockbuild/mock 0 tar/1289/1289/1289.hello/ > rwxr-xr-x mockbuild/mock 0 tar/3/ > rwxr-xr-x mockbuild/mock 0 tar/3/3/ > rwxr-xr-x mockbuild/mock 0 tar/3/3/3.hello/ > rwxr-xr-x mockbuild/mock 0 tar/4/ > rwxr-xr-x mockbuild/mock 0 tar/4/4/ > rwxr-xr-x mockbuild/mock 0 tar/4/4/4.hello/ > rwxr-xr-x mockbuild/mock 0 tar/5/5/ > rwxr-xr-x mockbuild/mock 0 tar/5/5/5.hello/ > rwxr-xr-x mockbuild/mock 0 tar/6/ > rwxr-xr-x mockbuild/mock 0 tar/6/6/ > rwxr-xr-x mockbuild/mock 0 tar/6/6/6.hello/ > rwxr-xr-x mockbuild/mock 0 tar/fjsdk/ > rwxr-xr-x mockbuild/mock 0 tar/fjsdk/fjsdk/ > rwxr-xr-x mockbuild/mock 0 tar/fjsdk/fjsdk/fjsdk.hello/ > rwxr-xr-x mockbuild/mock 0 tar/vn.34.654l./ > rwxr-xr-x mockbuild/mock 0 tar/vn.34.654l./vn.34.654l./ > rwxr-xr-x mockbuild/mock 0 tar/vn.34.654l./vn.34.654l./vn.34.654l..hello/ FAIL t.tar (exit status: 1) ============================================================================ Testsuite summary for fakeroot 1.25.3 ============================================================================ # TOTAL: 12 # PASS: 9 # SKIP: 0 # XFAIL: 0 # FAIL: 3 # XPASS: 0 # ERROR: 0 ============================================================================ See test/test-suite.log Please report to clint ============================================================================ make[3]: Leaving directory '/builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/test' make[2]: Leaving directory '/builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/test' make[1]: Leaving directory '/builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/test' make: Leaving directory '/builddir/build/BUILD/fakeroot-1.25.3/obj-sysv' make[3]: *** [Makefile:548: test-suite.log] Error 1 make[2]: *** [Makefile:656: check-TESTS] Error 2 make[1]: *** [Makefile:807: check-am] Error 2 make: *** [Makefile:687: check-recursive] Error 1 error: Bad exit status from /var/tmp/rpm-tmp.hhkhLU (%check) Bad exit status from /var/tmp/rpm-tmp.hhkhLU (%check)
configure on f33 says: checking for statx... yes checking for __xstat... yes checking for __fxstat... yes checking for __lxstat... yes checking for __fxstatat... yes checking for __xstat64... yes checking for __fxstat64... yes checking for __lxstat64... yes checking for __fxstatat64... yes checking for __xmknod... yes checking for __xmknodat... yes configure on rawhide says: checking for statx... yes checking for __xstat... no checking for _xstat... no checking for __stat13... no checking for stat... yes checking for __fxstat... no checking for _fxstat... no checking for __fstat13... no checking for fstat... yes checking for __lxstat... no checking for _lxstat... no checking for __lstat13... no checking for lstat... yes checking for __fxstatat... no checking for _fxstatat... no checking for __fstatat13... no checking for fstatat... (cached) yes checking for __xstat64... no checking for _xstat64... no checking for __stat6413... no checking for stat64... yes checking for __fxstat64... no checking for _fxstat64... no checking for __fstat6413... no checking for fstat64... yes checking for __lxstat64... no checking for _lxstat64... no checking for __lstat6413... no checking for lstat64... yes checking for __fxstatat64... no checking for _fxstatat64... no checking for __fstatat6413... no checking for fstatat64... yes checking for __xmknod... no checking for _xmknod... no checking for __mknod13... no checking for mknod... yes checking for __xmknodat... no checking for _xmknodat... no checking for __mknodat13... no checking for mknodat... (cached) yes
FWIW, the last koschei build (https://koji.fedoraproject.org/koji/taskinfo?taskID=53672713) was done with glibc-2.32.9000-10.fc34 and the tests passed. That seems to confirm that revision 11 breaks fakeroot. Can you provide config.log from the failing build? Can you bisect the glibc commit that introduced this breakage? From the spec file, we can assume the following: 0f09154c64005e78b61484ae87b5ea2028051ea0 bad 72d36ffd7db55ae599f4c77feb0eae25a0f3714e good I took a quick look at the commits between the two and there are multiple commits dealing with *stat*. I'm not familiar with the code enough to make a guess which one was the culprit.
According to https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/UHTGT3TQ3I6RHOVC6MARZYNNTN47AO24/ , -12.fc34 build should fix it.
I tried scratch build with 2.32.9000-12.fc34 and it still fails but ATM sooner (at compile time) https://koji.fedoraproject.org/koji/taskinfo?taskID=53961483 In file included from /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../communicate.h:20, from /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c:60: /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c: In function 'chown': /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c:99:40: error: '_STAT_VER' undeclared (first use in this function) 99 | #define INT_NEXT_STAT(a,b) NEXT_STAT64(_STAT_VER,a,b) | ^~~~~~~~~ ./fakerootconfig.h:9:43: note: in definition of macro 'NEXT_STAT64' 9 | #define NEXT_STAT64(a,b,c) next___xstat64(a,b,c) | ^ /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c:811:5: note: in expansion of macro 'INT_NEXT_STAT' 811 | r=INT_NEXT_STAT(path, &st); | ^~~~~~~~~~~~~ /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c:99:40: note: each undeclared identifier is reported only once for each function it appears in 99 | #define INT_NEXT_STAT(a,b) NEXT_STAT64(_STAT_VER,a,b) | ^~~~~~~~~ ./fakerootconfig.h:9:43: note: in definition of macro 'NEXT_STAT64' 9 | #define NEXT_STAT64(a,b,c) next___xstat64(a,b,c) | ^ /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c:811:5: note: in expansion of macro 'INT_NEXT_STAT' 811 | r=INT_NEXT_STAT(path, &st); | ^~~~~~~~~~~~~ /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c: In function 'lchown': /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c:100:42: error: '_STAT_VER' undeclared (first use in this function) 100 | #define INT_NEXT_LSTAT(a,b) NEXT_LSTAT64(_STAT_VER,a,b) | ^~~~~~~~~ ./fakerootconfig.h:13:45: note: in definition of macro 'NEXT_LSTAT64' 13 | #define NEXT_LSTAT64(a,b,c) next___lxstat64(a,b,c) | ^ /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c:843:5: note: in expansion of macro 'INT_NEXT_LSTAT' 843 | r=INT_NEXT_LSTAT(path, &st); | ^~~~~~~~~~~~~~ /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c: In function 'fchown': /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c:101:42: error: '_STAT_VER' undeclared (first use in this function) 101 | #define INT_NEXT_FSTAT(a,b) NEXT_FSTAT64(_STAT_VER,a,b) | ^~~~~~~~~ ./fakerootconfig.h:11:45: note: in definition of macro 'NEXT_FSTAT64' 11 | #define NEXT_FSTAT64(a,b,c) next___fxstat64(a,b,c) | ^ /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c:864:5: note: in expansion of macro 'INT_NEXT_FSTAT' 864 | r=INT_NEXT_FSTAT(fd, &st); | ^~~~~~~~~~~~~~ /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c: In function 'fchownat': /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c:102:50: error: '_STAT_VER' undeclared (first use in this function) 102 | #define INT_NEXT_FSTATAT(a,b,c,d) NEXT_FSTATAT64(_STAT_VER,a,b,c,d) | ^~~~~~~~~ ./fakerootconfig.h:15:53: note: in definition of macro 'NEXT_FSTATAT64' 15 | #define NEXT_FSTATAT64(a,b,c,d,e) next___fxstatat64(a,b,c,d,e) | ^ /builddir/build/BUILD/fakeroot-1.25.3/obj-sysv/../libfakeroot.c:890:5: note: in expansion of macro 'INT_NEXT_FSTATAT' 890 | r=INT_NEXT_FSTATAT(dir_fd, path, &st, (flags & (AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH | AT_NO_AUTOMOUNT))); | ^~~~~~~~~~~~~~~~
FYI, I now see the _STAT_VER undeclared in fakechroot as well, bug 1901049.
Dear Maintainer, your package has an open Fails To Build From Source bug for Fedora 34. Action is required from you. If you can fix your package to build, perform a build in koji, and either create an update in bodhi, or close this bug without creating an update, if updating is not appropriate [1]. If you are working on a fix, set the status to ASSIGNED to acknowledge this. If you have already fixed this issue, please close this Bugzilla report. Following the policy for such packages [2], your package will be orphaned if this bug remains in NEW state more than 8 weeks (not sooner than 2020-12-15). A week before the mass branching of Fedora 35 according to the schedule [3], any packages not successfully rebuilt at least on Fedora 33 will be retired regardless of the status of this bug. [1] https://docs.fedoraproject.org/en-US/fesco/Updates_Policy/ [2] https://docs.fedoraproject.org/en-US/fesco/Fails_to_build_from_source_Fails_to_install/ [3] https://fedorapeople.org/groups/schedule/f-35/f-35-key-tasks.html
Patch[1] by Jan Pazdziora makes it build, but the tests still fail. Looks like it won't be easy to fix. [1] https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/SMQ3RYXEYTVZH6PLQMKNB3NM4XLPMNZO/
Is there any progress here? Do you need a help from glibc folks? (I can see Florian is already in CC)
There isn't much assistance we can provide from the glibc side. fakeroot needs to be enhanced to intercept all new glibc interfaces. The build failure merely obscures the larger issues.
No progress, sorry. I've decided to orphan the package as I don't have time to take care of this.
This package has changed maintainer in Fedora. Reassigning to the new maintainer of this component.
Florian, How can we easily and reliably obtain list of necessary interfaces for intercept?
(In reply to Lukas Slebodnik from comment #12) > How can we easily and reliably obtain list of necessary interfaces for > intercept? You need to read the glibc sources to figure out the dependencies. To find all the newly added stat symbols, you could look at the *.abilist files and watch out for stat functions with a GLIBC_2.33 symbol version. Symbol interposition is not the right way to do this. Maybe you can use namespaces, ptrace, seccomp, or FUSE instead. fakeroot might still be salvageable at this point, but fakechroot is much harder because it has to intercept everything that calls open, which is not practical at all.
This bug appears to have been reported against 'rawhide' during the Fedora 34 development cycle. Changing version to 34.
FYI, I spent some time fixing fakeroot with glibc 2.33 and submitted my changes upstream: https://salsa.debian.org/clint/fakeroot/-/merge_requests/10
(In reply to Ilya Lipnitskiy from comment #16) > FYI, I spent some time fixing fakeroot with glibc 2.33 and submitted my > changes upstream: > https://salsa.debian.org/clint/fakeroot/-/merge_requests/10 I had applied your patches but still got the same 3 test failed [1] however build in rawhide [2] almost pass except on s390x ... this kind of operation not permitted seems to me another error. [1] FAIL: t.chmod_dev ================= mknod: t.chmod_dev.dir/hda3: Operation not permitted FAIL t.chmod_dev (exit status: 1) FAIL: t.mknod ============= mknod: t.mknod.dir/hda3: Operation not permitted ls: cannot access 't.mknod.dir/hda3': No such file or directory FAIL t.mknod (exit status: 1) [2] https://koji.fedoraproject.org/koji/taskinfo?taskID=62109658
(In reply to Sergio Basto from comment #17) > I had applied your patches but still got the same 3 test failed [1] Be sure to fully clean the repo after applying patches, maybe that's why it didn't work for you? > however build in rawhide [2] almost pass except on s390x ... Will take a look at this, but not sure if I can repro easily..
(In reply to Sergio Basto from comment #17) > build in rawhide [2] almost pass except on s390x ... Could you try taking out the "OS X portability" patch and see if that's better? There are reports of that patch causing failure on ppc64le [0] [0] https://salsa.debian.org/clint/fakeroot/-/merge_requests/11#note_228319
(In reply to Ilya Lipnitskiy from comment #18) > (In reply to Sergio Basto from comment #17) > > I had applied your patches but still got the same 3 test failed [1] > Be sure to fully clean the repo after applying patches, maybe that's why it > didn't work for you? > > > however build in rawhide [2] almost pass except on s390x ... > Will take a look at this, but not sure if I can repro easily.. no luck , tested without "OS X portability" Rawhide: https://koji.fedoraproject.org/koji/taskinfo?taskID=62150839 F34: https://koji.fedoraproject.org/koji/taskinfo?taskID=62151374
(In reply to Sergio Basto from comment #17) > build in rawhide [2] almost pass except on s390x ... You may want to try with new STAT_VER changes for different architectures. https://salsa.debian.org/clint/fakeroot/-/merge_requests/12 #elif defined (__powerpc__) && __WORDSIZE == 64 #define _STAT_VER 1 #elif defined (__riscv) && __riscv_xlen==64 #define _STAT_VER 0 #elif defined (__s390x__) #define _STAT_VER 1
(In reply to Ilya Lipnitskiy from comment #21) > (In reply to Sergio Basto from comment #17) > > build in rawhide [2] almost pass except on s390x ... > You may want to try with new STAT_VER changes for different architectures. > https://salsa.debian.org/clint/fakeroot/-/merge_requests/12 > > #elif defined (__powerpc__) && __WORDSIZE == 64 > #define _STAT_VER 1 > #elif defined (__riscv) && __riscv_xlen==64 > #define _STAT_VER 0 > #elif defined (__s390x__) > #define _STAT_VER 1 thank you , it built on F35 [1] , with glibc 2.33.9000 (2.34 alfa or beta something) but doesn't build on F34 glibc 2.32.9000 (2.33 alfa or beta something) https://koji.fedoraproject.org/koji/packageinfo?packageID=1704
The Fedora 34 build (checked on i686) does not interpose mknod: # eu-readelf --symbols=.dynsym /bin/mknod ./obj-sysv/.libs/libfakeroot.so | grep mknod 43: 00000000 0 FUNC GLOBAL DEFAULT UNDEF mknod (5) 77: 0000f340 4 OBJECT GLOBAL DEFAULT 23 next___xmknodat 86: 0000f344 4 OBJECT GLOBAL DEFAULT 23 next___xmknod 173: 00007ee0 244 FUNC GLOBAL DEFAULT 13 __xmknodat 193: 00004f00 84 FUNC GLOBAL DEFAULT 13 tmp___xmknod 219: 00004f60 116 FUNC GLOBAL DEFAULT 13 tmp___xmknodat 248: 00007df0 228 FUNC GLOBAL DEFAULT 13 __xmknod coreutils-8.32-18.fc34.i686 uses mknod: # eu-readelf --symbols=.dynsym /bin/mknod | grep mknod /bin/mknod: 43: 00000000 0 FUNC GLOBAL DEFAULT UNDEF mknod (5) So the call goes straight to glibc and the kernel, without interception. I haven't checked what happens on rawhide. It could be that coreutils is built differently there, or that mknod is permitted in the build chroot there.
Coreutils is the same on F34 and F35 DEBUG util.py:446: coreutils x86_64 8.32-18.fc34 build 1.1 M DEBUG util.py:446: bash x86_64 5.1.4-1.fc35 build 1.7 M DEBUG util.py:446: bzip2 x86_64 1.0.8-6.fc34 build 53 k DEBUG util.py:446: coreutils x86_64 8.32-18.fc34 build 1.1 M
fakeroot only intercepts new symbols (like mknod) when the following is true: #if defined(__GLIBC__) && __GLIBC_PREREQ(2,33) If it's false, only __xmknod will be intercepted. It is surprising to see F34 (which is pre 2.33 glibc, right?) using mknod and not __xmknod.
(In reply to Ilya Lipnitskiy from comment #25) > fakeroot only intercepts new symbols (like mknod) when the following is true: > #if defined(__GLIBC__) && __GLIBC_PREREQ(2,33) > > If it's false, only __xmknod will be intercepted. > > It is surprising to see F34 (which is pre 2.33 glibc, right?) using mknod > and not __xmknod. That its , only on 2021-02-19, fweimer updated to glibc 2.33 upstream release. Fixed, now I got the same problem with fakechroot , bug #1901049 , if you help me , I will be grateful. Thank you.
(In reply to Sergio Basto from comment #26) > (In reply to Ilya Lipnitskiy from comment #25) > > fakeroot only intercepts new symbols (like mknod) when the following is true: > > #if defined(__GLIBC__) && __GLIBC_PREREQ(2,33) > > > > If it's false, only __xmknod will be intercepted. > > > > It is surprising to see F34 (which is pre 2.33 glibc, right?) using mknod > > and not __xmknod. > > That its , only on 2021-02-19, fweimer updated to glibc 2.33 upstream > release. That was basically a version number change only. If I read the records correctly, the mknod change landed in glibc-2.32.9000-11.fc34 back in October. However, programs need to be rebuilt before they pick up mknod. Before that, they keep using __xmknod, so there is a delay until the change becomes visible at the symbol level.
(In reply to Florian Weimer from comment #27) > However, programs need to be rebuilt before they pick up mknod. Latest fakeroot intercepts both mknod and __xmknod with glibc 2.33, so no rebuild should be required to make it work with fakeroot. Maybe the macro check needs to be more elaborate, but since Fedora is okay now it seems we are done here (for fakeroot at least)