source: branches/fc13-dev/locker/deploy/bin/onathena @ 1775

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