adds MEDIA_ROOT environment variable for starting the server

This commit is contained in:
markmental 2026-02-03 13:19:20 -05:00
commit 5f7b1aa7c1
3 changed files with 76 additions and 64 deletions

View file

@ -1,23 +1,11 @@
#!/usr/bin/env bash
set -euo pipefail
# start-media-server.sh
#
# Starts frankenphp with MEDIA_USER and MEDIA_PASS_HASH set.
# Hash is generated via:
# - system php (preferred) OR
# - frankenphp php-cli (fallback)
#
# Usage:
# ./start-media-server.sh --user admin --prompt [--port 9000] [--dir /path/to/docroot]
#
# Security:
# Avoid --pass on command line; use --prompt or --pass-stdin to keep it out of `ps`/history.
PORT="9000"
USER=""
PASS=""
DOCROOT=""
MEDIA_ROOT_ARG=""
read_pass_stdin=false
prompt=false
@ -25,28 +13,27 @@ prompt=false
usage() {
cat <<'EOF'
Usage:
start-media-server.sh --user <username> [--pass <password> | --pass-stdin | --prompt] [--port <port>] [--dir <docroot>]
start-media-server.sh --user <username> [--pass <password> | --pass-stdin | --prompt]
[--media-root <path>] [--port <port>] [--dir <docroot>]
Options:
--user <u> Username to set in MEDIA_USER (required)
--pass <p> Password to hash (insecure: visible in process list & shell history)
--pass-stdin Read password from stdin (safer)
--prompt Prompt for password (safer; hidden input)
--port <p> Listen port (default: 9000)
--dir <path> cd into docroot before starting (optional)
-h, --help Show help
--user <u> Username to set in MEDIA_USER (required)
--pass <p> Password to hash (insecure: visible in process list & shell history)
--pass-stdin Read password from stdin (safer)
--prompt Prompt for password (safer; hidden input)
--media-root <p> Base directory containing Videos/ and Music/ (recommended)
--port <p> Listen port (default: 9000)
--dir <path> cd into docroot before starting (optional)
-h, --help Show help
Examples:
./start-media-server.sh --user admin --prompt --port 9000 --dir /home/me/samba-serv
printf '%s\n' 'test123' | ./start-media-server.sh --user admin --pass-stdin
./start-media-server.sh --user admin --prompt --media-root /mnt/media --port 9000 --dir /home/me/samba-serv
printf '%s\n' 'test123' | ./start-media-server.sh --user admin --pass-stdin --media-root /mnt/media
EOF
}
have_cmd() { command -v "$1" >/dev/null 2>&1; }
# Pick a PHP hashing command:
# - If `php` exists: use it.
# - Else if `frankenphp` exists and supports php-cli: use it.
pick_php_runner() {
if have_cmd php; then
echo "php"
@ -54,7 +41,6 @@ pick_php_runner() {
fi
if have_cmd frankenphp; then
# Verify php-cli is available (frankenphp subcommand)
if frankenphp php-cli -v >/dev/null 2>&1; then
echo "frankenphp php-cli"
return 0
@ -70,6 +56,7 @@ while (($#)); do
--pass) PASS="${2-}"; shift 2 ;;
--pass-stdin) read_pass_stdin=true; shift ;;
--prompt) prompt=true; shift ;;
--media-root) MEDIA_ROOT_ARG="${2-}"; shift 2 ;;
--port) PORT="${2-}"; shift 2 ;;
--dir) DOCROOT="${2-}"; shift 2 ;;
-h|--help) usage; exit 0 ;;
@ -117,12 +104,10 @@ fi
PHP_RUNNER="$(pick_php_runner)" || {
echo "Error: neither 'php' nor 'frankenphp php-cli' is available for hashing" >&2
echo "Install php OR ensure frankenphp supports 'php-cli'." >&2
exit 127
}
# Generate bcrypt hash without needing to escape $.
# We pass the password via an env var P to avoid quoting surprises in -r strings.
MEDIA_PASS_HASH="$(
P="$PASS" $PHP_RUNNER -r 'echo password_hash(getenv("P"), PASSWORD_BCRYPT), PHP_EOL;'
)"
@ -130,6 +115,11 @@ MEDIA_PASS_HASH="$(
export MEDIA_USER="$USER"
export MEDIA_PASS_HASH
# Export MEDIA_ROOT if provided
if [[ -n "${MEDIA_ROOT_ARG}" ]]; then
export MEDIA_ROOT="${MEDIA_ROOT_ARG}"
fi
if [[ -n "$DOCROOT" ]]; then
cd "$DOCROOT"
fi
@ -138,6 +128,11 @@ echo "Using PHP runner: $PHP_RUNNER"
echo "Starting frankenphp on :$PORT"
echo "MEDIA_USER=$MEDIA_USER"
echo "MEDIA_PASS_HASH set (bcrypt)"
if [[ -n "${MEDIA_ROOT:-}" ]]; then
echo "MEDIA_ROOT=$MEDIA_ROOT"
else
echo "MEDIA_ROOT not set (get_files.php / serve_media.php will error)"
fi
echo
exec frankenphp php-server --listen ":$PORT"