b8a3be65f56c628971a2d8acfae743ca879c6491
[etcdiff.git] / etcdiff.sh
1 #!/bin/sh
2 #
3 # etcdiff (deb-etcdiff?) shows how your current /etc dir
4 # diverges from the debian distribution standard one.
5 #
6 # Copyright (C) 2008 Antonio Ospite <ospite@studenti.unina.it>
7 # License: GPLv2 or later
8
9 set -ex
10
11 PROMPT_RM=-i
12
13 DEBIANMIRROR="http://ftp.it.debian.org/debian"
14
15 rm $PROMPT_RM -r temp     && mkdir temp
16 rm $PROMPT_RM -r archives && mkdir archives
17 rm $PROMPT_RM -r conf     && mkdir -p conf/patches
18
19 USERMODE="-perm /o+r"
20 MAXDEPTH="-maxdepth 1"
21
22 #FILES="/etc/sysctl.conf /etc/init.d/procps /etc/passwd-"
23 FILES=$(find /etc/ $MAXDEPTH -type f $USERMODE | grep -v '.dpkg-')
24
25 for file in ${FILES};
26 do
27   echo "-> $file"
28
29   # Find out what installed package provides the config file
30   PACKAGE=$(dpkg-query -S "$file" | cut -d ':' -f 1 | uniq 2> /dev/null)
31
32   # Copy the whole file if it is not provided by default
33   if [ "x$PACKAGE" == "x" ];
34   then
35     cp "$file" conf/
36     continue
37   fi
38
39   # Get the package from the repository and diff
40
41   FILENAME=$(apt-cache show $PACKAGE | grep ^Filename | cut -d ' ' -f 2-)
42   ARCHIVE=$(basename $FILENAME)
43
44   (cd archives && wget -q -nc -c $DEBIANMIRROR/$FILENAME)
45   dpkg -x archives/$ARCHIVE temp/
46
47   diff -q temp/$file $file > /dev/null
48   if [ $? -eq 1 ];
49   then
50     diff -u temp/$file $file > conf/patches/$(basename $file).patch
51   else
52     echo "$file: not changed"
53   fi
54
55 done