feat(installer): add the `--storage-path` flag (#2865)

### Description

Add the `--storage-path` flag to the installer to configure a custom
storage path out of the box.

On existing installation, we check that the 'storage.path' in the
configuration file is the same as the one provided by the installer.
This ensures that we don't update the nginx configuration file with an
invalid storage path.
This commit is contained in:
Jonas L 2024-01-01 14:38:05 +01:00 committed by GitHub
parent 5bd8ee0476
commit 5b23852f8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 7 deletions

39
install
View File

@ -66,6 +66,7 @@ Options:
--user USER, -u USER User used to run LibreTime. --user USER, -u USER User used to run LibreTime.
--listen-port PORT, -p PORT Listen port for LibreTime. --listen-port PORT, -p PORT Listen port for LibreTime.
--storage-path PATH, -s PATH Storage path for LibreTime.
--in-place, -i Install LibreTime in place. --in-place, -i Install LibreTime in place.
@ -104,6 +105,8 @@ LIBRETIME_LISTEN_PORT=${LIBRETIME_LISTEN_PORT:-"8080"}
LIBRETIME_PUBLIC_URL=${LIBRETIME_PUBLIC_URL:-} LIBRETIME_PUBLIC_URL=${LIBRETIME_PUBLIC_URL:-}
# > Timezone for LibreTime. # > Timezone for LibreTime.
LIBRETIME_TIMEZONE=${LIBRETIME_TIMEZONE:-} LIBRETIME_TIMEZONE=${LIBRETIME_TIMEZONE:-}
# > Storage path for LibreTime.
LIBRETIME_STORAGE_PATH=${LIBRETIME_STORAGE_PATH:-"/srv/libretime"}
# > Install LibreTime in editable mode. # > Install LibreTime in editable mode.
# > Will keep working files in the project directory. # > Will keep working files in the project directory.
@ -128,6 +131,10 @@ while [[ $# -gt 0 ]]; do
LIBRETIME_LISTEN_PORT=$2 LIBRETIME_LISTEN_PORT=$2
shift 2 shift 2
;; ;;
--storage-path | -s)
LIBRETIME_STORAGE_PATH=$2
shift 2
;;
--in-place | -i) --in-place | -i)
LIBRETIME_INSTALL_IN_PLACE=true LIBRETIME_INSTALL_IN_PLACE=true
shift 1 shift 1
@ -181,7 +188,6 @@ CONFIG_TMP_FILEPATH="$CONFIG_DIR/config.yml.tmp"
CONFIG_EXAMPLE_FILEPATH="$SCRIPT_DIR/installer/config.yml" CONFIG_EXAMPLE_FILEPATH="$SCRIPT_DIR/installer/config.yml"
WORKING_DIR="/var/lib/libretime" WORKING_DIR="/var/lib/libretime"
LOG_DIR="/var/log/libretime" LOG_DIR="/var/log/libretime"
STORAGE_DIR="/srv/libretime"
LEGACY_WEB_ROOT="/usr/share/libretime/legacy" LEGACY_WEB_ROOT="/usr/share/libretime/legacy"
SERVICE_DIR="/usr/lib/systemd/system" SERVICE_DIR="/usr/lib/systemd/system"
@ -249,15 +255,29 @@ template_file() {
rm "$tmp_file" rm "$tmp_file"
} }
# get_config <key...>
get_config() {
query="/^${1}:/\n"
while [[ $# -gt 1 ]]; do
shift
query+="/ \+${1}:/\n"
done
query+="q"
echo -e "$query" | ed --quiet "$CONFIG_FILEPATH" |
tail -n 2 |
grep "$1" |
awk -F ': ' '{ print $2 }'
}
# set_config <value> <key...> # set_config <value> <key...>
set_config() { set_config() {
value="${1}" && shift value="${1}" && shift
# Build sed query
query="/^${1}:/\n" query="/^${1}:/\n"
while [[ $# -gt 1 ]]; do while [[ $# -gt 1 ]]; do
shift shift
query+="/${1}:/\n" query+="/ \+${1}:/\n"
done done
query+="s|\(${1}:\).*|\1 ${value}|\n" query+="s|\(${1}:\).*|\1 ${value}|\n"
query+="wq" query+="wq"
@ -453,8 +473,15 @@ if $is_first_install; then
set_config "$LIBRETIME_TIMEZONE" general timezone set_config "$LIBRETIME_TIMEZONE" general timezone
fi fi
mkdir_and_chown "$LIBRETIME_USER" "$STORAGE_DIR" mkdir_and_chown "$LIBRETIME_USER" "$LIBRETIME_STORAGE_PATH"
set_config "$STORAGE_DIR" storage path set_config "$LIBRETIME_STORAGE_PATH" storage path
else
if [[ "$LIBRETIME_STORAGE_PATH" != "$(get_config storage path)" ]]; then
error \
"configuration mismatch between" \
"the installer storage path option ('$LIBRETIME_STORAGE_PATH') and" \
"the configuration file 'storage.path' field ('$(get_config storage path)')"
fi
fi fi
# PostgreSQL # PostgreSQL
@ -751,7 +778,7 @@ template_file cp_if_different \
sed \ sed \
-e "s|@@LISTEN_PORT@@|${LIBRETIME_LISTEN_PORT}|g" \ -e "s|@@LISTEN_PORT@@|${LIBRETIME_LISTEN_PORT}|g" \
-e "s|@@LEGACY_WEB_ROOT@@|${LEGACY_WEB_ROOT}|g" \ -e "s|@@LEGACY_WEB_ROOT@@|${LEGACY_WEB_ROOT}|g" \
-e "s|@@STORAGE_DIR@@|${STORAGE_DIR}|g" -e "s|@@STORAGE_PATH@@|${LIBRETIME_STORAGE_PATH}|g"
info "enabling libretime nginx config" info "enabling libretime nginx config"
ln -s --force \ ln -s --force \

View File

@ -44,6 +44,6 @@ server {
location /api/_media { location /api/_media {
internal; internal;
# This alias path must match the 'storage.path' configuration field. # This alias path must match the 'storage.path' configuration field.
alias @@STORAGE_DIR@@; alias @@STORAGE_PATH@@;
} }
} }