Внес корректировки для приложений Emby и Jellyfin
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
manifestVersion: 1
|
||||
manifestVersion: "1.1"
|
||||
id: emby
|
||||
name: Emby
|
||||
tagline: Персональный медиа-сервер
|
||||
|
||||
@@ -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"
|
||||
Reference in New Issue
Block a user