feat(roles): add rclone-mount role for WebDAV mounts
Some checks failed
CI / check (push) Failing after 12m14s
Some checks failed
CI / check (push) Failing after 12m14s
Add a new system-level role for mounting WebDAV filesystems via rclone. Includes rclone-torbox-setup helper script that uses rbw to bootstrap credentials from Bitwarden. Key features: - Configurable WebDAV URL, username, mount point - VFS cache mode and buffer size tuning for media streaming - RequiresMountsFor option for ZFS pool dependencies - Obscured password storage via environment file Enable on john-endesktop for TorBox WebDAV access by rdt-client and Jellyfin. Mount waits for /media ZFS pool before starting. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -4,4 +4,5 @@
|
||||
app-launcher-server = pkgs.callPackage ./app-launcher-server {};
|
||||
claude-code = pkgs.callPackage ./claude-code {};
|
||||
mcrcon-rbw = pkgs.callPackage ./mcrcon-rbw {};
|
||||
rclone-torbox-setup = pkgs.callPackage ./rclone-torbox-setup {};
|
||||
}
|
||||
|
||||
98
packages/rclone-torbox-setup/default.nix
Normal file
98
packages/rclone-torbox-setup/default.nix
Normal file
@@ -0,0 +1,98 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
pkgs.writeShellScriptBin "rclone-torbox-setup" ''
|
||||
set -euo pipefail
|
||||
|
||||
# Default values
|
||||
RBW_ENTRY="''${1:-torbox}"
|
||||
ENV_FILE="''${2:-/etc/rclone/torbox.env}"
|
||||
|
||||
usage() {
|
||||
echo "Usage: rclone-torbox-setup [rbw-entry] [env-file]"
|
||||
echo ""
|
||||
echo "Sets up rclone credentials for TorBox WebDAV mount."
|
||||
echo "Retrieves password from rbw (Bitwarden), obscures it for rclone,"
|
||||
echo "and writes it to the environment file for the systemd service."
|
||||
echo ""
|
||||
echo "Arguments:"
|
||||
echo " rbw-entry Name of the Bitwarden entry containing the password (default: torbox)"
|
||||
echo " env-file Path to write the environment file (default: /etc/rclone/torbox.env)"
|
||||
echo ""
|
||||
echo "The Bitwarden entry should contain your TorBox password as the password field."
|
||||
echo ""
|
||||
echo "Example:"
|
||||
echo " rclone-torbox-setup torbox-password /etc/rclone/torbox.env"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [[ "''${1:-}" == "-h" ]] || [[ "''${1:-}" == "--help" ]]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
echo "rclone TorBox credential setup"
|
||||
echo "=============================="
|
||||
echo ""
|
||||
|
||||
# Check if rbw is available
|
||||
if ! command -v rbw &> /dev/null; then
|
||||
echo "Error: rbw is not available. Please ensure rbw is installed and configured."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if rclone is available
|
||||
if ! command -v rclone &> /dev/null; then
|
||||
echo "Error: rclone is not available. Please ensure rclone is installed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Retrieving password from rbw entry: $RBW_ENTRY"
|
||||
|
||||
# Retrieve password from Bitwarden
|
||||
if ! TORBOX_PASS=$(rbw get "$RBW_ENTRY" 2>/dev/null); then
|
||||
echo ""
|
||||
echo "Error: Failed to retrieve password from rbw entry '$RBW_ENTRY'"
|
||||
echo ""
|
||||
echo "Please ensure:"
|
||||
echo " 1. The entry '$RBW_ENTRY' exists in Bitwarden"
|
||||
echo " 2. rbw is unlocked: rbw unlock"
|
||||
echo " 3. rbw is synced: rbw sync"
|
||||
echo ""
|
||||
echo "To create the entry in Bitwarden:"
|
||||
echo " - Name: $RBW_ENTRY"
|
||||
echo " - Password: Your TorBox password"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Password retrieved successfully"
|
||||
|
||||
# Obscure the password for rclone
|
||||
echo "Obscuring password for rclone..."
|
||||
if ! OBSCURED_PASS=$(echo -n "$TORBOX_PASS" | rclone obscure -); then
|
||||
echo "Error: Failed to obscure password with rclone"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create the directory if needed (requires sudo)
|
||||
ENV_DIR=$(dirname "$ENV_FILE")
|
||||
if [[ ! -d "$ENV_DIR" ]]; then
|
||||
echo "Creating directory $ENV_DIR (requires sudo)..."
|
||||
sudo mkdir -p "$ENV_DIR"
|
||||
fi
|
||||
|
||||
# Write the environment file
|
||||
echo "Writing environment file to $ENV_FILE (requires sudo)..."
|
||||
echo "RCLONE_WEBDAV_PASS=$OBSCURED_PASS" | sudo tee "$ENV_FILE" > /dev/null
|
||||
sudo chmod 600 "$ENV_FILE"
|
||||
|
||||
echo ""
|
||||
echo "Setup complete!"
|
||||
echo ""
|
||||
echo "The environment file has been created at: $ENV_FILE"
|
||||
echo "The rclone-mount-torbox systemd service will use this file."
|
||||
echo ""
|
||||
echo "To activate the mount after NixOS rebuild:"
|
||||
echo " sudo systemctl start rclone-mount-torbox"
|
||||
echo ""
|
||||
echo "To check status:"
|
||||
echo " sudo systemctl status rclone-mount-torbox"
|
||||
''
|
||||
Reference in New Issue
Block a user