This may be related to #848606 comment 2 #848606#c2 to relocate cursors to the icons directory. Emerge error: >>> Messages generated by process 2449 on 2022-07-27 16:39:36 MDT for package x11-themes/gentoo-xcursors-0.3.2-r2: ERROR: preinst Installation of a symlink is blocked by a directory: '/usr/share/cursors/xorg-x11/gentoo' This symlink will be merged with a different name: '/usr/share/cursors/xorg-x11/gentoo.backup.0000' Installation of a symlink is blocked by a directory: '/usr/share/cursors/xorg-x11/gentoo-blue' This symlink will be merged with a different name: '/usr/share/cursors/xorg-x11/gentoo-blue.backup.0000' Installation of a symlink is blocked by a directory: '/usr/share/cursors/xorg-x11/gentoo-silver' This symlink will be merged with a different name: '/usr/share/cursors/xorg-x11/gentoo-silver.backup.0000' Reproducible: Always Actual Results: The other bug references Adwaita as an example, so I'm including how it exists on my system (other files excluded): $ ls -l /usr/share/cursors/xorg-x11/ total 28 lrwxrwxrwx 1 root root 43 Jun 8 17:42 Adwaita -> ../../../../usr/share/icons/Adwaita/cursors drwxr-xr-x 2 root root 4096 Jul 27 16:39 gentoo lrwxrwxrwx 1 root root 18 Jul 27 16:38 gentoo.backup.0000 -> ../../icons/gentoo drwxr-xr-x 2 root root 4096 Jul 27 16:39 gentoo-blue lrwxrwxrwx 1 root root 23 Jul 27 16:38 gentoo-blue.backup.0000 -> ../../icons/gentoo-blue drwxr-xr-x 2 root root 4096 Jul 27 16:39 gentoo-silver lrwxrwxrwx 1 root root 25 Jul 27 16:38 gentoo-silver.backup.0000 -> ../../icons/gentoo-silver $ ls -l /usr/share/cursors/xorg-x11/gentoo-blue.backup.0000/ total 4 drwxr-xr-x 2 root root 4096 Jul 27 16:39 cursors Expected Results: I would expect the path to look either like the existing Adwaita link, or perhaps: gentoo-blue -> ../../icons/gentoo-blue/cursors Portage 3.0.30 (python 3.10.5-final-0, default/linux/amd64/17.1/desktop, gcc-11.3.0, glibc-2.34-r13, 4.19.250-gentoo x86_64) ================================================================= System uname: Linux-4.19.250-gentoo-x86_64-AMD_Phenom-tm-_II_X4_965_Processor-with-glibc2.34 KiB Mem: 16400108 total, 11871308 free KiB Swap: 805294076 total, 805294076 free Timestamp of repository gentoo: Wed, 27 Jul 2022 13:00:01 +0000 Head commit of repository gentoo: b721d539f385e781dc8a8583e0c832551bb6b700 sh bash 5.1_p16 ld GNU ld (Gentoo 2.38 p4) 2.38 app-misc/pax-utils: 1.3.4::gentoo app-shells/bash: 5.1_p16::gentoo dev-lang/perl: 5.34.1-r3::gentoo dev-lang/python: 2.7.18_p15::gentoo, 3.8.13_p2::gentoo, 3.10.5::gentoo dev-lang/rust-bin: 1.62.1::gentoo dev-util/cmake: 3.22.4::gentoo dev-util/meson: 0.62.2::gentoo sys-apps/baselayout: 2.8::gentoo sys-apps/openrc: 0.28-r1::gentoo-local sys-apps/sandbox: 2.29::gentoo sys-devel/autoconf: 2.13-r2::gentoo, 2.71-r1::gentoo sys-devel/automake: 1.16.5::gentoo sys-devel/binutils: 2.38-r2::gentoo sys-devel/binutils-config: 5.4.1::gentoo sys-devel/clang: 14.0.4::gentoo sys-devel/gcc: 11.3.0::gentoo sys-devel/gcc-config: 2.5-r1::gentoo sys-devel/libtool: 2.4.7::gentoo sys-devel/lld: 14.0.4::gentoo sys-devel/llvm: 14.0.4::gentoo sys-devel/make: 4.3::gentoo sys-kernel/linux-headers: 5.15-r3::gentoo (virtual/os-headers) sys-libs/glibc: 2.34-r13::gentoo Repositories: gentoo location: /var/repos/gentoo sync-type: rsync sync-uri: rsync://rsync.gentoo.org/gentoo-portage priority: -1000 sync-rsync-verify-metamanifest: no sync-rsync-verify-max-age: 24 sync-rsync-verify-jobs: 1 sync-rsync-extra-opts: gentoo-local location: /var/repos/gentoo-local masters: gentoo priority: 10 local location: /var/repos/local masters: gentoo priority: 10 Installed sets: @i3-select ACCEPT_KEYWORDS="amd64" ACCEPT_LICENSE="-@EULA -@KILL_WITH_FIRE -@FSF-3 -@FSF-3-LIKE @TOLERATE @ALLOW @DOCUMENTATION" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-mtune=generic -O2 -pipe" CHOST="x86_64-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo" CXXFLAGS="-mtune=generic -O2 -pipe" DISTDIR="/var/repos/distfiles" EMERGE_DEFAULT_OPTS="--jobs=11 --load-average=3.0 --autounmask n" ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR" FCFLAGS="-mtune=generic -O2 -pipe" FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs buildpkg buildpkg-live compressdebug config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync multilib-strict network-sandbox news parallel-fetch parallel-install pid-sandbox preserve-libs protect-owned qa-unresolved-soname-deps sandbox sfperms splitdebug strict unknown-features-filter unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr" FFLAGS="-mtune=generic -O2 -pipe" GENTOO_MIRRORS="http://distfiles.gentoo.org" LANG="en_US.utf8" LDFLAGS="-Wl,-O1 -Wl,--as-needed" MAKEOPTS="-j3 -l3" PKGDIR="/var/repos/binpkgs" PORTAGE_BINHOST="http://10.1.1.247/binpkgs" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git" PORTAGE_TMPDIR="/var/tmp/tmpfs" SHELL="/bin/bash" USE="X a52 aac acl acpi alsa amd64 branding bzip2 cairo cdda cli crypt dri dts dvdr encode exif flac fortran gdbm gif gui iconv icu jpeg lcms libglvnd libnotify libtirpc mad mng mp3 mp4 mpeg multilib ncurses nls nptl ogg opengl openmp pam pango pcre pdf png ppds readline seccomp spell split-usr ssl startup-notification svg tiff truetype udev udisks unicode upower usb vorbis x264 xattr xcb xkb xml xv xvid zlib" ABI_X86="64" ADA_TARGET="gnat_2020" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="karbon sheets words" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="mmx mmxext sse sse2" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock greis isync itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 timing tsip tripmate tnt ublox ubx" INPUT_DEVICES="libinput" KERNEL="linux" L10N="en en-US" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LUA_SINGLE_TARGET="lua5-1" LUA_TARGETS="lua5-1" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php7-4 php8-0" POSTGRES_TARGETS="postgres12 postgres13" PYTHON_SINGLE_TARGET="python3_10" PYTHON_TARGETS="python3_10" RUBY_TARGETS="ruby27" USERLAND="GNU" VIDEO_CARDS="intel i965 iris" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq proto steal rawnat logmark ipmark dhcpmac delude chaos account" Unset: ADDR2LINE, AR, ARFLAGS, AS, ASFLAGS, CC, CCLD, CONFIG_SHELL, CPP, CPPFLAGS, CTARGET, CXX, CXXFILT, ELFEDIT, EXTRA_ECONF, F77FLAGS, FC, GCOV, GPROF, INSTALL_MASK, LC_ALL, LD, LEX, LFLAGS, LIBTOOL, LINGUAS, MAKE, MAKEFLAGS, NM, OBJCOPY, OBJDUMP, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, RANLIB, READELF, RUSTFLAGS, SIZE, STRINGS, STRIP, YACC, YFLAGS
The directories under /usr/share/cursors/xorg-x11/ should contain a directory named “cursors”, according to x11-themes/xcursor-themes and x11-themes/comix-xcursors. So the symlink seems to be correct, unless the other packages are wrong too. It would seem that Adwaita points to the wrong location? I could reproduce the blocked symlink installation problem and will investigate.
Hoping to be of help here since I feel kind of responsible given my earlier bug... I believe what's happening is due to upgrading in-place, while as I reported testing in https://bugs.gentoo.org/848606#c2 , I did an unmerge of the old version first, thereby testing a clean install, not an upgrade. In hindsight I should have tested both a clean install, and after unmerging that and remerging the earlier package, an upgrade. I /thought/ that fix was easier than it should be. Now I know why. Anyway... (In reply to Peter Penkala from comment #0) > ERROR: preinst > > Installation of a symlink is blocked by a directory: > '/usr/share/cursors/xorg-x11/gentoo' > This symlink will be merged with a different name: > '/usr/share/cursors/xorg-x11/gentoo.backup.0000' (Listing just the first of three, one for each sub-theme.) That's going to be while the existing package dirs are still there, because in the upgrade case, the new package is installed first, with non-duplicated bits of the old one only removed afterward. (This order is to prevent missing critical functionality during the would-be gap if done in reverse, when core packages such as grep and coreutils are upgraded. Unfortunately it complicates dir-to-symlink upgrade cases such as this one.) > Actual Results: > The other bug references Adwaita as an example, so I'm including how it > exists on my system (other files excluded): > $ ls -l /usr/share/cursors/xorg-x11/ > total 28 > lrwxrwxrwx 1 root root 43 Jun 8 17:42 Adwaita -> > ../../../../usr/share/icons/Adwaita/cursors Relative path backs up to root (/), path from there thru icons/theme to its cursors subdir. > drwxr-xr-x 2 root root 4096 Jul 27 16:39 gentoo > lrwxrwxrwx 1 root root 18 Jul 27 16:38 gentoo.backup.0000 -> > ../../icons/gentoo Relative path backs up to /usr/share, path from there to icons/theme itself (not its cursors subdir). AFAIK they're both relative and backing up the extra two elements shouldn't be an issue. (This was the bit I originally focused on but it's gotta be a rabbit trail to nowhere.) The trailing (cursors/theme/)cursors subdir bit (which it seems the focus was on but for me), *could* be an issue, but I don't believe it's the issue here. (The issue would be one of whether a search into the gentoo-specific /usr/share/cursors/ recurses from theme into theme/cursors subdirs or not. With examples of both evidently it did, but AFAIK that's irrelevant from our dir-blocking-symlink-error perspective.) And just to eliminate another possible source of confusion that at least I kept trying to rabbit-trail into, keep in mind that we're linking from the gentoo-specific /usr/share/cursors location to the standard /usr/share/icons location, two different subdirs, so it's not a self-referencial symlink looping issue either. > $ ls -l /usr/share/cursors/xorg-x11/gentoo-blue.backup.0000/ > total 4 > drwxr-xr-x 2 root root 4096 Jul 27 16:39 cursors > > Expected Results: > I would expect the path to look either like the existing Adwaita link, or > perhaps: > gentoo-blue -> ../../icons/gentoo-blue/cursors Again, I /think/ that's a rabbit-trail (tho different from the ones I kept trying to go down, this symlink-tracing stuff can be maddening, so rabbit-trailing in one way or another is entirely understandable!). I believe the problem here, as I said, is with the upgrade path, as opposed to a clean-install path (which from my testing works so an unmerge/clean-merge should be a practical workaround until the bug is fixed). Assuming that, then, a hacky solution might involve testing for the upgrade case and force-removing the existing dirs so they don't interfere with the upgrade, but there's likely a less hacky "proper" way to do it as well. Have any other theme packages already dealt with this, providing a pattern we can follow?
Related to bug 834600, I think.
(In reply to tastytea from comment #1) > The directories under /usr/share/cursors/xorg-x11/ should contain a directory > named “cursors”, according to x11-themes/xcursor-themes and > x11-themes/comix-xcursors. So the symlink seems to be correct, unless the > other > packages are wrong too. It would seem that Adwaita points to the wrong > location? > > I could reproduce the blocked symlink installation problem and will > investigate. I very well may not understand where the symlinks were supposed to point. After reviewing your response, the symlink does work, but then the block is confusing. $ ls -1d ../../icons/gentoo/cursors ../../icons/gentoo/cursors If I understand your reference, your saying there should be a cursors under each "theme" (?) directory, as in /usr/share/cursors/xorg-x11/<directory>/cursors I can confirm that exists: $ find /usr/share/cursors/xorg-x11/ -type d -name cursors /usr/share/cursors/xorg-x11/gentoo/cursors /usr/share/cursors/xorg-x11/gentoo-blue/cursors /usr/share/cursors/xorg-x11/redglass/cursors /usr/share/cursors/xorg-x11/gentoo-silver/cursors /usr/share/cursors/xorg-x11/handhelds/cursors /usr/share/cursors/xorg-x11/whiteglass/cursors /usr/share/cursors/xorg-x11/DMZ-White/cursors Adwaita does not because it is a symlink. It does however point to the "icons" theme cusor directory. # ls -ld /usr/share/cursors/xorg-x11/Adwaita lrwxrwxrwx 1 root root 43 Jun 8 17:42 /usr/share/cursors/xorg-x11/Adwaita -> ../../../../usr/share/icons/Adwaita/cursors Or, if you meant /usr/share/icons/<directory>/cursors those too exist: $ find /usr/share/icons/ -type d -name cursors /usr/share/icons/gentoo/cursors /usr/share/icons/gentoo-blue/cursors /usr/share/icons/gentoo-silver/cursors /usr/share/icons/Adwaita/cursors Let me know if I can provide anything else, thanks!
(In reply to Duncan from comment #2) > Have any other theme packages already dealt with this, providing a pattern > we can follow? First place I looked... the adwaita-icon-theme-42.0_p2 ebuild (it's not in the older 3.32.0): pkg_preinst() { # Needed until bug #834600 is solved if [[ -d "${EROOT}"/usr/share/cursors/xorg-x11/Adwaita ]] ; then rm -r "${EROOT}"/usr/share/cursors/xorg-x11/Adwaita || die fi } Bug #834600 is only from March of this year (2022) and has to do with portage not (yet) being able to handle replacing dirs with symlinks (or the reverse, symlinks with dirs), even when owned by a previous version of the same package in the upgrade case (where overwrite should be reasonably safe). And its comment 2 https://bugs.gentoo.org/834600#c2 mentions exactly the hacky solution above, removal in pkg_preinst. Tho a slightly safer version would test that it's an upgrade/downgrade case (${REPLACING_VERSIONS}) before doing the removal. Maybe something like (just in case, signed-off-by: John Duncan): pkg_preinst() { # Needed until bug #834600 is solved [[ ${REPLACING_VERSIONS} ]] && { GENTOOCURSORS="${EROOT}/usr/share/cursors/xorg-x11" if [[ -d "${GENTOOCURSORS}/gentoo" ]] ; then rm -r "${GENTOOCURSORS}/gentoo" || die fi if [[ -d "${GENTOOCURSORS}/gentoo-blue" ]] ; then rm -r "${GENTOOCURSORS}/gentoo-blue" || die fi if [[ -d "${GENTOOCURSORS}/gentoo-silver" ]] ; then rm -r "${GENTOOCURSORS}/gentoo-silver" || die fi fi }
(In reply to Duncan from comment #5) > pkg_preinst() { > # Needed until bug #834600 is solved > [[ ${REPLACING_VERSIONS} ]] && { > GENTOOCURSORS="${EROOT}/usr/share/cursors/xorg-x11" > if [[ -d "${GENTOOCURSORS}/gentoo" ]] ; then > rm -r "${GENTOOCURSORS}/gentoo" || die > fi > if [[ -d "${GENTOOCURSORS}/gentoo-blue" ]] ; then > rm -r "${GENTOOCURSORS}/gentoo-blue" || die > fi > if [[ -d "${GENTOOCURSORS}/gentoo-silver" ]] ; then > rm -r "${GENTOOCURSORS}/gentoo-silver" || die > fi > fi > } Oops. That last fi should be }
(In reply to Peter Penkala from comment #4) > If I understand your reference, your saying there should be a cursors under > each "theme" (?) directory, as in > /usr/share/cursors/xorg-x11/<directory>/cursors Yes, every cursor theme but Adwaita seems to use this layout. > Adwaita does not because it is a symlink. It does however point to the > "icons" theme cusor directory. > # ls -ld /usr/share/cursors/xorg-x11/Adwaita > lrwxrwxrwx 1 root root 43 Jun 8 17:42 /usr/share/cursors/xorg-x11/Adwaita > -> ../../../../usr/share/icons/Adwaita/cursors From <https://www.x.org/releases/X11R7.7/doc/man/man3/Xcursor.3.xhtml>: > Xcursor (mostly) follows the freedesktop.org spec for theming icons. The > default search path it uses is ~/.icons, /usr/share/icons, /usr/share/pixmaps. > Within each of these directories, it searches for a directory using the theme > name. Within the theme directory, it looks for cursor files in the ’cursors’ > subdirectory. It uses the first cursor file found along the path. Since in Gentoo the default search path is /usr/share/cursors/xorg-x11 (`pkg-config --variable=icondir xcursor`), /usr/share/cursors/xorg-x11/{Adwaita,gentoo}/cursors should exist IMO. On the other hand, “It uses the first cursor file found along the path.” could be read as: It searches in the theme directory for cursor files and, if nothing was found, tries the cursor subdirectory. So either the Adwaita path is wrong or both Adwaita's and gentoo-xcursors's path is right. Having the cursors in <xcursor-path>/<theme>/cursors seems to be the safest.
> Keywords: PullRequest > See Also: https://github.com/gentoo/gentoo/pull/26651 The failed-upgrade/backup symlinks detail is nice. =:^)
The bug has been closed via the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=477015c0b557b557c8cd527b93fd5ba8d6b42000 commit 477015c0b557b557c8cd527b93fd5ba8d6b42000 Author: Ronny (tastytea) Gutbrod <gentoo@tastytea.de> AuthorDate: 2022-07-29 11:21:06 +0000 Commit: Sam James <sam@gentoo.org> CommitDate: 2022-07-30 23:22:29 +0000 x11-themes/gentoo-xcursors: fix blocked symlink installation A directory was replaced by a symlink but that does not work due to bug #834600. Straight to stable since the broken ebuild landed in stable and the package isn't compiling anything. Closes: https://bugs.gentoo.org/861785 Co-developed-by: John Duncan Signed-off-by: Ronny (tastytea) Gutbrod <gentoo@tastytea.de> Signed-off-by: Sam James <sam@gentoo.org> .../gentoo-xcursors-0.3.2-r3.ebuild | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+)
This is only informational feedback. The upgrade produced these results with no errors: $ ls -l /usr/share/cursors/xorg-x11/ |grep gentoo lrwxrwxrwx 1 root root 18 Jul 31 20:50 gentoo -> ../../icons/gentoo lrwxrwxrwx 1 root root 18 Jul 28 21:06 gentoo.backup.0000 -> ../../icons/gentoo lrwxrwxrwx 1 root root 23 Jul 31 20:50 gentoo-blue -> ../../icons/gentoo-blue lrwxrwxrwx 1 root root 23 Jul 28 21:06 gentoo-blue.backup.0000 -> ../../icons/gentoo-blue lrwxrwxrwx 1 root root 25 Jul 31 20:50 gentoo-silver -> ../../icons/gentoo-silver lrwxrwxrwx 1 root root 25 Jul 28 21:06 gentoo-silver.backup.0000 -> ../../icons/gentoo-silver qfile reports no ownership of the "backup" directories. After uninstalling, they remain as dead links. Cleaning up the dead links and reinstalling the new package produces the following, which looks more like what I expected from the upgrade process: $ ls -l /usr/share/cursors/xorg-x11/ |grep gentoo lrwxrwxrwx 1 root root 18 Jul 31 21:03 gentoo -> ../../icons/gentoo lrwxrwxrwx 1 root root 23 Jul 31 21:03 gentoo-blue -> ../../icons/gentoo-blue lrwxrwxrwx 1 root root 25 Jul 31 21:03 gentoo-silver -> ../../icons/gentoo-silver I presume the backup links are intentional, but I preferred the clean install. Thanks
(In reply to Peter Penkala from comment #10) > […] > > I presume the backup links are intentional, but I preferred the clean > install. Yes, i decided to not touch the previously generated backup directories. Because the package does not own them, it should not touch them, in my opinion. It will output an informational message if it detects them though. <https://cgit.gentoo.org/repo/gentoo.git/tree/x11-themes/gentoo-xcursors/gentoo-xcursors-0.3.2-r3.ebuild?id=477015c#n41>