Skip to content

Commit

Permalink
Merge pull request #298 from misev/master
Browse files Browse the repository at this point in the history
fix starting of tomcat, quiet down unzip to reduce log polution, and …
  • Loading branch information
kalxas committed Dec 30, 2020
2 parents 434be32 + da2dbdd commit aaa7375
Showing 1 changed file with 62 additions and 168 deletions.
230 changes: 62 additions & 168 deletions bin/install_rasdaman.sh
Expand Up @@ -33,136 +33,24 @@ USER_HOME="/home/$USER_NAME"

RMANHOME=/opt/rasdaman

TOMCAT_WEBAPPS=/var/lib/tomcat9/webapps
TOMCAT_SVC=tomcat9

setup_rasdaman_repo()
{
echo "Setup rasdaman package repository..."
# add rasdaman public key
local rasdaman_pkgs_url="http://download.rasdaman.org/packages"
wget -q -O - "$rasdaman_pkgs_url/rasdaman.gpg" | apt-key add - \
|| { echo "Failed importing rasdaman GPG key."; return 1; }
# add rasdaman repo
local codename="$1"
local release="$2"
echo "deb [arch=amd64] $rasdaman_pkgs_url/deb $codename $release" > /etc/apt/sources.list.d/rasdaman.list
}

unpack_war_file()
{
# unpacks $1.war into a directory $1, and removes $1.war
local war_name="$1"
local war_file="$war_name.war"
pushd "$TOMCAT_WEBAPPS"
if [ -f "$war_file" ]; then
mkdir -p "$war_name"
mv "$war_file" "$war_name"
pushd "$war_name"
unzip "$war_file" && rm -f "$war_file" # extract
popd
fi
popd
}

delete_not_needed_files()
{
# remove development stuff
for f in lib include share/rasdaman/war share/rasdaman/raswct; do
rm -rf $RMANHOME/$f
done
# remove development docs
rm -rf $RMANHOME/share/rasdaman/doc/doc-*
rm -rf $RMANHOME/share/rasdaman/doc/manuals
# remove html docs (20MB), still remaining pdf docs (5MB)
rm -rf $RMANHOME/share/rasdaman/doc/html
# remove unneeded demo data, was inserted during installation
rm -rf $RMANHOME/share/rasdaman/petascope/petascope_insertdemo_data
# remove unneeded javascript code
rm -rf $RMANHOME/share/rasdaman/www/rasql-web-console
# strip executables
for e in rascontrol rasql rasserver rasmgr; do
strip --strip-unneeded $RMANHOME/bin/$e > /dev/null 2>&1 || true
done

# remove secore as it takes up 250 MB, use remote service
sed -i 's|secore_urls=.*|secore_urls=https://ows.rasdaman.org/def,http://www.opengis.net/def|' \
/opt/rasdaman/etc/petascope.properties
rm -rf $TOMCAT_WEBAPPS/def.war $TOMCAT_WEBAPPS/def $TOMCAT_WEBAPPS/secoredb
}

install_rasdaman_pkg()
{
echo "Install rasdaman package..."
apt-get -qq update -y
# automate any configuration update dialog
export DEBIAN_FRONTEND=noninteractive
sudo apt-get install -y $TOMCAT_SVC
apt-get -o Dpkg::Options::="--force-confdef" install -y rasdaman \
|| { echo "Failed installing rasdaman package."; return 1; }
# make sure the rasdaman package is not removed by apt-get autoremove
echo "rasdaman hold" | dpkg --set-selections
# apt-mark manual rasdaman
delete_not_needed_files

# --------
# need to unpack the war files (tomcat doesn't do it which causes issues)
unpack_war_file rasdaman
service $TOMCAT_SVC restart
# --------

echo
echo "Rasdaman package installed successfully."
echo
}

rasdaman_service()
{
local cmd=$1
sudo -u rasdaman /opt/rasdaman/bin/${cmd}_rasdaman.sh
sleep 2
}

replace_rasdaman_user_with_system_user()
{
local rasdaman_user=rasdaman
local rasdaman_group=rasdaman
echo "Replacing regular user '$rasdaman_user' with a system user..."

# stop rasdaman service first, otherwise userdel will fail
rasdaman_service stop

userdel $rasdaman_user || { echo "Failed removing rasdaman user."; return 1; }
groupdel $rasdaman_group > /dev/null 2>&1

adduser --system --group --home /opt/rasdaman --no-create-home --shell /bin/bash $rasdaman_user
chown -R $rasdaman_user:$rasdaman_group /opt/rasdaman
# this directory is owned by an invalid uid after the user change, it can be just deleted
rm -rf /tmp/rasdaman_*
# add rasdaman user to tomcat group
adduser $rasdaman_user tomcat
# and user to rasdaman group
adduser $USER_NAME $rasdaman_group

rasdaman_service start
local archive="rasdaman-osgeolive-package.tar.gz"
local archive_url="http://kahlua.eecs.jacobs-university.de/~earthlook/osgeo/$archive"

echo "Installing rasdaman into $RMANHOME..."
mkdir -p $RMANHOME
pushd $RMANHOME > /dev/null
wget -q "$archive_url" -O - | tar xz
echo "Installed size: $(du -sh .)"
chown -R $USER_NAME: $RMANHOME
popd > /dev/null
}

create_bin_starters()
install_rasdaman_dependencies()
{
echo "Creating starting scripts..."
cat > $RMANHOME/bin/rasdaman-start.sh <<EOF
#!/bin/bash
sudo service $TOMCAT_SVC start
sudo service rasdaman start
echo "Rasdaman was started correctly."
EOF
cat > $RMANHOME/bin/rasdaman-stop.sh <<EOF
#!/bin/bash
sudo service $TOMCAT_SVC stop
sudo service rasdaman stop
echo -e "Rasdaman stopped."
EOF
chmod 755 $RMANHOME/bin/rasdaman-start.sh $RMANHOME/bin/rasdaman-stop.sh
echo "Installing rasdaman dependencies"
# nothing extra needed
}

create_desktop_applications()
Expand All @@ -177,7 +65,7 @@ Encoding=UTF-8
Name=Start Rasdaman Server
Comment=Start Rasdaman Server
Categories=Application;Education;Geography;
Exec=$RMANHOME/bin/rasdaman-start.sh
Exec=/opt/rasdaman/bin/start_rasdaman.sh
Icon=gnome-globe
Terminal=true
StartupNotify=false
Expand All @@ -189,7 +77,7 @@ Encoding=UTF-8
Name=Stop Rasdaman Server
Comment=Stop Rasdaman Server
Categories=Application;Education;Geography;
Exec=$RMANHOME/bin/rasdaman-stop.sh
Exec=/opt/rasdaman/bin/stop_rasdaman.sh
Icon=gnome-globe
Terminal=true
StartupNotify=false
Expand All @@ -215,19 +103,45 @@ EOF
chown $USER_NAME: $USER_HOME/Desktop/
}

install_systemd_unit()
{
local dst="/etc/systemd/system/rasdaman.service"
echo "Installing systemd unit script into $dst"
cat > "$dst" <<EOF
[Unit]
Description=Rasdaman Array Database
Documentation=https://rasdaman.org
[Service]
Type=forking
Restart=no
TimeoutSec=30
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=no
PIDFile=/var/run/rasmgr.pid
ExecStart=/opt/rasdaman/bin/start_rasdaman.sh
ExecStop=/opt/rasdaman/bin/stop_rasdaman.sh
[Install]
WantedBy=multi-user.target
EOF
systemctl enable rasdaman.service
}

add_rasdaman_path_to_bashrc()
{
echo "Add rasdaman path to the user's bashrc..."
echo "export RMANHOME=/opt/rasdaman" >> "$USER_HOME/.bashrc"
echo "export RASDATA=\$RMANHOME/data" >> "$USER_HOME/.bashrc"
echo "export PATH=\$PATH:\$RMANHOME/bin" >> "$USER_HOME/.bashrc"
}

deploy_local_earthlook()
{
echo "Deploying local earthlook..."
local tmp_dir=/tmp/earthlook
local data_url="http://kahlua.eecs.jacobs-university.de/~earthlook/osgeo/earthlook.tar.gz"

mkdir -p "$tmp_dir"
pushd "$tmp_dir" > /dev/null
# download data
wget -q "$data_url" -O earthlook.tar.gz
# extract
tar xzf earthlook.tar.gz
rm -rf earthlook.tar.gz
local tmp_dir=$RMANHOME/earthlook

local rasdaman_demo_path="/var/www/html/rasdaman-demo"
rm -rf "$rasdaman_demo_path"
Expand All @@ -236,50 +150,30 @@ deploy_local_earthlook()
# deploy
mv "$tmp_dir" "$rasdaman_demo_path"
chmod 755 "$rasdaman_demo_path"
popd > /dev/null

# start tomcat and rasdaman
service $TOMCAT_SVC start
sleep 10

# Then import the selected coverages from Earthlook demo-data to local petascope
# to be used for some demos which use queries on these small coverages.
# (total size for Earthlook demo pages + data in tar file should be < 15 MB).
"$rasdaman_demo_path/insert_demo_data.sh" 2>&1
}

add_rasdaman_path_to_bashrc()
update_libgdal_java()
{
echo "Add rasdaman profile to the user's bashrc..."
echo "source /etc/profile.d/rasdaman.sh" >> "$USER_HOME/.bashrc"
# To find path to wcst_import.sh when deploying Earthlook
source /etc/profile.d/rasdaman.sh
# copy v3.2 of libgdal-java jni libs, see https://trac.osgeo.org/osgeolive/ticket/2288
local v32="$RMANHOME/libgdal-java"
if [ -d "$v32" ]; then
mkdir -p /usr/lib/jni/
mv $v32/* /usr/lib/jni/ && \
rm -rf $v32
fi
}

#
# Install and setup demos
#

setup_rasdaman_repo "focal" "nightly"
install_rasdaman_pkg

replace_rasdaman_user_with_system_user
create_bin_starters
install_rasdaman_dependencies
install_systemd_unit
create_desktop_applications
add_rasdaman_path_to_bashrc
deploy_local_earthlook

rasdaman_service stop
service $TOMCAT_SVC stop


mv /etc/apt/sources.list.d/rasdaman.list /etc/apt/sources.list.d/rasdaman.list.disabled
apt-get -qq update -y

# echo "Rasdaman command log:"
# echo "==============================================="
# cat /tmp/rasdaman.install.log
# echo "==============================================="
update_libgdal_java

####
"$BUILD_DIR"/diskspace_probe.sh "`basename $0`" end

0 comments on commit aaa7375

Please sign in to comment.