coreos/rpm-ostree

error: Checkout unixODBC-2.3.7-5.fc31.i686: Hardlinking

Closed this issue · 15 comments

Host system details

$ cat /etc/yum.repos.d/winehq.repo 
[WineHQ]
name=WineHQ packages
type=rpm-md
baseurl=https://dl.winehq.org/wine-builds/fedora/29
gpgcheck=1
gpgkey=https://dl.winehq.org/wine-builds/winehq.key
enabled=1

$ rpm-ostree status
State: idle
AutomaticUpdates: disabled
Deployments:
● ostree://fedora:fedora/31/x86_64/silverblue
                   Version: 31.20191031.0 (2019-10-31T00:35:49Z)
                BaseCommit: 1f77b254e196f244b20f14e0bac895ca151dd90dd18e0431e716ee1dbbe3f06e
              GPGSignature: Valid signature by 7D22D5867F2A4236474BF7B850CB390B3C3359C4
             LocalPackages: rpmfusion-free-release-31-1.noarch
                            rpmfusion-nonfree-release-31-1.noarch

  ostree://fedora:fedora/31/x86_64/silverblue
                   Version: 31.1.9 (2019-10-23T21:44:48Z)
                BaseCommit: c4bf7a6339e6be97d0ca48a117a1a35c9c5e3256ae2db9e706b0147c5845fac4
              GPGSignature: Valid signature by 7D22D5867F2A4236474BF7B850CB390B3C3359C4
             LocalPackages: rpmfusion-free-release-31-1.noarch
                            rpmfusion-nonfree-release-31-1.noarch

Expected vs actual behavior

$ rpm-ostree install winehq-staging
Checking out tree 1f77b25... done
Enabled rpm-md repositories: WineHQ updates-testing rpmfusion-free rpmfusion-nonfree updates rpmfusion-free-updates rpmfusion-nonfree-updates fedora
rpm-md repo 'WineHQ' (cached); generated: 2019-10-19T12:40:05Z
rpm-md repo 'updates-testing' (cached); generated: 2019-10-30T01:12:10Z
rpm-md repo 'rpmfusion-free' (cached); generated: 2019-10-22T10:21:36Z
rpm-md repo 'rpmfusion-nonfree' (cached); generated: 2019-10-22T10:43:47Z
rpm-md repo 'updates' (cached); generated: 2019-10-30T00:50:26Z
rpm-md repo 'rpmfusion-free-updates' (cached); generated: 2019-10-28T08:13:05Z
rpm-md repo 'rpmfusion-nonfree-updates' (cached); generated: 2019-10-28T08:34:09Z
rpm-md repo 'fedora' (cached); generated: 2019-10-25T01:48:20Z
Importing rpm-md... done
Resolving dependencies... done
Checking out packages... done
error: Checkout unixODBC-2.3.7-5.fc31.i686: Hardlinking 3d/796dd72b604bcabb0d6a8738cbc4b973f84a3bc5ce7e32dedd3ebf5ebd5b6b.file to dltest: File exists

Expected:

$ rpm-ostree install lutris
Checking out tree 1f77b25... done
Enabled rpm-md repositories: WineHQ updates-testing rpmfusion-free rpmfusion-nonfree updates rpmfusion-free-updates rpmfusion-nonfree-updates fedora
rpm-md repo 'WineHQ' (cached); generated: 2019-10-19T12:40:05Z
rpm-md repo 'updates-testing' (cached); generated: 2019-10-30T01:12:10Z
rpm-md repo 'rpmfusion-free' (cached); generated: 2019-10-22T10:21:36Z
rpm-md repo 'rpmfusion-nonfree' (cached); generated: 2019-10-22T10:43:47Z
rpm-md repo 'updates' (cached); generated: 2019-10-30T00:50:26Z
rpm-md repo 'rpmfusion-free-updates' (cached); generated: 2019-10-28T08:13:05Z
rpm-md repo 'rpmfusion-nonfree-updates' (cached); generated: 2019-10-28T08:34:09Z
rpm-md repo 'fedora' (cached); generated: 2019-10-25T01:48:20Z
Importing rpm-md... done
Resolving dependencies... done
Will download: 2 packages (72.1 MB)
Downloading from 'updates'... done
Importing packages... done
Checking out packages... done
Running pre scripts... done
Running post scripts... done
Running posttrans scripts... done
Writing rpmdb... done
Writing OSTree commit... done
Staging deployment... done
Freed: 2.5 GB (pkgcache branches: 353)
Added:
  SDL2-2.0.10-1.fc31.x86_64
  cabextract-1.9-3.fc31.x86_64
  elfutils-libelf-0.177-1.fc31.i686
  expat-2.2.8-1.fc31.i686
  glibc-2.30-5.fc31.i686
  libFAudio-19.09-1.fc31.x86_64
  libX11-1.6.8-3.fc31.i686
  libX11-xcb-1.6.8-3.fc31.i686
  libXau-1.0.9-2.fc31.i686
  libXdamage-1.1.4-17.fc31.i686
  libXext-1.3.4-2.fc31.i686
  libXfixes-5.0.3-10.fc31.i686
  libXxf86vm-1.1.4-12.fc31.i686
  libdrm-2.4.99-2.fc31.i686
  libedit-3.1-28.20190324cvs.fc31.i686
  libffi-3.1-23.fc31.i686
  libgcc-9.2.1-1.fc31.i686
  libglvnd-1:1.1.1-5.fc31.i686
  libglvnd-glx-1:1.1.1-5.fc31.i686
  libpciaccess-0.15-2.fc31.i686
  libselinux-2.9-5.fc31.i686
  libsepol-2.9-2.fc31.i686
  libstdc++-9.2.1-1.fc31.i686
  libva-2.6.0-0.1.fc31.x86_64
  libvkd3d-1.1-3.fc31.x86_64
  libwayland-client-1.17.0-2.fc31.i686
  libxcb-1.13.1-3.fc31.i686
  libxshmfence-1.3-5.fc31.i686
  llvm-libs-9.0.0-1.fc31.i686
  lutris-0.5.3-1.fc31.x86_64
  mesa-dri-drivers-19.2.0-1.fc31.i686
  mesa-filesystem-19.2.0-1.fc31.i686
  mesa-libGL-19.2.0-1.fc31.i686
  mesa-libOSMesa-19.2.0-1.fc31.x86_64
  mesa-libglapi-19.2.0-1.fc31.i686
  mesa-vulkan-drivers-19.2.0-1.fc31.i686
  ncurses-libs-6.1-12.20190803.fc31.i686
  pcre2-10.33-14.fc31.i686
  python3-evdev-1.1.2-4.fc31.x86_64
  python3-pyyaml-5.1.2-1.fc31.x86_64
  spirv-tools-libs-2019.4-0.1.20190715.gitaa9e8f5.fc31.x86_64
  unixODBC-2.3.7-5.fc31.x86_64
  vulkan-loader-1.1.114.0-1.fc31.i686
  wine-core-4.18-1.fc31.x86_64
  wine-filesystem-4.18-1.fc31.noarch
  xorg-x11-server-Xephyr-1.20.5-7.fc31.x86_64
  zlib-1.2.11-19.fc31.i686
Run "systemctl reboot" to start a reboot

Steps to reproduce it

Refer to section "Host system details"

Would you like to work on the issue?

I am fully aware of the issues for Fedora Silverblue not supporting 32bit libraries going forward, but this is serious roadblock for users who wish to use Wine to play games such as Battlefield 3-5 via Origin on Linux. Unsure if WineHQ will attempt to flatpak the winehq-staging package any time soon...

I would love to help contribute but do not know where to start or how... feel free to contact me directly for further information.

rpm-ostree itself does support multilib, so I suspect there's something going wrong in that logic.
(That said, I agree this would be cleaner overall as a flatpak. A quick search returned https://ramsdenj.com/2018/03/26/packaging-pathofexile-with-flatpak.html... might be worth a try?).

Thanks for the bug label! I'll follow up with the winepak and report back if needed!

bauno commented

Hello! Not sure if it makes sense to add here or to open another but, but there is the same problem with SilverBlue 32, w/o additional repostories. After a 'rpm-ostree install wine' the transaction fails with:
error: Checkout unixODBC-2.3.7-6.fc32.i686: Hardlinking 2f/9ea67391201811f709a7df399ad598139277a71e4abf00e41327e6d81005c2.file to dltest: File exists

On fedora Silverblue 33, installing 'libstdc++.i686' fails with error:
error: Checkout libstdc++-10.2.1-3.fc33.i686: Hardlinking ea/d62955df283cbfca2597e94bc41073a81c61ff118e48a2ff7afa81cb1020e9.file to __init__.cpython-39.opt-1.pyc: File exists

$ rpm-ostree --version
rpm-ostree:
Version: '2020.3'
Git: 108d19beadadcc7d2a05689d95d43ff48fa83546
Features:

  • compose
  • rust

I can now install libstdc++.i686, but, still, cannot install wine.

tapir commented

Fedora Silverblue 33 and this error still persists

Also present on Silverblue 34

[willdrick@vega ~]$ rpm-ostree --version
rpm-ostree:
 Version: '2021.3'
 Git: 577501cf749131d077a73926ac9acf930ed638d2
 Features:
  - compose
  - rust
  - fedora-integration

Found this while trying to layer gamehub, which pulls Wine

[willdrick@vega ~]$ rpm-ostree install gamehub
Checking out tree 7b99463... done
Enabled rpm-md repositories: fedora-cisco-openh264 updates fedora
rpm-md repo 'fedora-cisco-openh264' (cached); generated: 2021-02-23T00:49:00Z
rpm-md repo 'updates' (cached); generated: 2021-06-07T01:11:58Z
rpm-md repo 'fedora' (cached); generated: 2021-04-23T10:47:57Z
Importing rpm-md... done
Resolving dependencies... done
Will download: 211 packages (351,3 MB)
Downloading from 'fedora'... done
Downloading from 'updates'... done
Importing packages... done
Checking out packages... done
error: Checkout unixODBC-2.3.9-2.fc34.i686: Hardlinking b0/e4e85e6dd01f72e42b8200143a560c22dfaf80fcd5282edc6925f730777009.file to dltest: El fichero ya existe

Before this entirely leaves my brain: I looked at this some time back and started hacking on a patch, but didn't push through.

The base issue IIRC is that handle_file_dispositions in the core knows how to handle file colouring between packages in the base vs packages in the layer. But it doesn't correctly handle different file colouring coming from layered packages, as is the case here (we're layering both unixODBD.x86_64 and unixODBC.i686). I.e. it tries to check out both of them instead of letting the x86_64 version of the file win (and skipping the i686 version), hence why we get the checkout error.

It has been working for me in SB32 and SB33, but it's now back in SB34. Is there a workaround (besides not using wine) available for this issue?

rpm-ostree[3515]: Txn Upgrade on /org/projectatomic/rpmostree1/fedora failed: Checkout unixODBC-2.3.9-2.fc34.i686: Hardlinking b0/e4e85e6dd01f72e42b8200143a560c22dfaf80fcd5282edc6925f730777009.file to dltest: File exists

Same for me when installing Lutris on SB34:

error: Checkout unixODBC-2.3.9-2.fc34.i686: Hardlinking b0/e4e85e6dd01f72e42b8200143a560c22dfaf80fcd5282edc6925f730777009.file to dltest: File exists

Most prominently (I presume) this affects Lutris since it introduced a weak-dependency to wine-core (32-bit).
https://bugzilla.redhat.com/show_bug.cgi?id=1974116

A workaround is to grab the latest version which came without the weak-dependency from Koji, which is: 0.5.8.3-4

As Lutris is steadily developed this workaround will get less and less feasible. @cgwalters Is this an issue that needs further discussion/concept work or is it ready to be implemented/getting fixed?

EDIT: Two options come to mind: Fixing the underlying Hardlinking issue or allow skipping weak-dependencies either manually or as an error handler for when the Hardlinking error is thrown. Skipping weak-dependecies will introduce further issues as the 32-bit runners of Lutris will fail if wine-core (32-bit) is not present, as that was the original reason the weak dep was introduced for the package.

The workaround is no longer applicable for SB35. The fc34 package is incompatible as it has a hard requirement to python3.9 and the .fc35 packages start after the introduction of the weak-dep to wine-core (32-bit): https://koji.fedoraproject.org/koji/search?terms=lutris*.fc35&type=build&match=glob

Fix for this in #3161.

This problem has resurfaced in SB40.