Results 1 to 7 of 7

Thread: How to resolve dependency Libffi.so.7()(64bit)?

  1. #1

    Exclamation How to resolve dependency Libffi.so.7()(64bit)?

    Hello,

    I am quite new to Linus, and I need your help to solve my « Problem: nothing provides libffi.so.7()(64bit) needed by openmp-extras-12.9-0.x86_64 ».


    Some context: I am using a repurpose old AM4 x64 rig with Microos with a K3s Kubernetes to host my own services like Jellyfin. So far so good, system is working, transactionnal update are rolling, services are running. Though, I have a AMD radeon HD 5770 inside, and I would like to use it for Jellyfin hardware acceleration. After some digging, I need AMD GPU Kubernetes plugin and for that I need to install ROCm kernel (Installation guide) or latest AMD GPU Linux driver (Installation guide) (https://github.com/RadeonOpenCompute/k8s-device-plugin).

    While following the ROCm install, I had 2 problems, first is I can’t had import the ROCm gpg key with the command :

    sudo rpm --import https://repo.radeon.com/rocm/rocm.gpg.key System can't create transaction lock because it's read only system (In French: "erreur : Impossible de créer transaction verrou sur /usr/lib/sysimage/rpm/.rpm.lock (Read-only file system)")

    Then, while installing the rocm-dkms package, I have the dependency error :

    « Problem: nothing provides libffi.so.7()(64bit) needed by openmp-extras-12.9-0.x86_64 ».



    Can someone explain to me what is the problem ? For what I get, a dependency for the package is missing. When you create a package, shouldn’t all you dependencies by provided somewhere ?
    How can I provide this library ? Should I build it myself ? Build a Kernel ?? How ???

  2. #2
    Join Date
    Jan 2014
    Location
    Erlangen
    Posts
    2,209
    Blog Entries
    1

    Default Re: How to resolve dependency Libffi.so.7()(64bit)?

    Quote Originally Posted by Lleweilyn View Post
    Hello,

    I am quite new to Linus, and I need your help to solve my « Problem: nothing provides libffi.so.7()(64bit) needed by openmp-extras-12.9-0.x86_64 ».


    Some context: I am using a repurpose old AM4 x64 rig with Microos with a K3s Kubernetes to host my own services like Jellyfin. So far so good, system is working, transactionnal update are rolling, services are running. Though, I have a AMD radeon HD 5770 inside, and I would like to use it for Jellyfin hardware acceleration. After some digging, I need AMD GPU Kubernetes plugin and for that I need to install ROCm kernel (Installation guide) or latest AMD GPU Linux driver (Installation guide) (https://github.com/RadeonOpenCompute/k8s-device-plugin).

    While following the ROCm install, I had 2 problems, first is I can’t had import the ROCm gpg key with the command :

    sudo rpm --import https://repo.radeon.com/rocm/rocm.gpg.key System can't create transaction lock because it's read only system (In French: "erreur : Impossible de créer transaction verrou sur /usr/lib/sysimage/rpm/.rpm.lock (Read-only file system)")

    Then, while installing the rocm-dkms package, I have the dependency error :

    « Problem: nothing provides libffi.so.7()(64bit) needed by openmp-extras-12.9-0.x86_64 ».



    Can someone explain to me what is the problem ? For what I get, a dependency for the package is missing. When you create a package, shouldn’t all you dependencies by provided somewhere ?
    How can I provide this library ? Should I build it myself ? Build a Kernel ?? How ???
    Tumbleweed uses already a newer version:

    Code:
    erlangen:~ # zypper se -is libffi        
    Loading repository data... 
    Reading installed packages... 
    
    S  | Name          | Type    | Version        | Arch   | Repository 
    ---+---------------+---------+----------------+--------+------------------------ 
    i+ | libffi-devel  | package | 3.3.git30-1.13 | x86_64 | openSUSE-Tumbleweed-Oss 
    i  | libffi8       | package | 3.3.git30-1.13 | x86_64 | openSUSE-Tumbleweed-Oss 
    i+ | libffi8-32bit | package | 3.3.git30-1.13 | x86_64 | openSUSE-Tumbleweed-Oss 
    erlangen:~ #
    
    Contents are:


    Code:
    erlangen:~ # rpm -ql libffi8 
    /usr/lib64/libffi.so.8 
    /usr/lib64/libffi.so.8.1.0 
    /usr/share/licenses/libffi8 
    /usr/share/licenses/libffi8/LICENSE 
    erlangen:~ #
    
    You may try cheating by creating the following links:

    Code:
    erlangen:~ # ln /usr/lib64/libffi.so.8 /usr/lib64/libffi.so.7 
    erlangen:~ # ln /usr/lib64/libffi.so.8.1.0 /usr/lib64/libffi.so.7.1.0 
    erlangen:~ # ll /usr/lib64/libffi* 
    lrwxrwxrwx 1 root root    15 Aug 25 10:39 /usr/lib64/libffi.so -> libffi.so.8.1.0
    lrwxrwxrwx 2 root root    15 Aug 25 10:39 /usr/lib64/libffi.so.7 -> libffi.so.8.1.0
    -rwxr-xr-x 2 root root 43544 Aug 25 10:39 /usr/lib64/libffi.so.7.1.0
    lrwxrwxrwx 2 root root    15 Aug 25 10:39 /usr/lib64/libffi.so.8 -> libffi.so.8.1.0
    -rwxr-xr-x 2 root root 43544 Aug 25 10:39 /usr/lib64/libffi.so.8.1.0
    erlangen:~ #
    
    
    AMD Athlon 4850e (2009), openSUSE 13.1, KDE 4, Intel i3-4130 (2014), i7-6700K (2016), i5-8250U (2018), AMD Ryzen 5 3400G (2020), openSUSE Tumbleweed, KDE Plasma 5

  3. #3
    Join Date
    Sep 2012
    Posts
    6,134

    Default Re: How to resolve dependency Libffi.so.7()(64bit)?

    Quote Originally Posted by Lleweilyn View Post
    transactionnal update are rolling
    ...
    Code:
    sudo rpm --import https://repo.radeon.com/rocm/rocm.gpg.key System can't create transaction lock because it's read only system
    This is the whole reason transactional server installation choice exists. In transactional server current root is read-only; all changes are applied to clone of current root which will become root after reboot.

    You can simply ignore it; missing key will at most cause warnings.
    In French:
    When you post in English speaking forum always run programs in English locale and post exact output (copy-paste) in English, not your interpretation of it.

    « Problem: nothing provides libffi.so.7()(64bit) needed by openmp-extras-12.9-0.x86_64 ».
    Yes, current Tumbleweed is using newer libffi which bumped major version. Change in major version of shared library implies ABI change; which means it is not safe to fool system by linking newer version under older name. The best choice is to find package that you try to install that is built for Tumbleweed. Or build it yourself. Of course it will also need to be maintained as Tumbleweed is changing permanently.

    It is theoretically possible to do one of


    1. Build (or find) libffi package with older library. Shared libraries with different major numbers can usually be installed in parallel. Of course, it may also cause conflicts inside application itself (if different parts are built against different libraries).
    2. Try to link libffi.so.8 as libffi.so.7, ignore dependency and hope it will work. This may completely fail if application depends on changed ABI, and it may fail in rather mysterious ways.


    I would not recommend either of them unless you fully understand your application internals and are capable of debugging any resulting breakage.

    Of course, the question is whether you really need Tumbleweed? Leap 15.2 includes older libffi which provides libffi.so.7.

    When you create a package, shouldn’t all you dependencies by provided somewhere ?
    This package is not built for Tumbleweed. So its dependencies were provided at the time it was built. It is just that system where you try to install it does not have these dependencies.
    How can I provide this library ?
    You got it backwards. The correct way is to build application against updated library. Anything else may or may not work and it may be extremely hard to debug if it does not work.

    Quote Originally Posted by karlmistelberger View Post
    You may try cheating by creating the following links:
    RPM dependencies have absolutely nothing to do with content of file system

    Code:
    erlangen:~ # ln /usr/lib64/libffi.so.8 /usr/lib64/libffi.so.7 
    erlangen:~ # ln /usr/lib64/libffi.so.8.1.0 /usr/lib64/libffi.so.7.1.0 
    
    These links will be broken on next package update.

  4. #4
    Join Date
    Sep 2012
    Posts
    6,134

    Default Re: How to resolve dependency Libffi.so.7()(64bit)?

    Quote Originally Posted by arvidjaar View Post
    Leap 15.2 includes older libffi which provides libffi.so.7.
    According to ROCm release notes, it supports SLES 15 SP2 so there are fair chances it will also work on Leap 15.2. As release notes imply this software has kernel dependencies, are you sure it will work on TW with most recent kernel even if you solve pure installation issues?

  5. #5
    Join Date
    Jan 2014
    Location
    Erlangen
    Posts
    2,209
    Blog Entries
    1

    Default Re: How to resolve dependency Libffi.so.7()(64bit)?

    Quote Originally Posted by arvidjaar View Post
    ... RPM dependencies have absolutely nothing to do with content of file system ...
    Why do make this statement?


    These links will be broken on next package update
    Nope. The hard links create additional names which do not belong to the package. Thus they will stay unaffected by updating the package.
    AMD Athlon 4850e (2009), openSUSE 13.1, KDE 4, Intel i3-4130 (2014), i7-6700K (2016), i5-8250U (2018), AMD Ryzen 5 3400G (2020), openSUSE Tumbleweed, KDE Plasma 5

  6. #6
    Join Date
    Sep 2012
    Posts
    6,134

    Default Re: How to resolve dependency Libffi.so.7()(64bit)?

    Quote Originally Posted by karlmistelberger View Post
    Why do make this statement?
    Because the question was about package dependency, not about missing file. File link won't solve missing dependency in any way.
    The hard links create additional names which do not belong to the package.
    Thank you. I was not aware of this.
    Thus they will stay unaffected by updating the package.
    If you say so ... who am I to argue.

    After update one of your link will point to library from package before update and another link - to library from package after update.

  7. #7
    Join Date
    Jan 2014
    Location
    Erlangen
    Posts
    2,209
    Blog Entries
    1

    Default Re: How to resolve dependency Libffi.so.7()(64bit)?

    Quote Originally Posted by arvidjaar View Post
    Because the question was about package dependency, not about missing file. File link won't solve missing dependency in any way.
    You ignore the missing dependency.

    After update one of your link will point to library from package before update and another link - to library from package after update.
    That's intended behavior. If the cheat works for the current version it will work also when the package gets an update. There was a longstanding and annoying problem with some libcrypt and similar. Establishing the link stopped the issue, It never appeared again upon updating libcrypt.

    Of course if the cheat doesn't work don't try to get it working, but solve the issue properly.
    AMD Athlon 4850e (2009), openSUSE 13.1, KDE 4, Intel i3-4130 (2014), i7-6700K (2016), i5-8250U (2018), AMD Ryzen 5 3400G (2020), openSUSE Tumbleweed, KDE Plasma 5

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •