Search code examples
linuxperlyumrhel

Yum dependency I'm trying to install doesn't have a provider


One of the dependencies of the rlwrap package I'm trying to install doesn't have a provider. Is there a command line option I can pass to the install to let it forget about the perl(File::Slurp) dependency?

package: rlwrap-0.45.2-2.el8.x86_64
  dependency: /usr/bin/perl
   provider: perl-interpreter-4:5.26.3-421.el8.x86_64
  dependency: /usr/bin/python3
   provider: python36-3.6.8-38.module+el8.5.0+12207+5c5719bc.x86_64
   provider: python38-3.8.13-1.module+el8.7.0+15641+2ece4388.x86_64
   provider: python39-3.9.13-2.module+el8.7.0+17195+44752b34.x86_64
  dependency: libc.so.6(GLIBC_2.15)(64bit)
   provider: glibc-2.28-211.el8.x86_64
  dependency: libreadline.so.7()(64bit)
   provider: readline-7.0-10.el8.x86_64
  dependency: libtinfo.so.6()(64bit)
   provider: ncurses-libs-6.1-9.20180224.el8.x86_64
  dependency: libutil.so.1()(64bit)
   provider: glibc-2.28-211.el8.x86_64
  dependency: libutil.so.1(GLIBC_2.2.5)(64bit)
   provider: glibc-2.28-211.el8.x86_64
  dependency: perl(:VERSION) >= 5.6.0
   provider: perl-libs-4:5.26.3-421.el8.i686
   provider: perl-libs-4:5.26.3-421.el8.x86_64
  dependency: perl(AutoLoader)
   provider: perl-interpreter-4:5.26.3-421.el8.x86_64
  dependency: perl(Carp)
   provider: perl-Carp-1.42-396.el8.noarch
  dependency: perl(Config)
   provider: perl-interpreter-4:5.26.3-421.el8.x86_64
  dependency: perl(Data::Dumper)
   provider: perl-Data-Dumper-2.167-399.el8.x86_64
  dependency: perl(Exporter)
   provider: perl-Exporter-5.72-396.el8.noarch
  dependency: perl(File::Slurp)
  dependency: perl(Getopt::Std)
   provider: perl-interpreter-4:5.26.3-421.el8.x86_64
  dependency: perl(POSIX)
   provider: perl-interpreter-4:5.26.3-421.el8.x86_64
  dependency: perl(RlwrapFilter)
   provider: rlwrap-0.45.2-2.el8.x86_64
  dependency: perl(constant)
   provider: perl-constant-1.33-396.el8.noarch
  dependency: perl(lib)
   provider: perl-interpreter-4:5.26.3-421.el8.x86_64
  dependency: perl(strict)
   provider: perl-libs-4:5.26.3-421.el8.i686
   provider: perl-libs-4:5.26.3-421.el8.x86_64
  dependency: perl(vars)
   provider: perl-interpreter-4:5.26.3-421.el8.x86_64
  dependency: rtld(GNU_HASH)
   provider: glibc-2.28-211.el8.i686
   provider: glibc-2.28-211.el8.x86_64

I have installed the perl(File::Slurp) dependency separately. For reference, this is the command I am using to install the rlwrap package and error:

yum install rlwrap
Last metadata expiration check: 0:41:10 ago on Thu Dec 22 16:38:35 2022.
Error: 
 Problem: cannot install the best candidate for the job
  - nothing provides perl(File::Slurp) needed by rlwrap-0.45.2-2.el8.x86_64
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

I have tried the suggestions from the yum output.


Solution

  • I was wrong about EPEL having all the dependencies. It looks like perl-File-Slurp lives in the "AppStream" repository. You can add the the CentOS 8 version of that repository to your ubi8 image:

    1. Install dnf if you haven't already:

      microdnf install dnf
      
    2. Add the repository configuration (note that I have this disabled by default):

      cat > /etc/yum.repos.d/centos-appstream.repo <<'EOF'
      [appstream]
      name=CentOS Stream $releasever - AppStream
      mirrorlist=http://mirrorlist.centos.org/?release=$releasever-stream&arch=$basearch&repo=AppStream&infra=$infra
      gpgcheck=1
      enabled=0
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
      EOF
      
    3. Install the CentOS 8 GPG key:

      rpm --import  https://www.centos.org/keys/RPM-GPG-KEY-CentOS-Official
      
    4. Enable the EPEL repository if you haven't already:

      dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
      
    5. Install rlwrap:

      dnf --enablerepo=appstream install rlwrap
      

    Alternately, instead of installing rlwrap and it's myriad dependencies, just install socat:

    microdnf install socat
    

    And then use the readline and exec connectors:

    socat readline exec:"/path/to/some/program --arg foo",pty