1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/dont-code_ynh.git synced 2024-09-03 18:26:34 +02:00
dont-code_ynh/scripts/ynh_install_java

143 lines
5.3 KiB
Bash

#!/bin/bash
# Enable the version of java for an app, and set variables.
#
# usage: ynh_use_java
#
# `ynh_use_java` has to be used in any app scripts before using java for the first time.
# This helper will provide alias and variables to use in your scripts.
#
# To use java, use the alias `ynh_java`.
#
# Those alias will use the correct version installed for the app.
# For example: use `ynh_java -jar your-app.jar` instead of `java -jar your-app.jar`
#
# With `sudo` or `ynh_exec_as`, use instead the fallback variables `$ynh_java`
# And propagate $PATH to sudo with $ynh_java_load_PATH
# Example: `ynh_exec_as $app $ynh_java_load_PATH $ynh_java -jar yuor-app.jar`
#
# $PATH contains the path of the requested version of java.
# However, $PATH is duplicated into $java_PATH to outlast any manipulation of `$PATH`
# You can use the variable `$ynh_java_load_PATH` to quickly load your java version
# in $PATH for an usage into a separate script.
# Example: $ynh_java_load_PATH $final_path/script_that_use_java.sh`
#
#
# Finally, to start a java service with the correct version, 2 solutions
# Either the app is dependent of java but does not call it directly.
# In such situation, you need to load PATH :
# ```
# Environment="__JAVA_ENV_PATH__"
# ExecStart=__FINALPATH__/my_app
# ```
# You will replace __JAVA_ENV_PATH__ with $ynh_java_load_PATH.
#
# Or java starts the app directly, then you don't need to load the PATH variable
# ```
# ExecStart=__YNH_JAVA__ -jar your-app.jar
# ```
# You will replace __YNH_JAVA__ with $ynh_java
#
#
# 2 other variables are also available
# - $java_path: The absolute path to java binaries for the chosen version.
# - $java_version: Just the version number of java for this app. Stored as 'java_version' in settings.yml.
#
# Requires YunoHost version 11 or higher.
ynh_use_java() {
java_version=$(ynh_app_setting_get --app=$app --key=java_version)
#get the architecture: amd or arm ?
ynh_get_architecture
# Get the absolute path of this version of java
java_path="/usr/lib/jvm/java-$java_version-openjdk-$ynh_architecture/bin"
# Allow alias to be used into bash script
shopt -s expand_aliases
# Create an alias for the specific version of node and a variable as fallback
ynh_java="$java_path/java"
alias ynh_java="$ynh_java"
# Load the path of this version of node in $PATH
if [[ :$PATH: != *":$java_path"* ]]; then
PATH="$java_path:$PATH"
fi
java_PATH="$PATH"
# Create an alias to easily load the PATH
ynh_java_load_PATH="PATH=$java_PATH"
# Same var but in lower case to be compatible with ynh_replace_vars...
ynh_java_load_path="PATH=$java_PATH"
}
# Install a specific version of java
#
# ynh_install_java will install the version of Java provided as arguments.
#
# usage: ynh_install_java --java_version=java_version --jdk_type=jre --java_engine=headless
# | arg: -j, --java_version= - Version of java to install: 17 (default) or 11. Use major version only.
# | arg: -t, --jdk_type= - Select the type of jdk to install: jre (default) or jdk.
# | arg: -e, --java_engine= - Select the engine to use: headless (default), zero, dcevm or leave empty for full
#
# Please look at the available Debian Openjdk packages to see the possible combinations of values. You can do so by running `apt-cache search openjdk`
# No default ones are set, please use ynh_use_java to setup environment variables to ensure the version of Java is correct
#
# Requires YunoHost version 11 or higher.
ynh_install_java() {
# Use debian packages to install the requested Java version
# Declare an array to define the options of this helper.
local legacy_args=jte
local -A args_array=([j]=java_version= [t]=jdk_type= [e]=java_engine)
local java_version
local jdk_type
local java_engine
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
java_version="${java_version:-17}"
jdk_type="${jdk_type:-jre}"
java_engine="${java_engine:-}"
package_name=openjdk-${java_version}-${jdk_type}
if [ -n "$java_engine" ]; then
package_name=${package_name}-${java_engine}
fi
ynh_install_app_dependencies ${package_name}
# Store java_version into the config of this app
ynh_app_setting_set --app=$app --key=java_version --value=$java_version
ynh_app_setting_set --app=$app --key=jdk_type --value=$jdk_type
ynh_app_setting_set --app=$app --key=java_engine --value=$java_engine
ynh_use_java
}
# Remove the version of Java used by the app.
#
# As Java is installed using ynh_install_app_dependencies, it will be removed as well when you call ynh_remove_app_dependencies in your remove script
#
# usage: ynh_remove_java
ynh_remove_java () {
local java_version=$(ynh_app_setting_get --app=$YNH_APP_INSTANCE_NAME --key=java_version)
# Remove the lines for this app
ynh_app_setting_delete --app=$YNH_APP_INSTANCE_NAME --key=java_version
ynh_app_setting_delete --app=$YNH_APP_INSTANCE_NAME --key=jdk_type
ynh_app_setting_delete --app=$YNH_APP_INSTANCE_NAME --key=java_engine
}
# Extract the architecture used to run this script
# sets ynh_architecture as arm64 or amd64
#
ynh_get_architecture() {
uname=$(uname --machine)
if [[ $uname =~ aarch64 || $uname =~ arm64 ]]; then
ynh_architecture="arm64"
else
ynh_architecture="amd64"
fi
}