import repository from arizona
[raven.git] / webpage / downloads / initscript
1 #! /bin/sh
2
3 echo Starting Stork initscript: Stage 1
4
5 # check for root user
6 if [ $UID -ne "0" ]
7 then
8    echo "You must run this program with root permissions..."
9    exit 1
10 fi
11
12 # logging: mark when the stage1 initscript started running
13 date > /tmp/stork_initscript_stage1.log
14
15 # there is no mutex in this script; any mutex is placed in the stage2
16 # initscript. This script uses unique temporary filenames to handle the case
17 # where two instances could be executed at the same time.
18
19 # filename for the publickey we will use to verify the stage2 initscript
20 PUBKEY_FN=`mktemp /tmp/stork-publickey.XXXXXXXXXX`
21
22 # filename for the extract stage2 initscript
23 STAGE2_FN=`mktemp /tmp/stork-stage2-initscript.XXXXXXXXXX`
24
25 # URL for the stage2 initscript
26 STAGE2_URL="http://stork-repository.cs.arizona.edu/stork-install/initscript_stage2"
27
28 # filename and URL for the signature of the stage2 initscript
29 STAGE2_SIGNATURE_FN=$STAGE2_FN.signature
30 STAGE2_SIGNATURE_URL=$STAGE2_URL.signature
31
32 # create the public key file
33 echo "-----BEGIN PUBLIC KEY-----" > $PUBKEY_FN
34 echo "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALAfnXGY23wti1DrlMU2i4292LS6Pd1j" >> $PUBKEY_FN
35 echo "6JyL3wZjCs3TIn0bmKDX4kPUUGJ3cExU7FUtgm6FX8h5daNojni7wVECAwEAAQ==" >> $PUBKEY_FN
36 echo "-----END PUBLIC KEY-----" >> $PUBKEY_FN
37
38 DELAY=1
39 RETRY=1
40
41 while [ $RETRY -eq 1 ]; do
42    # break out of loop by default
43    RETRY=0
44
45    # download the stage2 initscript
46    wget $STAGE2_URL -O $STAGE2_FN
47    if [ ! -f $STAGE2_FN -o $? -ne 0 ]
48    then
49       echo "Failed to download $STAGE2_URL"
50       RETRY=1
51    fi
52
53    # download the signature
54    if [ $RETRY -eq 0 ]; then
55       wget $STAGE2_SIGNATURE_URL -O $STAGE2_SIGNATURE_FN
56       if [ ! -f $STAGE2_SIGNATURE_FN -o $? -ne 0 ]
57       then
58          echo "Failed to download $STAGE2_SIGNATURE_URL"
59          RETRY=1
60       fi
61    fi
62
63    # make sure the signature is correct
64    if [ $RETRY -eq 0 ]; then
65       # verify the signature
66       RESULT=`openssl dgst -md5 -signature $STAGE2_SIGNATURE_FN -verify $PUBKEY_FN $STAGE2_FN`
67       echo "Signature Verification: $RESULT"
68       if [ "$RESULT" != "Verified OK" ]; then
69          echo "OpenSSL failed to verify $STAGE2_SIGNATURE_FN"
70          RETRY=1
71       fi
72    fi
73
74    # if something went wrong, then retry. This covers connection errors as
75    # well as problems with the stork repository itself. If the repository is
76    # offline, then the script will keep retrying until it comes online.
77    if [ $RETRY -eq 1 ]; then
78       echo "Delaying $DELAY seconds"
79
80       sleep $DELAY
81
82       # exponential backoff, up to 1 hour between retrievals
83       DELAY=`expr $DELAY \* 2`
84       if [ $DELAY -gt 3600 ]; then
85           DELAY=3600
86       fi
87    fi
88
89 done
90
91 echo "running stage2 initscript"
92 sh $STAGE2_FN
93