Habe ein kleines Script geschrieben, das aus den installierten Packeten eines System die Paketabhängigkeiten als Verzeichnisbaum darstellt. Die Verzeichnisse sind die installierten Pakete und die Links sind die Depends.
In einem zweiten Schritt möchte ich die "Hauptpakete" rausfiltern und als Links in ein seperates Verzeichnis erstellen. Das funktoiniert mit dem Script mit Ausnahme eines Problems: wenn sich die Paketabhängigkeiten "im Kreis drehen", findet mein Script die nicht, um sie als "Hauptpaket" in das andere Verzeichnis zu linken.
Als Beispiel-Paket: gnome-do
gnome-do hat als rdepends gnome-do-plugins und dieses wiederum gnome-do als rdepends.
Hat jemand eine einfache Idee, wie ich dies in das Script einarbeiten kann? oder vll. einen ganz anderen Ansatz
Code: Alles auswählen
#! /bin/bash
#
#
#
DIR="dpkg-analyse/system-$HOSTNAME"
DIRSEC="dpkg-analyse/.system-$HOSTNAME"
INSTALLEDDEBS=`dpkg -l | awk '/^ii/{print $2}'`
INSTALLSCRIPT="$DIR/../dpkg-analyser-install"
if [ $DIR ];then
echo Hostverzeichnisse löschen
rm -r $DIR
rm -r $DIRSEC
fi
install -d $DIR $DIRSEC
echo Verzeichnisse: $DIR und $DIRSEC angelegt
echo Für jedes Package ein Verzeichnis anlegen und Beschreibung abspeichern
for i in $INSTALLEDDEBS; do
mkdir $DIRSEC/$i
echo "`apt-cache show $i`" > $DIRSEC/$i/$i.txt
done
echo Für jede Abhängigkeit einen Link anlegen
for i in $INSTALLEDDEBS; do
for r in `apt-cache rdepends $i | cut -b 3- -`; do
#echo $i ist ein rdepend von $r
if [ -d $DIRSEC/$r ]; then
#Abhängigkeit verlinken
if [ ! -h $DIRSEC/$r/$i ]; then
ln -s ../$i $DIRSEC/$r/
fi
#Reverse Depends verlinken
if [ ! -d $DIRSEC/$i/.rdeps ]; then
mkdir $DIRSEC/$i/.rdeps
fi
if [ ! -h $DIRSEC/$i/.rdeps/$r ]; then
ln -s ../../$r $DIRSEC/$i/.rdeps/
fi
#Mainpakete verlinken
if ([ ! -h $DIR/$r ] && [ ! -f $DIRSEC/$r/.main ]); then
ln -s ../../$DIRSEC/$r $DIR/
touch $DIRSEC/$r/.main
fi
touch $DIRSEC/$i/.main
if [ -h $DIR/$i ]; then
rm $DIR/$i
fi
fi
done
done
echo Installationsscript anlegen
echo "#! /bin/sh" > $INSTALLSCRIPT
echo "apt-get install "`ls $DIR` >> $INSTALLSCRIPT