17. december

Hvordan finder jeg den rpm-pakke jeg mangler?

Et af de oftest stillede spørgsmål i forbindelse med Red Hat Linux er: Hvilken rpm-pakke indeholder filen XYZ?

På SSLUG's mailingliste har mange givet gode råd til svar på dette spørgsmål.
Denne løsning fremkom fra Hernik Størner, Ole Vilmann og Ole Tange en gang 1998.

Det kræver et perl-script og et shell-script. Begge er ganske simple:

  #!/usr/bin/perl
  #
  # doit
  # 
  while($rpm = <>) {
      chomp $rpm;
      @files=`rpm -qpl $rpm`;
      print map { $rpm ," ", $_ } @files;
  }

  #!/bin/sh
  #
  # findrpm
  # 
  if [ $# != 2 ]
  then
      echo Usage: findrpm file-to-find /path/to/rpms
  else
      find ${2}/*.rpm | /usr/local/bin/doit | grep -i $1 2>/dev/null
  fi
Begge scripts kan f.eks. placeres i /usr/local/bin. Begge scripts skal selvfølgelig også være eksekverbare:
root@linuxbox # chmod +x /usr/local/bin/doit /usr/local/bin/findrpm
root@linuxbox # 
Herefter er det muligt at finde ud af hvilke rpm-pakker, der indeholder filen netdb.h:
joelinuxuser@linuxbox ~ $ findrpm netdb.h /path/to/RedHat/RPMS
/path/to/RedHat/RPMS/bind-devel-8.2.2_P5-25.i386.rpm /usr/lib/bind/include/netdb.h
joelinuxuser@linuxbox ~ $
En ulempe ved denne metode er, at en søgning efter make også vil give alle rpm-pakker med indhold WindowMaker, men det skulle være til at klare med grep:
# findrpm make /path/to/RedHat/RPMS/ | grep -v WindowMaker
Happy rpm-hunting!