diff --git a/README.md b/README.md index 3a982f6..3724adf 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,9 @@ # guac-install -Script for installing Guacamole 0.9.13 on Ubuntu 16.04 with MySQL. Should also work on pure Debian. Probably works on 16.10? +Script for installing Guacamole 0.9.14 on Ubuntu 16.04 or newer with MySQL. It should also work on pure Debian >= 7 but I have not tested. Feel free to provide freeback! Run script, enter MySQL Root Password and Guacamole User password. Guacamole User is used to connect to the Guacamole Database. -The script attempts to install tomcat7, if that's not in apt-cache it will attempt to install tomcat6. If you want to manually specify a tomcat version there's a commented out line you can modify. Have at it. - -NOTE: It seems like a lot of people have issues with Tomcat8 for some reason so I removed it from the script. If you're using Tomcat8 and it's working yay, you can keep using it by forcing it via the commented out line. +The script attempts to install tomcat8 if the available version is 8.5.x or newer, if tomcat8 is only 8.0.x it will fall back to tomcat7. If you want to manually specify a tomcat version there's a commented out line you can modify at line #73. Have at it. How to Run: @@ -23,3 +21,22 @@ Run it as root: Once installation is done you can access guacamole by browsing to: http://:8080/guacamole/ The default credentials are guacadmin as both username and password. Please change them or disable guacadmin after install! + +# guac-upgrade +Script for upgrading currently installed Guacamole instance (previously installed via this script/guide) + +If looks for the tomcat folder in /etc/ (E.G. `/etc/tomcat7` or `/etc/tomcat8`) hopefully that works to identify the correct tomcat version/path :smile: I'm open to suggestions/pull requests for a cleaner method. + +How to Run: + +Download file directly from here: + +wget https://raw.githubusercontent.com/MysticRyuujin/guac-install/master/guac-upgrade.sh + +Make it executable: + +chmod +x guac-upgrade.sh + +Run it as root: + +./guac-upgrade.sh diff --git a/docker-install.sh b/docker-install.sh index 2c838f9..f7c33e0 100644 --- a/docker-install.sh +++ b/docker-install.sh @@ -1,7 +1,7 @@ #!/bin/bash # WORKING ON UBUNTU 16.04 LTS -VERSION="0.9.13" +VERSION="0.9.14" # Get MySQL root password and Guacamole User password echo diff --git a/guac-install-server.sh b/guac-install-server.sh index 44aa52c..615abb5 100644 --- a/guac-install-server.sh +++ b/guac-install-server.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION="0.9.13" +VERSION="0.9.14" # Ubuntu and Debian have different names of the libjpeg-turbo library for some reason... source /etc/lsb-release diff --git a/guac-install.sh b/guac-install.sh index 5af1032..89d124f 100644 --- a/guac-install.sh +++ b/guac-install.sh @@ -1,22 +1,12 @@ #!/bin/bash # Version numbers of Guacamole and MySQL Connector/J to download -VERSION="0.9.13" -MCJVERSION="5.1.44" +VERSION="0.9.14" +MCJVERSION="5.1.45" # Update apt so we can search apt-cache for newest tomcat version supported apt update -# tomcat8 seems to be broken, tomcat7 and tomcat6 should work -if [ $(apt-cache search "^tomcat7$" | wc -l) -gt 0 ]; then - TOMCAT="tomcat7" -else - TOMCAT="tomcat6" -fi - -# If you want to force a specific tomcat install and not go with the newest just set it here and uncomment: -#TOMCAT="" - # Get MySQL root password and Guacamole User password echo while true @@ -45,24 +35,43 @@ echo debconf-set-selections <<< "mysql-server mysql-server/root_password password $mysqlrootpassword" debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $mysqlrootpassword" -# Ubuntu and Debian have different names of the libjpeg-turbo library for some reason... -source /etc/lsb-release - -if [ $DISTRIB_ID == "Ubuntu" ] +# 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" -else + if [[ "${VERSION_ID}" == "16.04" ]] + then + LIBPNG="libpng12-dev" + else + LIBPNG="libpng-dev" + fi +elif [[ "${NAME}" == *"Debian"* ]] +then JPEGTURBO="libjpeg62-turbo-dev" + if [[ "${PRETTY_NAME}" == *"stretch"* ]] + then + LIBPNG="libpng-dev" + else + LIBPNG="libpng12-dev" +else + echo "Unsupported Distro - Ubuntu or Debian Only" + exit fi -# Ubuntu 16.10 has a different name for libpng12-dev for some reason... -if [ $DISTRIB_RELEASE == "16.10" ] +# 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 ]] then - LIBPNG="libpng-dev" + TOMCAT="tomcat8" else - LIBPNG="libpng12-dev" + TOMCAT="tomcat7" fi +# Uncomment to manually force a tomcat version +#TOMCAT="" + # Install features apt -y install build-essential libcairo2-dev ${JPEGTURBO} ${LIBPNG} libossp-uuid-dev libavcodec-dev libavutil-dev \ libswscale-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libpulse-dev libssl-dev \ @@ -74,49 +83,44 @@ if [ $? != 0 ]; then exit fi -# Add GUACAMOLE_HOME to $TOMCAT ENV -echo "" >> /etc/default/${TOMCAT} -echo "# GUACAMOLE ENV VARIABLE" >> /etc/default/${TOMCAT} -echo "GUACAMOLE_HOME=/etc/guacamole" >> /etc/default/${TOMCAT} - # Set SERVER to be the preferred download server from the Apache CDN -SERVER="http://apache.org/dyn/closer.cgi?action=download&filename=guacamole/${VERSION}-incubating" +SERVER="http://apache.org/dyn/closer.cgi?action=download&filename=guacamole/${VERSION}" # Download Guacamole Server -wget -O guacamole-server-${VERSION}-incubating.tar.gz ${SERVER}/source/guacamole-server-${VERSION}-incubating.tar.gz -if [ ! -f ./guacamole-server-${VERSION}-incubating.tar.gz ]; then - echo "Failed to download guacamole-server-${VERSION}-incubating.tar.gz" - echo "${SERVER}/source/guacamole-server-${VERSION}-incubating.tar.gz" +wget -O guacamole-server-${VERSION}.tar.gz ${SERVER}/source/guacamole-server-${VERSION}.tar.gz +if [ ! -f ./guacamole-server-${VERSION}.tar.gz ]; then + echo "Failed to download guacamole-server-${VERSION}.tar.gz" + echo "${SERVER}/source/guacamole-server-${VERSION}.tar.gz" exit fi # Download Guacamole Client -wget -O guacamole-${VERSION}-incubating.war ${SERVER}/binary/guacamole-${VERSION}-incubating.war -if [ ! -f ./guacamole-${VERSION}-incubating.war ]; then - echo "Failed to download guacamole-${VERSION}-incubating.war" - echo "${SERVER}/binary/guacamole-${VERSION}-incubating.war" +wget -O guacamole-${VERSION}.war ${SERVER}/binary/guacamole-${VERSION}.war +if [ ! -f ./guacamole-${VERSION}.war ]; then + echo "Failed to download guacamole-${VERSION}.war" + echo "${SERVER}/binary/guacamole-${VERSION}.war" exit fi # Download Guacamole authentication extensions -wget -O guacamole-auth-jdbc-${VERSION}-incubating.tar.gz ${SERVER}/binary/guacamole-auth-jdbc-${VERSION}-incubating.tar.gz -if [ ! -f ./guacamole-auth-jdbc-${VERSION}-incubating.tar.gz ]; then - echo "Failed to download guacamole-auth-jdbc-${VERSION}-incubating.tar.gz" - echo "${SERVER}/binary/guacamole-auth-jdbc-${VERSION}-incubating.tar.gz" +wget -O guacamole-auth-jdbc-${VERSION}.tar.gz ${SERVER}/binary/guacamole-auth-jdbc-${VERSION}.tar.gz +if [ ! -f ./guacamole-auth-jdbc-${VERSION}.tar.gz ]; then + echo "Failed to download guacamole-auth-jdbc-${VERSION}.tar.gz" + echo "${SERVER}/binary/guacamole-auth-jdbc-${VERSION}.tar.gz" exit fi # Download MySQL Connector-J wget -O mysql-connector-java-${MCJVERSION}.tar.gz https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-${MCJVERSION}.tar.gz if [ ! -f ./mysql-connector-java-${MCJVERSION}.tar.gz ]; then - echo "Failed to download guacamole-server-${VERSION}-incubating.tar.gz" + echo "Failed to download mysql-connector-java-${MCJVERSION}.tar.gz" echo "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-${MCJVERSION}.tar.gz" exit fi # Extract Guacamole files -tar -xzf guacamole-server-${VERSION}-incubating.tar.gz -tar -xzf guacamole-auth-jdbc-${VERSION}-incubating.tar.gz +tar -xzf guacamole-server-${VERSION}.tar.gz +tar -xzf guacamole-auth-jdbc-${VERSION}.tar.gz tar -xzf mysql-connector-java-${MCJVERSION}.tar.gz # Make directories @@ -124,7 +128,7 @@ mkdir -p /etc/guacamole/lib mkdir -p /etc/guacamole/extensions # Install guacd -cd guacamole-server-${VERSION}-incubating +cd guacamole-server-${VERSION} ./configure --with-init-dir=/etc/init.d make make install @@ -136,11 +140,11 @@ cd .. BUILD_FOLDER=$(dpkg-architecture -qDEB_BUILD_GNU_TYPE) # Move files to correct locations -mv guacamole-${VERSION}-incubating.war /etc/guacamole/guacamole.war +mv guacamole-${VERSION}.war /etc/guacamole/guacamole.war ln -s /etc/guacamole/guacamole.war /var/lib/${TOMCAT}/webapps/ ln -s /usr/local/lib/freerdp/guac*.so /usr/lib/${BUILD_FOLDER}/freerdp/ cp mysql-connector-java-${MCJVERSION}/mysql-connector-java-${MCJVERSION}-bin.jar /etc/guacamole/lib/ -cp guacamole-auth-jdbc-${VERSION}-incubating/mysql/guacamole-auth-jdbc-mysql-${VERSION}-incubating.jar /etc/guacamole/extensions/ +cp guacamole-auth-jdbc-${VERSION}/mysql/guacamole-auth-jdbc-mysql-${VERSION}.jar /etc/guacamole/extensions/ # Configure guacamole.properties echo "mysql-hostname: localhost" >> /etc/guacamole/guacamole.properties @@ -148,8 +152,6 @@ echo "mysql-port: 3306" >> /etc/guacamole/guacamole.properties echo "mysql-database: guacamole_db" >> /etc/guacamole/guacamole.properties echo "mysql-username: guacamole_user" >> /etc/guacamole/guacamole.properties echo "mysql-password: $guacdbuserpassword" >> /etc/guacamole/guacamole.properties -rm -rf /usr/share/${TOMCAT}/.guacamole -ln -s /etc/guacamole /usr/share/${TOMCAT}/.guacamole # restart tomcat service ${TOMCAT} restart @@ -167,7 +169,7 @@ flush privileges;" echo $SQLCODE | mysql -u root -p$mysqlrootpassword # Add Guacamole schema to newly created database -cat guacamole-auth-jdbc-${VERSION}-incubating/mysql/schema/*.sql | mysql -u root -p$mysqlrootpassword guacamole_db +cat guacamole-auth-jdbc-${VERSION}/mysql/schema/*.sql | mysql -u root -p$mysqlrootpassword guacamole_db # Cleanup rm -rf guacamole-* diff --git a/guac-upgrade.sh b/guac-upgrade.sh index 08bd47b..f9e6e27 100644 --- a/guac-upgrade.sh +++ b/guac-upgrade.sh @@ -1,53 +1,68 @@ #!/bin/bash -# Version Numbers of Guacamole and MySQL Connector/J to download -VERSION="0.9.13" -MCJVERSION="5.1.44" +# Get MySQL root password +echo +while true +do + read -s -p "Enter MySQL ROOT Password: " mysqlrootpassword + export MYSQL_PWD=${mysqlrootpassword} + echo + mysql -u root guacamole_db -e"quit" && break + echo +done +echo -# I'm assuming tomcat7, you can change it here... -TOMCAT="tomcat7" +# Version Numbers of Guacamole and MySQL Connector/J to download +VERSION="0.9.14" +MCJVERSION="5.1.45" + +# Get Tomcat Version +TOMCAT=$(ls /etc/ | grep tomcat) + +# Get Current Guacamole Version +OLDVERSION=$(grep -oP 'Guacamole.API_VERSION = "\K[0-9\.]+' /var/lib/${TOMCAT}/webapps/guacamole/guacamole-common-js/modules/Version.js) # Set SERVER to be the preferred download server from the Apache CDN -SERVER="http://apache.org/dyn/closer.cgi?action=download&filename=guacamole/${VERSION}-incubating" +SERVER="http://apache.org/dyn/closer.cgi?action=download&filename=guacamole/${VERSION}" # Stop tomcat service ${TOMCAT} stop # Download Guacamole server -wget -O guacamole-server-${VERSION}-incubating.tar.gz ${SERVER}/source/guacamole-server-${VERSION}-incubating.tar.gz -if [ ! -f ./guacamole-server-${VERSION}-incubating.tar.gz ]; then - echo "Failed to download guacamole-server-${VERSION}-incubating.tar.gz" - echo "${SERVER}/source/guacamole-server-${VERSION}-incubating.tar.gz" +wget -O guacamole-server-${VERSION}.tar.gz ${SERVER}/source/guacamole-server-${VERSION}.tar.gz +if [ ! -f ./guacamole-server-${VERSION}.tar.gz ]; then + echo "Failed to download guacamole-server-${VERSION}.tar.gz" + echo "${SERVER}/source/guacamole-server-${VERSION}.tar.gz" exit fi # Download Guacamole client -wget -O guacamole-${VERSION}-incubating.war ${SERVER}/binary/guacamole-${VERSION}-incubating.war -if [ ! -f ./guacamole-${VERSION}-incubating.war ]; then - echo "Failed to download guacamole-${VERSION}-incubating.war" - echo "${SERVER}/binary/guacamole-${VERSION}-incubating.war" +wget -O guacamole-${VERSION}.war ${SERVER}/binary/guacamole-${VERSION}.war +if [ ! -f ./guacamole-${VERSION}.war ]; then + echo "Failed to download guacamole-${VERSION}.war" + echo "${SERVER}/binary/guacamole-${VERSION}.war" exit fi # Download SQL components -wget -O guacamole-auth-jdbc-${VERSION}-incubating.tar.gz ${SERVER}/binary/guacamole-auth-jdbc-${VERSION}-incubating.tar.gz -if [ ! -f ./guacamole-auth-jdbc-${VERSION}-incubating.tar.gz ]; then - echo "Failed to download guacamole-auth-jdbc-${VERSION}-incubating.tar.gz" - echo "${SERVER}/binary/guacamole-auth-jdbc-${VERSION}-incubating.tar.gz" +wget -O guacamole-auth-jdbc-${VERSION}.tar.gz ${SERVER}/binary/guacamole-auth-jdbc-${VERSION}.tar.gz +if [ ! -f ./guacamole-auth-jdbc-${VERSION}.tar.gz ]; then + echo "Failed to download guacamole-auth-jdbc-${VERSION}.tar.gz" + echo "${SERVER}/binary/guacamole-auth-jdbc-${VERSION}.tar.gz" exit fi # Download the MySQL Connector/J wget -O mysql-connector-java-${MCJVERSION}.tar.gz https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-${MCJVERSION}.tar.gz if [ ! -f ./mysql-connector-java-${MCJVERSION}.tar.gz ]; then - echo "Failed to download guacamole-server-${VERSION}-incubating.tar.gz" + echo "Failed to download mysql-connector-java-${MCJVERSION}.tar.gz" echo "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-${MCJVERSION}.tar.gz" exit fi # Upgrade Guacamole Server -tar -xzf guacamole-server-${VERSION}-incubating.tar.gz -cd guacamole-server-${VERSION}-incubating +tar -xzf guacamole-server-${VERSION}.tar.gz +cd guacamole-server-${VERSION} ./configure --with-init-dir=/etc/init.d make make install @@ -56,23 +71,31 @@ systemctl enable guacd cd .. # Upgrade Guacamole Client -mv guacamole-${VERSION}-incubating.war /etc/guacamole/guacamole.war +mv guacamole-${VERSION}.war /etc/guacamole/guacamole.war # Upgrade SQL Components -tar -xzf guacamole-auth-jdbc-${VERSION}-incubating.tar.gz -cp guacamole-auth-jdbc-${VERSION}-incubating/mysql/guacamole-auth-jdbc-mysql-${VERSION}-incubating.jar /etc/guacamole/extensions/ +tar -xzf guacamole-auth-jdbc-${VERSION}.tar.gz +cp guacamole-auth-jdbc-${VERSION}/mysql/guacamole-auth-jdbc-mysql-${VERSION}.jar /etc/guacamole/extensions/ tar -xzf mysql-connector-java-${MCJVERSION}.tar.gz cp mysql-connector-java-${MCJVERSION}/mysql-connector-java-${MCJVERSION}-bin.jar /etc/guacamole/lib/ rm -rf mysql-connector-java-${MCJVERSION}* -# Check if there is an schema upgrade file, if there is run it (will prompt for password) -if [ -f "guacamole-auth-jdbc-${VERSION}-incubating/mysql/schema/upgrade/upgrade-pre-${VERSION}.sql" ] -then - mysql -u root -p guacamole_db < guacamole-auth-jdbc-${VERSION}-incubating/mysql/schema/upgrade/upgrade-pre-${VERSION}.sql -fi +# Get list of SQL Upgrade Files +UPGRADEFILES=($(ls -1 guacamole-auth-jdbc-${VERSION}/mysql/schema/upgrade/ | sort -V)) + +# Compare SQL Upgrage Files against old version, apply upgrades as needed +for FILE in ${UPGRADEFILES[@]} +do + FILEVERSION=$(echo ${FILE} | grep -oP 'upgrade-pre-\K[0-9\.]+(?=\.)') + if [[ $(echo -e "${FILEVERSION}\n${OLDVERSION}" | sort -V | head -n1) == ${OLDVERSION} && ${FILEVERSION} != ${OLDVERSION} ]] + then + mysql -u root guacamole_db < guacamole-auth-jdbc-${VERSION}/mysql/schema/upgrade/${FILE} + fi +done # Start tomcat service ${TOMCAT} start # Cleanup rm -rf guacamole* +unset MYSQL_PWD