33d7c010fb
- 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
355 lines
8.4 KiB
Markdown
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! ✅
|