Добавил скрипт установки на linux из бинарных пакетов
This commit is contained in:
parent
954a1c75c6
commit
38c8055a61
262
linux/install.ps1
Normal file
262
linux/install.ps1
Normal file
@ -0,0 +1,262 @@
|
||||
param ([string]$version, [switch]$server, [switch]$pollservice, [switch]$force, [switch] $update)
|
||||
|
||||
Set-StrictMode -Version 1
|
||||
|
||||
|
||||
###################################
|
||||
# Вспомогательные функции
|
||||
###################################
|
||||
|
||||
# Запрашивает адрес сервера ЛЭРС
|
||||
function Get-ServerAddress
|
||||
{
|
||||
do
|
||||
{
|
||||
$serverAddress = Read-Host -Prompt "Введите адрес сервера ЛЭРС, к которому подключится служба опроса."
|
||||
|
||||
# Проверяем, что это действительно сервер ЛЭРС
|
||||
|
||||
try {
|
||||
$response = Invoke-RestMethod -Method GET -Uri "$serverAddress/api/v1/serverInfo"
|
||||
|
||||
if ($response.type -ne "LersServer")
|
||||
{
|
||||
throw "Неверный тип сервера"
|
||||
}
|
||||
|
||||
return $serverAddress
|
||||
}
|
||||
catch {
|
||||
Write-Error "$serverAddress не является сервером ЛЭРС. $_"
|
||||
}
|
||||
} while ($true)
|
||||
}
|
||||
|
||||
###################################
|
||||
# Константы
|
||||
###################################
|
||||
|
||||
$dotnetRuntimeVersion="8.0"
|
||||
$lersUser = "lers"
|
||||
|
||||
$lersDir = "/usr/LERS"
|
||||
$dataDir = "/var/LERS"
|
||||
$configDir = "/etc/LERS"
|
||||
|
||||
$serverExecutable = "$lersDir/Server/Lers.Server.dll"
|
||||
$pollServiceExecutable = "$lersDir/PollService/Lers.PollService.dll"
|
||||
|
||||
$serverServiceName = "lers.server.service"
|
||||
$pollserviceServiceName = "lers.pollservice.service"
|
||||
|
||||
###################################
|
||||
# Ресурсы
|
||||
###################################
|
||||
|
||||
$serverSystemd = @"
|
||||
[Unit]
|
||||
Description=ЛЭРС УЧЁТ - Сервер
|
||||
After=network.target
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
User=$lersUser
|
||||
ExecStart=/usr/bin/dotnet $serverExecutable
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
"@
|
||||
|
||||
$pollserviceSystemd = @"
|
||||
[Unit]
|
||||
Description=ЛЭРС УЧЁТ - Служба опроса
|
||||
After=network.target
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
User=$lersUser
|
||||
ExecStart=/usr/bin/dotnet $pollServiceExecutable
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
"@
|
||||
|
||||
|
||||
###################################
|
||||
# Убедимся, что запущены от ROOT.
|
||||
###################################
|
||||
|
||||
if ($PSVersionTable.Platform -eq "Unix") {
|
||||
if ( $(whoami) -ne "root") {
|
||||
Write-Host "Запустите скрипт от имени root через sudo"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# Определяем откуда будем качать.
|
||||
|
||||
if ($version)
|
||||
{
|
||||
$serverUrl = "https://update.lers.ru/v/$version/files/Server.zip"
|
||||
$pollServiceUrl = "https://update.lers.ru/v/$version/files/PollService.zip"
|
||||
}
|
||||
else
|
||||
{
|
||||
$serverUrl = "https://update.lers.ru/download/files/Server.zip"
|
||||
$pollServiceUrl = "https://update.lers.ru/download/files/PollService.zip"
|
||||
}
|
||||
|
||||
$isServerInstalled = Test-Path -Path $serverExecutable
|
||||
$isPollServiceInstalled = Test-Path -Path $pollServiceExecutable
|
||||
|
||||
|
||||
## Останавливаем запущенные службы, если они есть
|
||||
|
||||
if ($isServerInstalled)
|
||||
{
|
||||
systemctl stop $serverServiceName
|
||||
}
|
||||
|
||||
if ($isPollServiceInstalled)
|
||||
{
|
||||
systemctl stop $pollserviceServiceName
|
||||
}
|
||||
|
||||
if ($update)
|
||||
{
|
||||
# В режиме обновления игнорируем ключи -server и -pollservice
|
||||
# Вместо этого по наличию файлов определяем установлены ли сервер и служба опроса
|
||||
|
||||
$server = $isServerInstalled
|
||||
$pollservice = $isPollServiceInstalled
|
||||
}
|
||||
elseif (-not $server -and -not $pollservice)
|
||||
{
|
||||
$server = $true
|
||||
$pollservice = $true
|
||||
}
|
||||
|
||||
# Устанавливаем рантайм aspnet
|
||||
|
||||
dnf install aspnetcore-runtime-$dotnetRuntimeVersion -y
|
||||
|
||||
# Устанавливаем зависимости блока отчётов
|
||||
|
||||
if ($server)
|
||||
{
|
||||
Write-Host "Устанавливаются зависимости модуля отчётов сервера ЛЭРС"
|
||||
dnf install libgdiplus -y
|
||||
}
|
||||
|
||||
# Создаём пользователя
|
||||
|
||||
getent passwd $lersUser
|
||||
|
||||
if($?)
|
||||
{
|
||||
Write-Host "Пользователь $lersUser уже существует."
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Создаётся пользователь $lersUser"
|
||||
useradd $lersUser
|
||||
}
|
||||
|
||||
|
||||
# Создаём папки для настроек и данных
|
||||
|
||||
if ($force -and -not $update)
|
||||
{
|
||||
Remove-Item -Path $configDir -Recurse -Force
|
||||
}
|
||||
|
||||
New-Item -ItemType Directory -Path $dataDir -Force
|
||||
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 ($pollservice)
|
||||
{
|
||||
wget $pollServiceUrl -O PollService.zip
|
||||
Expand-Archive -LiteralPath 'PollService.zip' -DestinationPath $lersDir -Force
|
||||
Remove-Item -Path 'PollService.zip' -Force
|
||||
}
|
||||
|
||||
# Настраиваем подключение службы опроса
|
||||
|
||||
if (-not $update)
|
||||
{
|
||||
if ($pollservice)
|
||||
{
|
||||
if ($server)
|
||||
{
|
||||
# Сервер установлен, обращаемся к адресу по умолчанию.
|
||||
$serverAddress = "http://localhost:10000";
|
||||
}
|
||||
else
|
||||
{
|
||||
# Сервер не установлен, запрашиваем.
|
||||
$serverAddress = Get-ServerAddress;
|
||||
}
|
||||
|
||||
$templateConfig = "$lersDir/PollService/Lers.PollService.ini.template"
|
||||
$config = "$lersDir/PollService/Lers.PollService.ini"
|
||||
|
||||
(Get-Content $templateConfig).Replace("`$SERVER_ADDRESS`$:`$SERVER_PORT`$", $serverAddress) | Set-Content $config -Force
|
||||
|
||||
Write-Host "Служба опроса настроена на подключение к серверу $serverAddress"
|
||||
}
|
||||
|
||||
if ($server)
|
||||
{
|
||||
# Запускаем конфигурацию сервера
|
||||
dotnet $lersDir/Server.Bootstrapper/Lers.Setup.Bootstrapper.Cli.dll
|
||||
}
|
||||
}
|
||||
|
||||
# Загружаем обновления для раздачи
|
||||
|
||||
if ($server)
|
||||
{
|
||||
dotnet $lersDir/Updater/Lers.UpdateService.dll update-dist
|
||||
dotnet $lersDir/Updater/Lers.UpdateService.dll update-plugins
|
||||
}
|
||||
|
||||
# Устанавливаем пользователю разрешения на папки с данными.
|
||||
|
||||
chown -R $lersUser $dataDir
|
||||
chown -R $lersUser $configDir
|
||||
|
||||
|
||||
if ($update)
|
||||
{
|
||||
# Обновляем существующую БД
|
||||
dotnet $serverExecutable cli db-update
|
||||
}
|
||||
else
|
||||
{
|
||||
# Создаём службы systemd
|
||||
|
||||
if ($server)
|
||||
{
|
||||
$serverSystemd | Set-Content /etc/systemd/system/$serverServiceName -Force
|
||||
}
|
||||
|
||||
if ($pollservice)
|
||||
{
|
||||
$pollserviceSystemd | Set-Content /etc/systemd/system/$pollserviceServiceName -Force
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user