Внес корректировки для приложений Emby и Jellyfin

This commit is contained in:
2026-04-28 21:25:44 +03:00
parent a0c8997000
commit 750105fe5f
2 changed files with 1 additions and 153 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
manifestVersion: 1
manifestVersion: "1.1"
id: emby
name: Emby
tagline: Персональный медиа-сервер
-152
View File
@@ -1,152 +0,0 @@
#!/usr/bin/env bash
# Этот сценарий обрабатывает миграцию версий Jellyfin, чтобы обеспечить безопасное обновление через необходимые промежуточные версии.
set -euo pipefail
APP_DIR="$(readlink -f $(dirname "${BASH_SOURCE[0]}")/..)"
APP_DATA_DIR="${APP_DIR}/data"
APP_COMPOSE_FILE="${APP_DIR}/docker-compose.yml"
JELLYFIN_SYSTEM_FILE="${APP_DATA_DIR}/config/system.xml"
JELLYFIN_UPDATE_FLAG_FILE="${APP_DATA_DIR}/POST_1_10_VERSION"
MIGRATION_IN_PROGRESS_FILE="${APP_DATA_DIR}/MIGRATION_IN_PROGRESS"
MIGRATION_FIX_FLAG="${APP_DATA_DIR}/MIGRATION_20250618_FIXED"
# Если файлы базы данных еще не существуют
# Тогда скорее всего это новая установка
# Создайте файл флага, чтобы указать, что это версия 1.10+.
if [[ ! -f "${JELLYFIN_SYSTEM_FILE}" ]]; then
touch "${JELLYFIN_UPDATE_FLAG_FILE}"
touch "${MIGRATION_FIX_FLAG}"
fi
# Выйти, если файл флага существует
if [[ -f "${JELLYFIN_UPDATE_FLAG_FILE}" ]]; then
echo "Jellyfin update flag file already exists at ${JELLYFIN_UPDATE_FLAG_FILE}. Skipping migration steps."
exit 0
fi
# Проверьте, выполняется ли уже миграция, чтобы предотвратить бесконечные циклы.
if [[ -f "${MIGRATION_IN_PROGRESS_FILE}" ]]; then
echo "Migration already in progress, exiting to prevent loops"
exit 0
fi
# Отметить миграцию как выполняемую
touch "${MIGRATION_IN_PROGRESS_FILE}"
# Функция очистки ловушки
cleanup() {
local exit_code=$?
if [[ $exit_code -ne 0 ]]; then
echo "Migration failed, cleaning up..."
# Восстановить исходный файл компоновки, если у нас есть исходное изображение.
if [[ -n "${original_server_image:-}" ]]; then
yq -i ".services.server.image = \"${original_server_image}\"" "${APP_COMPOSE_FILE}" 2>/dev/null || true
fi
fi
rm -f "${MIGRATION_IN_PROGRESS_FILE}"
}
trap cleanup EXIT
# Если файл флага не существует, сначала обновите его до версии 1.10.7, а затем перейдите к последней версии.
echo "No POST_1_10_VERSION flag found - performing update to v1.10.7 and then to latest version"
# Образы Docker для промежуточного шага v1.10.7
INTERMEDIATE_SERVER_IMAGE="linuxserver/jellyfin:10.10.7@sha256:01c9d2311eb7710867fb3a8c2718068a276cff468a71d2a2dc58a0f5165ad0d2"
# Получить текущие изображения с docker-compose.yml
get_current_images_from_compose() {
local server_image=$(yq '.services.server.image' "${APP_COMPOSE_FILE}" 2>/dev/null || echo "")
echo "${server_image}"
}
# Обновить файл компоновки новыми изображениями.
update_compose_images() {
local server_image="${1}"
yq -i ".services.server.image = \"${server_image}\"" "${APP_COMPOSE_FILE}"
}
# Сохраните исходное изображение для последнего шага.
original_server_image=$(get_current_images_from_compose)
echo "Step 1: Updating to v1.10.7 for safe migration"
update_compose_images "${INTERMEDIATE_SERVER_IMAGE}"
# Начните с версии 1.10.7
echo "Starting Jellyfin v1.10.7..."
"${DFWEBOS_ROOT}/scripts/app" start jellyfin
# Дождитесь завершения запуска и миграции.
echo "Waiting for v1.10.7 to complete startup and migrations..."
# Конечная точка опроса работоспособности с тайм-аутом
MAX_WAIT=300
POLL_INTERVAL=5
elapsed=0
while [[ $elapsed -lt $MAX_WAIT ]]; do
if curl -sf "http://localhost:8096/health" > /dev/null 2>&1; then
echo "Jellyfin v1.10.7 is healthy after ${elapsed}s"
# Дайте дополнительное время для завершения оставшихся миграций.
sleep 10
break
fi
sleep $POLL_INTERVAL
elapsed=$((elapsed + POLL_INTERVAL))
done
if [[ $elapsed -ge $MAX_WAIT ]]; then
echo "Warning: Jellyfin health check timed out after ${MAX_WAIT}s, proceeding anyway"
fi
# Остановить приложение
echo "Stopping Jellyfin v1.10.7..."
"${DFWEBOS_ROOT}/scripts/app" stop jellyfin
# Примените исправление таблицы UserDatas к library.db BEFORE. Запускается версия 10.11.5.
# При миграции MigrateLibraryDb в версии 10.11.5 library.db будет переименован в library.db.old.
# Тогда MigrateLibraryUserData попытается прочитать UserDatas из library.db.old.
# Поэтому мы добавляем таблицу в library.db сейчас, прежде чем она будет переименована.
LIBRARY_DB="${APP_DATA_DIR}/config/data/data/library.db"
if [[ -f "${LIBRARY_DB}" && ! -f "${MIGRATION_FIX_FLAG}" ]]; then
echo "Applying UserDatas table fix to library.db (before 10.11.5 renames it)..."
if python3 -c "
import sqlite3
conn = sqlite3.connect('${LIBRARY_DB}')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS UserDatas (
key TEXT NOT NULL,
userId TEXT NOT NULL,
rating REAL,
played INTEGER NOT NULL,
playCount INTEGER NOT NULL,
isFavorite INTEGER NOT NULL,
playbackPositionTicks INTEGER NOT NULL,
lastPlayedDate TEXT,
AudioStreamIndex INTEGER,
SubtitleStreamIndex INTEGER,
PRIMARY KEY (key, userId)
)
''')
conn.commit()
conn.close()
"; then
echo "UserDatas table fix applied successfully"
touch "${MIGRATION_FIX_FLAG}"
else
echo "Failed to apply UserDatas table fix"
exit 1
fi
fi
echo "Step 2: Updating to latest version"
update_compose_images "${original_server_image}"
# Создайте файл флага, чтобы предотвратить повторный запуск этой миграции.
touch "${JELLYFIN_UPDATE_FLAG_FILE}"
echo "Migration completed: v1.10.7 -> latest version"
echo "Created ${JELLYFIN_UPDATE_FLAG_FILE} flag file"