120 lines
3.1 KiB
Bash
120 lines
3.1 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
set -o pipefail
|
|
|
|
FFMPEG_INSTALL_DIR="/usr/lib/audiobookshelf-ffmpeg"
|
|
DEFAULT_DATA_DIR="/usr/share/audiobookshelf"
|
|
CONFIG_PATH="/etc/default/audiobookshelf"
|
|
DEFAULT_PORT=13378
|
|
DEFAULT_HOST="0.0.0.0"
|
|
|
|
add_user() {
|
|
: "${1:?'User was not defined'}"
|
|
declare -r user="$1"
|
|
declare -r uid="$2"
|
|
|
|
if [ -z "$uid" ]; then
|
|
declare -r uid_flags=""
|
|
else
|
|
declare -r uid_flags="--uid $uid"
|
|
fi
|
|
|
|
declare -r group="${3:-$user}"
|
|
declare -r descr="${4:-No description}"
|
|
declare -r shell="${5:-/bin/false}"
|
|
|
|
if ! getent passwd | grep -q "^$user:"; then
|
|
echo "Creating system user: $user in $group with $descr and shell $shell"
|
|
useradd $uid_flags --gid $group --no-create-home --system --shell $shell -c "$descr" $user
|
|
fi
|
|
}
|
|
|
|
add_group() {
|
|
: "${1:?'Group was not defined'}"
|
|
declare -r group="$1"
|
|
declare -r gid="$2"
|
|
|
|
if [ -z "$gid" ]; then
|
|
declare -r gid_flags=""
|
|
else
|
|
declare -r gid_flags="--gid $gid"
|
|
fi
|
|
|
|
if ! getent group | grep -q "^$group:" ; then
|
|
echo "Creating system group: $group"
|
|
groupadd $gid_flags --system $group
|
|
fi
|
|
}
|
|
|
|
install_ffmpeg() {
|
|
echo "Starting FFMPEG Install"
|
|
|
|
WGET="wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz --output-document=ffmpeg-git-amd64-static.tar.xz"
|
|
WGET_TONE="wget https://github.com/sandreas/tone/releases/download/v0.1.2/tone-0.1.2-linux-x64.tar.gz --output-document=tone-0.1.2-linux-x64.tar.gz"
|
|
|
|
if ! cd "$FFMPEG_INSTALL_DIR"; then
|
|
echo "Creating ffmpeg install dir at $FFMPEG_INSTALL_DIR"
|
|
mkdir "$FFMPEG_INSTALL_DIR"
|
|
chown -R 'audiobookshelf:audiobookshelf' "$FFMPEG_INSTALL_DIR"
|
|
cd "$FFMPEG_INSTALL_DIR"
|
|
fi
|
|
|
|
$WGET
|
|
tar xvf ffmpeg-git-amd64-static.tar.xz --strip-components=1
|
|
rm ffmpeg-git-amd64-static.tar.xz
|
|
|
|
# Temp downloading tone library to the ffmpeg dir
|
|
echo "Getting tone.."
|
|
$WGET_TONE
|
|
tar xvf tone-0.1.2-linux-x64.tar.gz --strip-components=1
|
|
rm tone-0.1.2-linux-x64.tar.gz
|
|
|
|
echo "Good to go on Ffmpeg (& tone)... hopefully"
|
|
}
|
|
|
|
setup_config() {
|
|
if [ -f "$CONFIG_PATH" ]; then
|
|
echo "Existing config found."
|
|
cat $CONFIG_PATH
|
|
|
|
# TONE_PATH variable added in 2.1.6, if it doesnt exist then add it
|
|
if ! grep -q "TONE_PATH" "$CONFIG_PATH"; then
|
|
echo "Adding TONE_PATH to existing config"
|
|
echo "TONE_PATH=$FFMPEG_INSTALL_DIR/tone" >> "$CONFIG_PATH"
|
|
fi
|
|
|
|
else
|
|
|
|
if [ ! -d "$DEFAULT_DATA_DIR" ]; then
|
|
# Create directory and set permissions
|
|
echo "Creating default data dir at $DEFAULT_DATA_DIR"
|
|
mkdir "$DEFAULT_DATA_DIR"
|
|
chown -R 'audiobookshelf:audiobookshelf' "$DEFAULT_DATA_DIR"
|
|
fi
|
|
|
|
echo "Creating default config."
|
|
|
|
config_text="METADATA_PATH=$DEFAULT_DATA_DIR/metadata
|
|
CONFIG_PATH=$DEFAULT_DATA_DIR/config
|
|
FFMPEG_PATH=$FFMPEG_INSTALL_DIR/ffmpeg
|
|
FFPROBE_PATH=$FFMPEG_INSTALL_DIR/ffprobe
|
|
TONE_PATH=$FFMPEG_INSTALL_DIR/tone
|
|
PORT=$DEFAULT_PORT
|
|
HOST=$DEFAULT_HOST"
|
|
|
|
echo "$config_text"
|
|
|
|
echo "$config_text" > /etc/default/audiobookshelf;
|
|
|
|
echo "Config created"
|
|
fi
|
|
}
|
|
|
|
add_group 'audiobookshelf' ''
|
|
|
|
add_user 'audiobookshelf' '' 'audiobookshelf' 'audiobookshelf user-daemon' '/bin/false'
|
|
|
|
setup_config
|
|
|
|
install_ffmpeg
|