Bug#412489: tomcat5.5: multiple instances could be supported better
Adrian Bridgett
adrian at smop.co.uk
Mon Feb 26 11:53:50 UTC 2007
Package: tomcat5.5
Version: 5.5.20-4
Severity: minor
When following the instructions in
/usr/share/doc/tomcat5.5/RUNNING.txt.gz, there are a few minor niggles
with the current init.d script.
I have written a script to clone one instance (creates the directories
etc) which I've attached to this bug report. The sensible thing
to do is to change the NAME in the init.d script, however then the
CATALINA_HOME variable points to the wrong location. It would be
nice to have it set separately. Conversely, CATALINA_BASE is
hardcoded to /var/lib/tomcat5.5 and should be set from NAME :-)
Adrian
--
Adrian Bridgett - adrian at smop.co.uk
GPG key available on public key servers
-------------- next part --------------
#!/bin/sh
# Clone tomcat instance so we get another JVM
# Written by Adrian Bridgett <adrian.bridgett at opsera.com>, Opsera Ltd.
SOURCE=tomcat5.5
USERNAME=tomcat55
main()
{
name="$1" || die "Usage: `basename $0` clone-name"
name="$SOURCE-$name"
# sanity checking
valid_name "$name"
check_existing "$name"
confirm "$name"
# creation
create_init "$name"
create_etc "$name"
create_var "$name"
# not required unless you really want to be seperate
#create_usrshare "$name"
print_todo "$name"
}
die()
{
echo "$@"
exit 1
}
valid_name()
{
local name="$1"
[ "$name" ] || die "No name given"
rejected=`echo "$1" | tr -d -- '-_\.[a-z][A-Z][0-9]'`
[ "$rejected" ] && die "Invalid characters \"$rejected\" in name"
return 0
}
check_existing()
{
local name="$1"
if [ -e "/var/lib/$name" ]; then
die "Pre-existing tomcat instance \"$name\""
fi
return 0
}
confirm()
{
local name="$1"
echo -n "Are you sure you wish to create a new tomcat instance \"$name\"? [Yn] "
read ans
if [ "$ans" = "" ] || [ "$ans" = "y" ] || [ "$ans" = "Y" ] || [ "$ans" = "yes" ]; then
return 0
fi
echo "Aborting at user request"
exit 1
}
create_init()
{
local name="$1"
# CATALINA_HOME must be set to /usr/share/tomcat5.5
# CATALINA_BASE is set per instance to /var/lib/$name
# change NAME, CATALINA_BASE, /etc/init.d/$SOURCE (usage statement)
sed "s,^NAME=.*$,NAME=$name,g
s,^CATALINA_BASE=.*$,CATALINA_BASE=/var/lib/\$NAME,g
s,^CATALINA_HOME=.*$,CATALINA_HOME=/usr/share/tomcat5.5,g
s,\(/etc/init.d/\)$SOURCE,\1$name,g" \
< /etc/init.d/$SOURCE > "/etc/init.d/$name"
chmod 755 "/etc/init.d/$name"
update-rc.d "$name" defaults 92
}
create_etc()
{
local name="$1"
cp -a /etc/$SOURCE "/etc/$name"
cp /etc/default/$SOURCE "/etc/default/$name"
}
create_var()
{
local name="$1"
install -d "/var/cache/$name" -o $USERNAME -g adm -m700
install -d "/var/log/$name" -o $USERNAME -g root -m750
install -d "/var/lib/$name" -o root -g root -m755
cd "/var/lib/$name" || die "Unable to cd \"/var/lib/$name\""
ln -s "../../log/$name" logs
install -d temp -o $USERNAME -g root -m 755
cp -a "/var/lib/$SOURCE/shared" shared
cp -a "/var/lib/$SOURCE/webapps" webapps
ln -s "../../cache/$name" work
cp -a "/var/lib/$SOURCE/conf" conf
# change symlinks
for file in server.xml web.xml \
jk2.properties workers2.properties workers.properties; do
if [ -e "/etc/$name/$file" ]; then
ln -sf "/etc/$name/$file" "conf/$file"
fi
done
}
create_usrshare()
{
local name="$1"
install -d "/usr/share/$name" -o root -g root -m755
for dir in conf logs temp webapps work ; do
ln -s "/var/lib/$name/$dir" "/usr/share/$name/$dir"
done
for dir in bin common docs server shared; do
ln -s "/usr/share/$SOURCE/$dir" "/usr/share/$name/$dir"
done
}
print_todo()
{
local name="$1"
cat << EOF
Automated cloning finished. Some items left todo:
- change passwords in /var/lib/$name/conf/tomcat-users.xml
- change shutdown password in /etc/$name/server.xml
- change ports in /etc/$name/server.xml
- remove any unwanted webapps from /var/lib/$name/conf/
Upon pressing return, an editor will start to allow you to do this
EOF
read dummy
editor "/var/lib/$name/conf/tomcat-users.xml" "/etc/$name/server.xml"
}
main "$@"
More information about the pkg-java-maintainers
mailing list