Uploaded image for project: 'Lustre'
  1. Lustre
  2. LU-20109

DKMS RPM spec file declares that it provides client binaries

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Minor Minor
    • None
    • Lustre 2.15.8
    • None
    • First noticed on Rocky 8 / ppc64le / Lustre 2.12, but is a general issue.
    • 3
    • 9223372036854775807

      Hi,

      We manage the Lustre kernel modules on our clients using the lustre-client-dkms rpm package and have noticed that it incorrectly declares it "provides" lustre-client, when it does not.

      If lustre-client-dkms is installed before lustre-client, idempotent configuration management tools like puppet can believe that lustre-client has already been installed as it has already been "provided".

      Seems to be a problem in 2.12.x, 2.15.x, 2.17.x, etc.

      e.g.

      # create a basic yum repository
      cd /root/packages
      wget https://downloads.whamcloud.com/public/lustre/latest-release/el8.10/client/RPMS/x86_64/lustre-client-2.15.8-1.el8.x86_64.rpm
      wget https://downloads.whamcloud.com/public/lustre/latest-release/el8.10/client/RPMS/x86_64/lustre-client-dkms-2.15.8-1.el8.noarch.rpm
      wget https://yum.puppetlabs.com/puppet7/el/8/x86_64/puppet-agent-7.9.0-1.el8.x86_64.rpm
      createrepo .
      
      cat > /etc/yum.repos.d/packages.repo <<EOF
      [packages]
      name = local packages
      baseurl = file:///root/packages
      enabled = 1
      gpgcheck = 0
      EOF
      
      # install puppet
      dnf install puppet-agent
      
      # ATTEMPT 1
      # ask puppet to install lustre-client-dkms and then lustre-client
      
      [root@test ~]# puppet resource package lustre-client-dkms ensure=installed
      Notice: /Package[lustre-client-dkms]/ensure: created
      package { 'lustre-client-dkms':
        ensure   => '2.15.8-1.el8',
        provider => 'dnf',
      }
      
      [root@test ~]# rpm -q -a | grep lustre
      lustre-client-dkms-2.15.8-1.el8.noarch
      
      [root@test ~]# puppet resource package lustre-client ensure=installed
      package { 'lustre-client':
        ensure   => '2.15.8-1.el8',
        provider => 'dnf',
      }
      
      # ATTEMPT 1 RESULT: only lustre-client-dkms installed
      [root@test ~]# rpm -q -a | grep lustre
      lustre-client-dkms-2.15.8-1.el8.noarch
      
      # reset...
      [root@test ~]# rpm -e lustre-client-dkms lustre-client
      [root@test ~]# rpm -q -a | grep lustre
      
      
      # ATTEMPT 2
      # ask puppet to install lustre-client and then lustre-client-dkms
      
      [root@slurm ~]# puppet resource package lustre-client ensure=installed
      Notice: /Package[lustre-client]/ensure: created
      package { 'lustre-client':
        ensure   => '2.15.8-1.el8',
        provider => 'dnf',
      }
      
      [root@slurm ~]# rpm -q -a | grep lustre
      lustre-client-2.15.8-1.el8.x86_64
      lustre-client-dkms-2.15.8-1.el8.noarch
      
      [root@slurm ~]# puppet resource package lustre-client-dkms ensure=installed
      package { 'lustre-client-dkms':
        ensure   => '2.15.8-1.el8',
        provider => 'dnf',
      }
      
      # ATTEMPT 2 RESULT: both lustre-client and lustre-client-dkms installed
      [root@slurm ~]# rpm -q -a | grep lustre
      lustre-client-2.15.8-1.el8.x86_64
      lustre-client-dkms-2.15.8-1.el8.noarch
      

       

      Problem appears to stem from lustre-dkms.spec.in containing:

      %if %{with servers}
      %if %{with zfs}
      Provides:       %{lustre_name}-osd-zfs = %{version}
      Provides:       kmod-%{lustre_name}-osd-zfs = %{version}
      Provides:       %{lustre_name}-osd-zfs-mount = %{version}
      %endif
      %if %{with ldiskfs}
      Provides:       %{lustre_name}-osd-ldiskfs = %{version}
      Provides:       kmod-%{lustre_name}-osd-ldiskfs = %{version}
      Provides:       %{lustre_name}-osd-ldiskfs-mount = %{version}
      %endif
      Provides:       %{lustre_name}-osd
      %else
      Provides:       %{lustre_name}-client
      %endif
      

      Ignoring the "with servers" case (because I've never used it), the "Provides: %{lustre_name}client" line probably needs to be changed to "Provides: kmod%{lustre_name}-client" - seems to do the trick for us.

       

            yujian Jian Yu
            bodgerer Mark Dixon
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated: