aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/InstallItAll.sh
blob: 81ff54fc31ceaf939d7528e2519cf2aa1a3da11b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/bash

OSPATH="/opt/opensim"
MYSQL_HOST="localhost"
MYSQL_DB="InfiniteGrid"
MYSQL_USER="opensim"
OS_USER="opensim"

OSVER="0.8.2.1"


# Figure out where we are, most of this mess is to troll through soft links.
PRG="$0"
while [ -h "${PRG}" ] ; do
  ls=$(ls -ld "${PRG}")
  link=`expr "${ls}" : '.*-> \(.*\)$'`
  if expr "${link}" : '.*/.*' > /dev/null; then
    PRG="${link}"
  else
    PRG=$(dirname "${PRG}")/"${link}"
  fi
done
PRGDIR=$(dirname "${PRG}")
pushd ${PRGDIR} >/dev/null
PRGDIR=$(pwd)
popd >/dev/null

# This should all be safe for pre existing installs that are being updated.

MYSQL_PASSWORD=$1
# Try to get old database credentials if they exist.
if [ -f ${OSPATH}/config/config.ini ]; then
    # Get the database credentials.
    declare -A creds
    while read -d ';' p; do
	k=$(echo ${p} | cut -d '=' -f 1)
	v=$(echo ${p} | cut -d '=' -f 2)
	creds[${k}]="${v}"
    done < <(sudo grep ConnectionString ${OSPATH}/config/config.ini | cut -d '"' -f 2)
    # The above seems the best way to get bash to let the creds assignments survive outside the loop.

    MYSQL_HOST="${creds[Data Source]}"
    MYSQL_DB="${creds[Database]}"
    MYSQL_USER="${creds[User ID]}"
    MYSQL_PASSWORD="${creds[Password]}"
fi
if [ -z $MYSQL_PASSWORD ]; then
    MYSQL_PASSWORD="OpenSimSucks${RANDOM}"
fi

USER=$(whoami)

echo "Installing software."
sudo apt-get install mysql-server tmux mono-complete mono-gmcs nant nunit uuid-runtime monit mc
sudo /etc/init.d/mysql restart

echo "Setting up OpenSim users."
# "create user if not exists" doesn't exist until MySQL 5.7, so we have to put up with a warning, which we can ignore.
mysql -u root -p -h localhost << zzzzEOFzzz
create database if not exists $MYSQL_DB;
create user $OS_USER identified by '$MYSQL_PASSWORD';
create user $OS_USER@localhost identified by '$MYSQL_PASSWORD';
grant all on $MYSQL_DB.* to $OS_USER;
grant all on $MYSQL_DB.* to $OS_USER@localhost;
FLUSH PRIVILEGES;
zzzzEOFzzz

echo "Setting up OpenSim."
sudo adduser --system --shell /bin/false --group $OS_USER
sudo addgroup $USER $OS_USER

echo "Building OpenSim."
./runprebuild.sh
./nant-color
#xbuild /target:clean 
#xbuild /p:TargetFrameworkVersion="v4.5"

echo "Setting up OpenSim."
sudo rm -fr   $OSPATH/opensim-IG_*
sudo mkdir -p $OSPATH/opensim-IG_$OSVER
sudo cp -fr $PRGDIR/* $OSPATH/opensim-IG_$OSVER

cd $OSPATH
sudo ln -fs opensim-IG_$OSVER current

cd current

for dir in AssetFiles backups caches config db logs
do
    if [ ! -f ../$dir ]; then
	sudo cp -fr $dir ..
	sudo rm -fr $dir
	sudo ln -fs ../$dir $dir
    fi
done

pushd config/ROBUST >/dev/null
sudo ln -fs ../../current/scripts/common.sh common.sh
sudo ln -fs ../../current/scripts/start-sim start-sim
sudo ln -fs ../../current/scripts/start-sim stop-sim
popd >/dev/null

echo "Securing OpenSim."
sudo chown -R $OS_USER:$OS_USER $OSPATH
sudo chmod -R 775 $OSPATH
sudo chmod -R a-x $OSPATH
sudo chmod -R a+X $OSPATH
sudo chmod -R g+w $OSPATH
sudo chmod -R a+x $OSPATH/current/scripts/*.sh
sudo chmod a+x $OSPATH/current/scripts/show-console
sudo chmod a+x $OSPATH/current/scripts/start-sim

sudo chmod ug+rwx  $OSPATH/config
sudo chmod g+s     $OSPATH/config
sudo chmod 600 $OSPATH/config/config.ini

sudo sed -i "s@MYSQL_HOST@${MYSQL_HOST}@g" config/config.ini
sudo sed -i "s@MYSQL_DB@${MYSQL_DB}@g" config/config.ini
sudo sed -i "s@MYSQL_USER@${MYSQL_USER}@g" config/config.ini
sudo chmod 600 config/config.ini
sudo sed -i "s@MYSQL_PASSWORD@${MYSQL_PASSWORD}@g" config/config.ini
sudo chmod 600 config/config.ini

sudo cp scripts/opensim.tmux.conf /home/$OS_USER/.tmux.conf
sudo chown $USER /home/$OS_USER/.tmux.conf
sudo chmod 644 /home/$OS_USER/.tmux.conf

sudo scripts/fix_var_run.sh
sudo cat scripts/opensim-crontab.txt | sudo crontab -u $OS_USER -
echo "Done installing OpenSim."