summaryrefslogtreecommitdiffstats
path: root/rpm-verify.sh
blob: 2b5088174e08feb8c128168155217558f3970a72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/bin/bash

# Partial script version of http://fedorasolved.org/Members/fenris02/post_upgrade_cleanup
LANG=C
if [ "$(/usr/bin/whoami)" != "root" ]; then
  echo "Must be run as root."
  exit 1
fi

DS=$(/bin/date +%Y%m%d)
TMPDIR=$(/bin/mktemp -d ${TMPDIR:-/tmp}/${0##*/}-XXXXX.log)
[ -d "${TMPDIR}" ] || mkdir -p "${TMPDIR}"

if [ -f /etc/sysconfig/prelink ]; then
  echo "Updating prelink info ..."
  . /etc/sysconfig/prelink \
  time /usr/sbin/prelink -av $PRELINK_OPTS >> /var/log/prelink/prelink.log 2>&1
fi

/sbin/ldconfig

# Remove temporary files
/bin/rm /var/lib/rpm/__db.00?

echo "rpm-Va: This may take 12mins or longer, please wait ... (Might be a good time for coffee)"
time /bin/rpm -Va > ${TMPDIR}/rpm-va2_${DS}.txt 2>&1
# Filter out prelink messages, kmod files, and kernel-devel files:
/bin/egrep -v '^(prelink: /|S\..\.\.\.\.\.\.    /|.{9}    /lib/modules/.*/modules\.|.{9}    /usr/src/kernels/)' \
  ${TMPDIR}/rpm-va2_${DS}.txt > ${TMPDIR}/RPM-VA2_${DS}.txt

echo "Generating reports ..."
/bin/egrep -v '^.{9}  c /' ${TMPDIR}/RPM-VA2_${DS}.txt > ${TMPDIR}/URGENT-REVIEW_${DS}.txt
/bin/egrep '^.{9}  c /' ${TMPDIR}/RPM-VA2_${DS}.txt > ${TMPDIR}/REVIEW-CONFIGS_${DS}.txt
/bin/find /etc -name '*.rpm?*' > ${TMPDIR}/REVIEW-OBSOLETE-CONFIGS_${DS}.txt

if [ \! -f /var/lib/yum/groups/installed ]; then
  # "group mark convert" converts the automatic data you get without using groups
  # as objects into groups as objects data. This makes it much easier to convert
  # to groups as objects without having to reinstall.
  if [ 0$(rpm -qf /etc/redhat-release --qf '%{version}\n') -gt 18 ]; then
    echo "F19 hack to help from upgrades"
    /usr/bin/yum group mark convert
  fi
fi

echo "Requesting extra reporting tools to be installed ..."
# yum -q install fpaste yum-utils rpmdevtools policycoreutils-python
/usr/bin/yum -q install \
  /usr/bin/fpaste \
  /usr/bin/package-cleanup /usr/bin/repoquery /usr/bin/show-installed /usr/sbin/yumdb \
  /usr/bin/rpmdev-rmdevelrpms \
  /usr/sbin/semanage \
  #

if [ -x /usr/sbin/semanage ]; then
  echo "Reporting SELinux policy ..."
  TMPF=$(/bin/mktemp -u /tmp/${0##*/}-XXXXX.txt)
  /usr/sbin/semanage -o $TMPF
  /bin/mv $TMPF ${TMPDIR}/SELINUX-CUSTOM-CONFIG_${DS}.txt
fi

if [ -x /usr/bin/rpmdev-rmdevelrpms ]; then
  echo "Reporting devel packages"
  /usr/bin/rpmdev-rmdevelrpms -l > ${TMPDIR}/SHOW-DEVELRPMS_${DS}.txt
fi

echo "Finding installed packages ..."
if [ -x /usr/bin/show-installed ]; then
  /usr/bin/show-installed -f kickstart -e -o ${TMPDIR}/SHOW-INSTALLED2_${DS}.txt
else
  $(dirname $0)/show-installed -f kickstart -e -o ${TMPDIR}/SHOW-INSTALLED2_${DS}.txt
fi
/bin/sort -o ${TMPDIR}/SHOW-INSTALLED2_${DS}.txt ${TMPDIR}/SHOW-INSTALLED2_${DS}.txt

if [ -x /usr/sbin/yumdb ]; then
  echo "Locating rpm packages that were installed without yum ..."
  /usr/sbin/yumdb --noplugins unset from_repo > ${TMPDIR}/SHOW-EXTERNAL_${DS}.txt
fi

echo "Reporting Problem RPMs"
if [ -x /usr/bin/package-cleanup ]; then
  /usr/bin/package-cleanup -q --problems > ${TMPDIR}/PROBLEM-PACKAGES_${DS}.txt
else
  /bin/rpm -Va --nofiles --noscripts > ${TMPDIR}/PROBLEM-PACKAGES_${DS}.txt
fi

if [ -x /usr/bin/package-cleanup ]; then
  echo "Reporting Duplicate RPMs"
  /usr/bin/package-cleanup -q --dupes > ${TMPDIR}/DUPLICATE-PACKAGES_${DS}.txt
fi

if [ -x /usr/bin/package-cleanup ]; then
  echo "Reporting Orphan RPMs"
  /usr/bin/package-cleanup -q --orphans > ${TMPDIR}/ORPHANED-PACKAGES_${DS}.txt
fi

if [ -x /usr/bin/repoquery ]; then
  echo "Collect leaf RPMs"
  /usr/bin/repoquery --installed --qf "%{nvra} - %{yumdb_info.reason}" \
    `/usr/bin/package-cleanup --leaves -q --all` \
    |/bin/grep '\- dep' \
    |while read n a a; do \
      echo remove $n
    done > ${TMPDIR}/SHOW-LEAVES_${DS}.txt
fi

echo "Collect list of enabled repos"
/usr/bin/yum repolist > ${TMPDIR}/YUM-REPOLIST_${DS}.txt

/bin/cat - <<EOT
==========
TMPDIR = ${TMPDIR}
==========
##### The following all break fpaste, so concatenate below instead:
#/usr/bin/fpaste ${TMPDIR}/[A-Z]*_${DS}.txt
## (excluding ${TMPDIR}/RPM-VA2_${DS}.txt to avoid duplicate info)
#/usr/bin/fpaste ${TMPDIR}/{REVIEW,SHOW,URGENT}*_${DS}.txt
==========
EOT

for fp in ${TMPDIR}/{YUM-REPOLIST,URGENT-REVIEW,REVIEW-CONFIGS,PROBLEM-PACKAGES,DUPLICATE-PACKAGES,ORPHANED-PACKAGES,REVIEW-OBSOLETE-CONFIGS,SELINUX-CUSTOM-CONFIG,SHOW-DEVELRPMS,SHOW-EXTERNAL,SHOW-LEAVES,SHOW-INSTALLED2}*_${DS}.txt; do
  if [ -s $fp ]; then
    /bin/cat - >> ${TMPDIR}/fpaste-output_${DS}.txt <<EOT
===============================================================================
===== $fp
===============================================================================
EOT
    /bin/cat $fp >> ${TMPDIR}/fpaste-output_${DS}.txt
  fi
done
echo fpaste ${TMPDIR}/fpaste-output_${DS}.txt

if [ "x$1" != "xNOPOST" ]; then
  /usr/bin/fpaste ${TMPDIR}/fpaste-output_${DS}.txt
fi

#EOF