mirror of
https://github.com/YunoHost-Apps/wikijs_ynh.git
synced 2024-09-03 20:36:09 +02:00
implement new ynh_install_nodejs
This commit is contained in:
parent
8e17d517de
commit
7a93f1c036
8 changed files with 288 additions and 5 deletions
|
@ -7,7 +7,7 @@
|
||||||
# dependencies used by the app
|
# dependencies used by the app
|
||||||
pkg_dependencies="postgresql postgresql-contrib"
|
pkg_dependencies="postgresql postgresql-contrib"
|
||||||
|
|
||||||
NODEJS_VERSION=12
|
NODEJS_VERSION=12.14.1
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# PERSONAL HELPERS
|
# PERSONAL HELPERS
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
|
#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
|
||||||
source ../settings/scripts/_common.sh
|
source ../settings/scripts/_common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
source ../settings/scripts/ynh_install_nodejs
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# MANAGE SCRIPT FAILURE
|
# MANAGE SCRIPT FAILURE
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
source _common.sh
|
source _common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
source ynh_install_nodejs
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# RETRIEVE ARGUMENTS
|
# RETRIEVE ARGUMENTS
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
source _common.sh
|
source _common.sh
|
||||||
source ynh_send_readme_to_admin__2
|
source ynh_send_readme_to_admin__2
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
source ynh_install_nodejs
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# MANAGE SCRIPT FAILURE
|
# MANAGE SCRIPT FAILURE
|
||||||
|
@ -70,9 +71,8 @@ ynh_app_setting_set --app=$app --key=port --value=$port
|
||||||
#=================================================
|
#=================================================
|
||||||
ynh_script_progression --message="Installing dependencies..."
|
ynh_script_progression --message="Installing dependencies..."
|
||||||
|
|
||||||
ynh_install_nodejs --nodejs_version=$NODEJS_VERSION
|
|
||||||
ynh_use_nodejs
|
|
||||||
ynh_install_app_dependencies $pkg_dependencies
|
ynh_install_app_dependencies $pkg_dependencies
|
||||||
|
ynh_install_nodejs --nodejs_version=$NODEJS_VERSION
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# CREATE A POSTGRESQL DATABASE
|
# CREATE A POSTGRESQL DATABASE
|
||||||
|
@ -96,6 +96,7 @@ ynh_script_progression --message="Setting up source files..."
|
||||||
ynh_app_setting_set --app=$app --key=final_path --value=$final_path
|
ynh_app_setting_set --app=$app --key=final_path --value=$final_path
|
||||||
# Download, check integrity, uncompress and patch the source from app.src
|
# Download, check integrity, uncompress and patch the source from app.src
|
||||||
ynh_setup_source --dest_dir="$final_path"
|
ynh_setup_source --dest_dir="$final_path"
|
||||||
|
ynh_use_nodejs
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# NGINX CONFIGURATION
|
# NGINX CONFIGURATION
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
source _common.sh
|
source _common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
source ynh_install_nodejs
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# LOAD SETTINGS
|
# LOAD SETTINGS
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
|
#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
|
||||||
source ../settings/scripts/_common.sh
|
source ../settings/scripts/_common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
source ../settings/scripts/ynh_install_nodejs
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# MANAGE SCRIPT FAILURE
|
# MANAGE SCRIPT FAILURE
|
||||||
|
@ -86,9 +87,9 @@ chown -R "$app":"$app" "$final_path"
|
||||||
ynh_script_progression --message="Reinstalling dependencies..."
|
ynh_script_progression --message="Reinstalling dependencies..."
|
||||||
|
|
||||||
# Define and install dependencies
|
# Define and install dependencies
|
||||||
|
ynh_install_app_dependencies $pkg_dependencies
|
||||||
ynh_install_nodejs --nodejs_version=$NODEJS_VERSION
|
ynh_install_nodejs --nodejs_version=$NODEJS_VERSION
|
||||||
ynh_use_nodejs
|
ynh_use_nodejs
|
||||||
ynh_install_app_dependencies $pkg_dependencies
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# RESTORE THE POSTGRESQL DATABASE
|
# RESTORE THE POSTGRESQL DATABASE
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
source _common.sh
|
source _common.sh
|
||||||
source ynh_send_readme_to_admin__2
|
source ynh_send_readme_to_admin__2
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
source ynh_install_nodejs
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# LOAD SETTINGS
|
# LOAD SETTINGS
|
||||||
|
@ -135,9 +136,9 @@ ynh_add_nginx_config
|
||||||
#=================================================
|
#=================================================
|
||||||
ynh_script_progression --message="Upgrading dependencies..."
|
ynh_script_progression --message="Upgrading dependencies..."
|
||||||
|
|
||||||
|
ynh_install_app_dependencies $pkg_dependencies
|
||||||
ynh_install_nodejs --nodejs_version=$NODEJS_VERSION
|
ynh_install_nodejs --nodejs_version=$NODEJS_VERSION
|
||||||
ynh_use_nodejs
|
ynh_use_nodejs
|
||||||
ynh_install_app_dependencies $pkg_dependencies
|
|
||||||
|
|
||||||
#=================================================
|
#=================================================
|
||||||
# CREATE DEDICATED USER
|
# CREATE DEDICATED USER
|
||||||
|
|
277
scripts/ynh_install_nodejs
Normal file
277
scripts/ynh_install_nodejs
Normal file
|
@ -0,0 +1,277 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
nodenv_version=1.4.0
|
||||||
|
node_build_version=4.9.32
|
||||||
|
nodenv_aliases_version=2.0.2
|
||||||
|
nodenv_install_dir="/opt/nodenv"
|
||||||
|
node_version_path="$nodenv_install_dir/versions"
|
||||||
|
# NODENV_ROOT is the directory of nodenv, it needs to be loaded as a environment variable.
|
||||||
|
export NODENV_ROOT="$nodenv_install_dir"
|
||||||
|
|
||||||
|
# Install Node.js Version Management
|
||||||
|
#
|
||||||
|
# [internal]
|
||||||
|
#
|
||||||
|
# usage: ynh_install_nodenv
|
||||||
|
#
|
||||||
|
# Requires YunoHost version 2.7.12 or higher.
|
||||||
|
ynh_install_nodenv () {
|
||||||
|
ynh_print_info --message="Installation of nodenv - Node.js Version Management - nodenv-${nodenv_version}/node-build-${node_build_version}"
|
||||||
|
|
||||||
|
# Build an app.src for nodenv
|
||||||
|
mkdir -p "../conf"
|
||||||
|
echo "SOURCE_URL=https://github.com/nodenv/nodenv/archive/v${nodenv_version}.tar.gz
|
||||||
|
SOURCE_SUM=33e2f3e467219695ba114f75a7c769f3ee4e29b29c1c97a852aa001327ca9713" > "../conf/nodenv.src"
|
||||||
|
# Download and extract nodenv
|
||||||
|
ynh_setup_source --dest_dir="$nodenv_install_dir" --source_id=nodenv
|
||||||
|
|
||||||
|
# Build an app.src for node-build
|
||||||
|
mkdir -p "../conf"
|
||||||
|
echo "SOURCE_URL=https://github.com/nodenv/node-build/archive/v${node_build_version}.tar.gz
|
||||||
|
SOURCE_SUM=e2c98e06f9fb31865d7e23be8d49b8adb5ed1ede1d16ec87b0e06865689ea718" > "../conf/node-build.src"
|
||||||
|
# Download and extract node-build
|
||||||
|
ynh_setup_source --dest_dir="$nodenv_install_dir/plugins/node-build" --source_id=node-build
|
||||||
|
|
||||||
|
# Build an app.src for nodenv-aliases
|
||||||
|
mkdir -p "../conf"
|
||||||
|
echo "SOURCE_URL=https://github.com/nodenv/nodenv-aliases/archive/v${nodenv_aliases_version}.tar.gz
|
||||||
|
SOURCE_SUM=632193b462438c986c104edc95f5378c067e02f6f8d1a7be38d5017183ab0149" > "../conf/nodenv-aliases.src"
|
||||||
|
# Download and extract nodenv-aliases
|
||||||
|
ynh_setup_source --dest_dir="$nodenv_install_dir/plugins/nodenv-aliases" --source_id=nodenv-aliases
|
||||||
|
|
||||||
|
(cd $nodenv_install_dir
|
||||||
|
./src/configure && make -C src)
|
||||||
|
|
||||||
|
# Create shims directory if needed
|
||||||
|
if [ ! -d $nodenv_install_dir/shims ] ; then
|
||||||
|
mkdir $nodenv_install_dir/shims
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Load the version of Node.js for an app, and set variables.
|
||||||
|
#
|
||||||
|
# ynh_use_nodejs has to be used in any app scripts before using Node.js for the first time.
|
||||||
|
# This helper will provide alias and variables to use in your scripts.
|
||||||
|
#
|
||||||
|
# To use npm or node, use the alias `ynh_npm` and `ynh_node`
|
||||||
|
# Those alias will use the correct version installed for the app
|
||||||
|
# For example: use `ynh_npm install` instead of `npm install`
|
||||||
|
#
|
||||||
|
# With `sudo` or `ynh_exec_as`, use instead the fallback variables `$ynh_npm` and `$ynh_node`
|
||||||
|
# And propagate $PATH to sudo with $ynh_node_load_path
|
||||||
|
# Exemple: `ynh_exec_as $app $ynh_node_load_path $ynh_npm install`
|
||||||
|
#
|
||||||
|
# $PATH contains the path of the requested version of Node.js.
|
||||||
|
# However, $PATH is duplicated into $nodejs_path to outlast any manipulation of $PATH
|
||||||
|
# You can use the variable `$ynh_node_load_path` to quickly load your Node.js version
|
||||||
|
# in $PATH for an usage into a separate script.
|
||||||
|
# Exemple: $ynh_node_load_path $final_path/script_that_use_npm.sh`
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Finally, to start a Node.js service with the correct version, 2 solutions
|
||||||
|
# Either the app is dependent of Node.js or npm, but does not called it directly.
|
||||||
|
# In such situation, you need to load PATH
|
||||||
|
# `Environment="__YNH_NODE_LOAD_PATH__"`
|
||||||
|
# `ExecStart=__FINALPATH__/my_app`
|
||||||
|
# You will replace __YNH_NODE_LOAD_PATH__ with $ynh_node_load_path
|
||||||
|
#
|
||||||
|
# Or Node.js start the app directly, then you don't need to load the PATH variable
|
||||||
|
# `ExecStart=__YNH_NODE__ my_app run`
|
||||||
|
# You will replace __YNH_NODE__ with $ynh_node
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# one other variable is also available
|
||||||
|
# - $nodejs_path: The absolute path to Node.js binaries for the chosen version.
|
||||||
|
#
|
||||||
|
# usage: ynh_use_nodejs
|
||||||
|
#
|
||||||
|
# Requires YunoHost version 2.7.12 or higher.
|
||||||
|
ynh_use_nodejs () {
|
||||||
|
nodejs_version=$(ynh_app_setting_get --app=$app --key=nodejs_version)
|
||||||
|
|
||||||
|
# Get the absolute path of this version of Node.js
|
||||||
|
nodejs_path="$node_version_path/$YNH_APP_INSTANCE_NAME/bin"
|
||||||
|
|
||||||
|
# Allow alias to be used into bash script
|
||||||
|
shopt -s expand_aliases
|
||||||
|
|
||||||
|
# Create an alias for the specific version of Node.js and a variable as fallback
|
||||||
|
ynh_node="$nodejs_path/node"
|
||||||
|
alias ynh_node="$ynh_node"
|
||||||
|
# And npm
|
||||||
|
ynh_npm="$nodejs_path/npm"
|
||||||
|
alias ynh_npm="$ynh_npm"
|
||||||
|
|
||||||
|
# Load the path of this version of Node.js in $PATH
|
||||||
|
if [[ :$PATH: != *":$nodejs_path"* ]]; then
|
||||||
|
PATH="$nodejs_path:$PATH"
|
||||||
|
fi
|
||||||
|
# Create an alias to easily load the PATH
|
||||||
|
ynh_node_load_PATH="PATH=$PATH"
|
||||||
|
ynh_node_load_path="PATH=$PATH"
|
||||||
|
|
||||||
|
# Sets the local application-specific Node.js version
|
||||||
|
(cd $final_path
|
||||||
|
nodenv local $nodejs_version)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Install a specific version of Node.js
|
||||||
|
#
|
||||||
|
# ynh_install_nodejs will install the version of Node.js provided as argument by using nodenv.
|
||||||
|
#
|
||||||
|
# nodenv (Node.js Version Management) stores the target Node.js version in a .nodejs_version file created in the target folder (using nodenv local <version>)
|
||||||
|
# It then uses that information for every Node.js user that uses nodenv provided Node.js command
|
||||||
|
#
|
||||||
|
# This helper creates a /etc/profile.d/nodenv.sh that configures PATH environment for nodenv
|
||||||
|
# for every LOGIN user, hence your user must have a defined shell (as opposed to /usr/sbin/nologin)
|
||||||
|
#
|
||||||
|
# Don't forget to execute Node.js-dependent command in a login environment
|
||||||
|
# (e.g. sudo --login option)
|
||||||
|
# When not possible (e.g. in systemd service definition), please use direct path
|
||||||
|
# to nodenv shims (e.g. $NODENV_ROOT/shims/bundle)
|
||||||
|
#
|
||||||
|
# usage: ynh_install_nodejs --nodejs_version=nodejs_version
|
||||||
|
# | arg: -v, --nodejs_version= - Version of Node.js to install.
|
||||||
|
#
|
||||||
|
# Requires YunoHost version 2.7.12 or higher.
|
||||||
|
ynh_install_nodejs () {
|
||||||
|
# Declare an array to define the options of this helper.
|
||||||
|
local legacy_args=v
|
||||||
|
local -A args_array=( [v]=nodejs_version= )
|
||||||
|
local nodejs_version
|
||||||
|
# Manage arguments with getopts
|
||||||
|
ynh_handle_getopts_args "$@"
|
||||||
|
|
||||||
|
# Store nodejs_version into the config of this app
|
||||||
|
ynh_app_setting_set --app=$YNH_APP_INSTANCE_NAME --key=nodejs_version --value=$nodejs_version
|
||||||
|
|
||||||
|
# Create $nodenv_install_dir if doesn't exist already
|
||||||
|
mkdir -p "$nodenv_install_dir/plugins/node-build"
|
||||||
|
|
||||||
|
# Load nodenv path in PATH
|
||||||
|
local CLEAR_PATH="$nodenv_install_dir/bin:$PATH"
|
||||||
|
|
||||||
|
# Remove /usr/local/bin in PATH in case of Node.js prior installation
|
||||||
|
PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@')
|
||||||
|
|
||||||
|
# Move an existing Node.js binary, to avoid to block nodenv
|
||||||
|
test -x /usr/bin/node && mv /usr/bin/node /usr/bin/node_n
|
||||||
|
test -x /usr/bin/npm && mv /usr/bin/npm /usr/bin/npm_n
|
||||||
|
|
||||||
|
# If nodenv is not previously setup, install it
|
||||||
|
if ! type nodenv > /dev/null 2>&1
|
||||||
|
then
|
||||||
|
ynh_install_nodenv
|
||||||
|
elif dpkg --compare-versions "$($nodenv_install_dir/bin/nodenv --version | cut -d" " -f2)" lt $nodenv_version
|
||||||
|
then
|
||||||
|
ynh_install_nodenv
|
||||||
|
elif dpkg --compare-versions "$($nodenv_install_dir/plugins/node-build/bin/node-build --version | cut -d" " -f2)" lt $node_build_version
|
||||||
|
then
|
||||||
|
ynh_install_nodenv
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Restore /usr/local/bin in PATH
|
||||||
|
PATH=$CLEAR_PATH
|
||||||
|
|
||||||
|
# And replace the old Node.js binary
|
||||||
|
test -x /usr/bin/node_n && mv /usr/bin/node_n /usr/bin/node
|
||||||
|
test -x /usr/bin/npm_n && mv /usr/bin/npm_n /usr/bin/npm
|
||||||
|
|
||||||
|
# Install the requested version of Node.js
|
||||||
|
ynh_print_info --message="Installation of Node.js-"$nodejs_version
|
||||||
|
nodenv install --skip-existing $nodejs_version
|
||||||
|
|
||||||
|
# Remove app virtualenv
|
||||||
|
if `nodenv alias --list | grep --quiet "$YNH_APP_INSTANCE_NAME" 1>/dev/null 2>&1`
|
||||||
|
then
|
||||||
|
nodenv alias $YNH_APP_INSTANCE_NAME --remove
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create app virtualenv
|
||||||
|
nodenv alias $YNH_APP_INSTANCE_NAME $nodejs_version
|
||||||
|
|
||||||
|
# Cleanup Node.js versions
|
||||||
|
ynh_cleanup_nodejs
|
||||||
|
|
||||||
|
# Set environment for Node.js users
|
||||||
|
echo "#nodenv
|
||||||
|
export NODENV_ROOT=$nodenv_install_dir
|
||||||
|
export PATH=\"$nodenv_install_dir/bin:$PATH\"
|
||||||
|
eval \"\$(nodenv init -)\"
|
||||||
|
#nodenv" > /etc/profile.d/nodenv.sh
|
||||||
|
|
||||||
|
# Load the environment
|
||||||
|
eval "$(nodenv init -)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove the version of Node.js used by the app.
|
||||||
|
#
|
||||||
|
# This helper will also cleanup Node.js versions
|
||||||
|
#
|
||||||
|
# usage: ynh_remove_nodejs
|
||||||
|
ynh_remove_nodejs () {
|
||||||
|
local nodejs_version=$(ynh_app_setting_get --app=$YNH_APP_INSTANCE_NAME --key=nodejs_version)
|
||||||
|
|
||||||
|
# Load nodenv path in PATH
|
||||||
|
local CLEAR_PATH="$nodenv_install_dir/bin:$PATH"
|
||||||
|
|
||||||
|
# Remove /usr/local/bin in PATH in case of Node.js prior installation
|
||||||
|
PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@')
|
||||||
|
|
||||||
|
nodenv alias $YNH_APP_INSTANCE_NAME --remove
|
||||||
|
|
||||||
|
# Remove the line for this app
|
||||||
|
ynh_app_setting_delete --app=$YNH_APP_INSTANCE_NAME --key=nodejs_version
|
||||||
|
|
||||||
|
# Cleanup Node.js versions
|
||||||
|
ynh_cleanup_nodejs
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove no more needed versions of Node.js used by the app.
|
||||||
|
#
|
||||||
|
# This helper will check what Node.js version are no more required,
|
||||||
|
# and uninstall them
|
||||||
|
# If no app uses Node.js, nodenv will be also removed.
|
||||||
|
#
|
||||||
|
# usage: ynh_cleanup_nodejs
|
||||||
|
ynh_cleanup_nodejs () {
|
||||||
|
|
||||||
|
# List required Node.js version
|
||||||
|
local installed_apps=$(yunohost app list | grep -oP 'id: \K.*$')
|
||||||
|
local required_nodejs_versions=""
|
||||||
|
for installed_app in $installed_apps
|
||||||
|
do
|
||||||
|
local installed_app_nodejs_version=$(yunohost app setting $installed_app nodejs_version)
|
||||||
|
if [[ $installed_app_nodejs_version ]]
|
||||||
|
then
|
||||||
|
required_nodejs_versions="${installed_app_nodejs_version}\n${required_nodejs_versions}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Remove no more needed Node.js version
|
||||||
|
local installed_nodejs_versions=$(nodenv versions --bare --skip-aliases | grep -Ev '/')
|
||||||
|
for installed_nodejs_version in $installed_nodejs_versions
|
||||||
|
do
|
||||||
|
if ! `echo ${required_nodejs_versions} | grep "${installed_nodejs_version}" 1>/dev/null 2>&1`
|
||||||
|
then
|
||||||
|
ynh_print_info --message="Removing of Node.js-"$installed_nodejs_version
|
||||||
|
$nodenv_install_dir/bin/nodenv uninstall --force $installed_nodejs_version
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# If none Node.js version is required
|
||||||
|
if [[ ! $required_nodejs_versions ]]
|
||||||
|
then
|
||||||
|
# Remove nodenv environment configuration
|
||||||
|
ynh_print_info --message="Removing of nodenv-"$nodenv_version
|
||||||
|
ynh_secure_remove --file="$nodenv_install_dir"
|
||||||
|
rm /etc/profile.d/nodenv.sh
|
||||||
|
|
||||||
|
# Remove previous n Version Management
|
||||||
|
n_install_dir="/opt/node_n"
|
||||||
|
ynh_secure_remove --file="$n_install_dir"
|
||||||
|
ynh_secure_remove --file="/usr/local/n"
|
||||||
|
sed --in-place "/$n_install_dir/d" /root/.bashrc
|
||||||
|
rm --force /etc/cron.daily/node_update
|
||||||
|
fi
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue