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
This commit is contained in:
@@ -0,0 +1,354 @@
|
||||
# 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! ✅
|
||||
Reference in New Issue
Block a user