Project

General

Profile

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