source: soft/build_system/build_system/upload/robot/trunk/uplftp @ 1

Last change on this file since 1 was 1, checked in by fasma, 13 years ago

Initial Import from Mandriva's soft revision 224062 and package revision 45733

File size: 12.4 KB
Line 
1#!/usr/bin/env /bin/zsh
2# Chmouel Boudjnah <chmouel@mandriva.com>
3#
4# $Id: uplftp 888 2005-10-17 16:28:14Z mandrake $
5#
6setopt localoptions extendedglob
7local BASENAME ARG
8export BASENAME=$(basename $0)
9export CVS_RSH=ssh
10# force PATH to avoid trojan
11export PATH=/sbin:/usr/sbin:/bin:/usr/bin
12
13if [ -z "$SUDO_USER" ]; then
14    echo "$0 must be called from sudo"
15    exit 1
16fi
17
18#: ${CONFIGFILE=/root/.config_distrib}
19#if [[ ! -f $CONFIGFILE ]];then
20#    echo "I can't find a config file"
21#    echo "Ajust your variable \$CONFIGFILE"
22#    exit 1
23#fi
24#
25#. $CONFIGFILE
26
27. /root/.config_distrib
28
29[[ $UID == 0 || -n $TEST ]] || {
30        echo "You must be root or run $BASENAME via sudo"
31    exit 1;
32}
33
34usage () {
35        echo "Usage: $BASENAME -[mvncloh]"
36        echo -e "\t-v --visual: Verbose"
37        echo -e "\t-n --noupload: No Upload"
38        echo -e "\t-c --fermetageule: Don't bored me with check piece of cake."
39        echo -e "\t-m --nomove: No move"
40        echo -e "\t-l --nochangelog: Dont check changelog"
41        echo -e "\t-o --onlycheck:  Only check if the files can be uploaded"
42        echo -e "\t-nc --nocvs: Dont cvs it"
43        echo -e "\t-x --debug: Debug me babe"
44        echo -e "\t-h --help: This help"
45        echo -e "\t-i --norpmlint: No rpmlint"
46}
47
48while [[ $1 = (|-*|--*) && $1 != (|-|--) ]];do
49        case $1 in
50            (|-x|--debug)
51            DEBUG="true"; shift;
52            ;;
53            (|-v|--visual)
54            VISUAL="true"; shift;
55            ;;
56            (|-i|--norpmlint)
57            NORPMLINT="true"; shift;
58            ;;
59            (|-n|--noupload)
60            NOUPLOAD="true"; shift;
61            ;;
62            (|-c|--fermetageule)
63            NOCHECK="true"; shift;
64                        ;;
65            (|-m|--nomove)
66            NOMOVE="true"; shift;
67            ;;
68            (|-nc|--nocvs)
69            NOCVS="tru";shift
70            ;;
71            (|-l|--nochangelog)
72            NOCNG="true";shift;
73            ;;
74            (|-o|--onlycheck)
75            ONLYCHECK="true"; shift;
76            ;;
77            (|-h|--help)
78            usage; return 0;
79            ;;
80            -*)
81            print "*Error* unknown option $1"
82            usage; return 1;
83            ;;
84        esac
85done
86
87if [[ -n $DEBUG ]];then
88    setopt XTRACE
89else
90    unsetopt XTRACE
91fi
92
93if [[ -n $VISUAL ]];then
94        echo "----------------------"
95        print "Remote upload: $DISTRIB"
96        print "Local move: $LDISTRIB"
97        echo "----------------------"
98fi
99
100function check () {
101        local QUIET
102        local NAME=$1
103        [[ -n $VISUAL ]] && print "Checking Files of $NAME"
104        [[ -n $VISUAL ]] || QUIET="-q"
105
106        case $NAME in
107            *.src.rpm) ;;
108            *)
109            USERS=$(perl -an -e 'while(@list=getpwent){print $list[0],"|" unless $list[2] <= 500}' < /etc/passwd|sed 's/|$//')
110
111            $(which rpm) -qpl -v $NAME|awk '{print $2,$3}'|grep -iE $QUIET "\<($USERS)\>" \
112            && {
113                        print "A user with a local USERNAME was found in $NAME"
114                        print "Fix your %defattr(-,root,root) before upload"
115                        exit 1
116            }
117        esac
118
119        # Check that the content of the archive is coherent with the filelist
120        UN=`mktemp /tmp/filelistXXXXXX`
121        DEUX=`mktemp /tmp/archiveXXXXXX`
122        rpm -qlp --noghost $NAME | fgrep -v '(contains no files)' | sort -u > $UN
123        rpm2cpio $NAME |cpio --quiet -t|sed 's@^\.@@'|sort -u > $DEUX
124        if ! cmp $UN $DEUX; then
125            echo "bad cpio archive in $NAME, upload aborted"
126            diff -u $UN $DEUX
127            rm -f $UN $DEUX
128            exit 1
129        fi
130    rm -f $UN $DEUX
131
132       
133#       if [[ -z $NOCNG ]];then
134#               VERSION_RPM=$(rpm -qp --qf '%{VERSION}-%{RELEASE}\n' ${NAME}|sed 's/ //g')
135#               VERSION_CHG=$(/usr/local/bin/ch -r ${NAME}|sed 's/ //g')
136#               if [[ $VERSION_RPM != $VERSION_CHG ]];then
137#                       echo "$NAME contain a bad ChangeLog or you forgot to put one"
138#                       exit 1
139#               fi
140#       fi
141
142}
143
144function upload () {
145        NAME=$1
146        DEST=$2
147        [[ -z $UPLHOST ]] && UPLHOST="mandriva.com"
148        if [ -n "$LOCALDIR" ]; then
149            if [ ! -d "$LOCALDIR" ]; then
150                echo "directory $LOCALDIR unreachable"
151                exit 1
152            fi
153            mv -fv $NAME $LOCALDIR
154            success=$?
155            NAME=$LOCALDIR/`basename $NAME`
156            chmod a+r $NAME
157            if [ -n "$LUSER" ]; then
158                chown $LUSER $NAME
159            fi
160            NOMOVE=true
161        elif [[ -z "$SSH" ]];then
162            unsetopt XTRACE
163            ncftpput -d /home/mandrake/log/ncftp-log -v -u $USER -p $PASS $UPLHOST $DISTRIB$DEST $NAME
164            success=$?
165            [[ -n $DEBUG ]] && setopt XTRACE
166        else
167            base=`basename $NAME`
168            if [[ -n "$LUSER" ]]; then
169                if [[ -n "$TMPDIR" ]]; then
170                    mv -f $NAME $TMPDIR
171                    NAME=$TMPDIR/$base
172                    chmod a+r $NAME
173                fi
174                su $LUSER -c "scp $NAME $USER@$UPLHOST:/$DISTRIB/$DEST/$base.new"
175                success=$?
176                if [ $success = 0 ]; then
177                    [ -n "$TMPDIR" ] && rm -f $NAME
178                        case $base in
179                                        *.x86_64.rpm|*.i586.rpm|*.src.rpm)
180                                          #su $LUSER -c "ssh $USER@$UPLHOST \"mv /$DISTRIB/$DEST/$base.new /$DISTRIB/$DEST/$base; ln /$DISTRIB/$DEST/$base /$DISTRIB/build/$DEST/$base\""
181                                          su $LUSER -c "ssh $USER@$UPLHOST \"mv /$DISTRIB/$DEST/$base.new /$DISTRIB/$DEST/$base\""
182                                        ;;
183                                        *)
184                                          su $LUSER -c "ssh $USER@$UPLHOST \"mv /$DISTRIB/$DEST/$base.new /$DISTRIB/$DEST/$base\""
185                                        ;;
186                        esac
187                fi
188            else
189                scp $NAME $USER@$UPLHOST:/$DISTRIB/$DEST/
190                success=$?
191            fi
192        fi
193
194        if [[ -n $LDISTRIB ]]; then
195            if [[ -n $CRYPTO ]];then
196                case $NAME in
197                    *.alpha.rpm)
198                    DESLO=/$LDISTRIB/alpha/RPMS/
199                    ;;
200                    *.sparc*.rpm)
201                    DESLO=/$LDISTRIB/sparc/RPMS/
202                    ;;
203                    *.ppc.rpm)
204                    DESLO=/$LDISTRIB/ppc/RPMS/
205                    ;;
206                    *)
207                    DESLO=/$LDISTRIB/$DEST/
208                    ;;
209                esac
210            else
211                    DESLO=/$LDISTRIB/$DEST/
212            fi
213        else
214            NOMOVE=1
215        fi
216
217        [[ -n $VISUAL ]] && OPT="-v"
218        [ -z "$NOMOVE" -a "$success" -eq 0 ] && mv $OPT -f $NAME $DESLO
219
220}
221               
222check_user() {
223    # arch porters are allowed to upload all the packages on their arch
224    case $1 in
225    *.sparc.rpm)
226        case $SUDO_USER in
227            stefan|nanardon|peroyvind) return 0;;
228        esac
229        ;;
230    *.alpha.rpm)
231        case $SUDO_USER in
232            stefan) return 0;;
233        esac
234        ;;
235    *.ppc.rpm)
236        case $SUDO_USER in
237            stewb|nanardon|spturtle|dtholen) return 0;;
238        esac
239        ;;
240    *.x86_64.rpm)
241        case $SUDO_USER in
242            guillomovitch|nanardon|mandrake) return 0;;
243        esac
244        ;;   
245    *.ia64.rpm)
246        case $SUDO_USER in
247            gb) return 0;;
248        esac
249        ;;   
250        esac
251
252    case $1 in
253    kernel-uml*)
254        case $SUDO_USER in
255            tibor|tv) ;;
256            *) return 1;;
257        esac
258        ;;
259    kernel-mosix*) ;;
260    kernel-headers*) ;;
261    kernel*)
262        case $SUDO_USER in
263            flepied|stewb|gb|dtholen|thomas|buchan|svetljo|warly|apatard|leitner) ;;
264            *) return 1;;
265        esac
266        ;;
267    XFree86-*)
268        case $SUDO_USER in
269            flepied|pablo|gb) ;;
270            *) return 1;;
271        esac
272        ;;
273    rpmlint*|libpcsclite*|pcsc-lite*)
274        case $SUDO_USER in
275            flepied) ;;
276            *) return 1;;
277        esac
278        ;;
279    rpm-*|popt-*)
280        case $SUDO_USER in
281            flepied|nanardon|gb|rafael) ;;
282            *) return 1;;
283        esac
284        ;;
285    mount-cifs-*)
286        case $SUDO_USER in
287                *) ;;
288    esac
289        ;;
290        util-linux*|losetup-*|mount-*)
291        case $SUDO_USER in
292                quintela|gb|blino|pixel|warly|tv|apatard|fcrozat) ;;
293                *) return 1;;
294        esac
295        ;;
296    initscripts-*|glibc-*|nscd-*)
297        case $SUDO_USER in
298            pixel|flepied|gb|warly) ;;
299            *) return 1;;
300        esac
301        ;;
302    share-utils-*|text-utils-*|files-utils-*)
303        case $SUDO_USER in
304            tv) ;;
305            *) return 1;;
306        esac
307        ;;
308    kdeaddons-*|kdeaddons-atlantik-*|kdeaddons-konqimagegallery-*|kdeaddons-noatun-*|kdeadmin-*|kdeadmin-kpackage-*|kdeartwork-*|kdeartwork-kde-classic-*|kdebase-*|kdebase-common-*|kdebase-kate-*|kdebase-kdeprintfax-*|kdebase-kdm-*|kdebase-kdm-config-file-*|kdebase-konsole-*|kdebase-nsplugins-*|kdebase-progs-*|kdegames-*|kdegraphics-*|kdegraphics-common-*|kdegraphics-kdvi-*|kdegraphics-kfax-*|kdegraphics-kghostview-*|kdegraphics-kiconedit-*|kdegraphics-kooka-*|kdegraphics-kpaint-*|kdegraphics-kpdf-*|kdegraphics-kpovmodeler-*|kdegraphics-kruler-*|kdegraphics-ksnapshot-*|kdegraphics-ksvg-*|kdegraphics-kuickshow-*|kdegraphics-kview-*|kdegraphics-mrmlsearch-*|kdelibs-common-*|kdemultimedia-*|kdemultimedia-common-*|kdemultimedia-kaboodle-*|kdemultimedia-kaudiocreator-*|kdemultimedia-kmid-*|kdemultimedia-kmidi-*|kdemultimedia-kmix-*|kdemultimedia-krec-*|kdemultimedia-kscd-*|kdemultimedia-noatun-*|kdenetwork-*|kdenetwork-common-*|kdenetwork-kdict-*|kdenetwork-kget-*|kdenetwork-knewsticker-*|kdenetwork-kopete-*|kdenetwork-kppp-*|kdenetwork-krfb-*|kdenetwork-ksirc-*|kdenetwork-ktalk-*|kdenetwork-kxmlrpcd-*|kdepim-*|kdepim-common-*|kdepim-kaddressbook-*|kdepim-karm-*|kdepim-kmail-*|kdepim-knode-*|kdepim-knotes-*|kdepim-kontact-*|kdepim-korganizer-*|kdepim-korn-*|kdepim-kpilot-*|kdesdk-*|kdetoys-*|libkdeaddons1-3.1.92-8mdk.i586.rpm-*|libkdeaddons1-konqimagegallery-*|libkdeaddons1-noatun-*|libkdeadmin1-*|libkdebase4-*|libkdebase4-devel-*|libkdebase4-kate-*|libkdebase4-kate-devel-*|libkdebase4-konsole-*|libkdebase4-nsplugins-*|libkdebase4-nsplugins-devel-*|libkdecore4-*|libkdecore4-devel-*|libkdegames1-*|libkdegames1-devel-*|libkdegraphics0-common-*|libkdegraphics0-common-devel-*|libkdegraphics0-kooka-*|libkdegraphics0-kooka-devel-*|libkdegraphics0-ksvg-*|libkdegraphics0-ksvg-devel-*|libkdegraphics0-kuickshow-*|libkdegraphics0-kview-*|libkdegraphics0-kview-devel-*|libkdegraphics0-mrmlsearch-*|libkdemultimedia1-common-*|libkdemultimedia1-common-devel-*|libkdemultimedia1-kaboodle-*|libkdemultimedia1-kmix-*|libkdemultimedia1-krec-*|libkdemultimedia1-kscd-*|libkdemultimedia1-kscd-devel-*|libkdemultimedia1-noatun-*|libkdemultimedia1-noatun-devel-*|libkdenetwork2-common-*|libkdenetwork2-common-devel-*|libkdenetwork2-knewsticker-*|libkdenetwork2-kopete-*|libkdenetwork2-kopete-devel-*|libkdenetwork2-ksirc-*|libkdenetwork2-kxmlrpcd-*|libkdepim2-common-*|libkdepim2-common-devel-*|libkdepim2-kaddressbook-*|libkdepim2-kaddressbook-devel-*|libkdepim2-kmail-*|libkdepim2-kmail-devel-*|libkdepim2-knode-*|libkdepim2-knode-devel-*|libkdepim2-kontact-*|libkdepim2-kontact-devel-*|libkdepim2-korganizer-*|libkdepim2-korganizer-devel-*|libkdepim2-kpilot-*|libkdepim2-kpilot-devel-*|libkdesdk1-*|libkdesdk1-devel-3.1.92-10mdk.i586.rpm-*|libkdetoys1-*|libkdetoys1-devel-*|lisa-*|libqt3-*|libqt3-devel-*|libqt3-mysql-*|libqt3-odbc-*|libqt3-psql-*|qt3-common-*|qt3-example-*|libquanta0-*|libquanta0-devel-*|quanta-*|quanta-kommander-*)
309        case $SUDO_USER in
310            lmontel|baudens|daouda|fcrozat|warly|pixel|boiko|helio) ;;
311            *) return 1;;
312        esac
313        ;;
314    drakconf-themes-*)
315        return 1;;
316    esac
317    return 0
318}
319
320check_host() {
321        build_host=`rpm -qp --qf '%{BUILDHOST}' $1`
322    case $1 in
323    *.(i586|noarch|src).rpm)
324        case $build_host in
325            n1.mandriva.com|n2.mandriva.com|n3.mandriva.com|n4.mandriva.com|n5.mandriva.com|kalinda.cjw.nep|moskow.vodka.it|baader.subversion.alt|amd64.aero.jussieu.fr|orion.nanardon|deborah.mandriva.com)
326                return 0;;
327        esac
328        return 1;;
329    *.x86_64.rpm)
330    case $build_host in
331            kalinda.cjw.nep|moskow.vodka.it|baader.subversion.alt|amd64.aero.jussieu.fr|orion.nanardon|ramanujan.mandriva.com|ramanujan.mandrakesoft.com|deborah.mandriva.com)
332                return 0;;
333        esac
334        return 1;;*)
335        return 0;;
336    esac
337}
338
339function main () {
340        NAME=$1
341        DEST=$2
342
343        [[ -f $1 ]] || {
344                print "Heu $1 is fly on other country or is not a file"
345                return 1
346        }
347
348#       echo "upload is disabled no ssh available"
349#       exit 1
350
351        # don't check on force scripts
352        case $BASENAME in
353            *force) ;;
354           
355            *)
356            check_user `basename $NAME`
357            if [ $? = 1 ] ; then
358                echo "$SUDO_USER is not authorized to upload $NAME. Upload rejected."
359                return 1
360            fi
361           
362            check_host $NAME
363            if [ $? = 1 ]; then
364                echo "$1 was not built on the cluster: $build_host. Upload rejected."
365                return 1
366            fi
367
368            case $NAME in
369                *.src.rpm) ;;
370                *)
371                    /usr/local/bin/check-multiarch $NAME
372                    if [ $? != 0 ]; then
373                        echo "$NAME is not multiarch compliant for this files. Upload rejected."
374                        return 1
375                    fi
376                ;;
377                esac
378            ;;
379        esac
380       
381        [[ -n $ONLYCHECK ]] && {
382            check $NAME
383        }
384        [[ -z $NOCVS ]] && cvsup $NAME
385
386        [[ $DEST = RPMS && -z $NOCHECK ]] && check $NAME
387
388        if ! /usr/local/bin/check_release $NAME; then
389                echo release of $NAME does not finish with "mdk"
390                exit 1
391        fi
392
393        [[ -z $NORPMLINT ]] && {
394            type -a rpmlint > /dev/null && rpmlint $NAME
395                rpm --ignoresize --test -U $NAME
396        }
397
398        [[ -z $NOUPLOAD ]] && upload $NAME $DEST
399}
400
401ARG=($@)
402[[ -z $ARG ]] && {
403        echo "Give me a fuel for my aeroplane"
404        return 1
405}
406
407#  if [ -z "TESTING_FTPDEV" ]; then
408#      echo "upload is disabled no ssh available"
409#      exit 1
410#  fi
411
412#  # check bad srpms
413#  for i in $ARG; do
414#      case $i in
415#       *.src.rpm)
416#           if [ -x /home/mandrake/bin/isbinary.py ]; then
417#               if /home/mandrake/bin/isbinary.py $i; then
418#                   echo "invalid srpms $i" 1>&2
419#                   exit 1
420#               fi
421#           fi
422#           ;;
423#      esac
424#  done
425
426for i in $ARG;do
427    [[ -n $VISUAL ]] && print "Uploading $i"
428        case $i in
429                *.src.rpm)
430                main $i SRPMS
431                ;;
432                *.i386.rpm)
433                print "$i shouldnt be a i386, adjust your ~/.rpmrc"
434                ;;
435                *.(|i586|noarch|alpha|ppc|x86_64|amd64|sparc|sparc32).rpm)
436                main $i RPMS
437                ;;
438                *)
439                print "$i dont finish by (i586|noarch|alpha|ppc|x86_64|amd64|sparc|sparc32).rpm"
440                ;;
441        esac
442done
443
444#[[ -f /home/mandrake/bin/cooclean &&  -z $CRYPTO ]] && /home/mandrake/bin/cooclean
445
446exit 0
Note: See TracBrowser for help on using the repository browser.