source: locker/deploy/bin/onathena @ 1037

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