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: