1
|
#!/bin/bash
|
2
|
#This script will install openjdk-7 and tomcat7.
|
3
|
#It will update the alternatives for java, javac, keytool and javaws to openjdk-7.
|
4
|
#It will modify the /etc/tomcat7/catalina.properties to allow DataONE idenifiers.
|
5
|
#It will modify the workers.properties file for apache-tomcat connector.
|
6
|
#It will move Metacat and other web applications from the old context directory to the new context directory.
|
7
|
#The user running the script should have the sudo permission.
|
8
|
|
9
|
APACHE_ENABLED_SITES_DIR=/etc/apache2/sites-enabled
|
10
|
APACHE_AVAILABLE_SITES_DIR=/etc/apache2/sites-available
|
11
|
NEW_JDK_PACKAGE=openjdk-7-jdk
|
12
|
NEW_JDK_HOME=/usr/lib/jvm/java-7-openjdk-amd64
|
13
|
|
14
|
JK_CONF=/etc/apache2/mods-enabled/jk.conf
|
15
|
|
16
|
OLD_TOMCAT=tomcat6
|
17
|
OLD_TOMCAT_BASE=/var/lib/${OLD_TOMCAT}
|
18
|
|
19
|
NEW_TOMCAT=tomcat7
|
20
|
NEW_TOMCAT_COMMON=${NEW_TOMCAT}-common
|
21
|
NEW_TOMCAT_LIB=lib${NEW_TOMCAT}-java
|
22
|
NEW_CATALINA_PROPERTIES=/etc/${NEW_TOMCAT}/catalina.properties
|
23
|
NEW_TOMCAT_HOME=/usr/share/${NEW_TOMCAT}
|
24
|
NEW_TOMCAT_BASE=/var/lib/${NEW_TOMCAT}
|
25
|
NEW_TOMCAT_SERVER_CONIF=$NEW_TOMCAT_BASE/conf/server.xml
|
26
|
NEW_TOMCAT_CONTEXT_CONF=$NEW_TOMCAT_BASE/conf/context.xml
|
27
|
|
28
|
KNB=knb
|
29
|
SSL=ssl
|
30
|
METACAT=metacat
|
31
|
WEBAPPS=webapps
|
32
|
METACAT_DATA_DIR=/var/metacat
|
33
|
TOMCAT_CONFIG_SLASH='org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true'
|
34
|
TOMCAT_CONFIG_BACKSLASH='org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true'
|
35
|
INIT_START_DIR=/etc/init.d
|
36
|
|
37
|
|
38
|
if [ $# -ne 1 ]; then
|
39
|
echo "This script should take one and only one parameter as the name of the host.";
|
40
|
exit 1;
|
41
|
fi
|
42
|
HOST_NAME=$1
|
43
|
echo "Host name is $HOST_NAME"
|
44
|
|
45
|
echo "instal xmlstarlet"
|
46
|
sudo apt-get install xmlstarlet
|
47
|
|
48
|
sudo /etc/init.d/apache2 stop
|
49
|
echo "install ${NEW_JDK_PACKAGE}"
|
50
|
sudo apt-get install ${NEW_JDK_PACKAGE}
|
51
|
sleep 3
|
52
|
echo "configure java, java, keytool and javaws"
|
53
|
sudo update-alternatives --set java ${NEW_JDK_HOME}/jre/bin/java
|
54
|
sudo update-alternatives --set javac ${NEW_JDK_HOME}/bin/javac
|
55
|
sudo update-alternatives --set keytool ${NEW_JDK_HOME}/jre/bin/keytool
|
56
|
sudo update-alternatives --set javaws ${NEW_JDK_HOME}/jre/bin/javaws
|
57
|
|
58
|
echo "install ${NEW_TOMCAT}"
|
59
|
sudo ${INIT_START_DIR}/${OLD_TOMCAT} stop
|
60
|
sudo apt-get install ${NEW_TOMCAT_LIB}
|
61
|
sudo apt-get install ${NEW_TOMCAT_COMMON}
|
62
|
sudo apt-get install ${NEW_TOMCAT}
|
63
|
echo "configure ${NEW_TOMCAT}"
|
64
|
if grep -q "${TOMCAT_CONFIG_SLASH}" ${NEW_CATALINA_PROPERTIES}; then
|
65
|
echo "${TOMCAT_CONFIG_SLASH} exists and don't need to do anything."
|
66
|
else
|
67
|
echo "${TOMCAT_CONFIG_SLASH} don't exist and add it."
|
68
|
sudo sed -i.bak "$ a\\${TOMCAT_CONFIG_SLASH}" ${NEW_CATALINA_PROPERTIES}
|
69
|
fi
|
70
|
if grep -q "${TOMCAT_CONFIG_BACKSLASH}" ${NEW_CATALINA_PROPERTIES}; then
|
71
|
echo "${TOMCAT_CONFIG_BACKSLASH} exists and don't need to do anything."
|
72
|
else
|
73
|
echo "${TOMCAT_CONFIG_BACKSLASH} don't exist and add it."
|
74
|
sudo sed -i "$ a\\${TOMCAT_CONFIG_BACKSLASH}" ${NEW_CATALINA_PROPERTIES}
|
75
|
fi
|
76
|
|
77
|
echo "add an attribute useHttpOnly='false' to the element Context if it doesn't have one in the $NEW_TOMCAT_CONTEXT_CONF"
|
78
|
sudo cp $NEW_TOMCAT_CONTEXT_CONF $NEW_TOMCAT_CONTEXT_CONF.bak
|
79
|
useHttpOnly=$(sudo xmlstarlet sel -t --value-of "/Context/@useHttpOnly" $NEW_TOMCAT_CONTEXT_CONF)
|
80
|
echo "the uerHttpOnly is $useHttpOnly"
|
81
|
if [[ -n $useHttpOnly ]]; then
|
82
|
if [[ $useHttpOnly == 'false' ]]; then
|
83
|
echo "Attribute useHttpOnly was set to false and we don't need to do anything"
|
84
|
else
|
85
|
echo "Update the attribute useHttpOnly's value to false"
|
86
|
sudo xmlstarlet ed -L -P -u "/Context/@useHttpOnly" -v false $NEW_TOMCAT_CONTEXT_CONF
|
87
|
fi
|
88
|
else
|
89
|
echo "Attribute useHttpOnly hasn't been set and we will add one"
|
90
|
sudo xmlstarlet ed -L -P -s "/Context" --type attr -n useHttpOnly -v false $NEW_TOMCAT_CONTEXT_CONF
|
91
|
fi
|
92
|
|
93
|
echo "remove the 8080 ports and add the 8009 ports to the tomcat7 server.xml"
|
94
|
sudo cp $NEW_TOMCAT_SERVER_CONIF $NEW_TOMCAT_SERVER_CONIF.bak
|
95
|
sudo xmlstarlet ed -L -P -d "//Connector[@port='8080']" $NEW_TOMCAT_SERVER_CONIF
|
96
|
#echo "the configuration file is $NEW_TOMCAT_SERVER_CONIF"
|
97
|
result=$(sudo xmlstarlet sel -t --value-of "/Server/Service[@name='Catalina']/Connector[@protocol='AJP/1.3']/@port" $NEW_TOMCAT_SERVER_CONIF)
|
98
|
#echo "the result is $result"
|
99
|
if [[ -n $result ]]; then
|
100
|
echo "An ajp 1.3 connector exists and we don't need to do anything."
|
101
|
else
|
102
|
echo "No aip 1.3 connector found and we should add one"
|
103
|
sudo xmlstarlet ed -L -P -s "/Server/Service[@name='Catalina']" -t elem -name Connector -v "" $NEW_TOMCAT_SERVER_CONIF
|
104
|
sudo xmlstarlet ed -L -P -s "/Server/Service/Connector[not(@port)]" --type attr -n port -v 8009 $NEW_TOMCAT_SERVER_CONIF
|
105
|
sudo xmlstarlet ed -L -P -s "/Server/Service/Connector[not(@protocol)]" --type attr -n protocol -v AJP/1.3 $NEW_TOMCAT_SERVER_CONIF
|
106
|
sudo xmlstarlet ed -L -P -s "/Server/Service/Connector[not(@redirectPort)]" --type attr -n redirectPort -v 8443 $NEW_TOMCAT_SERVER_CONIF
|
107
|
fi
|
108
|
|
109
|
|
110
|
echo "move Metacat and other web applications from $OLD_TOMCAT to $NEW_TOMCAT"
|
111
|
sudo ${INIT_START_DIR}/${NEW_TOMCAT} stop
|
112
|
sudo rm -rf ${NEW_TOMCAT_BASE}/${WEBAPPS}/*
|
113
|
sudo cp -R ${OLD_TOMCAT_BASE}/${WEBAPPS}/* ${NEW_TOMCAT_BASE}/${WEBAPPS}/.
|
114
|
sudo chown -R ${NEW_TOMCAT}:${NEW_TOMCAT} ${NEW_TOMCAT_BASE}/${WEBAPPS}/*
|
115
|
echo "change the value of the application.deployDir in the metacat.properties file"
|
116
|
SAFE_NEW_TOMCAT_WEBAPPS=$(printf '%s\n' "$NEW_TOMCAT_BASE/$WEBAPPS" | sed 's/[[\.*^$(){}?+|/]/\\&/g')
|
117
|
#echo "the escaped webpass value is ${SAFE_NEW_TOMCAT_WEBAPPS}"
|
118
|
if [ -f "$NEW_TOMCAT_BASE/$WEBAPPS/$KNB/WEB-INF/metacat.properties" ]; then
|
119
|
echo "$NEW_TOMCAT_BASE/$WEBAPPS/$KNB/WEB-INF/metacat.properties exists and the application.deployDir will be updated"
|
120
|
sudo sed -i.bak --regexp-extended "s/(application\.deployDir=).*/\1${SAFE_NEW_TOMCAT_WEBAPPS}/;" $NEW_TOMCAT_BASE/$WEBAPPS/$KNB/WEB-INF/metacat.properties
|
121
|
sudo sed -i --regexp-extended "s/(geoserver\.GEOSERVER_DATA_DIR=).*/\1${SAFE_NEW_TOMCAT_WEBAPPS}\/${KNB}\/spatial\/geoserver\/data/;" $NEW_TOMCAT_BASE/$WEBAPPS/$KNB/WEB-INF/metacat.properties
|
122
|
else
|
123
|
echo "$NEW_TOMCAT_BASE/$WEBAPPS/$KNB/WEB-INF/metacat.properties does NOT exists and the application.deployDir will NOT be updated"
|
124
|
fi
|
125
|
|
126
|
if [ -f "$NEW_TOMCAT_BASE/$WEBAPPS/$METACAT/WEB-INF/metacat.properties" ]; then
|
127
|
echo "$NEW_TOMCAT_BASE/$WEBAPPS/$METACAT/WEB-INF/metacat.properties eixsts and the application.deployDir will be updated"
|
128
|
sudo sed -i.bak --regexp-extended "s/(application\.deployDir=).*/\1${SAFE_NEW_TOMCAT_WEBAPPS}/;" $NEW_TOMCAT_BASE/$WEBAPPS/$METACAT/WEB-INF/metacat.properties
|
129
|
sudo sed -i --regexp-extended "s/(geoserver\.GEOSERVER_DATA_DIR=).*/\1${SAFE_NEW_TOMCAT_WEBAPPS}\/${METACAT}\/spatial\/geoserver\/data/;" $NEW_TOMCAT_BASE/$WEBAPPS/$METACAT/WEB-INF/metacat.properties
|
130
|
else
|
131
|
echo "$NEW_TOMCAT_BASE/$WEBAPPS/$METACAT/WEB-INF/metacat.properties doesn't eixt and the application.deployDir will NOT be updated"
|
132
|
fi
|
133
|
|
134
|
echo "change the ownership of $METACAT_DATA_DIR to $NEW_TOMCAT"
|
135
|
sudo chown -R ${NEW_TOMCAT}:${NEW_TOMCAT} ${METACAT_DATA_DIR}
|
136
|
|
137
|
|
138
|
echo "Change somethings on apache configuration"
|
139
|
echo "read the location of the workers.properties file from the jk_conf"
|
140
|
while read f1 f2
|
141
|
do
|
142
|
if [ "$f1" = "JkWorkersFile" ]; then
|
143
|
JK_WORKER_PATH="$f2"
|
144
|
fi
|
145
|
done < ${JK_CONF}
|
146
|
echo "the jk workers.properties location is $JK_WORKER_PATH"
|
147
|
|
148
|
echo "update the tomcat home and java home in workers.properties file"
|
149
|
SAFE_NEW_TOMCAT_HOME=$(printf '%s\n' "$NEW_TOMCAT_HOME" | sed 's/[[\.*^$(){}?+|/]/\\&/g')
|
150
|
SAFE_NEW_JDK_HOME=$(printf '%s\n' "$NEW_JDK_HOME" | sed 's/[[\.*^$(){}?+|/]/\\&/g')
|
151
|
sudo sed -i.bak --regexp-extended "s/(workers\.tomcat_home=).*/\1${SAFE_NEW_TOMCAT_HOME}/;
|
152
|
s/(workers\.java_home=).*/\1${SAFE_NEW_JDK_HOME}/;"\
|
153
|
$JK_WORKER_PATH
|
154
|
|
155
|
echo "we need to do some work since the new version of apache only load the site files with .conf extension in the sites-enabled directory"
|
156
|
echo "delete all links which doesn't end with .conf in the site-enabled directory since they can't be loaded"
|
157
|
sudo find $APACHE_ENABLED_SITES_DIR -type l ! -name "*.conf" -delete
|
158
|
|
159
|
echo "add .conf to the files which don't end with .conf or .bak or .org"
|
160
|
for i in $(sudo find $APACHE_AVAILABLE_SITES_DIR -type f \( ! -name "*.conf" -a ! -name "*.bak" -a ! -name "*.org" \));
|
161
|
do
|
162
|
sudo mv "$i" "${i}".conf
|
163
|
done
|
164
|
|
165
|
echo "update the apache site files by replacing $OLD_TOMCAT by $NEW_TOMCAT"
|
166
|
for j in $(sudo find $APACHE_AVAILABLE_SITES_DIR -type f -name "*.conf")
|
167
|
do
|
168
|
sudo sed -i.bak "s/${OLD_TOMCAT}/${NEW_TOMCAT}/;" $j
|
169
|
done
|
170
|
|
171
|
echo "rename the site file knb to $HOST_NAME and knb-ssl to $HOST_NAME-ssl"
|
172
|
sudo mv $APACHE_AVAILABLE_SITES_DIR/$KNB.conf $APACHE_AVAILABLE_SITES_DIR/$HOST_NAME.conf
|
173
|
sudo mv $APACHE_AVAILABLE_SITES_DIR/$KNB-ssl.conf $APACHE_AVAILABLE_SITES_DIR/$HOST_NAME-ssl.conf
|
174
|
|
175
|
echo "current redirect rules doesn't work. we need to change it"
|
176
|
sudo sed -i "s|\("RewriteCond" * *\).*|\1%{HTTPS} off|" $APACHE_AVAILABLE_SITES_DIR/$HOST_NAME.conf
|
177
|
sudo sed -i "s|\("RewriteRule" * *\).*|\1(.*) https://%{HTTP_HOST}%{REQUEST_URI}|" $APACHE_AVAILABLE_SITES_DIR/$HOST_NAME.conf
|
178
|
|
179
|
echo "enable the two sites $HOST_NAME and $HOST_NAME-ssl"
|
180
|
sudo a2ensite $HOST_NAME
|
181
|
sudo a2ensite $HOST_NAME-ssl
|
182
|
|
183
|
sudo /etc/init.d/apache2 start
|
184
|
sudo /etc/init.d/tomcat7 start
|
185
|
|
186
|
exit 0
|