From 6de4a8107ccc70c1160e8c48aafced426abbaae4 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 12 Mar 2025 06:56:12 +0100 Subject: [PATCH] Feature: Filebrowser: support now alpine (#2997) * Feature: Filebrowser LXC: support now alpine * add alpine bash path to website --- json/filebrowser.json | 13 +++++- misc/filebrowser.sh | 92 ++++++++++++++++++++++++++++++++++--------- 2 files changed, 85 insertions(+), 20 deletions(-) diff --git a/json/filebrowser.json b/json/filebrowser.json index 575c53378..5d16785b4 100644 --- a/json/filebrowser.json +++ b/json/filebrowser.json @@ -24,6 +24,17 @@ "os": null, "version": null } + }, + { + "type": "alpine", + "script": "misc/filebrowser.sh", + "resources": { + "cpu": null, + "ram": null, + "hdd": null, + "os": null, + "version": null + } } ], "default_credentials": { @@ -36,4 +47,4 @@ "type": "warning" } ] -} \ No newline at end of file +} diff --git a/misc/filebrowser.sh b/misc/filebrowser.sh index ec57f7ded..711a57675 100644 --- a/misc/filebrowser.sh +++ b/misc/filebrowser.sh @@ -10,10 +10,11 @@ function header_info { _______ __ ____ / ____(_) /__ / __ )_________ _ __________ _____ / /_ / / / _ \/ __ / ___/ __ \ | /| / / ___/ _ \/ ___/ - / __/ / / / __/ /_/ / / / /_/ / |/ |/ (__ ) __/ / -/_/ /_/_/\___/_____/_/ \____/|__/|__/____/\___/_/ + / __/ / / / __/ /_/ / / / /_/ / |/ |/ (__ ) __/ / +/_/ /_/_/\___/_____/_/ \____/|__/|__/____/\___/_/ EOF } + YW=$(echo "\033[33m") GN=$(echo "\033[1;92m") RD=$(echo "\033[01;31m") @@ -25,11 +26,31 @@ INFO="${BL}ℹ️${CL}" APP="FileBrowser" INSTALL_PATH="/usr/local/bin/filebrowser" -SERVICE_PATH="/etc/systemd/system/filebrowser.service" DB_PATH="/usr/local/community-scripts/filebrowser.db" -IP=$(hostname -I | awk '{print $1}') DEFAULT_PORT=8080 +# Get first non-loopback IP & Detect primary network interface dynamically +IFACE=$(ip -4 route | awk '/default/ {print $5; exit}') +IP=$(ip -4 addr show "$IFACE" | awk '/inet / {print $2}' | cut -d/ -f1 | head -n 1) + +[[ -z "$IP" ]] && IP=$(hostname -I | awk '{print $1}') +[[ -z "$IP" ]] && IP="127.0.0.1" + + +# Detect OS +if [[ -f "/etc/alpine-release" ]]; then + OS="Alpine" + SERVICE_PATH="/etc/init.d/filebrowser" + PKG_MANAGER="apk add --no-cache" +elif [[ -f "/etc/debian_version" ]]; then + OS="Debian" + SERVICE_PATH="/etc/systemd/system/filebrowser.service" + PKG_MANAGER="apt-get install -y" +else + echo -e "${CROSS} Unsupported OS detected. Exiting." + exit 1 +fi + header_info function msg_info() { @@ -52,8 +73,15 @@ if [ -f "$INSTALL_PATH" ]; then read -r -p "Would you like to uninstall ${APP}? (y/N): " uninstall_prompt if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then msg_info "Uninstalling ${APP}" - systemctl disable -q --now filebrowser.service - rm -f "$INSTALL_PATH" "$DB_PATH" "$SERVICE_PATH" + if [[ "$OS" == "Debian" ]]; then + systemctl disable --now filebrowser.service &>/dev/null + rm -f "$SERVICE_PATH" + else + rc-service filebrowser stop &>/dev/null + rc-update del filebrowser &>/dev/null + rm -f "$SERVICE_PATH" + fi + rm -f "$INSTALL_PATH" "$DB_PATH" msg_ok "${APP} has been uninstalled." exit 0 fi @@ -61,7 +89,8 @@ if [ -f "$INSTALL_PATH" ]; then read -r -p "Would you like to update ${APP}? (y/N): " update_prompt if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then msg_info "Updating ${APP}" - curl -fsSL https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null + wget -qO- https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null + chmod +x "$INSTALL_PATH" msg_ok "Updated ${APP}" exit 0 else @@ -76,26 +105,30 @@ PORT=${PORT:-$DEFAULT_PORT} read -r -p "Would you like to install ${APP}? (y/n): " install_prompt if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Installing ${APP}" - apt-get install -y curl &>/dev/null - curl -fsSL https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null + msg_info "Installing ${APP} on ${OS}" + $PKG_MANAGER wget tar curl &>/dev/null + wget -qO- https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null + chmod +x "$INSTALL_PATH" msg_ok "Installed ${APP}" msg_info "Creating FileBrowser directory" mkdir -p /usr/local/community-scripts chown root:root /usr/local/community-scripts chmod 755 /usr/local/community-scripts + touch "$DB_PATH" + chown root:root "$DB_PATH" + chmod 644 "$DB_PATH" msg_ok "Directory created successfully" read -r -p "Would you like to use No Authentication? (y/N): " auth_prompt if [[ "${auth_prompt,,}" =~ ^(y|yes)$ ]]; then msg_info "Configuring No Authentication" - cd /usr/local/community-scripts - filebrowser config init -a '0.0.0.0' -p "$PORT" -d "$DB_PATH" &>/dev/null - filebrowser config set -a '0.0.0.0' -p "$PORT" -d "$DB_PATH" &>/dev/null - filebrowser config init --auth.method=noauth &>/dev/null - filebrowser config set --auth.method=noauth &>/dev/null - filebrowser users add ID 1 --perm.admin &>/dev/null + cd /usr/local/community-scripts + filebrowser config init -a '0.0.0.0' -p "$PORT" -d "$DB_PATH" &>/dev/null + filebrowser config set -a '0.0.0.0' -p "$PORT" -d "$DB_PATH" &>/dev/null + filebrowser config init --auth.method=noauth &>/dev/null + filebrowser config set --auth.method=noauth &>/dev/null + filebrowser users add ID 1 --perm.admin &>/dev/null msg_ok "No Authentication configured" else msg_info "Setting up default authentication" @@ -107,7 +140,8 @@ if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then fi msg_info "Creating service" - cat < "$SERVICE_PATH" + if [[ "$OS" == "Debian" ]]; then + cat < "$SERVICE_PATH" [Unit] Description=Filebrowser After=network-online.target @@ -115,13 +149,33 @@ After=network-online.target [Service] User=root WorkingDirectory=/usr/local/community-scripts -ExecStart=/usr/local/bin/filebrowser -r / -d "$DB_PATH" -p "$PORT" +ExecStartPre=/bin/touch /usr/local/community-scripts/filebrowser.db +ExecStartPre=/usr/local/bin/filebrowser config set -a "0.0.0.0" -p 9000 -d /usr/local/community-scripts/filebrowser.db +ExecStart=/usr/local/bin/filebrowser -r / -d /usr/local/community-scripts/filebrowser.db -p 9000 Restart=always [Install] WantedBy=multi-user.target EOF - systemctl enable -q --now filebrowser.service + systemctl enable -q --now filebrowser + else + cat < "$SERVICE_PATH" +#!/sbin/openrc-run + +command="/usr/local/bin/filebrowser" +command_args="-r / -d $DB_PATH -p $PORT" +command_background=true +pidfile="/var/run/filebrowser.pid" +directory="/usr/local/community-scripts" + +depend() { + need net +} +EOF + chmod +x "$SERVICE_PATH" + rc-update add filebrowser default &>/dev/null + rc-service filebrowser start &>/dev/null + fi msg_ok "Service created successfully" echo -e "${CM} ${GN}${APP} is reachable at: ${BL}http://$IP:$PORT${CL}"