Fix remote Transmission detection and config directory creation

- Fix bug where installer doesn't ask if Transmission is remote
- Fix missing configuration directory in /etc/transmission-rss-manager
- Create symlink between config locations to ensure app always finds config
- Ensure CONFIG_DIR is properly exported in the environment
- Update version to 2.0.4

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
MasterDraco 2025-03-05 08:39:21 +00:00
parent c495bce21f
commit 4c68a1ac07
7 changed files with 60 additions and 71 deletions

View File

@ -1,9 +1,14 @@
# Transmission RSS Manager v2.0.3
# Transmission RSS Manager v2.0.4
A comprehensive web-based tool to automate and manage your Transmission torrent downloads with RSS feed integration, intelligent media organization, and enhanced security features. Now with automatic updates and easy installation!
## Changelog
### v2.0.4 (2025-03-05)
- **Fixed**: Remote transmission detection in installer
- **Fixed**: Configuration directory creation and permissions
- **Fixed**: Config file symlink now ensures application finds correct config location
### v2.0.3 (2025-03-05)
- **New**: Configuration file now stored in `/etc/transmission-rss-manager/`
- **Improved**: Installer creates config directory with proper permissions

View File

@ -146,6 +146,8 @@ else
# Step 3: Create installation directories
log "INFO" "Creating directories..."
# Make sure CONFIG_DIR is set and exported
export CONFIG_DIR=${CONFIG_DIR:-"/etc/transmission-rss-manager"}
create_directories || {
log "ERROR" "Directory creation failed"
exit 1

View File

@ -114,6 +114,7 @@ function gather_configuration() {
read -p "Is Transmission running on a remote server? (y/n) [n]: " input_remote
if [[ $input_remote =~ ^[Yy]$ ]]; then
TRANSMISSION_REMOTE=true
export TRANSMISSION_REMOTE=true
# Get and validate hostname
while true; do
@ -227,6 +228,9 @@ function gather_configuration() {
TRANSMISSION_DOWNLOAD_DIR=$REMOTE_DOWNLOAD_DIR
else
# Local Transmission selected
TRANSMISSION_REMOTE=false
export TRANSMISSION_REMOTE=false
echo -e "${YELLOW}You've selected to use a local Transmission installation.${NC}"
# Check if Transmission is already installed

View File

@ -35,8 +35,8 @@ function install_dependencies() {
log "INFO" "Node.js is already installed."
fi
# Check if we need to install Transmission (only if local transmission was selected and not remote)
if [ "$TRANSMISSION_REMOTE" = false ] && ([ "$TRANSMISSION_HOST" = "localhost" ] || [ "$TRANSMISSION_HOST" = "127.0.0.1" ]); then
# Check if we need to install Transmission (only if local transmission was selected)
if [ "$TRANSMISSION_REMOTE" = false ]; then
if ! command_exists transmission-daemon; then
log "INFO" "Local Transmission installation selected, but transmission-daemon is not installed."
read -p "Would you like to install Transmission now? (y/n): " install_transmission
@ -109,8 +109,8 @@ function install_dependencies() {
local dependencies=("node" "npm" "unzip" "nginx")
local missing_deps=()
# Add transmission to dependencies check if local installation was selected and not remote
if [ "$TRANSMISSION_REMOTE" = false ] && ([ "$TRANSMISSION_HOST" = "localhost" ] || [ "$TRANSMISSION_HOST" = "127.0.0.1" ]); then
# Add transmission to dependencies check if local installation was selected
if [ "$TRANSMISSION_REMOTE" = false ]; then
dependencies+=("transmission-daemon")
fi
@ -191,5 +191,9 @@ function create_directories() {
chown -R "$USER:$USER" "$CONFIG_DIR"
chmod 755 "$CONFIG_DIR"
# Create a symlink from the installation directory to the config directory
# This ensures the application can find the config regardless of where it looks
ln -sf "$CONFIG_DIR/config.json" "$INSTALL_DIR/config.json"
log "INFO" "Directories created successfully."
}

View File

@ -6,6 +6,7 @@ function create_config_files() {
# Create initial config.json
echo "Creating config.json..."
mkdir -p "$CONFIG_DIR"
cat > $CONFIG_DIR/config.json << EOF
{
"version": "2.0.3",

View File

@ -1,6 +1,6 @@
{
"name": "transmission-rss-manager",
"version": "2.0.3",
"version": "2.0.4",
"description": "A comprehensive web-based tool to automate and manage your Transmission torrent downloads with RSS feed integration and intelligent media organization",
"main": "server.js",
"scripts": {

View File

@ -1,75 +1,48 @@
# Git-Based Installation and Update System
# Changes for Moving Config File to /etc/transmission-rss-manager
We've restructured the Transmission RSS Manager to use a git-based approach for installation and updates. Here's how the new system works:
## Overview
This update moves the configuration file from the application directory to `/etc/transmission-rss-manager/config.json` for better system organization, while maintaining backward compatibility by checking the original location as a fallback.
## New Architecture
## Changes Made
1. **Bootstrap Installer**
- Small, self-contained installer script
- Installs git if needed
- Clones the main repository
- Runs the main installer
### 1. Server.js Updates
- Changed default config location to `/etc/transmission-rss-manager/config.json`
- Added fallback location (`path.join(__dirname, 'config.json')`) for backward compatibility
- Enhanced `loadConfig()` function to try primary location first, then fallback location
- Updated `saveConfig()` function to try saving to primary location first, then fallback
- Added `installPath` property to configuration to store the application installation path for easier updates
2. **Main Installer**
- Modified to work with git-managed files
- Doesn't need to generate application files
- Only creates config files and sets up services
### 2. Installer Updates
- Added `CONFIG_DIR="/etc/transmission-rss-manager"` variable to config-module.sh
- Updated `create_directories()` in dependencies-module.sh to create the config directory
- Updated permission settings to ensure proper access to config directory
- Added checks for the CONFIG_DIR variable to ensure it's set
- Modified service-setup-module.sh to include CONFIG_DIR in the environment variables for the systemd service
- Updated file-creator-module.sh to write the initial config.json to the new location
3. **Update System**
- Web interface shows current version
- Checks for updates automatically
- One-click update process
- Preserves user configuration
### 3. Documentation Updates
- Updated README.md to reflect new config file location
- Added entry to the changelog for version 2.0.3
- Updated code examples in README
- Bumped version from 2.0.2 to 2.0.3 in both README.md and package.json
## Key Files
## Technical Details
1. **bootstrap-installer.sh**
- Entry point for new installations
- Minimal script that pulls everything else from git
### Config File Loading Process
1. Try to load config from primary location (`/etc/transmission-rss-manager/config.json`)
2. If not found, try fallback location (`<install_dir>/config.json`)
3. If neither exists, create a new config file at primary location
4. If primary location is not writable, fall back to application directory
2. **update.sh**
- Located in the scripts/ directory
- Handles git pull and service restart
- Preserves local configuration changes
3. **System Status UI**
- Added to the dashboard
- Shows version, uptime, and connection status
- Notifies when updates are available
4. **Server Endpoints**
- `/api/system/status` - Gets current version and system status
- `/api/system/check-updates` - Checks if updates are available
- `/api/system/update` - Triggers the update process
### Configuration Storage Logic
- Primary storage location: `/etc/transmission-rss-manager/config.json`
- Fallback location: `<install_dir>/config.json`
- Automatic migration from fallback to primary when possible
- Always try to write to primary first, then fallback if needed
## Benefits
1. **Simplified Maintenance**
- Single source of truth in the git repository
- No need to embed code in installation scripts
- Easy to make changes and publish updates
2. **Better User Experience**
- Users can see when updates are available
- One-click update process
- No need to manually download and run scripts
3. **Version Control**
- Clear versioning visible to users
- Update history preserved in git
- Easy rollback if needed
## Implementation Notes
This implementation preserves local configuration by:
1. Stashing local changes before pulling updates
2. Applying those changes back after the update
3. Handling any potential conflicts
The service automatically restarts after updates, ensuring users always have the latest version running.
## Next Steps
1. Update the GitHub repository structure to match this new approach
2. Test the installation and update process in a clean environment
3. Consider adding a changelog display in the UI to show what's new in each version
- More standard Linux configuration location in /etc
- Easier to find and edit configuration
- Clear separation between code and configuration
- Maintains backward compatibility with existing installations
- Simplified update process by storing installation path