source: projects/chkpkg/trunk/chkpkgv.sh @ 2068

Revision 2068, 10.3 KB checked in by iwamoto, 14 years ago (diff)

Init import

Line 
1#! /bin/bash
2
3TMP_DIR=/tmp
4DOC_DIR=/usr/share/doc
5
6IGNORE_DOC="N"
7IGNORE_ERR="N"
8VER_MODE="N"
9VBUILDER_MODE="N"
10
11SIG_OK="Y"
12VEN_OK="Y"
13LOG_UPDATE="Y"
14
15for name in $@  ; do
16    if [ $name = "-d" ]; then
17        IGNORE_DOC="Y"
18        continue
19    fi
20    if [ $name = "-i" ]; then
21        IGNORE_ERR="Y"
22        continue
23    fi
24    if [ $name = "-v" ]; then
25        VER_MODE="Y"
26        continue
27    fi
28    if [ $name = "-b" ]; then
29        VBUILDER_MODE="Y"
30        continue
31    fi
32done
33
34tmp1=`echo $@|sed -e "s/ -. / /g"`
35tmp2=`echo $tmp1|sed -e "s/^-. //g"`
36argfile=`echo $tmp2|sed -e "s/ -.$//g"`
37
38echo ""
39echo "Signature check"
40for name in $argfile  ; do
41    PKG_NAME=$name
42    case $name in
43        *.rpm)
44            rpm -K $name | cut -f2 -d":" |grep gpg > /dev/null
45            if [ $? = 0 ]; then
46                rpm -K $name |grep "NOT OK"
47                if [ $? = 0 ]; then
48                    echo -e "---- \033[1;31mFAIL\033[0m : "`basename $name`
49                    SIG_OK="N"
50                else
51                    echo -e "\033[1;32mPass\033[0m ---- : "`basename $name`
52                fi
53            else
54                echo -e "---- \033[1;31mFAIL\033[0m : "`basename $name`
55                SIG_OK="N"
56            fi
57            ;;
58        *)
59            echo $name" is NOT rpm package (skipped)"
60            continue
61            ;;
62    esac
63done
64
65echo ""
66echo "Vendor check"
67for name in $argfile  ; do
68    PKG_NAME=$name
69    case $name in
70        *.rpm)
71            rpm -qip $name |grep "Vendor:"|grep "(none)"
72            if [ $? = 0 ]; then
73                echo -e "---- \033[1;31mFAIL\033[0m : "`basename $name`
74                VEN_OK="N"
75            else
76                echo -e "\033[1;32mPass\033[0m ---- : "`basename $name`
77            fi
78            ;;
79        *)
80            echo $name" is NOT rpm package (skipped)"
81            continue
82            ;;
83    esac
84done
85
86if [ $VBUILDER_MODE = "Y" ]; then
87    NEW_ROOT="/var/local/vbootstrap/5.1_i386"
88    RPM_CMD="rpm --root="$NEW_ROOT
89    APTC_CMD="sudo chroot "$NEW_ROOT" apt-cache "
90    APTG_CMD="sudo chroot "$NEW_ROOT" apt-get "
91    ARV_DIR=$NEW_ROOT/var/cache/apt/archives
92    echo ""
93    echo "vbootstrap mode"
94    echo "New root = "$NEW_ROOT
95else
96    RPM_CMD=rpm
97    APTC_CMD=apt-cache
98    APTG_CMD="sudo apt-get "
99    ARV_DIR=/var/cache/apt/archives
100fi
101
102# echo $NEW_ROOT
103# echo $RPM_CMD
104# echo $APTC_CMD
105# echo $APTG_CMD
106
107echo ""
108echo "Changelog Check"
109for name in $argfile  ; do
110    PKG_NAME=$name
111    case $name in
112        *.rpm)
113            TMP=`$RPM_CMD -qip $PKG_NAME|grep ^Name|cut -f2 -d:`
114            PKG_BASE_NAME=`echo $TMP|cut -f1 -d" "`
115           
116            LANG=C $RPM_CMD -q --changelog $PKG_BASE_NAME > $TMP_DIR/installed_pkg
117            grep -q "$PKG_BASE_NAME is not installed" $TMP_DIR/installed_pkg
118            if [ $? = 0 ]; then
119                echo $PKG_BASE_NAME" is not installed (getting from apt repository)"
120                $APTC_CMD --no-all-versions -q show $PKG_BASE_NAME > $TMP_DIR/current_pkg
121                if [ $? -gt 0 ]; then
122                    echo $PKG_BASE_NAME" is not found in apt repository (skipped)"
123                    continue
124                fi
125               
126                APT_PKG=`cat $TMP_DIR/current_pkg|grep "^Package:"|cut -f2 -d" "`
127                APT_VER=`cat $TMP_DIR/current_pkg|grep "^Version:"|cut -f2 -d" "|sed "s/.://"`
128                APT_ARCH=`cat $TMP_DIR/current_pkg|grep "^Architecture:"|cut -f2 -d" "`
129                APT_ARV_FILE=$ARV_DIR"/"$APT_PKG"-"$APT_VER"."$APT_ARCH.rpm
130
131                if [ -f $APT_ARV_FILE ]; then
132                    echo $APT_ARV_FILE" is found."
133                else
134                    $APTG_CMD -d -qq install $APT_PKG
135                fi
136                LANG=C $RPM_CMD -qp --changelog $APT_ARV_FILE > $TMP_DIR/installed_pkg
137            fi
138
139            LANG=C $RPM_CMD -qp --changelog $PKG_NAME > $TMP_DIR/new_pkg
140
141            diff -q $TMP_DIR/installed_pkg $TMP_DIR/new_pkg > /dev/null
142            if [ $? = 0 ]; then
143                echo -e "---- \033[1;31mFAIL\033[0m : "`basename $PKG_NAME`
144                LOG_UPDATE="N"
145            else
146
147                TLD_INSED=`head -n1 $TMP_DIR/installed_pkg|sed s/\*\ //|cut -d" " -f1,2,3,4` 
148                TLD_NEW=`head -n1 $TMP_DIR/new_pkg|sed s/\*\ //|cut -d" " -f1,2,3,4`
149                if [ "$TLD_INSED" = "$TLD_NEW" ]; then
150                    echo "*************************************"
151                    echo "*            WARNING !!             *"
152                    echo "* Change log DATE is NOT updated !! *"
153                    echo "*************************************"
154                fi
155#               echo `basename $PKG_NAME`
156                echo -e "\033[1;32mPass\033[0m ---- : "`basename $PKG_NAME`
157                diff $TMP_DIR/installed_pkg $TMP_DIR/new_pkg > $TMP_DIR/diff_changelog_next
158                if [ -f $TMP_DIR/diff_changelog ]; then
159                    diff -q $TMP_DIR/diff_changelog $TMP_DIR/diff_changelog_next > /dev/null
160                    if [ $? -ne 0 ]; then
161                        DIFF_LINE=`cat $TMP_DIR/diff_changelog_next|wc -l`
162                        if [ $DIFF_LINE -lt "20" ]; then
163                            cat $TMP_DIR/diff_changelog_next
164                        else
165                            cat $TMP_DIR/diff_changelog_next|head -n10
166                            echo "Changelog diff is too long.. skipped."
167                        fi
168                    fi
169                else
170                    DIFF_LINE=`cat $TMP_DIR/diff_changelog_next|wc -l`
171#                   echo $DIFF_LINE
172                    if [ $DIFF_LINE -lt "20" ]; then
173                        cat $TMP_DIR/diff_changelog_next
174                    else
175                        cat $TMP_DIR/diff_changelog_next|head -n10
176                        echo "Changelog diff is too long.. skipped."
177                    fi
178                    mv $TMP_DIR/diff_changelog_next $TMP_DIR/diff_changelog
179                fi
180            fi
181            ;;
182        *)
183            echo $name" is NOT rpm package (skipped)"
184            continue
185            ;;
186    esac
187done
188
189rm -rf $TMP_DIR/diff_changelog_next $TMP_DIR/diff_changelog
190
191echo ""
192if [ $IGNORE_ERR = "N" ]; then
193    if [ $SIG_OK = "N" ]; then
194        exit
195    fi
196    if [ $VEN_OK = "N" ]; then
197        exit
198    fi
199    if [ $LOG_UPDATE = "N" ]; then
200        exit
201    fi
202fi
203
204if [ $IGNORE_DOC = "Y" ]; then
205    echo "Files check (Ignore Document Mode)"
206else
207    echo "Files check"
208fi
209for name in $argfile  ; do
210
211    PKG_NAME=$name
212    echo $PKG_NAME|grep -q ".src.rpm"
213    if [ $? = 0 ]; then
214        echo "Skip ---- : "`basename $PKG_NAME`" (src package)"
215        continue
216    fi
217
218    TMP=`$RPM_CMD -qip $PKG_NAME|grep ^Name|cut -f2 -d:`
219    PKG_BASE_NAME=`echo $TMP|cut -f1 -d" "`
220
221    LANG=C $RPM_CMD -ql $PKG_BASE_NAME > $TMP_DIR/installed_pkg
222    grep -q "$PKG_BASE_NAME is not installed" $TMP_DIR/installed_pkg
223    if [ $? = 0 ]; then
224        echo $PKG_BASE_NAME" is not installed (getting from apt repository)"
225        $APTC_CMD --no-all-versions -q show $PKG_BASE_NAME > $TMP_DIR/current_pkg
226        if [ $? -gt 0 ]; then
227            echo $PKG_BASE_NAME" is not found in apt repository (skipped)"
228            continue
229        fi
230       
231        APT_PKG=`cat $TMP_DIR/current_pkg|grep "^Package:"|cut -f2 -d" "`
232        APT_VER=`cat $TMP_DIR/current_pkg|grep "^Version:"|cut -f2 -d" "|sed "s/.://"`
233        APT_ARCH=`cat $TMP_DIR/current_pkg|grep "^Architecture:"|cut -f2 -d" "`
234        APT_ARV_FILE=$ARV_DIR"/"$APT_PKG"-"$APT_VER"."$APT_ARCH.rpm
235
236        if [ -f $APT_ARV_FILE ]; then
237            echo $APT_ARV_FILE" is found."
238        else
239            $APTG_CMD -d -qq install $APT_PKG
240        fi
241        LANG=C $RPM_CMD -qlp $APT_ARV_FILE > $TMP_DIR/installed_pkg
242    fi
243
244    LANG=C rpm -qlp $PKG_NAME > $TMP_DIR/new_pkg
245
246    if [ $IGNORE_DOC = "Y" ]; then
247        rm -f $TMP_DIR/tmp_pkg
248        grep -v $DOC_DIR/$PKG_BASE_NAME $TMP_DIR/new_pkg > $TMP_DIR/tmp_pkg
249        mv $TMP_DIR/tmp_pkg $TMP_DIR/new_pkg
250        grep -v $DOC_DIR/$PKG_BASE_NAME $TMP_DIR/installed_pkg > $TMP_DIR/tmp_pkg
251        mv $TMP_DIR/tmp_pkg $TMP_DIR/installed_pkg
252    fi
253
254    diff -q $TMP_DIR/installed_pkg $TMP_DIR/new_pkg
255    if [ $? = 0 ]; then
256        echo -e "\033[1;32mPass\033[0m ---- : "$PKG_BASE_NAME
257    else
258        echo -e "---- \033[1;31mFAIL\033[0m : "$PKG_BASE_NAME
259        if [ $VER_MODE = "Y" ]; then
260            diff $TMP_DIR/installed_pkg $TMP_DIR/new_pkg
261        else
262            INSTALLED_BYTE=`wc -c $TMP_DIR/installed_pkg|cut -f1 -d" "`
263            INSTALLED_WORD=`wc -w $TMP_DIR/installed_pkg|cut -f1 -d" "`
264            INSTALLED_LINE=`wc -l $TMP_DIR/installed_pkg|cut -f1 -d" "`
265            NEW_BYTE=`wc -c $TMP_DIR/new_pkg|cut -f1 -d" "`
266            NEW_WORD=`wc -w $TMP_DIR/new_pkg|cut -f1 -d" "`
267            NEW_LINE=`wc -l $TMP_DIR/new_pkg|cut -f1 -d" "`
268            echo "Installed : "$INSTALLED_BYTE $INSTALLED_WORD $INSTALLED_LINE $PKG_BASE_NAME
269            echo "New       : "$NEW_BYTE $NEW_WORD $NEW_LINE `basename $PKG_NAME`
270        fi
271    fi
272done
273
274echo ""
275echo "Requires check"
276for name in $argfile  ; do
277
278    PKG_NAME=$name
279    echo $PKG_NAME|grep -q ".src.rpm"
280    if [ $? = 0 ]; then
281        echo "Skip ---- : "`basename $PKG_NAME`" (src package)"
282        continue
283    fi
284
285    TMP=`rpm -qip $PKG_NAME|grep ^Name|cut -f2 -d:`
286    PKG_BASE_NAME=`echo $TMP|cut -f1 -d" "`
287
288    LANG=C rpm -qRp $PKG_NAME |sort|uniq > $TMP_DIR/new_pkg
289    LANG=C $RPM_CMD -qR $PKG_BASE_NAME |sort|uniq > $TMP_DIR/installed_pkg
290    grep -q "$PKG_BASE_NAME is not installed" $TMP_DIR/installed_pkg
291    if [ $? = 0 ]; then
292        echo $PKG_BASE_NAME" is not installed (getting from apt repository)"
293
294        $APTC_CMD --no-all-versions -q show $PKG_BASE_NAME > $TMP_DIR/current_pkg
295        if [ $? -gt 0 ]; then
296            echo $PKG_BASE_NAME" is not found in apt repository (skipped)"
297            continue
298        fi
299       
300        APT_PKG=`cat $TMP_DIR/current_pkg|grep "^Package:"|cut -f2 -d" "`
301        APT_VER=`cat $TMP_DIR/current_pkg|grep "^Version:"|cut -f2 -d" "|sed "s/.://"`
302        APT_ARCH=`cat $TMP_DIR/current_pkg|grep "^Architecture:"|cut -f2 -d" "`
303        APT_ARV_FILE=$ARV_DIR"/"$APT_PKG"-"$APT_VER"."$APT_ARCH.rpm
304
305        if [ -f $APT_ARV_FILE ]; then
306            echo $APT_ARV_FILE" is found."
307        else
308            $APTG_CMD -d -qq install $APT_PKG
309        fi
310        LANG=C $RPM_CMD -qRp $APT_ARV_FILE |sort|uniq > $TMP_DIR/installed_pkg
311    fi
312
313    diff -q $TMP_DIR/installed_pkg $TMP_DIR/new_pkg > /dev/null
314    if [ $? = 0 ]; then
315        echo -e "\033[1;32mPass\033[0m ---- : "$PKG_BASE_NAME
316    else
317        echo -e "---- \033[1;31mFAIL\033[0m : "$PKG_BASE_NAME
318        diff $TMP_DIR/installed_pkg $TMP_DIR/new_pkg
319    fi
320done
321
322
323echo ""
324echo "Plus Requires check"
325for name in $argfile  ; do
326
327    PKG_NAME=$name
328    PKG_BASE_NAME=`basename $PKG_NAME`
329    PLUS_OK="Y"
330
331    echo $PKG_NAME|grep -q ".src.rpm"
332    if [ $? = 0 ]; then
333        echo "Skip ---- : "`basename $PKG_NAME`" (src package)"
334        continue
335    fi
336    LIBLIST=`LANG=C rpm -qRp $PKG_NAME |cut -f1 -d" "|cut -f1 -d"("|sort|uniq`
337
338    for LIB in $LIBLIST ; do
339        echo $LIB | grep -q "\(/bin\)\|\(/sbin\)\|\(rpmlib\)"
340        if [ $? = 0 ]; then
341            if [ $VER_MODE = "Y" ]; then
342                echo "Skip ....... "$LIB
343            fi
344            continue
345        fi
346        if [ $VER_MODE = "Y" ]; then
347            echo "Checking ... "$LIB
348        fi
349
350        echo $LIB | grep -q "\.so\."
351        if [ $? = 0 ]; then
352            # so lib
353            PNAME=`$APTC_CMD --names-only search $LIB|cut -f1 -d" "|sed s/gtk210.*//`
354            $APTC_CMD --no-all-versions showpkg $PNAME|grep -q "pkglist\.plus"
355            if [ $? = 0 ]; then
356                echo "VinePlus "$PNAME"("$LIB") is required" 
357                PLUS_OK="N"
358            fi
359        else
360            # package
361            PNAME=$LIB
362            $APTC_CMD --no-all-versions showpkg $PNAME|grep -q "pkglist\.plus"
363            if [ $? = 0 ]; then
364                echo "VinePlus "$PNAME" is required" 
365                PLUS_OK="N"
366            fi
367        fi
368    done
369
370    if [ $PLUS_OK = "Y" ]; then
371        echo -e "\033[1;32mPass\033[0m ---- : "$PKG_BASE_NAME
372    else
373        echo -e "---- \033[1;31mFAIL\033[0m : "$PKG_BASE_NAME
374    fi
375done
Note: See TracBrowser for help on using the repository browser.