Initial patchset, a bit buggy yet.
[nethome.git] / bin / backup-rpm
1 #! /bin/bash
2 set -ex
3 set -o pipefail
4 t=/tmp/backup-rpm.$$
5 trap "rm -rf $t" EXIT
6 rm -rf $t
7 mkdir $t
8 cd $t
9 mkdir $t/tmp
10 rpm -qa|sort >$t/tmp/rpm-qa
11 rpm -qal|sort -u|grep -v '^(contains no files)$' >$t/tmp/rpm-qal
12 (set +e;rpm -Va|sed 's#^[^/]*##' >$t/tmp/rpm-Va)
13 pattern="`tr '\n' '|' <<HERE|sed 's/|$//'
14 /boot/
15 /dev/
16 /etc/rc[.]d/rc[0-9][.]d/
17 /lib/modules/[^/]*/modules[.]
18 /root/
19 /home/
20 /tmp/
21 /usr/lib/perl5/
22 /usr/src/redhat/
23 /var/cache/
24 /var/lib/rpm/
25 /var/log/
26 /var/run/
27 /var/spool/
28 /var/lock/
29 /usr/share/ntop/
30 /usr/lib/locale/locale-archive
31 /var/lib/slocate/slocate.db
32 /usr/share/man/
33 /etc/aliases.db
34 /var/tmp/
35 /etc/prelink.cache
36 /etc/sgml/
37 /usr/include/tags
38 /usr/lib/IPTables-IPv4/
39 /usr/lib/python2.3/
40 /usr/lib/rpmdb
41 /usr/share/texmf/
42 /usr/share/yum-cli
43 /var/db/nscd/
44 HERE
45 `"
46 (
47         (find / -xdev -print -type d -print;cat $t/tmp/rpm-qal)|sort|uniq -u
48         cat $t/tmp/rpm-Va
49         while read -r file;do
50                 # cpio(1) needs "./bin/bash" pattern.
51                 rpm="$(for dir in /var/cache/yum /usr/src/redhat/RPMS /root/arch;do
52                         find $dir -name "`rpm -qf "$file"`.*.rpm"
53                         done|grep -v '[.]src[.]rpm$')"
54                 echo "$rpm"|grep -qv ' '
55                 rpm2cpio "$rpm"|cpio -id --no-absolute-filenames ."$file"
56                 mv ."$file" ."$file"-orig
57                 (set +e;diff -u ."$file"-orig "$file" >."$file".patch)
58                 echo ."$file"-orig
59                 echo ."$file".patch
60                 done <$t/tmp/rpm-Va
61         ) \
62         |grep --perl-regexp -v -e "^($pattern)" \
63         |(echo $t/tmp/rpm-qa;cat) \
64         |sort -u ###|sed 's#^/##'|(cd /;set +e;xargs tar cf -)
65 echo SUCCESS