coreos / rpm-ostree

⚛📦 Hybrid image/package system with atomic upgrades and package layering
https://coreos.github.io/rpm-ostree
Other
856 stars 195 forks source link

Failed to include akmod to compose #4983

Open karuboniru opened 4 months ago

karuboniru commented 4 months ago

Describe the bug

Different from the ublue way, I am trying to include akmod-nvidia during the rpm-ostree compose image step. But I failed with:

akmod-nvidia.post: Building /usr/src/akmods/nvidia-kmod-550.78-1.fc40.src.rpm for kernel 6.8.11-300.fc40.x86_64
akmod-nvidia.post: Installing /usr/src/akmods/nvidia-kmod-550.78-1.fc40.src.rpm
akmod-nvidia.post: Building target platforms: x86_64
akmod-nvidia.post: Building for target x86_64
akmod-nvidia.post: setting SOURCE_DATE_EPOCH=1714089600
akmod-nvidia.post: warning: Could not canonicalize hostname: f4ba1ea9c96d
akmod-nvidia.post: error: Failed build dependencies:
akmod-nvidia.post:  /usr/bin/kmodtool is needed by nvidia-kmod-3:550.78-1.fc40.x86_64
akmod-nvidia.post:  gcc is needed by nvidia-kmod-3:550.78-1.fc40.x86_64
akmod-nvidia.post:  kernel-devel-uname-r = 6.8.11-300.fc40.x86_64 is needed by nvidia-kmod-3:550.78-1.fc40.x86_64
akmod-nvidia.post:  xorg-x11-drv-nvidia-kmodsrc = 3:550.78 is needed by nvidia-kmod-3:550.78-1.fc40.x86_64
akmod-nvidia.post: 
akmod-nvidia.post: RPM build warnings:
akmod-nvidia.post:     Could not canonicalize hostname: f4ba1ea9c96d

I believe all those "missing dependencies" are actually present in the system as it should be direct dependency from akmods. It seems that things in post step just don't see them.

Reproduction steps

  1. Add this file and corresponding *.repo to a rpm-ostree compose project
  2. Compose the tree with rpm-ostree compose image ...

Expected behavior

I was expecting that the akmods could be installed to the image.

Actual behavior

It failed in akmod-nvidia.post

System details

rpm-ostree:
 Version: '2024.6'
 Git: 1dda51b264eec8003eb6032f1f41844754ec163b
 Features:
  - rust
  - compose
  - container
  - fedora-integration

Additional information

Maybe at the stage of akmod-nvidia.post, the whole rpmdb is not ready? Or this usecase will never be supported? Or even if I could workaround the dependency issue there would be more issues behind (as I can think of, the akmod-nvidia.post will install the newly built kmods as rpm, and I am unsure if this is possible in rpm-ostree case

COM8 commented 3 months ago

I run into the same error as you. The problem is as follows:

  1. During compose you install akmod-nvidia.
  2. akmod-nvidia will run as part of the %post section during RPM install the build of nvidia-kmod which defines gcc, kernel-devel-uname-r and some others. 3. Although they might be already installed on the system (I suspect) the RPM DB is not yet updated to reflect them being installed, leading to the system thinking they are not and then failing.
  3. I'm currently working on a patched akmod-nvidia RPM that is able to be installed during OSTree compose. This involves moving nvidia-kmod BuildRequires into akmod-nvidia Requires definitions.

In my eyes this is not the optimal solution since I would expect rpm-ostree compose handling this as it's done on all other systems as well. This would then allow installation of any other akmod kernel module during compose as well without having to patch it first.

COM8 commented 3 months ago

Here is a fixed RPM that works during rpm-ostree compose: https://github.com/COM8/nvidia-kmod

travier commented 3 months ago

rpm-ostree will not pull BuildRequires dependencies as those are only installed when the package is built, not on normal installations.

COM8 commented 3 months ago

@travier I'm fine with closing this, but this is not the point.

The point is, you define something as Requires or even Requires(post) in an RPM spec. Then, inside the %post section of that RPM, you call rpmbuild (e.g. the process that happens during an akmod install) and there it fails to find the RPM dependency you previously defined as Requires(post) during the BuildRequires check of the RPM you are building.

travier commented 3 months ago

Ah, I think I understand what you meant now.