fp/apps/qbittorrent-nox/entrypoint.sh
CJ_Clippy c3da9e26bc
Some checks failed
ci / build (push) Failing after 12m34s
ci / test (push) Failing after 8m11s
add qbittorrent-nox docker image
2025-09-08 02:56:37 -08:00

180 lines
4.8 KiB
Bash
Executable File

#!/bin/sh
downloadsPath="/downloads"
profilePath="/config"
qbtConfigFile="$profilePath/qBittorrent/config/qBittorrent.conf"
isRoot="0"
if [ "$(id -u)" = "0" ]; then
isRoot="1"
fi
if [ "$isRoot" = "1" ]; then
if [ -n "$PUID" ] && [ "$PUID" != "$(id -u qbtUser)" ]; then
sed -i "s|^qbtUser:x:[0-9]*:|qbtUser:x:$PUID:|g" /etc/passwd
fi
if [ -n "$PGID" ] && [ "$PGID" != "$(id -g qbtUser)" ]; then
sed -i "s|^\(qbtUser:x:[0-9]*\):[0-9]*:|\1:$PGID:|g" /etc/passwd
sed -i "s|^qbtUser:x:[0-9]*:|qbtUser:x:$PGID:|g" /etc/group
fi
if [ -n "$PAGID" ]; then
_origIFS="$IFS"
IFS=','
for AGID in $PAGID; do
AGID=$(echo "$AGID" | tr -d '[:space:]"')
addgroup -g "$AGID" "qbtGroup-$AGID"
addgroup qbtUser "qbtGroup-$AGID"
done
IFS="$_origIFS"
fi
fi
if [ ! -f "$qbtConfigFile" ]; then
mkdir -p "$(dirname $qbtConfigFile)"
cat << EOF > "$qbtConfigFile"
[BitTorrent]
Session\DefaultSavePath=$downloadsPath
Session\Port=6881
Session\TempPath=$downloadsPath/temp
[Preferences]
WebUI\Port=8080
General\Locale=en
EOF
fi
argLegalNotice=""
_legalNotice=$(echo "$QBT_LEGAL_NOTICE" | tr -d '[:space:]' | tr '[:upper:]' '[:lower:]')
if [ "$_legalNotice" = "confirm" ]; then
argLegalNotice="--confirm-legal-notice"
else
# for backward compatibility
# TODO: remove in next major version release
_eula=$(echo "$QBT_EULA" | tr -d '[:space:]' | tr '[:upper:]' '[:lower:]')
if [ "$_eula" = "accept" ]; then
echo "QBT_EULA=accept is deprecated and will be removed soon. The replacement is QBT_LEGAL_NOTICE=confirm"
argLegalNotice="--confirm-legal-notice"
fi
fi
argTorrentingPort=""
if [ -n "$QBT_TORRENTING_PORT" ]; then
argTorrentingPort="--torrenting-port=$QBT_TORRENTING_PORT"
fi
argWebUIPort=""
if [ -n "$QBT_WEBUI_PORT" ]; then
argWebUIPort="--webui-port=$QBT_WEBUI_PORT"
fi
if [ "$isRoot" = "1" ]; then
# those are owned by root by default
# don't change existing files owner in `$downloadsPath`
if [ -d "$downloadsPath" ]; then
chown qbtUser:qbtUser "$downloadsPath"
fi
if [ -d "$profilePath" ]; then
chown qbtUser:qbtUser -R "$profilePath"
fi
fi
# set umask just before starting qbt
if [ -n "$UMASK" ]; then
umask "$UMASK"
fi
if [ -n "$QBT_USERNAME" ] && [ -n "$QBT_PASSWORD" ]; then
user="$QBT_USERNAME"
pass="$QBT_PASSWORD"
salt_hex=$(openssl rand -hex 16)
hash_bin=$(openssl kdf -binary \
-keylen 64 \
-kdfopt digest:SHA512 \
-kdfopt pass:"$pass" \
-kdfopt hexsalt:"$salt_hex" \
-kdfopt iter:100000 PBKDF2)
hash_b64=$(echo -n "$hash_bin" | base64 -w 0)
# convert salt to base64
salt_b64=$(echo "$salt_hex" | xxd -r -p | base64)
pbkdf2="@ByteArray(${salt_b64}:${hash_b64})"
# ensure enabled line exists
if grep -q "^WebUI\\Enabled=" "$qbtConfigFile"; then
sed -i "s|^WebUI\\Enabled=.*|WebUI\\Enabled=true|" "$qbtConfigFile"
else
echo "WebUI\\Enabled=true" >> "$qbtConfigFile"
fi
# ensure username line exists
if grep -q "^WebUI\\Username=" "$qbtConfigFile"; then
sed -i "s|^WebUI\\Username=.*|WebUI\\Username=$user|" "$qbtConfigFile"
else
echo "WebUI\\Username=$user" >> "$qbtConfigFile"
fi
# ensure password line exists
if grep -q "^WebUI\\Password_PBKDF2=" "$qbtConfigFile"; then
sed -i "s|^WebUI\\Password_PBKDF2=.*|WebUI\\Password_PBKDF2=$pbkdf2|" "$qbtConfigFile"
else
echo "WebUI\\Password_PBKDF2=$pbkdf2" >> "$qbtConfigFile"
fi
fi
if [ -n "$QBT_DISABLE_NETWORK" ]; then
# Ensure the [BitTorrent] section exists
if ! grep -qxF '[BitTorrent]' "$qbtConfigFile"; then
echo "[BitTorrent]" >> "$qbtConfigFile"
fi
# List of options to disable network (POSIX style)
for opt in \
"Session\\\\DHTEnabled=false" \
"Session\\\\LSDEnabled=false" \
"Session\\\\MaxActiveDownloads=0" \
"Session\\\\MaxActiveUploads=0" \
"Session\\\\MaxConnections=0" \
"Session\\\\MaxConnectionsPerTorrent=0" \
"Session\\\\PeXEnabled=false"; do
# If option exists, replace it; else append after [BitTorrent]
if grep -q "^${opt%%=*}" "$qbtConfigFile"; then
sed -i "s|^${opt%%=*}=.*|$opt|" "$qbtConfigFile"
else
sed -i "/^\[BitTorrent\]/a $opt" "$qbtConfigFile"
fi
done
fi
if [ "$isRoot" = "1" ]; then
exec \
doas -u qbtUser \
qbittorrent-nox \
"$argLegalNotice" \
--profile="$profilePath" \
"$argTorrentingPort" \
"$argWebUIPort" \
"$@"
else
exec \
qbittorrent-nox \
"$argLegalNotice" \
--profile="$profilePath" \
"$argTorrentingPort" \
"$argWebUIPort" \
"$@"
fi