[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Quelle von installierten Paketen herausfinden



Stephan Hakuli <hakuli@skmail.ikp.physik.tu-darmstadt.de> wrote:
> in der Vergangenheit ist auf meinem Woody-System die Liste der 
> Backport-Sourcen ziemlich angewachsen. Ich möchte nun herausfinden, 
> welche Pakete aus welchen Quellen installiert worden sind, in der 
> Hoffnung, dass ich ein paar dieser Quellen für überflüssig erklären 
> kann. Gibt es ein tool aus der apt-Familie, das genau diese Anforderung 
> erfüllt? Andernfalls würde ich den Inhalt von /var/lib/apt/lists/ mit 
> einem Skript durchforsten und mit einem geeignet formatierten output 
> von "dpkg -l" abgleichen, aber das würde vermutlich ein längliches und 
> nicht besonders hübsches Skript...

Und so ein längliches und nicht besonders hübsches Skript hab ich jetzt
auch endlich fertig. Verbesserungsvorschläge willkommen :-)


HTH
 Thorsten

http://www.tgunkel.de/software/files/where_is_debian_package_from

#!/bin/sh
# get installed packages
dpkg --get-selections |
grep [^A-Za-z0-9]install$ |
awk '{ print $1 }' |
while read package_line
do
 # extract possible sources
 echo -n "$package_line |"
 source_found=0
 apt-cache policy "$package_line" |
 while IFS= read source_line
 do
  # find the marked source
  case $source_found in
  0) echo "$source_line" | grep ^" \*\*\*" >/dev/null && source_found=1
  ;;
  1) echo "$source_line" | grep \ \ *[-\ ][0-9][0-9]*\ >/dev/null || source_found=2
     if [ $source_found -eq 1 ]; then
      source_line="`echo $source_line | sed s/^\ *[0-9]*\ //`"
          echo -n " $source_line |"
         fi
  ;;
  *)
  ;;
  esac
 done
 echo
done |
sort +1 |
while read finish_line
do
 # sort output by sources
 package="`echo $finish_line | sed s/\ .*$//`"
 debsource=`echo $finish_line | sed s/^[^\ ]*\ //`
 if [ "X$debsource" != "X$debsource_old" ]; then
  echo "*** $debsource"
 fi
 debsource_old=$debsource
 echo "$package"
done



Reply to: