source: trunk/locker/deploy/bin/onathena @ 2540

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