Re: kbd 2.9.0: build error (under fakeroot(1) environment)
Alexey Gladkov <[email protected]> Wed, 10 Sep 2025 11:59:58 +0200
| Newsgroups | dev.linux.lists.kbd |
|---|---|
| Message-ID | <[email protected]> |
On Tue, Sep 09, 2025 at 11:18:18PM +0200, Steffen Nurpmeso wrote: > Hello. > > Alexey Gladkov wrote in > <[email protected]>: > |On Tue, Sep 09, 2025 at 03:45:33PM +0200, Steffen Nurpmeso wrote: > |> My distribution (CRUX) updated to 2.9.0, and the build failed via > |> > |> cp: failed to preserve ownership for /tmp/.pkgmk/pkg/usr/share/kbd/keym\ > |> aps/i386/qwertz/sr-latin.map.gz: Operation not supported > |> > |> Thing is that this seems to only work for real root user, but that > |> is not who is doing it, really. > | > |cp -a is used in the makefile. The -a means no dereference and preserve > |links and other attributes. This should not be a problem if you have > |the same user. > > GNU coreutils 9.7 cp(1) is of a different opinion: > > $ touch xa > $ ln -s xa xb > $ cp -a xb xc > cp: failed to preserve ownership for xc: Operation not supported No. This is security settings on your system. On my laptop: $ touch xa $ ln -s xa xb $ cp -a xb xc $ ls -la total 8 drwxr-xr-x 2 legion legion 4096 Sep 10 11:30 . drwxr-xr-x 15 legion legion 4096 Sep 10 11:30 .. -rw-r--r-- 1 legion legion 0 Sep 10 11:30 xa lrwxrwxrwx 1 legion legion 2 Sep 10 11:30 xb -> xa lrwxrwxrwx 1 legion legion 2 Sep 10 11:30 xc -> xa $ cp --version | head -1 cp (GNU coreutils) 9.7 > |> Problem is also that the build system uses "set -e", and cp(1) will exit > |> error no matter what (-f etc) after the above. > |> > |> From my superficial BSD-style-simple-filesystem-usage point of > |> view symbolic links have no attributes to preserve, but that > |> sounds dick. Maybe it is a GNU coreutils cp(1) "exaggeration" to > |> say and fail for the above for a symbolic link, as it seems to be > |> only about ownership, not whatever attribute or security context, > |> however, still. > | > |You can try to change "cp -a" by "cp -dPR". Maybe this will help with > |fakeroot. > > Yes, it does. Good. Thanks! https://web.git.kernel.org/pub/scm/linux/kernel/git/legion/kbd.git/commit/?id=db82eb6f86e6c0b8ac4260e88b88d66e1cd7c077 > The CRUX team said (especially first note, yet they not have > committed that yet) [1] > > 16:38 <farkuhar> Regarding stenur's failed build of kbd 2.9.0 > (presumably using fakeroot rather than building as the real > root), it should be enough to insert this line just before > `make`: sed -i "s/cp -ar/cp -r/; s/cp -a/cp /" data/Makefile > > 16:49 <farkuhar> cp(1) is notable for its brevity, saying little > about what the default action regarding symlinks will be, in the > absence of an explicit flag like --no-dereference. In my tests, > however, dropping the -a flag had no ill effects, and the > resulting package kbd#2.9.0-1.pkg.tar.gz had the expected > footprint. > > 20:36 <farkuhar> cp(1p) goes into much more detail, but even the > POSIX programmer's manual offers less than definitive guidance > about what should be done for symbolic links. "If the -R option > was specified ... [and] none of the options -H, -L, nor -P were > specified, it is unspecified which of -H, -L, or -P will be used > as a default." > > 20:40 <farkuhar> Notably absent in the POSIX programmer's > man-page is any indication that cp should behave differently > depending on $UID. So there should be no need to safeguard the > sed command on kbd-2.9.0/data/Makefile behind a test of $UID > = 0, the resulting package will have the correct footprint > regardless of whether fakeroot or real root was used for the > build. > > [1] https://libera.catirclogs.org/crux/2025-09-06# > > |> In data/Makefile.* a lot of work is done after these "cp -a"s, > |> i wonder why beyond $(IGNORE_KEYMAPS) anything that is a symbolic > |> link is not "simply" $(LN_S)d after $(DESTDIR) has been populated, > |> as it is cd(1) entered for work anyway? Ie, some kind of > |> $(SYMLINK_KEYMAPS) or something. > | > |I didn't understand your point. > | > |Among the keymaps, there are symlinks to change the keymap name. > |Previously, when compressing keymaps, symlinks were dereferenced and > |a copy of the keymap appeared instead of the symlink. > > Understandable you want to save that redundancy. > > |I don't want to create symlinks in Makefile at the time of install. This > |is really hard to maintain. > > I understand. > cp -dPr works here, the -p of tar(1) is not with busybox for > example, so > > (cd test; tar -cf - .) | (mkdir t2; cd t2; tar -xf -) > > is not portable, and otherwise a more expensive find(1) iteration > is all that comes to my mind immediately. But since cp -dPr > works, it seems overkill. > > --End of <[email protected]> > > Ciao! > > --steffen > | > |Der Kragenbaer, The moon bear, > |der holt sich munter he cheerfully and one by one > |einen nach dem anderen runter wa.ks himself off > |(By Robert Gernhardt) > -- Rgrds, legion