guac-install/guac-install.sh

285 lines
8.1 KiB
Bash
Raw Normal View History

2017-07-20 19:46:08 +02:00
#!/bin/bash
# Version number of Guacamole to install
GUACVERSION="0.9.14"
2017-07-20 19:46:08 +02:00
# Colors to use for output
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color
LOG="/tmp/guacamole_${GUACVERSION}_build.log"
DB="guacamole_db"
# Update apt so we can search apt-cache for newest tomcat version supported
apt-get -qq update
# Get script arguments for non-interactive mode
while [ "$1" != "" ]; do
case $1 in
-m | --mysqlpwd )
shift
mysqlpwd="$1"
;;
-g | --guacpwd )
shift
guacpwd="$1"
;;
esac
shift
done
# Get MySQL root password and Guacamole User password
if [ -n "$mysqlpwd" ] && [ -n "$guacpwd" ]; then
mysqlrootpassword=$mysqlpwd
guacdbuserpassword=$guacpwd
else
echo
while true
do
read -s -p "Enter a MySQL ROOT Password: " mysqlrootpassword
echo
read -s -p "Confirm MySQL ROOT Password: " password2
echo
[ "$mysqlrootpassword" = "$password2" ] && break
echo "Passwords don't match. Please try again."
echo
done
echo
while true
do
read -s -p "Enter a Guacamole User Database Password: " guacdbuserpassword
echo
read -s -p "Confirm Guacamole User Database Password: " password2
echo
[ "$guacdbuserpassword" = "$password2" ] && break
echo "Passwords don't match. Please try again."
echo
done
echo
fi
2017-07-20 19:46:08 +02:00
debconf-set-selections <<< "mysql-server mysql-server/root_password password $mysqlrootpassword"
debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $mysqlrootpassword"
0.9.14 Release (#23) * Support Upgrade From Older Versions First I've added a MySQL Root Password Prompt, it will verify that the user is entering the correct password and will not continue until the MySQL Root Password is entered correctly. Second, I'm just getting the tomcat version number from /etc/ folder name...This seems to work well enough (instead of making the user edit the script manually)...Maybe someone can come up with a better solution? Third, I'm using the Version.js file to get the currently installed versions number. This allows for supporting multiple version number upgrades (E.G going from 0.8.2 to 0.9.14). The script will now loop through all of the SQL Upgrade files, and apply any that are newer than the OLDVERSION... I.E. Going from 0.9.9 to 0.9.13 should automatically install `upgrade-pre-0.9.10.sql` & `upgrade-pre-0.9.11.sql` & `upgrade-pre-0.9.13.sql` * Remove GUACAMOLE_HOME According to the documentation this is now a default search path, so this isn't required anymore * Version Control for Ubuntu and Debian This might need more work but it should install the proper packages for both Ubuntu and Debian and account for Tomcat 8.0.x and 8.5.x differences... http://tomcat.apache.org/whichversion.html 7.x does not say end of life... but 8.0.x does. The distro maintainers have different versions of Tomcat8 so we can check for 8.5.x or newer options and install, otherwise go the safer route and install Tomcat7 * Remove rm and ln of tomcat/.guacamole According to the documentation this is not required (it may not have been required to begin with?) * No Longer Incubating!
2018-01-20 15:23:04 +01:00
# Ubuntu and Debian have different package names for libjpeg
# Ubuntu and Debian versions have differnet package names for libpng-dev
source /etc/os-release
if [[ "${NAME}" == "Ubuntu" ]]
then
JPEGTURBO="libjpeg-turbo8-dev"
0.9.14 Release (#23) * Support Upgrade From Older Versions First I've added a MySQL Root Password Prompt, it will verify that the user is entering the correct password and will not continue until the MySQL Root Password is entered correctly. Second, I'm just getting the tomcat version number from /etc/ folder name...This seems to work well enough (instead of making the user edit the script manually)...Maybe someone can come up with a better solution? Third, I'm using the Version.js file to get the currently installed versions number. This allows for supporting multiple version number upgrades (E.G going from 0.8.2 to 0.9.14). The script will now loop through all of the SQL Upgrade files, and apply any that are newer than the OLDVERSION... I.E. Going from 0.9.9 to 0.9.13 should automatically install `upgrade-pre-0.9.10.sql` & `upgrade-pre-0.9.11.sql` & `upgrade-pre-0.9.13.sql` * Remove GUACAMOLE_HOME According to the documentation this is now a default search path, so this isn't required anymore * Version Control for Ubuntu and Debian This might need more work but it should install the proper packages for both Ubuntu and Debian and account for Tomcat 8.0.x and 8.5.x differences... http://tomcat.apache.org/whichversion.html 7.x does not say end of life... but 8.0.x does. The distro maintainers have different versions of Tomcat8 so we can check for 8.5.x or newer options and install, otherwise go the safer route and install Tomcat7 * Remove rm and ln of tomcat/.guacamole According to the documentation this is not required (it may not have been required to begin with?) * No Longer Incubating!
2018-01-20 15:23:04 +01:00
if [[ "${VERSION_ID}" == "16.04" ]]
then
LIBPNG="libpng12-dev"
else
LIBPNG="libpng-dev"
fi
elif [[ "${NAME}" == *"Debian"* ]]
then
JPEGTURBO="libjpeg62-turbo-dev"
0.9.14 Release (#23) * Support Upgrade From Older Versions First I've added a MySQL Root Password Prompt, it will verify that the user is entering the correct password and will not continue until the MySQL Root Password is entered correctly. Second, I'm just getting the tomcat version number from /etc/ folder name...This seems to work well enough (instead of making the user edit the script manually)...Maybe someone can come up with a better solution? Third, I'm using the Version.js file to get the currently installed versions number. This allows for supporting multiple version number upgrades (E.G going from 0.8.2 to 0.9.14). The script will now loop through all of the SQL Upgrade files, and apply any that are newer than the OLDVERSION... I.E. Going from 0.9.9 to 0.9.13 should automatically install `upgrade-pre-0.9.10.sql` & `upgrade-pre-0.9.11.sql` & `upgrade-pre-0.9.13.sql` * Remove GUACAMOLE_HOME According to the documentation this is now a default search path, so this isn't required anymore * Version Control for Ubuntu and Debian This might need more work but it should install the proper packages for both Ubuntu and Debian and account for Tomcat 8.0.x and 8.5.x differences... http://tomcat.apache.org/whichversion.html 7.x does not say end of life... but 8.0.x does. The distro maintainers have different versions of Tomcat8 so we can check for 8.5.x or newer options and install, otherwise go the safer route and install Tomcat7 * Remove rm and ln of tomcat/.guacamole According to the documentation this is not required (it may not have been required to begin with?) * No Longer Incubating!
2018-01-20 15:23:04 +01:00
if [[ "${PRETTY_NAME}" == *"stretch"* ]]
then
LIBPNG="libpng-dev"
else
LIBPNG="libpng12-dev"
2018-01-20 21:32:22 +01:00
fi
0.9.14 Release (#23) * Support Upgrade From Older Versions First I've added a MySQL Root Password Prompt, it will verify that the user is entering the correct password and will not continue until the MySQL Root Password is entered correctly. Second, I'm just getting the tomcat version number from /etc/ folder name...This seems to work well enough (instead of making the user edit the script manually)...Maybe someone can come up with a better solution? Third, I'm using the Version.js file to get the currently installed versions number. This allows for supporting multiple version number upgrades (E.G going from 0.8.2 to 0.9.14). The script will now loop through all of the SQL Upgrade files, and apply any that are newer than the OLDVERSION... I.E. Going from 0.9.9 to 0.9.13 should automatically install `upgrade-pre-0.9.10.sql` & `upgrade-pre-0.9.11.sql` & `upgrade-pre-0.9.13.sql` * Remove GUACAMOLE_HOME According to the documentation this is now a default search path, so this isn't required anymore * Version Control for Ubuntu and Debian This might need more work but it should install the proper packages for both Ubuntu and Debian and account for Tomcat 8.0.x and 8.5.x differences... http://tomcat.apache.org/whichversion.html 7.x does not say end of life... but 8.0.x does. The distro maintainers have different versions of Tomcat8 so we can check for 8.5.x or newer options and install, otherwise go the safer route and install Tomcat7 * Remove rm and ln of tomcat/.guacamole According to the documentation this is not required (it may not have been required to begin with?) * No Longer Incubating!
2018-01-20 15:23:04 +01:00
else
echo "Unsupported Distro - Ubuntu or Debian Only"
exit
fi
0.9.14 Release (#23) * Support Upgrade From Older Versions First I've added a MySQL Root Password Prompt, it will verify that the user is entering the correct password and will not continue until the MySQL Root Password is entered correctly. Second, I'm just getting the tomcat version number from /etc/ folder name...This seems to work well enough (instead of making the user edit the script manually)...Maybe someone can come up with a better solution? Third, I'm using the Version.js file to get the currently installed versions number. This allows for supporting multiple version number upgrades (E.G going from 0.8.2 to 0.9.14). The script will now loop through all of the SQL Upgrade files, and apply any that are newer than the OLDVERSION... I.E. Going from 0.9.9 to 0.9.13 should automatically install `upgrade-pre-0.9.10.sql` & `upgrade-pre-0.9.11.sql` & `upgrade-pre-0.9.13.sql` * Remove GUACAMOLE_HOME According to the documentation this is now a default search path, so this isn't required anymore * Version Control for Ubuntu and Debian This might need more work but it should install the proper packages for both Ubuntu and Debian and account for Tomcat 8.0.x and 8.5.x differences... http://tomcat.apache.org/whichversion.html 7.x does not say end of life... but 8.0.x does. The distro maintainers have different versions of Tomcat8 so we can check for 8.5.x or newer options and install, otherwise go the safer route and install Tomcat7 * Remove rm and ln of tomcat/.guacamole According to the documentation this is not required (it may not have been required to begin with?) * No Longer Incubating!
2018-01-20 15:23:04 +01:00
# Tomcat 8.0.x is End of Life, however Tomcat 7.x is not...
# If Tomcat 8.5.x or newer is available install it, otherwise install Tomcat 7
if [[ $(apt-cache show tomcat8 | egrep "Version: 8.[5-9]" | wc -l) -gt 0 ]]
2017-09-20 16:44:39 +02:00
then
0.9.14 Release (#23) * Support Upgrade From Older Versions First I've added a MySQL Root Password Prompt, it will verify that the user is entering the correct password and will not continue until the MySQL Root Password is entered correctly. Second, I'm just getting the tomcat version number from /etc/ folder name...This seems to work well enough (instead of making the user edit the script manually)...Maybe someone can come up with a better solution? Third, I'm using the Version.js file to get the currently installed versions number. This allows for supporting multiple version number upgrades (E.G going from 0.8.2 to 0.9.14). The script will now loop through all of the SQL Upgrade files, and apply any that are newer than the OLDVERSION... I.E. Going from 0.9.9 to 0.9.13 should automatically install `upgrade-pre-0.9.10.sql` & `upgrade-pre-0.9.11.sql` & `upgrade-pre-0.9.13.sql` * Remove GUACAMOLE_HOME According to the documentation this is now a default search path, so this isn't required anymore * Version Control for Ubuntu and Debian This might need more work but it should install the proper packages for both Ubuntu and Debian and account for Tomcat 8.0.x and 8.5.x differences... http://tomcat.apache.org/whichversion.html 7.x does not say end of life... but 8.0.x does. The distro maintainers have different versions of Tomcat8 so we can check for 8.5.x or newer options and install, otherwise go the safer route and install Tomcat7 * Remove rm and ln of tomcat/.guacamole According to the documentation this is not required (it may not have been required to begin with?) * No Longer Incubating!
2018-01-20 15:23:04 +01:00
TOMCAT="tomcat8"
2017-09-20 16:44:39 +02:00
else
0.9.14 Release (#23) * Support Upgrade From Older Versions First I've added a MySQL Root Password Prompt, it will verify that the user is entering the correct password and will not continue until the MySQL Root Password is entered correctly. Second, I'm just getting the tomcat version number from /etc/ folder name...This seems to work well enough (instead of making the user edit the script manually)...Maybe someone can come up with a better solution? Third, I'm using the Version.js file to get the currently installed versions number. This allows for supporting multiple version number upgrades (E.G going from 0.8.2 to 0.9.14). The script will now loop through all of the SQL Upgrade files, and apply any that are newer than the OLDVERSION... I.E. Going from 0.9.9 to 0.9.13 should automatically install `upgrade-pre-0.9.10.sql` & `upgrade-pre-0.9.11.sql` & `upgrade-pre-0.9.13.sql` * Remove GUACAMOLE_HOME According to the documentation this is now a default search path, so this isn't required anymore * Version Control for Ubuntu and Debian This might need more work but it should install the proper packages for both Ubuntu and Debian and account for Tomcat 8.0.x and 8.5.x differences... http://tomcat.apache.org/whichversion.html 7.x does not say end of life... but 8.0.x does. The distro maintainers have different versions of Tomcat8 so we can check for 8.5.x or newer options and install, otherwise go the safer route and install Tomcat7 * Remove rm and ln of tomcat/.guacamole According to the documentation this is not required (it may not have been required to begin with?) * No Longer Incubating!
2018-01-20 15:23:04 +01:00
TOMCAT="tomcat7"
2017-09-20 16:44:39 +02:00
fi
0.9.14 Release (#23) * Support Upgrade From Older Versions First I've added a MySQL Root Password Prompt, it will verify that the user is entering the correct password and will not continue until the MySQL Root Password is entered correctly. Second, I'm just getting the tomcat version number from /etc/ folder name...This seems to work well enough (instead of making the user edit the script manually)...Maybe someone can come up with a better solution? Third, I'm using the Version.js file to get the currently installed versions number. This allows for supporting multiple version number upgrades (E.G going from 0.8.2 to 0.9.14). The script will now loop through all of the SQL Upgrade files, and apply any that are newer than the OLDVERSION... I.E. Going from 0.9.9 to 0.9.13 should automatically install `upgrade-pre-0.9.10.sql` & `upgrade-pre-0.9.11.sql` & `upgrade-pre-0.9.13.sql` * Remove GUACAMOLE_HOME According to the documentation this is now a default search path, so this isn't required anymore * Version Control for Ubuntu and Debian This might need more work but it should install the proper packages for both Ubuntu and Debian and account for Tomcat 8.0.x and 8.5.x differences... http://tomcat.apache.org/whichversion.html 7.x does not say end of life... but 8.0.x does. The distro maintainers have different versions of Tomcat8 so we can check for 8.5.x or newer options and install, otherwise go the safer route and install Tomcat7 * Remove rm and ln of tomcat/.guacamole According to the documentation this is not required (it may not have been required to begin with?) * No Longer Incubating!
2018-01-20 15:23:04 +01:00
# Uncomment to manually force a tomcat version
#TOMCAT=""
# remove
0.9.14 Release (#23) * Support Upgrade From Older Versions First I've added a MySQL Root Password Prompt, it will verify that the user is entering the correct password and will not continue until the MySQL Root Password is entered correctly. Second, I'm just getting the tomcat version number from /etc/ folder name...This seems to work well enough (instead of making the user edit the script manually)...Maybe someone can come up with a better solution? Third, I'm using the Version.js file to get the currently installed versions number. This allows for supporting multiple version number upgrades (E.G going from 0.8.2 to 0.9.14). The script will now loop through all of the SQL Upgrade files, and apply any that are newer than the OLDVERSION... I.E. Going from 0.9.9 to 0.9.13 should automatically install `upgrade-pre-0.9.10.sql` & `upgrade-pre-0.9.11.sql` & `upgrade-pre-0.9.13.sql` * Remove GUACAMOLE_HOME According to the documentation this is now a default search path, so this isn't required anymore * Version Control for Ubuntu and Debian This might need more work but it should install the proper packages for both Ubuntu and Debian and account for Tomcat 8.0.x and 8.5.x differences... http://tomcat.apache.org/whichversion.html 7.x does not say end of life... but 8.0.x does. The distro maintainers have different versions of Tomcat8 so we can check for 8.5.x or newer options and install, otherwise go the safer route and install Tomcat7 * Remove rm and ln of tomcat/.guacamole According to the documentation this is not required (it may not have been required to begin with?) * No Longer Incubating!
2018-01-20 15:23:04 +01:00
#apt-get -y remove ${TOMCAT}
# Install features
echo -e "${BLUE}Installing dependencies${NC}"
apt-get -qq -y install build-essential libcairo2-dev ${JPEGTURBO} ${LIBPNG} libossp-uuid-dev libavcodec-dev libavutil-dev \
2017-07-20 19:46:08 +02:00
libswscale-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libpulse-dev libssl-dev \
libvorbis-dev libwebp-dev mysql-server mysql-client mysql-common mysql-utilities libmysql-java ${TOMCAT} freerdp-x11 \
ghostscript wget dpkg-dev
if [ $? -ne 0 ]; then
echo -e "${RED}Failed${NC}"
exit 1
else
echo -e "${GREEN}OK${NC}"
fi
2017-07-20 19:46:08 +02:00
# If apt fails to run completely the rest of this isn't going to work...
if [ $? -ne 0 ]; then
echo $-e {FAILED} "apt-get failed to install all required dependencies"
2017-07-20 19:46:08 +02:00
exit
fi
2017-11-11 17:03:42 +01:00
# Set SERVER to be the preferred download server from the Apache CDN
SERVER="http://apache.org/dyn/closer.cgi?action=download&filename=guacamole/${GUACVERSION}"
echo -e "${BLUE}Downloaded Files...${NC}"
# Download Guacamole Server
wget -q --show-progress -O guacamole-server-${GUACVERSION}.tar.gz ${SERVER}/source/guacamole-server-${GUACVERSION}.tar.gz
if [ $? -ne 0 ]; then
echo "${RED}Failed to download guacamole-server-${GUACVERSION}.tar.gz"
echo "${SERVER}/source/guacamole-server-${GUACVERSION}.tar.gz"
exit
fi
# Download Guacamole Client
wget -q --show-progress -O guacamole-${GUACVERSION}.war ${SERVER}/binary/guacamole-${GUACVERSION}.war
if [ $? -ne 0 ]; then
echo "Failed to download guacamole-${GUACVERSION}.war"
echo "${SERVER}/binary/guacamole-${GUACVERSION}.war"
exit
echo -e "${GREEN}Downloaded guacamole-${GUACVERSION}.war${COLOREND}"
fi
# Download Guacamole authentication extensions
wget -q --show-progress -O guacamole-auth-jdbc-${GUACVERSION}.tar.gz ${SERVER}/binary/guacamole-auth-jdbc-${GUACVERSION}.tar.gz
if [ $? -ne 0 ]; then
echo "Failed to download guacamole-auth-jdbc-${GUACVERSION}.tar.gz"
echo "${SERVER}/binary/guacamole-auth-jdbc-${GUACVERSION}.tar.gz"
exit
fi
echo -e "${GREEN}Downloading complete.${NC}"
# Extract Guacamole files
tar -xzf guacamole-server-${GUACVERSION}.tar.gz
tar -xzf guacamole-auth-jdbc-${GUACVERSION}.tar.gz
2017-07-20 19:46:08 +02:00
# Make directories
mkdir -p /etc/guacamole/lib
mkdir -p /etc/guacamole/extensions
2017-07-20 19:46:08 +02:00
# Install guacd
cd guacamole-server-${GUACVERSION}
# Hack for gcc7
if [[ $(gcc --version | head -n1 | grep -oP '\)\K.*' | awk '{print $1}' | grep "^7" | wc -l) -gt 0 ]]
then
echo -e "${BLUE}Building Guacamole with GCC6...${NC}"
apt-get -qq -y install gcc-6
if [ $? -ne 0 ]; then
echo -e "${RED}apt-get failed to install gcc-6${NC}"
exit 1
else
echo -e "${GREEN}GCC6 Installed${NC}"
fi
CC="gcc-6"
else
echo -e "${BLUE}Building Guacamole with GCC7...${NC}"
CC="gcc-7"
fi
echo -e "${BLUE}Configuring...${NC}"
./configure --with-init-dir=/etc/init.d &>> ${LOG}
if [ $? -ne 0 ]; then
echo -e "${RED} Failed${NC}"
exit 1
else
echo -e "${GREEN} OK${NC}"
fi
echo -e "${BLUE}Running Make...${NC}"
make &>> ${LOG}
if [ $? -ne 0 ]; then
echo -e "${RED} Failed${NC}"
exit 1
else
echo -e "${GREEN} OK${NC}"
fi
echo -e "${BLUE}Running Make Install...${NC}"
make install &>> ${LOG}
if [ $? -ne 0 ]; then
echo -e "${RED} Failed${NC}"
exit 1
else
echo -e "${GREEN}OK${NC}"
fi
2017-07-20 19:46:08 +02:00
ldconfig
systemctl enable guacd
cd ..
2017-11-11 17:03:42 +01:00
# Get build-folder
BUILD_FOLDER=$(dpkg-architecture -qDEB_BUILD_GNU_TYPE)
2017-07-20 19:46:08 +02:00
# Move files to correct locations
mv guacamole-${GUACVERSION}.war /etc/guacamole/guacamole.war
ln -s /etc/guacamole/guacamole.war /var/lib/${TOMCAT}/webapps/
2017-08-03 13:36:14 +02:00
ln -s /usr/local/lib/freerdp/guac*.so /usr/lib/${BUILD_FOLDER}/freerdp/
ln -s /usr/share/java/mysql-connector-java.jar /etc/guacamole/lib/
cp guacamole-auth-jdbc-${GUACVERSION}/mysql/guacamole-auth-jdbc-mysql-${GUACVERSION}.jar /etc/guacamole/extensions/
2017-07-20 19:46:08 +02:00
# Configure guacamole.properties
echo "mysql-hostname: localhost" >> /etc/guacamole/guacamole.properties
echo "mysql-port: 3306" >> /etc/guacamole/guacamole.properties
echo "mysql-database: ${DB}" >> /etc/guacamole/guacamole.properties
2017-07-20 19:46:08 +02:00
echo "mysql-username: guacamole_user" >> /etc/guacamole/guacamole.properties
echo "mysql-password: $guacdbuserpassword" >> /etc/guacamole/guacamole.properties
# restart tomcat
echo -e "Restarting tomcat..."
service ${TOMCAT} restart
if [ $? -ne 0 ]; then
echo -e "${RED}Failed${NC}"
exit 1
else
echo -e "${GREEN}OK${NC}"
fi
2017-07-20 19:46:08 +02:00
# Create guacamole_db and grant guacamole_user permissions to it
# SQL code
2017-07-20 19:46:08 +02:00
SQLCODE="
create database ${DB};
2017-07-20 19:46:08 +02:00
create user 'guacamole_user'@'localhost' identified by \"$guacdbuserpassword\";
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';
flush privileges;"
# Execute SQL code
2017-07-20 19:46:08 +02:00
echo $SQLCODE | mysql -u root -p$mysqlrootpassword
# Add Guacamole schema to newly created database
echo -e "Adding db tables..."
cat guacamole-auth-jdbc-${GUACVERSION}/mysql/schema/*.sql | mysql -u root -p$mysqlrootpassword ${DB}
if [ $? -ne 0 ]; then
echo -e "${RED}Failed${NC}"
exit 1
else
echo -e "${GREEN}OK${NC}"
fi
2017-07-20 19:46:08 +02:00
# Ensure guacd is started
service guacd start
2017-07-20 19:46:08 +02:00
# Cleanup
echo -e "Cleanup install files..."
2017-07-20 19:46:08 +02:00
rm -rf guacamole-*
if [ $? -ne 0 ]; then
echo -e "${RED}Failed${NC}"
exit 1
else
echo -e "${GREEN}OK${NC}"
fi
2017-11-12 17:57:04 +01:00
echo -e "Installation Complete\nhttp://localhost:8080/guacamole/\nDefault login guacadmin:guacadmin\nBe sure to change the password."