diff --git a/emby/dfwebos-app.yml b/emby/dfwebos-app.yml index 9763e92..0486643 100644 --- a/emby/dfwebos-app.yml +++ b/emby/dfwebos-app.yml @@ -1,4 +1,4 @@ -manifestVersion: 1 +manifestVersion: "1.1" id: emby name: Emby tagline: Персональный медиа-сервер diff --git a/jellyfin/hooks/pre-start b/jellyfin/hooks/pre-start deleted file mode 100755 index 138fb0f..0000000 --- a/jellyfin/hooks/pre-start +++ /dev/null @@ -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"