source: locker/deploy/bin/onathena @ 160

Last change on this file since 160 was 160, checked in by jbarnold, 16 years ago
enforce that .sql is not world-readable on every invokation
  • Property svn:executable set to *
File size: 7.1 KB
Line 
1#!/bin/sh
2
3checkfailed() {
4  if [ -f "$lroot/web_scripts/$addrend/.failed" ]; then
5    rm -f $lroot/web_scripts/$addrend/.failed
6    exit 1
7  fi
8}
9
10sshrun() {
11  athrun scripts sshmic ${lname}@scripts.mit.edu /mit/scripts/$1 2>/dev/null
12}
13
14vsshrun() {
15  athrun scripts sshmic ${lname}@scripts.mit.edu /mit/scripts/$1
16}
17
18checksqlpass() {
19    errors=`sshrun 'sql/bin$scriptsdev/test-password'`
20    if [ "$errors" != "" ]; then
21        if [ "$1" -eq 1 ]; then
22          rm -f $lroot/.sql/my.cnf
23        fi
24        echo
25        echo ERROR:
26        printf "$2"
27        printf "$3"
28        exit
29    fi
30}
31
32#echo "The scripts.mit.edu automatic installers are currently unavailable."
33#echo "We hope to make them available again soon."
34#echo "If you would like us to notify you as soon as they are available again,"
35#echo "let us know by sending us an e-mail at scripts@mit.edu"
36#exit
37
38echo
39echo == Welcome to the scripts.mit.edu installer for $sname ==
40echo
41
42echo "For documentation, including a link to the Athena rules of use,"
43echo "see <http://scripts.mit.edu/start>."
44echo
45echo Please report problems with this installer to scripts@mit.edu.
46echo
47echo Are you performing this install for:
48echo 1. Your personal Athena account
49echo 2. A locker that you control \(a club, a course, etc\)
50echo If you do not understand this question, you should answer \'1\'.
51printf "Please enter either '1' or '2' (without quotes): "
52read whofor
53if [ "$whofor" -eq 1 ]; then
54    lname=$USER
55    lroot=$HOME 
56elif [ "$whofor" -eq 2 ]; then
57    echo
58    echo OK.  $sname will be installed into a locker of your choice that
59    echo you control.  Please enter the name of the selected locker below.
60    echo "(For the locker /mit/lsc -- which has a full path of"
61    echo "/afs/athena.mit.edu/activity/l/lsc -- you would simply enter lsc)."
62    printf "Locker name: "
63    read lname
64    lroot="/mit/$lname" 
65else
66    echo
67    echo ERROR:
68    echo You must select either '1' or '2'.
69    exit 1
70fi
71
72echo
73echo Checking the status of your scripts.mit.edu account...
74
75attach scripts 2>/dev/null
76. /mit/scripts/bin$scriptsdev/signup-web
77
78echo
79echo Your new copy of $sname will appear on the web at a URL
80echo that starts with http://scripts.mit.edu/~$lname/
81echo Please decide upon a complete URL and enter it below.
82echo You must enter one or more characters after ~$lname/
83echo The completed address must only contain a-z, 0-9, and /.
84printf "Desired address: http://scripts.mit.edu/~$lname/"
85read addrend
86
87addrend=`perl -e "\\\$temp = \"$addrend\"; \\\$temp =~ /(^([a-z0-9A-Z\\\\/-]+)\$)/; print \\\$1"`
88if [ "$addrend" = "" ]; then
89        echo
90        echo ERROR:
91        echo You must enter one or more characters after ~$lname/
92        echo The completed address must only contain a-z, 0-9, and /.
93        exit 1
94fi
95
96if [ -d "$lroot/web_scripts/$addrend" ]; then
97    echo
98    echo ERROR:
99    echo You already have a directory corresponding to that web address.
100    echo Please remove that directory, choose a different address, or
101    echo contact scripts@mit.edu for assistance.
102    exit 1
103fi
104
105if [ "$requires_sql" = "" ]; then
106  requires_sql=1
107fi
108
109if [ ! -f "$lroot/.my.cnf" ]; then
110  mkdir $lroot/.sql 2>/dev/null
111  fs sa $lroot/.sql daemon.scripts write
112  ln -nfs $lroot/.sql/my.cnf $lroot/.my.cnf 2>/dev/null
113fi
114
115fs sa $lroot/.sql system:anyuser none
116fs sa $lroot/.sql system:authuser none
117
118if [ "$requires_sql" -eq 1 ]; then
119  sqlinfo=`sshrun "sql/bin$scriptsdev/get-password"`
120  if [ "$sqlinfo" = "" ]; then
121      echo
122      echo You already have a MySQL account but you do not have a .my.cnf file.
123      echo If you do not remember your MySQL account password, you can change it
124      echo at http://sql.mit.edu using MIT certificates.
125      printf "Please type your MySQL password and press [enter]: "
126      stty -echo
127      read sqlpass
128      stty echo
129      echo
130      sqlhost="sql.mit.edu"
131      sqluser=$lname
132      . /mit/scripts/sql/bin$scriptsdev/save-password
133      checksqlpass 1 'The MySQL password that you typed appears to be incorrect.\n' ''
134      echo
135      echo OK.  Continuing with the install...
136  else
137      checksqlpass 0 'The MySQL login information in your .my.cnf file\n' 'appears to be incorrect.\n'
138  fi
139fi
140
141if [ "$prompt_username" = "" ]; then
142  admin_username="admin"
143  prompt_username=0
144fi
145if [ "$prompt_password" = "" ]; then
146  prompt_password=1
147fi
148
149if [ "$prompt_username" -eq 1 ]; then
150    echo
151    echo You will be able to log in to $sname using a username of your choice.
152    echo Please decide upon a username and enter it below.
153    echo "Your username must contain only alphanumeric characters (a-z, 0-9)."
154    printf "Desired username: "
155    read admin_username
156    admin_username=`perl -e "\\\$temp = \"$admin_username\"; \\\$temp =~ /(^([a-z0-9A-Z]+)\\\$)/; print \\\$1;"`
157    if [ "$admin_username" = "" ]; then
158        echo
159        echo ERROR:
160        echo "Your username must contain only alphanumeric characters (a-z, 0-9)."
161        echo You will need to run the installer again and choose a different username.
162        exit 1
163    fi
164fi
165
166if [ "$prompt_password" -eq 1 ]; then
167    stty -echo
168    sshrun "deploy$scriptdev/bin/prompt-password '$sname' '$deploy' '$addrend' '$admin_username'"
169    stty echo
170fi
171
172echo
173echo "Unpacking $sname... (this step might take several minutes)"
174
175if [ "$create_dir" = "" ]; then
176  create_dir=0
177fi
178
179if [ "$create_dir" -eq 1 ]; then
180  mkdir -p "$lroot/scripts-$deploy"
181  fs sa "$lroot/scripts-$deploy" system:anyuser none
182  fs sa "$lroot/scripts-$deploy" system:authuser none
183  fs sa "$lroot/scripts-$deploy" daemon.scripts write
184  fs sa "$lroot/scripts-$deploy" system:scripts-security-upd write
185fi
186
187origdir=`pwd`
188mkdir -p "$lroot/web_scripts_tmp"
189cd "$lroot/web_scripts_tmp"
190fs sa . system:anyuser none
191fs sa . system:authuser none
192fs sa . daemon.scripts write
193fs sa . system:scripts-security-upd write
194mkdir -p "$lroot/web_scripts/$addrend"
195cd "$lroot/web_scripts/$addrend"
196fs sa . system:anyuser none
197fs sa . system:authuser none
198fs sa . daemon.scripts write
199fs sa . system:scripts-security-upd write
200athrun scripts gtar zxf "/mit/scripts/deploy$scriptsdev/$deploy.tar.gz"
201files=`athrun scripts gfind . -mindepth 1 -maxdepth 1`
202numfiles=`echo "$files" | wc -l`
203if [ "$numfiles" -eq 1 ]; then
204    athrun scripts gfind . -mindepth 2 -maxdepth 2 | xargs -i mv \{} .
205    rmdir $files
206fi
207if [ -f "/mit/scripts/deploy$scriptsdev/php.ini/$deploy" ]; then
208        nodot=`echo $lname | sed "/\./s///"`;
209        sed -e /SCRIPTS_USER/s//$lname/ -e /SCRIPTS_NODOT/s//$nodot/ /mit/scripts/deploy$scriptsdev/php.ini/$deploy > php.ini
210        athrun scripts gfind . -mindepth 1 -type d -exec sh -c 'ln -sf "`echo "$1" | sed '\''s,[^/],,g; s,/,../,g'\''`php.ini" "$1/"' -- {} \;
211fi
212cd $origdir
213
214sshrun "deploy$scriptsdev/bin/$deploy '$sname' '$deploy' '$addrend' '$admin_username' '$requires_sql' '$scriptsdev' '$USER'"
215rm -f /$lroot/web_scripts/$addrend/.scripts-tmp
216checkfailed
217
218echo
219echo == Installation complete! ==
220echo You should now be able to access your new copy of $sname at
221echo http://scripts.mit.edu/~$lname/$addrend
222echo "(You can replace the http with https if you want to use encryption)"
223echo If you have trouble accessing it, feel free to contact
224echo the scripts.mit.edu team by e-mailing scripts@mit.edu
225exit 0
Note: See TracBrowser for help on using the repository browser.