Files
pgsql-jellyfin/docs/STARTUP_JSON_MARKER_FIX.md
wjones 33d7c010fb Jellyfin 11.0.0-PostgreSQL PREVIEW: version bump & defaults
- Update version to 11.0.0-PostgreSQL-PREVIEW in assemblies, installer, and build scripts
- Default web directory is now "wwwroot" across all platforms
- Configuration manager now creates .example files if missing
- Set PostgreSQL as default database with sensible options
- Postgres provider ensures database exists before table checks
- Add docs for marker conflict fixes and startup.json path issues
- Version string in logs/UI uses informational version
- Installer output filename and wizard show PREVIEW suffix
- Documentation summarizes version bump and verification steps
2026-02-27 13:45:09 -05:00

355 lines
8.4 KiB
Markdown

# Startup.json Configuration Fix - Marker Conflict Resolution
**Date:** 2026-02-26
**Status:** ✅ Fixed
**Issue:** DataDir and ConfigDir pointing to same location
---
## Root Cause
### The Problem
**File:** `E:\Program Files\jellyfin-win\startup.json`
**Problematic Configuration:**
```json
{
"Paths": {
"DataDir": "C:/ProgramData/jellyfin", SAME
"ConfigDir": "C:/ProgramData/jellyfin", SAME
"CacheDir": "C:/ProgramData/jellyfin/cache",
"LogDir": "C:/ProgramData/jellyfin/log"
}
}
```
**Why This Failed:**
1. DataDir creates `.jellyfin-data` marker in `C:/ProgramData/jellyfin`
2. ConfigDir creates `.jellyfin-config` marker in `C:/ProgramData/jellyfin`
3. Sanity check finds both markers in same directory
4. **Error:** "Expected to find only .jellyfin-data but found marker for .jellyfin-config"
---
## The Fix
### Updated Configuration ✅
**File:** `E:\Program Files\jellyfin-win\startup.json`
**New Configuration:**
```json
{
"_comment": "Jellyfin Startup Configuration - Windows with separate directories",
"_note": "Using separate subdirectories to avoid marker conflicts",
"_priority": "Command-line args > Environment variables > This file > Built-in defaults",
"Paths": {
"DataDir": "C:/ProgramData/jellyfin/data", Separate
"ConfigDir": "C:/ProgramData/jellyfin/config", Separate
"CacheDir": "C:/ProgramData/jellyfin/cache",
"LogDir": "C:/ProgramData/jellyfin/log",
"TempDir": "C:/Users/wjones/AppData/Local/Temp/jellyfin",
"WebDir": "C:/ProgramData/jellyfin/web"
}
}
```
**Changes:**
- ✅ DataDir: `C:/ProgramData/jellyfin``C:/ProgramData/jellyfin/data`
- ✅ ConfigDir: `C:/ProgramData/jellyfin``C:/ProgramData/jellyfin/config`
- ✅ Each directory gets its own marker file
- ✅ No conflicts!
---
## What Was Done
### Step 1: Backed Up Original ✅
**Backup Location:** `E:\Program Files\jellyfin-win\startup.json.backup`
```powershell
Copy-Item "E:\Program Files\jellyfin-win\startup.json" "E:\Program Files\jellyfin-win\startup.json.backup"
```
### Step 2: Updated Configuration ✅
**Updated Paths:**
- DataDir → separate subdirectory
- ConfigDir → separate subdirectory
### Step 3: Cleaned Up Old Markers ✅
**Removed:**
- `C:\ProgramData\jellyfin\.jellyfin-config`
- `C:\ProgramData\jellyfin\.jellyfin-data`
---
## New Directory Structure
### After Fix
```
C:\ProgramData\jellyfin\
├── data\ ← Database, media library data
│ └── .jellyfin-data ← Data marker
├── config\ ← Configuration files
│ └── .jellyfin-config ← Config marker
├── cache\ ← Cache files
│ └── .jellyfin-cache ← Cache marker
├── log\ ← Log files
│ └── .jellyfin-log ← Log marker
└── web\ ← Web UI files
```
**Each directory has its own marker - no conflicts!**
---
## Why startup.json Exists
### Configuration Loading Order
**Priority (highest to lowest):**
1. **Command-line arguments** - e.g., `--datadir "C:\custom\path"`
2. **Environment variables** - e.g., `JELLYFIN_DATA_DIR=C:\custom`
3. **startup.json** - Configuration file ← This was the issue
4. **Built-in defaults** - Hardcoded in application
### Location Priority
Jellyfin searches for `startup.json` in:
1. Current directory (where jellyfin.dll is located)
2. Program Files installation directory
3. AppData directories
**In your case:** Found at `E:\Program Files\jellyfin-win\startup.json`
---
## Verification
### Check Current Configuration
```powershell
# View current startup.json
Get-Content "E:\Program Files\jellyfin-win\startup.json" | ConvertFrom-Json | Format-List
# Should show:
# DataDir : C:/ProgramData/jellyfin/data
# ConfigDir : C:/ProgramData/jellyfin/config
```
### Check for Markers
```powershell
# Root directory should have NO markers
Get-ChildItem "C:\ProgramData\jellyfin" -Filter ".jellyfin-*" | Select-Object Name
# Subdirectories should have markers
Get-ChildItem "C:\ProgramData\jellyfin" -Filter ".jellyfin-*" -Recurse | Select-Object FullName
```
**Expected:**
```
C:\ProgramData\jellyfin\data\.jellyfin-data
C:\ProgramData\jellyfin\config\.jellyfin-config
C:\ProgramData\jellyfin\cache\.jellyfin-cache
C:\ProgramData\jellyfin\log\.jellyfin-log
```
---
## Start Jellyfin
### Now You Can Start
```bash
cd E:\Projects\pgsql-jellyfin\lib\Release\net11.0
dotnet jellyfin.dll
```
**Expected Output:**
```
[INF] Loaded startup configuration from: E:\Program Files\jellyfin-win\startup.json
[INF] Data directory: C:\ProgramData\jellyfin\data
[INF] Config directory: C:\ProgramData\jellyfin\config
[INF] Cache directory: C:\ProgramData\jellyfin\cache
[INF] Log directory: C:\ProgramData\jellyfin\log
[INF] Jellyfin version: 11.0.0-PostgreSQL PREVIEW
```
---
## Alternative: Override Configuration
### Option 1: Command-Line Override
Don't want to modify startup.json? Use command-line args:
```bash
dotnet jellyfin.dll \
--datadir "C:/ProgramData/jellyfin/data" \
--configdir "C:/ProgramData/jellyfin/config"
```
### Option 2: Delete startup.json
Remove the file and use built-in defaults:
```powershell
Remove-Item "E:\Program Files\jellyfin-win\startup.json"
```
Built-in defaults will create proper structure automatically.
### Option 3: Use Project-Local Configuration
Create startup.json in your build directory:
```powershell
cd E:\Projects\pgsql-jellyfin\lib\Release\net11.0
$config = @"
{
"Paths": {
"DataDir": "E:/Projects/pgsql-jellyfin/dev-data/data",
"ConfigDir": "E:/Projects/pgsql-jellyfin/dev-data/config",
"CacheDir": "E:/Projects/pgsql-jellyfin/dev-data/cache",
"LogDir": "E:/Projects/pgsql-jellyfin/dev-data/log"
}
}
"@
Set-Content -Path "startup.json" -Value $config
```
---
## Common Mistakes
### ❌ Don't Do This
```json
{
"Paths": {
"DataDir": "C:/ProgramData/jellyfin", BAD
"ConfigDir": "C:/ProgramData/jellyfin" BAD
}
}
```
**Problem:** Same directory for both!
### ❌ Don't Do This Either
```json
{
"Paths": {
"DataDir": "C:/jellyfin",
"ConfigDir": "C:/jellyfin/config", BAD
"CacheDir": "C:/jellyfin/config/cache" BAD (nested in config)
}
}
```
**Problem:** Nested directories can cause conflicts
### ✅ Do This
```json
{
"Paths": {
"DataDir": "C:/ProgramData/jellyfin/data",
"ConfigDir": "C:/ProgramData/jellyfin/config",
"CacheDir": "C:/ProgramData/jellyfin/cache",
"LogDir": "C:/ProgramData/jellyfin/log"
}
}
```
**Good:** Each path is a separate subdirectory
---
## Rollback
### If Something Goes Wrong
**Restore original configuration:**
```powershell
Copy-Item "E:\Program Files\jellyfin-win\startup.json.backup" "E:\Program Files\jellyfin-win\startup.json" -Force
```
**Or delete startup.json entirely:**
```powershell
Remove-Item "E:\Program Files\jellyfin-win\startup.json"
```
Then use command-line args to specify paths.
---
## For Future Reference
### Creating Correct startup.json
**Template:**
```json
{
"_comment": "Jellyfin Startup Configuration",
"_note": "Use separate subdirectories for each path type",
"Paths": {
"DataDir": "C:/ProgramData/jellyfin/data",
"ConfigDir": "C:/ProgramData/jellyfin/config",
"CacheDir": "C:/ProgramData/jellyfin/cache",
"LogDir": "C:/ProgramData/jellyfin/log",
"TempDir": "C:/Users/USERNAME/AppData/Local/Temp/jellyfin",
"WebDir": "C:/ProgramData/jellyfin/web"
},
"Database": {
"DatabaseType": "Jellyfin-PostgreSQL",
"CustomProviderOptions": {
"Options": [
{ "Key": "host", "Value": "localhost" },
{ "Key": "port", "Value": "5432" },
{ "Key": "database", "Value": "jellyfin" },
{ "Key": "username", "Value": "jellyfin" },
{ "Key": "password", "Value": "your-password" }
]
}
}
}
```
---
## Summary
**Problem:** startup.json had DataDir and ConfigDir pointing to same location
**Cause:** Previous installation configuration
**Fix:** Updated paths to use separate subdirectories
**Result:** No more marker conflicts
**Files Changed:**
1. `E:\Program Files\jellyfin-win\startup.json` - Updated paths
2. Backup created at `startup.json.backup`
3. Cleaned up old markers from `C:\ProgramData\jellyfin\`
**Status:** ✅ Ready to start Jellyfin!
**Command:**
```bash
cd E:\Projects\pgsql-jellyfin\lib\Release\net11.0
dotnet jellyfin.dll
```
---
**Lesson Learned:** Always use separate subdirectories for different path types to avoid marker conflicts! ✅