Initial patchset, a bit buggy yet. liverpm
authorshort <>
Sat, 1 Jan 2005 18:21:45 +0000 (18:21 +0000)
committershort <>
Sat, 1 Jan 2005 18:21:45 +0000 (18:21 +0000)
bin/backup-rpm

index 409512e..75f5bf3 100755 (executable)
@@ -1,26 +1,65 @@
 #! /bin/bash
 set -ex
+set -o pipefail
 t=/tmp/backup-rpm.$$
 trap "rm -rf $t" EXIT
 rm -rf $t
 mkdir $t
-rpm -qa|sort >$t/rpm-qa
-rpm -qal|sort -u >$t/rpm-qal
-(set +e;rpm -Va >$t/rpm-Va)
+cd $t
+mkdir $t/tmp
+rpm -qa|sort >$t/tmp/rpm-qa
+rpm -qal|sort -u|grep -v '^(contains no files)$' >$t/tmp/rpm-qal
+(set +e;rpm -Va|sed 's#^[^/]*##' >$t/tmp/rpm-Va)
+pattern="`tr '\n' '|' <<HERE|sed 's/|$//'
+/boot/
+/dev/
+/etc/rc[.]d/rc[0-9][.]d/
+/lib/modules/[^/]*/modules[.]
+/root/
+/home/
+/tmp/
+/usr/lib/perl5/
+/usr/src/redhat/
+/var/cache/
+/var/lib/rpm/
+/var/log/
+/var/run/
+/var/spool/
+/var/lock/
+/usr/share/ntop/
+/usr/lib/locale/locale-archive
+/var/lib/slocate/slocate.db
+/usr/share/man/
+/etc/aliases.db
+/var/tmp/
+/etc/prelink.cache
+/etc/sgml/
+/usr/include/tags
+/usr/lib/IPTables-IPv4/
+/usr/lib/python2.3/
+/usr/lib/rpmdb
+/usr/share/texmf/
+/usr/share/yum-cli
+/var/db/nscd/
+HERE
+`"
 (
-       (find / -xdev -print -type d -print;cat $t/rpm-qal)|sort|uniq -u
-       sed 's#^[^/]*##' <$t/rpm-Va
-       touch $t/patch.list
-       for orig in `find / -xdev -name "*-orig"`;do
-               base="`echo $orig|sed 's/-orig$//'`"
-               if [ ! -f "$base" ];then continue;fi
-               (set +e;diff -u "$orig" "$base" >"$base".patch)
-               echo "$orig"
-               echo "$base"
-               echo "$base".patch|tee -a $t/patch.list
-               done
-       )|grep -v '^\(/boot/\|/dev/\|/etc/rc[.]d/rc[0-9][.]d/\|/lib/modules/[^/]*/modules[.]\|/root/\|/tmp/\|/usr/lib/perl5/\|/usr/src/redhat/\|/var/cache/\|/var/lib/rpm/\|/var/log/\|/var/run/\|/var/spool/\|/var/lock/\|/usr/share/ntop/\|/usr/lib/locale/locale-archive\|/var/lib/slocate/slocate.db\|/usr/share/man/\|/etc/aliases.db\|/var/tmp/\|/etc/prelink.cache\|/etc/sgml/\|/home/\|/usr/include/tags\|/usr/lib/IPTables-IPv4/\|/usr/lib/python2.3/\|/usr/lib/rpmdb\|/usr/share/texmf/\|/usr/share/yum-cli\|/var/db/nscd/\)' \
-       |grep -v '^(contains no files)$' \
-       |(echo $t/rpm-qa;cat) \
-       |sort -u|sed 's#^/##'|(cd /;set +e;xargs tar cf -)
-cat $t/patch.list|xargs rm -f
+       (find / -xdev -print -type d -print;cat $t/tmp/rpm-qal)|sort|uniq -u
+       cat $t/tmp/rpm-Va
+       while read -r file;do
+               # cpio(1) needs "./bin/bash" pattern.
+               rpm="$(for dir in /var/cache/yum /usr/src/redhat/RPMS /root/arch;do
+                       find $dir -name "`rpm -qf "$file"`.*.rpm"
+                       done|grep -v '[.]src[.]rpm$')"
+               echo "$rpm"|grep -qv ' '
+               rpm2cpio "$rpm"|cpio -id --no-absolute-filenames ."$file"
+               mv ."$file" ."$file"-orig
+               (set +e;diff -u ."$file"-orig "$file" >."$file".patch)
+               echo ."$file"-orig
+               echo ."$file".patch
+               done <$t/tmp/rpm-Va
+       ) \
+       |grep --perl-regexp -v -e "^($pattern)" \
+       |(echo $t/tmp/rpm-qa;cat) \
+       |sort -u ###|sed 's#^/##'|(cd /;set +e;xargs tar cf -)
+echo SUCCESS