#!/bin/sh # @(#)dpkg-dsel.sh 2009-07-01 A.J.Travis # # Show differences between package selections on two hosts # if [ $1 = '-l' ]; then cd /usr/local/share/dpkg-dsel for i in *.sel; do basename $i .sel done exit 0 fi if [ $# -ne 2 ]; then echo "usage: dpkg-dsel -l # list standard package selections" echo " dpkg-dsel host1 host2" exit 1 fi if [ $1 = $2 ]; then echo "dpkg-dsel: host names must be different" exit 2 fi WORK=/tmp/$$ mkdir $WORK # extract hostname from selection file name host1=`basename $1 .sel` host2=`basename $2 .sel` # reference package selection lists ref1=/usr/local/share/dpkg-dsel/${host1}.sel ref2=/usr/local/share/dpkg-dsel/${host2}.sel # absolute filename if [ -r $1 ]; then cmd="cat $1" # reference selection elif [ -r $ref1 ]; then cmd="cat $ref1" # local system elif [ $host1 = "localhost" ]; then cmd="dpkg --get-selections" # remote system else cmd="ssh $host1 -- dpkg --get-selections" fi # save selection list for first host $cmd | grep -v 'deinstall$' | sort -o $WORK/$host1.sel # absolute filename if [ -r $2 ]; then cmd="cat $2" # reference selection elif [ -r $ref2 ]; then cmd="cat $ref2" # local system elif [ $host2 = "localhost" ]; then cmd="dpkg --get-selections" # remote system else cmd="ssh $host2 -- dpkg --get-selections" fi # save selection list for second host $cmd | grep -v 'deinstall$' | sort -o $WORK/$host2.sel # generate host1 -> host2 install list diff $WORK/$host1.sel $WORK/$host2.sel | \ sed -n -e '/^/s/> //p' # tidy up rm -r $WORK