diff --git a/linux/install.ps1 b/linux/install.ps1 index dc00c2f..bac151d 100644 --- a/linux/install.ps1 +++ b/linux/install.ps1 @@ -11,7 +11,7 @@ param ([string]$version, [switch]$server, [switch]$pollservice, [switch]$force, [switch] $update) Set-StrictMode -Version 1 - +$ErrorActionPreference = "Stop" ################################### # Вспомогательные функции @@ -218,8 +218,52 @@ New-Item -ItemType Directory -Path $configDir -Force if ($server) { wget $serverUrl -O Server.zip - Expand-Archive -LiteralPath 'Server.zip' -DestinationPath $lersDir -Force - Remove-Item -Path 'Server.zip' -Force + + if ($update) + { + Write-Host "Обновляется база данных..." + + # В режиме обновления распакуем сервер во временную папку + # и попытаемся обновить БД. Если не вышло обновиться, завершаем работу. + $lersTempPath = [System.IO.Path]::GetTempPath() + $lersTempPath = Join-Path -Path $lersTempPath -ChildPath "lers" + + if (Test-Path -LiteralPath $lersTempPath) + { + Remove-Item -Path $lersTempPath -Recurse -Force + } + + Expand-Archive -LiteralPath 'Server.zip' -DestinationPath $lersTempPath -Force + Remove-Item -Path 'Server.zip' -Force + + # Обновляем существующую БД + dotnet "$lersTempPath/Server/Lers.Server.dll" cli db-update + + if ($?) + { + # Перемещаем распакованные файлы в финальную папку. + # Предварительно очищаем сервер, чтобы убрать все ставшие ненужными сборки. + + Remove-Item -Path "$lersDir/Server" -Recurse -Force + Remove-Item -Path "$lersDir/Database" -Recurse -Force + Remove-Item -Path "$lersDir/Server.Bootstrapper" -Recurse -Force + Remove-Item -Path "$lersDir/Updater" -Recurse -Force + + Get-ChildItem -Path $lersTempPath | Move-Item -Destination $lersDir -Force + } + else + { + Write-Error "Не удалось обновить базу данных. Обновление прекращено." + exit 3; + } + + } + else + { + Expand-Archive -LiteralPath 'Server.zip' -DestinationPath $lersDir -Force + Remove-Item -Path 'Server.zip' -Force + } + } if ($pollservice) @@ -275,14 +319,9 @@ chown -R $lersUser $dataDir chown -R $lersUser $configDir -if ($update) +if (-not $update) { - # Обновляем существующую БД - dotnet $serverExecutable cli db-update -} -else -{ - # Создаём службы systemd + # Создаём или службы systemd if ($server) {