Skip to content
Snippets Groups Projects
swi-install.sh 39.11 KiB
#!/bin/bash

#Download
function downloadAndExtract(){
    local targetDir=${1:-/tmp}
    local localFile=${2:-/tmp/tmp}
    local tarDir=${3:-/tmp}
    local localDir=${4:-/tmp}
    local url=${5:-tmp}
	echo '============>Downloading '$localFile' .....==========================================================================================================='
   wget -O $localFile $url
	echo '============>Extracting '$localFile' .....==========================================================================================================='
    sudo tar --warning=no-unknown-keyword -xz -C $targetDir -f $localFile
    rm $localFile
    if ! [ "$tarDir" == "$localDir"  ] ; then
		sudo mv $targetDir/$tarDir $targetDir/$localDir
	fi
    sudo chown -R root:root $targetDir/$localDir
    sudo chmod -R g-w $targetDir/$localDir
	echo '============>Download and extract '$localFile' complete.==========================================================================================================='
}


function uninstallJavaVersion(){
    local ver=${1:-21}
    sudo apt -y purge openjdk-$ver-jdk openjdk-$ver-source openjdk-$ver-doc
}

function installJavaVersion(){
    local ver=${1:-21}
    sudo apt -y install openjdk-$ver-jdk openjdk-$ver-source openjdk-$ver-doc
}

#Install ORACLE JAVA 8 and OPEN JDK 11, 17
function installJava(){
	echo '============>Install java packages.....==========================================================================================================='
    installJavaVersion 8
    installJavaVersion 17
    installJavaVersion 21
	echo '============>Java installed.==========================================================================================================='
}

function installJavaFX(){
	echo '============>Install java FX.....==========================================================================================================='
    wget https://download2.gluonhq.com/scenebuilder/22.0.0/install/linux/SceneBuilder-22.0.0.deb
    sudo apt install libpcre3
    sudo dpkg -i SceneBuilder-22.0.0.deb
    rm SceneBuilder-22.0.0.deb

    wget -O openjfx-22.0.2_linux-x64_bin-sdk.zip https://download2.gluonhq.com/openjfx/22.0.2/openjfx-22.0.2_linux-x64_bin-sdk.zip
    sudo unzip -d /opt openjfx-22.0.2_linux-x64_bin-sdk.zip
    rm openjfx-22.0.2_linux-x64_bin-sdk.zip
	echo '============>Java FX installed.==========================================================================================================='
}

function uninstallJavaFX(){
	echo '============>Uninstalling OpenJFX a javaFX.....==========================================================================================================='
	sudo rm -R /opt/openjfx-*
	sudo rm -R /opt/javafx-sdk*
	echo '============>JFX uninstalled==========================================================================================================='
}

#Create menu launcher and alternatives
function createLauncher(){
    local name=$1
    local niceName=$2
    local execFile=$3
    local icon=$4
    local description=$5
    local terminal=$6
    local wmclass=$7
	echo '============>Creating launcher '$niceName'==========================================================================================================='
    if [ -n "$terminal" ] ; then
        terminal="true"
    else
		terminal="false"
    fi
    printf -v launcherText "\
[Desktop Entry]\n\
Version=1.0\n\
Name=$niceName\n\
Comment=$description\n\
StartupWMClass=$wmclass\n\
Exec=$execFile\n\
Icon=$icon\n\
Terminal=$terminal\n\
Type=Application\n\
Categories=Development;Java;\n"
    printf "$launcherText" | sudo tee /usr/share/applications/$name.desktop > /dev/null
		sudo update-alternatives --install "/usr/bin/$name" $name $execFile 1
}

function removeLauncher(){
    local name=$1
	sudo update-alternatives --remove .$name /usr/share/applications/$name.desktop
    sudo rm /usr/share/applications/$name.desktop
}

function downloadAndExtractEclipse(){
    local suffix=$1
    local url=$2
    local eclipseSrcDir=${3:-eclipse}
    downloadAndExtract /opt eclipse-$suffix.tar.gz $eclipseSrcDir eclipse-$suffix $url
}

function eclipseChangeVm(){
    local suffix=$1
    local vm=$2
    local altConfigName=${3:-eclipse}
    printf -v substituteWorkspace "s/plugins\/org\.eclipse\.justj\.openjdk\.hotspot\.jre\.full.*$/$vm/g"
    sudo sed -i -e $substituteWorkspace /opt/eclipse-$suffix/$altConfigName.ini
}

function installPlugins(){
    local suffix=$1
    local repos=$2
    local plugins=$3
    local altRunName=${4:-eclipse}
    #install plugins
    echo $repos
    echo $plugins
    
	cat <<EOF  | sudo tee /opt/eclipse-$suffix/logback.xml > /dev/null
<configuration debug="true">
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are  by default assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
    <encoder>
      <pattern>aaa%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern>
    </encoder>
  </appender>

  <root level="info">
    <appender-ref ref="STDOUT" />
  </root>
  <logger name="org.apache" level="WARN" />
  <logger name="org.apache.http" level="WARN" />
  <logger name="org.apache.hc.client5.http" level="WARN" />
  <logger name="org.apache.hc.client5.http.wire" level="WARN" />
  <logger name="org.apache.hc" level="WARN" />
  <logger name="httpclient" level="WARN" /> 
  

</configuration>
EOF

    local eclipseConfigFile="/opt/eclipse-$suffix/$altRunName.ini"
    local logLevelLine="-Dlogback.configurationFile=logback.xml"
	sudo sed -i "/$logLevelLine/d" $eclipseConfigFile
	sudo sed -i "/-Dsun.java.command/a $logLevelLine" $eclipseConfigFile

    sudo /opt/eclipse-$suffix/$altRunName -nosplash -application org.eclipse.equinox.p2.director -repository $repos -installIU $plugins -vmargs -Dlogback.configurationFile=logback.xml -Declipse.log.level=INFO | tee plugin-install-$altRunName-$suffix.log |grep -v "] DEBUG org.apache"

#	sed -i "/$logLevelLine/d" $eclipseConfigFile
}

#config workspace and config area
function doConfig() {
    local suffix=$1
    local altConfigName=${2:-eclipse}
    
    printf -v substituteWorkspace "s/osgi\.instance\.area\.default=@user\.home\/workspace$/osgi\.instance\.area\.default=@user.home\/workspace.$suffix/g"
    sudo sed -i -e $substituteWorkspace /opt/eclipse-$suffix/configuration/config.ini
    if ! grep "osgi\.configuration\.area=@user\.home/\.eclipse-$suffix/configuration" /opt/eclipse-$suffix/configuration/config.ini > /dev/null; then
        printf -v substituteConfig "\$aosgi\.configuration\.area=@user\.home/\.eclipse-$suffix/configuration" 
        sudo sed -i -e $substituteConfig /opt/eclipse-$suffix/configuration/config.ini
    fi
    sudo sed -i '/-Dosgi\.instance\.area\.default=/d' /opt/eclipse-$suffix/$altConfigName.ini
    sudo sed -i '/^-D/i -Doomph.setup.skip=true' /opt/eclipse-$suffix/$altConfigName.ini
}

function removeEclipseInstance(){
    local suffix=$1
	echo '============>Removing eclipse '$suffix' instance.....==========================================================================================================='
    sudo rm -R /opt/eclipse-$suffix
    removeLauncher eclipse-$suffix
	echo '============>Eclipse-'$suffix' instance remmoved.==========================================================================================================='
}
function installEclipseInstance(){
    local suffix=$1
    local url=$2
    local repos=$3
    local plugins=$4
    local niceName=$5
    local icon=$6
    local description=$7
    local iconUrl=$8
    local altSrcDirName=${9:-eclipse}
    local altRunName=${10:-eclipse}

 	echo '============>Installing eclipse '$suffix' .....==========================================================================================================='
    downloadAndExtractEclipse $suffix $url $altSrcDirName
 	echo '============>Change VM eclipse '$suffix' .....==========================================================================================================='
    eclipseChangeVm $suffix \\/usr\\/lib\\/jvm\\/java-21-openjdk-amd64\\/bin $altRunName
 	echo '============>Installing eclipse '$suffix' plugins .....==========================================================================================================='
    installPlugins $suffix $repos $plugins $altRunName
    doConfig $suffix $altRunName
    if [[ -n "$iconUrl" && "$iconUrl" != "-" ]] ; then
        sudo wget -O /opt/eclipse-$suffix/$icon $iconUrl
    fi
	if [ ! -f /opt/eclipse-$suffix/eclipse-orig ] ; then
		if [ -f /opt/eclipse-$suffix/$altRunName ] ; then
			sudo mv /opt/eclipse-$suffix/$altRunName /opt/eclipse-$suffix/$altRunName-orig
            sudo mv /opt/eclipse-$suffix/$altRunName.ini /opt/eclipse-$suffix/$altRunName-orig.ini
	cat <<EOF | sudo tee /opt/eclipse-$suffix/$altRunName > /dev/null
#!/bin/bash
if [ -f /usr/share/maven/bin/student-setup ] ; then
	/usr/share/maven/bin/student-setup
fi
/opt/eclipse-$suffix/$altRunName-orig
EOF
			sudo chmod +x /opt/eclipse-$suffix/$altRunName
		fi
	fi
    createLauncher eclipse-$suffix "$niceName" /opt/eclipse-$suffix/$altRunName /opt/eclipse-$suffix/$icon "$description" false Eclipse
 	echo '============>Eclipse '$suffix' installed.==========================================================================================================='
}

function addModule(){
	local url=$1
	local dir=$2
	local strip=$3
	local moduleName=$4
	local moduleBin=$5
	local xaDSClass=$6
	local pattern=${@:7}
	local moduleDir=/opt/wildfly-33/modules/system/layers/base/$dir/main
	local moduleXmlTmp=""
	local moduleXml=""
	local driver=""
	wget -O moduleLib.tar.gz $url
	sudo mkdir -p $moduleDir
	sudo tar --wildcards --strip=$strip -C $moduleDir -xzf moduleLib.tar.gz $pattern
	rm -R moduleLib.tar.gz
	printf -v moduleXmlTmp "<module xmlns=\"urn:jboss:module:1.5\" name=\"$moduleName\">\n\
    <resources>\n"
    moduleXml=$moduleXml$moduleXmlTmp
    jarList=$(find $moduleDir -name '*.jar' -exec printf "{} " \;)
    IFS=' ' read -a jarArray <<< $jarList
    for jar in "${jarArray[@]}"
    do
        jar=$(basename $jar)
	printf -v moduleXmlTmp "        <resource-root path=\"$jar\" />\n"
    moduleXml=$moduleXml$moduleXmlTmp
    done
	printf -v moduleXmlTmp "\
    </resources>\n\
    <dependencies>\n\
        <module name=\"javax.api\"/>\n\
        <module name=\"javax.transaction.api\"/>\n\
    </dependencies>\n\
</module>"
    moduleXml=$moduleXml$moduleXmlTmp
	printf "$moduleXml" | sudo tee $moduleDir/module.xml > /dev/null
	printf -v driver "\
				<driver name=\"$moduleName\" module=\"$moduleName\">\\\\n\
					<xa-datasource-class>$xaDSClass<\/xa-datasource-class>\\\\n\
				<\/driver>\\\\n\
"
    if ! grep -q "<driver name=\"$moduleName\" module=\"$moduleName\">" /opt/wildfly-33/standalone/configuration/standalone.xml; then
    	sudo sed -i -e "s/<\/drivers>/$driver<\/drivers>/g" /opt/wildfly-33/standalone/configuration/standalone.xml
    fi
	
}

function createRunScript(){
	cat <<EOF  | sudo tee /opt/wildfly-33/bin/standalone-student.sh > /dev/null
#!/bin/bash
WILDFLY_DIR=\$HOME/.wildfly
if [ ! -d \"\$WILDFLY_DIR\" ]; then
	mkdir -p \$WILDFLY_DIR/configuration
	mkdir -p \$WILDFLY_DIR/content
	mkdir -p \$WILDFLY_DIR/data
	mkdir -p \$WILDFLY_DIR/deployments
    
	mkdir -p \$WILDFLY_DIR/log
	cp /opt/wildfly-33/standalone/configuration/* \$WILDFLY_DIR/configuration/
fi
/opt/wildfly-33/bin/standalone.sh -Djboss.server.base.dir=\$WILDFLY_DIR -Djboss.server.temp.dir=/tmp/wildfly
EOF
	sudo chmod +x /opt/wildfly-33/bin/standalone-student.sh

	cat <<EOF  | sudo tee /opt/wildfly-33/bin/add-user-student.sh > /dev/null
#!/bin/bash
WILDFLY_DIR=\$HOME/.wildfly
/opt/wildfly-33/bin/add-user.sh -sc \$WILDFLY_DIR/configuration
EOF
	sudo chmod +x /opt/wildfly-33/bin/add-user-student.sh
}

function installWildfly(){
	echo '============>Installing wildfly .....==========================================================================================================='

	downloadAndExtract /opt wildfly-33.0.1.Final.tar.gz wildfly-33.0.1.Final wildfly-33 https://github.com/wildfly/wildfly/releases/download/33.0.1.Final/wildfly-33.0.1.Final.tar.gz

	addModule https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-j-9.0.0.tar.gz com/mysql 1 com.mysql mysql-connector-java-9.0.0.jar com.mysql.cj.jdbc.MysqlXADataSource *mysql-connector-java-9.0.0.jar 
	
	addModule https://dlcdn.apache.org//db/derby/db-derby-10.17.1.0/db-derby-10.17.1.0-lib.tar.gz org/apache/derby 2 org.apache.derby derbyclient.jar org.apache.derby.jdbc.ClientXADataSource  *derbyclient.jar *derbyLocale* *derbyshared.jar *derbytools.jar     
	
	sudo chmod +r /opt/wildfly-33/standalone/configuration/*
	createRunScript
	echo '============>Wildfly installed==========================================================================================================='
}

function uninstallWildfly(){
	echo '============>Uninstalling wildfly .....==========================================================================================================='
	sudo rm -R /opt/wildfly*
	echo '============>Wildfly uninstalled==========================================================================================================='
}

function installAppacheDerby() {
	echo '============>Installing appache derby DB .....==========================================================================================================='
	downloadAndExtract /opt db-derby-10.17.1.0-bin.tar.gz db-derby-10.17.1.0-bin db-derby https://dlcdn.apache.org//db/derby/db-derby-10.17.1.0/db-derby-10.17.1.0-bin.tar.gz
	cat <<EOF  | sudo tee /opt/db-derby/bin/startNetworkServer-student > /dev/null
#!/bin/bash
JAVA_DB_DIR=\$HOME/.java-db
if [ ! -d \"\$JAVA_DB_DIR\" ]; then
	mkdir -p \$JAVA_DB_DIR
fi
cd \$JAVA_DB_DIR
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
/opt/db-derby/bin/startNetworkServer -noSecurityManager
EOF
	sudo chmod +x /opt/db-derby/bin/startNetworkServer-student
	sudo wget -O /opt/db-derby/derby-logo.png https://db.apache.org/derby/logo/final_logo.png
	createLauncher java-db "Apache Derby DB (java DB)" /opt/db-derby/bin/startNetworkServer-student /opt/db-derby/derby-logo.png "Apache Derby DB (java DB)" true derby
	echo '============>Apache derby DB installed.==========================================================================================================='
}

function uninstallAppacheDerby() {
	echo '============>Uninstalling appache derby DB .....==========================================================================================================='
	sudo rm -R /opt/db-derby
	removeLauncher java-db
	echo '============>Apache derby DB uninstalled.==========================================================================================================='
}

function setupBase(){
	LOCALHD=/media/localdata
	LOCALHD=/media/student/DATADISK
	SWI_HOME=/media/swi-home
	cat <<EOF | sudo tee /etc/profile.d/01-env-var.sh > /dev/null
#create base env var
export LOCALHD=$LOCALHD
export SWI_HOME=$SWI_HOME
EOF
}

function installMaven(){
	echo '============>Installing maven .....==========================================================================================================='
	setupBase
	sudo apt -y install maven
    wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz
	tar -xzf apache-maven-3.9.9-bin.tar.gz
	rm apache-maven-3.9.9-bin.tar.gz
	sudo rm -r /usr/share/maven/bin
	sudo rm -r /usr/share/maven/boot
	sudo rm -r /usr/share/maven/lib
	sudo mv apache-maven-3.9.9/bin /usr/share/maven/bin
	sudo mv apache-maven-3.9.9/boot /usr/share/maven/boot
	sudo mv apache-maven-3.9.9/lib /usr/share/maven/lib
	sudo cp -R apache-maven-3.9.9/conf/* /etc/maven/
	sudo chown -R root:root /etc/maven/
	sudo chown -R root:root /usr/share/maven/bin
	sudo chown -R root:root /usr/share/maven/boot
	sudo chown -R root:root /usr/share/maven/lib
	rm -R apache-maven-3.9.9

	sudo mkdir -p $LOCALHD/.m2/repository
	sudo chmod -R go+rwx $LOCALHD/.m2
	cat <<EOF | sudo tee /etc/profile.d/maven.sh > /dev/null
#create default user settiing for maven
export WILDFLY_DATA_DIR=\$HOME/.wildfly
export MAVEN_HOME=/usr/share/maven
export MAVEN_USER_HOME=~/.m2
EOF
	cat <<EOF | sudo tee /etc/cron.d/maven > /dev/null
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root  chmod -R uga+rw $LOCALHD/.m2
EOF

	cat <<EOF | sudo tee /usr/share/maven/bin/student-setup > /dev/null
#!/bin/bash
if [ ! -d ~/.m2/ ] ; then
	mkdir ~/.m2
fi
if [ ! -f ~/.m2/settings.xml ] ; then
	cp /usr/share/maven/conf/settings.xml ~/.m2/
fi
EOF
	sudo chmod +x /usr/share/maven/bin/student-setup
	if ! grep "<localRepository>$LOCALHD/\.m2/repository</localRepository>" /usr/share/maven/conf/settings.xml > /dev/null; then
		sudo sed -i -e "/<!-- localRepository/i <localRepository>$LOCALHD/.m2/repository</localRepository>" /usr/share/maven/conf/settings.xml;
	fi
	echo '============>Maven installed.==========================================================================================================='
}

function installGradle(){
	echo '============>Installing gradel .....==========================================================================================================='
	wget https://services.gradle.org/distributions/gradle-8.10-bin.zip
	sudo unzip -d /opt gradle-8.10-bin.zip
	rm gradle-8.10-bin.zip
	setupBase
	sudo mkdir -p $LOCALHD/.gradle
	sudo chmod -R go+rwx $LOCALHD/.gradle
	cat <<EOF | sudo tee /etc/profile.d/gradle.sh > /dev/null
#set default home dir for gradle
export GRADLE_USER_HOME=\$LOCALHD/.gradle 
export PATH=\$PATH:/opt/gradle-8.10/bin
EOF
	cat <<EOF | sudo tee /etc/cron.d/gradle > /dev/null
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root  chmod -R uga+rw $LOCALHD/.gradle
EOF
	echo '============>Gradle installed.==========================================================================================================='
}

function installJMeter(){
	echo '============>Installing JMeter .....==========================================================================================================='
	setupBase
	downloadAndExtract /opt apache-jmeter-5.6.3.tgz apache-jmeter-5.6.3 jmeter https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.tgz
																		   

	cat <<EOF | sudo tee /opt/jmeter/bin/jmeter-student.sh > /dev/null
#!/bin/bash

#create default user settiing for JMeter
JMETER_DATA_DIR=\$HOME/.jmeter
if [ ! -d "\$JMETER_DATA_DIR" ]; then
    mkdir -p \$JMETER_DATA_DIR
fi
export JMETER_OPTS="-Dproxy.cert.directory=\$JMETER_DATA_DIR"
/opt/jmeter/bin/jmeter
EOF
	sudo chmod +x /opt/jmeter/bin/jmeter-student.sh
	sudo wget -O /opt/jmeter/jmeter-logo.svg https://jmeter.apache.org/images/logo.svg
	createLauncher jmeter "Apache JMeter 5" /opt/jmeter/bin/jmeter-student.sh /opt/jmeter/jmeter-logo.svg "Apache JMeter 5" false "Apache JMeter"
	
	#plugin manager
	sudo wget -O /opt/jmeter/lib/ext/jmeter-plugins-manager-1.10.jar https://repo1.maven.org/maven2/kg/apc/jmeter-plugins-manager/1.10/jmeter-plugins-manager-1.10.jar
	sudo wget -O /opt/jmeter/lib/cmdrunner-2.3.jar http://search.maven.org/remotecontent?filepath=kg/apc/cmdrunner/2.3/cmdrunner-2.3.jar
	sudo java -cp /opt/jmeter/lib/ext/jmeter-plugins-manager-1.10.jar org.jmeterplugins.repository.PluginManagerCMDInstaller
	sudo sed -i -e "s/cmdrunner-2\.2\.jar/cmdrunner-2\.3\.jar/g"  /opt/jmeter/bin/PluginsManagerCMD.sh
	#Add Plugins
	sudo /opt/jmeter/bin/PluginsManagerCMD.sh install jpgc-graphs-basic,jpgc-graphs-additional,jpgc-functions,custom-soap,jpgc-casutg,jpgc-dbmon,jmeter.backendlistener.elasticsearch,jpgc-filterresults,jpgc-httpraw,mqmeter,jpgc-jms,jpgc-jmxmon,jmeter.pack-listener,jpgc-json,jpgc-lockfile,mqtt-sampler,jpgc-oauth,jpgc-pde,bzm-parallel,jpgc-prmctl,jpgc-perfmon,jmeter-prometheus,bzm-random-csv,ssh-sampler,tilln-sshmon,jpgc-webdriver,jpgc-plancheck,jpgc-udp,jpgc-csvars,tilln-wssecurity,websocket-sampler,websocket-samplers,jpgc-wsc,jpgc-xml,jpgc-xmpp,jpgc-standard
	echo '============>JMeter installed.==========================================================================================================='
}

function uninstallJMeter(){
	echo '============>uninstalling JMeter .....==========================================================================================================='
	sudo rm -R /opt/jmeter
	removeLauncher jmeter
}

#deprecated
function installTomcat(){
	echo '============>Installing TomCat .....==========================================================================================================='
	downloadAndExtract /opt apache-tomcat-10.0.23.tar.gz apache-tomcat-10.0.23 apache-tomcat-10 https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.23/bin/apache-tomcat-10.0.23.tar.gz
	sudo find /opt/apache-tomcat-10 -type d -exec chmod go+x {} \;
	sudo find /opt/apache-tomcat-10 -type f -executable -exec chmod go+x {} \;
	sudo chmod -R +r /opt/apache-tomcat-10/*
	setupBase
	cat <<EOF | sudo tee /opt/apache-tomcat-10/bin/startup-student.sh > /dev/null
#create default user setting for tomcat 
export CATALINA_BASE=\$HOME/.tomcat
if [ ! -d "\$CATALINA_BASE" ]; then
	mkdir -p  \$CATALINA_BASE
	mkdir -p  \$CATALINA_BASE/conf
	mkdir -p  \$CATALINA_BASE/logs
	mkdir -p  \$CATALINA_BASE/webapps
	mkdir -p  \$CATALINA_BASE/work
	mkdir -p  \$CATALINA_BASE/temp
    cp  /opt/apache-tomcat-10/conf/* \$CATALINA_BASE/conf
fi
/opt/apache-tomcat-10/bin/startup.sh
EOF
	sudo chmod +x /opt/apache-tomcat-10/bin/startup-student.sh
	
	wget https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-8.0.30.tar.gz
	sudo tar -xzf mysql-connector-java-8.0.30.tar.gz -C /opt/apache-tomcat-10/lib --strip-components=1 mysql-connector-java-8.0.30/mysql-connector-java-8.0.30.jar
	rm mysql-connector-java-8.0.30.tar.gz
	
	wget https://www-eu.apache.org/dist//db/derby/db-derby-10.15.2.0/db-derby-10.15.2.0-lib.tar.gz
	sudo tar --wildcards -xzf db-derby-10.15.2.0-lib.tar.gz -C /opt/apache-tomcat-10/lib --strip-components=2 db-derby-10.15.2.0-lib/lib/derbyclient.jar db-derby-10.15.2.0-lib/lib/derbyLocale*
	rm db-derby-10.15.2.0-lib.tar.gz
	echo '============>TomCat installed.==========================================================================================================='
}

function uninstallTomcat(){
	echo '============>Uninstalling TomCat .....==========================================================================================================='
	sudo rm -R /opt/apache-tomcat*
	echo '============>TomCat uninstalled.==========================================================================================================='
}

#deprecated
function installTomEE(){
	echo '============>Installing TomEE .....==========================================================================================================='
	downloadAndExtract /opt apache-tomee-9.0.0-M7-plume.tar.gz apache-tomee-plume-9.0.0-M7 apache-tomee-plume-9 https://dlcdn.apache.org/tomee/tomee-9.0.0-M7/apache-tomee-9.0.0-M7-plume.tar.gz
																												
	setupBase
	cat <<EOF | sudo tee /etc/profile.d/tomee.sh > /dev/null
#create default user setting for tomEE
export CATALINA_BASE_EE=\$HOME/.tomee
if [ ! -d "\$CATALINA_BASE_EE" ]; then
	mkdir -p  \$CATALINA_BASE_EE
	mkdir -p  \$CATALINA_BASE_EE/conf
	mkdir -p  \$CATALINA_BASE_EE/logs
	mkdir -p  \$CATALINA_BASE_EE/webapps
	mkdir -p  \$CATALINA_BASE_EE/work
	mkdir -p  \$CATALINA_BASE_EE/temp
    cp  /opt/apache-tomee-plume-9/conf/* \$CATALINA_BASE_EE/conf
fi
EOF
	echo '============>TomEE installed.==========================================================================================================='
}

function uninstallTomEE(){
	echo '============>Uninstalling TomEE .....==========================================================================================================='
	sudo rm -R /opt/apache-tomee*
	sudo rm /etc/profile.d/tomee.sh
	echo '============>TomEE uninstalled.==========================================================================================================='
}

function installGecko(){
	echo '============>Installing GeckoDriver .....==========================================================================================================='
	wget https://github.com/mozilla/geckodriver/releases/download/v0.35.0/geckodriver-v0.35.0-linux64.tar.gz
	sudo tar -xz -C /usr/bin -f geckodriver-v0.35.0-linux64.tar.gz
	sudo chown root:root /usr/bin/geckodriver
	sudo chmod +x /usr/bin/geckodriver
	sudo chmod g-w /usr/bin/geckodriver
	rm geckodriver-v0.35.0-linux64.tar.gz

	echo '============>GeckoDriver installed.==========================================================================================================='
}

function uninstallGecko(){
	echo '============>Uninstalling GeckoDriver .....==========================================================================================================='
	sudo rm /usr/bin/geckodriver
	echo '============>GeckoDriver uninstalled.==========================================================================================================='
}

function installNetBeans(){
	echo '============>Installing NetBeans .....==========================================================================================================='
	sudo apt -y install netbeans
	echo '============>NetBeans installed.==========================================================================================================='
}

function uninstallNetBeans(){
	echo '============>Uninstalling NetBeans .....==========================================================================================================='
	sudo apt -y remove netbeans
	echo '=======installGecko=====>NetBeans uninstalled.==========================================================================================================='
}

#deprecated - new version need license :-(
function installIdea(){
	echo '============>Installing Idea IDE .....==========================================================================================================='
	downloadAndExtract /opt ideaIC-2024.2.0.2.tar.gz idea-IC-242.20224.419 idea-IC https://download-cdn.jetbrains.com/idea/ideaIC-2024.2.0.2.tar.gz
	createLauncher idea-IC "inteliJ IDEA" /opt/idea-IC/bin/idea.sh /opt/idea-IC/bin/idea.png "inteliJ IDEA Comunity Edition" false idea
	echo '============>Idea IDE installed.==========================================================================================================='
}

function uninstallIdea(){
	echo '============>Uninstalling Idea IDE .....==========================================================================================================='
	sudo rm -R /opt/idea-IC*
	removeLauncher idea-IC
	echo '============>Idea IDE uninstalled.==========================================================================================================='
}

function installLombok(){
    local eclipseSuffix=${1:-java}
    local eclipseName=${2:-eclipse}
    local eclipseConfigFile="/opt/eclipse-$eclipseSuffix/$eclipseName-orig.ini"
    local lombokLine="-javaagent:/opt/eclipse-$eclipseSuffix/lombok.jar"
    local lombokLineSed="-javaagent:\/opt\/eclipse-$eclipseSuffix\/lombok.jar"
	#sudo sed -i "/$lombokLineSed/d" $eclipseConfigFile
    wget https://projectlombok.org/downloads/lombok.jar
    sudo mv lombok.jar /opt/eclipse-$eclipseSuffix/
    cat <<EOF | sudo tee -a $eclipseConfigFile
$lombokLine
EOF
}


#deprecated
function installEclipseSTS(){
	downloadAndExtract /opt spring-tool-suite-3.9.5.RELEASE-e4.8.0-linux-gtk-x86_64.tar.gz sts-bundle eclipse-sts https://download.springsource.com/release/STS/3.9.5.RELEASE/dist/e4.8/spring-tool-suite-3.9.5.RELEASE-e4.8.0-linux-gtk-x86_64.tar.gz

	printf -v substituteWorkspace "s/osgi\.instance\.area\.default=@user\.home\/.*$/osgi\.instance\.area\.default=@user.home\/workspace.sts/g"
	sudo sed -i -e $substituteWorkspace /opt/eclipse-sts/sts-3.9.5.RELEASE/configuration/config.ini
	if ! grep "osgi\.configuration\.area=@user\.home/\.eclipse-sts/configuration" /opt/eclipse-sts/sts-3.9.5.RELEASE/configuration/config.ini > /dev/null; then
		printf -v substituteConfig "\$aosgi\.configuration\.area=@user\.home/\.eclipse-sts/configuration" 
		sudo sed -i -e $substituteConfig /opt/eclipse-sts/sts-3.9.5.RELEASE/configuration/config.ini
	fi
	sudo sed -i '/-Dosgi\.instance\.area\.default=/d' /opt/eclipse-sts/sts-3.9.5.RELEASE/STS.ini
	createLauncher eclipse-sts "Eclipse STS" /opt/eclipse-sts/sts-3.9.5.RELEASE/STS /opt/eclipse-sts/sts-3.9.5.RELEASE/icon.xpm "Eclipse STS (Spring Tool suite)" false Eclipse
}

function installEclipseJava(){
	######Install Eclipse for JAVA development package
	                            
	installEclipseInstance java https://ftp.fau.de/eclipse/technology/epp/downloads/release/2024-03/R/eclipse-java-2024-03-R-linux-gtk-x86_64.tar.gz \
"https://download.eclipse.org/releases/2024-03/,\
https://binaries.sonarsource.com/SonarLint-for-Eclipse/releases/,\
https://download.eclipse.org/efxclipse/updates-released/3.9.0/site/,\
https://ecd-plugin.github.io/update/" \
"org.eclipse.fx.runtime.min.feature.feature.group,\
org.eclipse.fx.ide.feature.feature.group,\
org.eclipse.wb.core.feature.feature.group,\
org.eclipse.wb.core.ui.feature.feature.group,\
org.eclipse.wb.layout.group.feature.feature.group,\
org.eclipse.wb.core.java.feature.feature.group,\
org.eclipse.wb.swing.feature.feature.group,\
org.sonarlint.eclipse.feature.feature.group,\
org.sf.feeling.decompiler.feature.group,\
org.sf.feeling.decompiler.cfr.feature.group,\
org.sf.feeling.decompiler.fernflower.feature.group,\
org.sf.feeling.decompiler.jd.feature.group,\
org.sf.feeling.decompiler.procyon.feature.group,\
org.sf.feeling.decompiler.vineflower.feature.group" \
"Eclipse Java" icon.xpm "Eclipse for Java Developers"
}

function installEclipsePapyrus(){
	######Install Eclipse for JAVA development packages
    installEclipseInstance papyrus https://mirror.leitecastro.com/eclipse/modeling/mdt/papyrus/rcp/2024-06/6.7.0/papyrus-2024-06-6.7.0-linux64.tar.gz \
"https://download.eclipse.org/modeling/mdt/papyrus/updates/releases/2024-06/" \
"org.eclipse.papyrus.sdk.feature.feature.group" \
"Eclipse Papyrus" icon.xpm "Eclipse Papyrus" - Papyrus papyrus
}

function installEclipseEE(){
######Install Eclipse for EE development package
	installEclipseInstance ee https://eclipse.mirror.liteserver.nl/technology/epp/downloads/release/2024-06/R/eclipse-jee-2024-06-R-linux-gtk-x86_64.tar.gz \
"https://download.eclipse.org/releases/2024-06/,\
https://binaries.sonarsource.com/SonarLint-for-Eclipse/releases/,\
https://download.jboss.org/jbosstools/photon/stable/updates/,\
https://ecd-plugin.github.io/update/,\
https://www.thymeleaf.org/eclipse-plugin-update-site/,\
https://projectlombok.org/p2,\
https://de-jcup.github.io/update-site-eclipse-yaml-editor/update-site/" \
"org.sonarlint.eclipse.feature.feature.group,\
org.jboss.tools.cdi.feature.feature.group,\
org.eclipse.wst.json_ui.feature.feature.group,\
org.jboss.ide.eclipse.as.feature.feature.group,\
org.jboss.tools.wtp.runtimes.tomcat.feature.feature.group,\
org.sf.feeling.decompiler.feature.group,\
org.sf.feeling.decompiler.cfr.feature.group,\
org.sf.feeling.decompiler.fernflower.feature.group,\
org.sf.feeling.decompiler.jd.feature.group,\
org.sf.feeling.decompiler.procyon.feature.group,\
org.sf.feeling.decompiler.vineflower.feature.group,\
org.thymeleaf.extras.eclipse.contentassist.feature.feature.group,\
org.thymeleaf.extras.eclipse.contentassist.feature.source.feature.group,\
de.jcup.yamleditor.feature.group" \
"Eclipse EE" eclipse-ee.png "Eclipse for EE Developers" https://www.eclipse.org/webtools/images/wtp_logo_2010.png
}

function installVagrant(){
	echo '============>Installing Vagrant .....==========================================================================================================='
	wget https://releases.hashicorp.com/vagrant/2.2.18/vagrant_2.2.18_x86_64.deb
	sudo dpkg -i vagrant_2.2.18_x86_64.deb
	rm vagrant_2.2.18_x86_64.deb
	echo '============>Vagrant installed.==========================================================================================================='
}

function installAndroidStudio(){
	echo '============>Installing Android Studio .....==========================================================================================================='
	sudo apt -y install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386
                                                                                                            
	downloadAndExtract /opt android-studio-2020.3.1.24-linux.tar.gz android-studio android-studio-2020 https://r6---sn-2gb7sn7s.gvt1.com/edgedl/android/studio/ide-zips/2020.3.1.24/android-studio-2020.3.1.24-linux.tar.gz

	setupBase
	cat <<EOF | sudo tee /opt/android-studio-2020/bin/studio-student.sh > /dev/null
#create default user setting for tomcat 
export ANDROID_SDK_ROOT=$LOCALHD/android-sdk-root
/opt/android-studio-2020/bin/studio.sh
EOF
	sudo chmod +x /opt/android-studio-2020/bin/studio-student.sh
	createLauncher androidStudio "Android Studio" /opt/android-studio-2020/bin/studio-student.sh /opt/android-studio-2020/studio.svg "Android Studio IDE" false "android"
	sudo mkdir -p $LOCALHD/android-sdk-root
	sudo chmod go+rwx $LOCALHD/android-sdk-root
	echo '============>Android Studio installed.==========================================================================================================='
}

function uninstallAndroidStudio(){
	echo '============>Uninstalling Android Studio .....==========================================================================================================='
	sudo rm -R /opt/android-studio*
	removeLauncher androidStudio
	sudo mkdir -p $LOCALHD/android-sdk-root
	sudo chmod go+rwx $LOCALHD/android-sdk-root
	echo '============>Android Studio uninstalled.==========================================================================================================='
}

function installGitkraken() {
	echo '============>Installing gitkraken.....==========================================================================================================='
	PACKAGE=gitkraken-amd64.deb
	wget https://release.axocdn.com/linux/$PACKAGE
	sudo dpkg --install $PACKAGE
	rm $PACKAGE
	echo '============>Gitkraken installed.==========================================================================================================='
}

function installDocker() {
	echo '============>Installing Docker.....=============================================='
	sudo apt-get -y remove docker docker-engine docker.io containerd runc
	sudo apt-get update
	sudo apt-get -y install \
	    apt-transport-https \
	    ca-certificates \
	    curl \
	    gnupg-agent \
	    software-properties-common \
	    uidmap
	curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
	sudo add-apt-repository \
	   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
	   $(lsb_release -cs) \
	   stable"
	sudo apt-get update
	sudo apt-get -y install docker-ce docker-ce-cli containerd.io
	ARCHIVE_TEMPLATE=docker-rootless-extras-24.0.
	ROOTLESS_URL_TEMPLATE=https://download.docker.com/linux/static/stable/x86_64/$ARCHIVE_TEMPLATE
	for i in {0..6}; do 
		wget $ROOTLESS_URL_TEMPLATE$i'.tgz'
		tar xzf $ARCHIVE_TEMPLATE$i.tgz
	done
	sudo mv docker-rootless-extras/???* /usr/bin/
	rm -rf docker-rootless-extras*
	sudo sh -c 'cat <<EOT > /usr/lib/systemd/user/docker.service
[Unit]
Description=Docker Application Container Engine (Rootless)
Documentation=https://docs.docker.com

[Service]
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ExecStart=/usr/bin/dockerd-rootless.sh --experimental --storage-driver=vfs
ExecReload=/bin/kill -s HUP \$MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
Type=simple

[Install]
WantedBy=multi-user.target
EOT'
	systemctl --user daemon-reload
	echo 'Add to .bashrc:'
	echo 'export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock'
	echo '============>Docker Installed.....==============================================='
}

function disableAltF5(){
#	sudo dconf write /org/gnome/desktop/wm/keybindings/unmaximize  ['<Super>Down']
	cat <<EOF | sudo tee /etc/dconf/db/ibus.d/91-disableAltF5 > /dev/null
[org/gnome/desktop/wm/keybindings]
unmaximize=['<Super>Down']

EOF
sudo dconf update
}

function installAll() {
	sudo apt -y install geany
	sudo apt -y install git gitk git-gui kdiff3 krusader unrar rar 7zip

	#sudo sed -i -e "s/line_height=0;0;/line_height=0;2;/g" /usr/share/geany/filedefs/filetypes.common
	
	#disableAltF5

	installJava
	installJavaFX
	installGradle
	installMaven

	removeEclipseInstance java
	installEclipseJava
	installLombok java

	removeEclipseInstance ee
	installEclipseEE
    installLombok ee

	uninstallIdea
	installIdea

	#uninstallTomcat
	#installTomcat
	#uninstallTomEE
#	installTomEE
	uninstallWildfly
	installWildfly
	uninstallAppacheDerby
	installAppacheDerby

	uninstallJMeter
	installJMeter
	uninstallGecko
	installGecko
		
	installVagrant
	uninstallAndroidStudio
	installAndroidStudio
    installDocker
	installGitkraken
}

function upgradeEclipselinkInTomEE(){
    wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/rt/eclipselink/releases/2.7.5/eclipselink-2.7.5.v20191016-ea124dd158.zip
    unzip -j -d . eclipselink-2.7.5.v20191016-ea124dd158.zip eclipselink/jlib/eclipselink.jar
    sudo mv eclipselink.jar /opt/apache-tomee-plume-8/lib/eclipselink-2.7.5.jar
    sudo rm /opt/apache-tomee-plume-8/lib/eclipselink-2.6.4.jar
}

function upgradeDerbyModuleInWildfly(){
	addModule https://www-eu.apache.org/dist//db/derby/db-derby-10.15.1.3/db-derby-10.15.1.3-lib.tar.gz org/apache/derby 2 org.apache.derby derbyclient.jar org.apache.derby.jdbc.ClientXADataSource *derbyclient.jar *derbyLocale* *derbyshared.jar *derbytools.jar    

	cat <<EOF  | sudo tee /opt/wildfly-20/bin/add-user-student.sh > /dev/null
#!/bin/bash
WILDFLY_DIR=\$HOME/.wildfly
/opt/wildfly-20/bin/add-user.sh -sc \$WILDFLY_DIR/configuration
EOF
	sudo chmod +x /opt/wildfly-20/bin/add-user-student.sh
}

function upgrade2023(){
	installJava
	uninstallJavaFX
    installJavaFX
	
	installGradle

	removeEclipseInstance java
	installEclipseJava
	
	removeEclipseInstance ee
	installEclipseEE
#	installEclipseSTS
	removeEclipseInstance papyrus
	installEclipsePapyrus

	installMaven

	uninstallNetBeans
	installNetBeans
#	uninstallIdea
#	installIdea

	uninstallTomcat
#	installTomcat
#	uninstallTomEE
#	installTomEE
	uninstallWildfly
	installWildfly
	uninstallAppacheDerby
	installAppacheDerby

	uninstallJMeter
	installJMeter
	uninstallGecko
	installGecko
		
#	installVagrant
#	uninstallAndroidStudio
#	installAndroidStudio
#    installDocker
	installGitkraken    
}

function fix2023(){
	removeEclipseInstance ee
	installEclipseEE
    installLombok java
    
    	cat <<EOF  | sudo tee /opt/wildfly-29/bin/standalone-student.sh > /dev/null
#!/bin/bash
WILDFLY_DIR=\$HOME/.wildfly
if [ ! -d \"\$WILDFLY_DIR	\" ]; then
	mkdir -p \$WILDFLY_DIR/configuration
	mkdir -p \$WILDFLY_DIR/content
	mkdir -p \$WILDFLY_DIR/data
	mkdir -p \$WILDFLY_DIR/deployments
	mkdir -p \$WILDFLY_DIR/log
	cp /opt/wildfly-29/standalone/configuration/* \$WILDFLY_DIR/configuration/
fi
/opt/wildfly-29/bin/standalone.sh -Djboss.server.base.dir=\$WILDFLY_DIR -Djboss.server.temp.dir=/tmp/wildfly
EOF

}

function update2024(){
    installJava

    uninstallJavaFX
    installJavaFX

    installMaven

    removeEclipseInstance ee
    installEclipseEE

    removeEclipseInstance java
    installEclipseJava

    installLombok java
    installLombok ee
}

function fix2024(){

    removeEclipseInstance ee
    installEclipseEE

    removeEclipseInstance java
    installEclipseJava

    installLombok java
    installLombok ee
    
	uninstallIdea
	installIdea

}



if [ $# == 0 ] ; then
	commands=("installAll")
else
	commands=("${@}")
fi
	for index in "${!commands[@]}"
	do
		eval ${commands[$index]}
	done