Depuis la version 2024.3.2.0, une version bêta de Devolutions Server est disponible pour Linux avec Microsoft Kestrel en tant que serveur Web intégré et Microsoft PowerShell 7 pour l'installation en ligne de commande. Ce sujet montre comment installer manuellement Devolutions Server pour Linux à l'aide de invites Bash et scripts PowerShell, ainsi que comment y accéder et le supprimer.
Alternativement, Devolutions Server peut être installé automatiquement à l'aide des scripts trouvés sur le dépôt ScriptLibrary de Devolutions sur GitHub.
Configurer les prérequis
-
Si Microsoft SQL Server n'est pas déjà installé, exécuter l'invite Bash suivante avec la variable
MSSQL_SA_PASSWORD
changée pour un mot de passe fort :source /etc/os-release curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor --batch --yes -o /usr/share/keyrings/microsoft-prod.gpg curl -fsSL https://packages.microsoft.com/config/ubuntu/$VERSION_ID/mssql-server-2022.list | sudo tee /etc/apt/sources.list.d/mssql-server-2022.list sudo apt-get update sudo apt-get install -y mssql-server sudo MSSQL_SA_PASSWORD="mystrongpassword" MSSQL_PID="evaluation" /opt/mssql/bin/mssql-conf -n setup accept-eula sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true sudo systemctl restart mssql-server
MSSQL_PID
est défini sur evaluation dans cet exemple, mais une clé de produit peut être entrée ici à la place.
Microsoft supporte actuellement uniquement jusqu'à Ubuntu 22.04 pour Microsoft SQL Server 2022.
-
Exécuter cette invite Bash pour installer PowerShell 7 :
sudo apt-get update sudo apt-get install -y wget apt-transport-https software-properties-common source /etc/os-release wget -q https://packages.microsoft.com/config/ubuntu/$VERSION_ID/packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb sudo apt-get update sudo apt-get install -y powershell
S'assurer que l'installation se déroule dans un répertoire accessible pour l'utilisateur actuel car la ligne de commande wget
télécharge un paquet .deb dans ledit répertoire.
-
Choisir d'installer ou non le module Devolutions.PowerShell pour l'utilisateur actuel ou pour tous les utilisateurs.
-
Pour l'utilisateur actuel (emplacement : ~/.local/share/powershell/Modules), exécuter :
Install-Module -Name 'Devolutions.PowerShell' -Confirm:$False
-
Pour tous les utilisateurs (emplacement : /opt/microsoft/powershell/7/Modules), exécuter :
& sudo pwsh -Command { Install-Module -Name 'Devolutions.PowerShell' -Confirm:$False -Scope 'AllUsers' -Force }
Un avertissement est susceptible d'apparaître indiquant que l'installation provient d'un dépôt non sécurisé. Le module est hébergé sur PowerShell Gallery, l'emplacement officiel pour héberger des modules PowerShell gérés par Microsoft. Pour éviter de voir cet avertissement à l'avenir, exécuter :
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
Bien que non requis, provisionner des utilisateurs et groupes séparés pour Devolutions Server est fortement recommandé. Voici une invite Bash pour créer un utilisateur et un groupe tous deux nommés dvls avec le répertoire d'installation défini sur /opt/devolutions/dvls :
sudo useradd -N dvls sudo groupadd dvls sudo usermod -a -G dvls dvls # optional, add current user to dvls group sudo usermod -a -G dvls $(id -un) sudo mkdir -p /opt/devolutions/dvls sudo chown -R dvls:dvls /opt/devolutions/dvls sudo chmod 550 /opt/devolutions/dvls
-
Télécharger et installer Devolutions Server pour Linux
-
Exécuter le script PowerShell ci-dessous pour télécharger la dernière version de Devolutions Server pour Linux et extraire le fichier .tar.gz à l'emplacement /opt/devolutions/dvls :
$DVLSPath = "/opt/devolutions/dvls" $DVLSProductURL = "https://devolutions.net/productinfo.htm" $Result = (Invoke-RestMethod -Method 'GET' -Uri $DVLSProductURL) -Split "`r" $DVLSLinux = [PSCustomObject]@{ "Version" = (($Result | Select-String DPSLinuxX64bin.Version) -Split "=")[-1].Trim() "URL" = (($Result | Select-String DPSLinuxX64bin.Url) -Split "=")[-1].Trim() "Hash" = (($Result | Select-String DPSLinuxX64bin.hash) -Split "=")[-1].Trim() } $DVLSDownloadPath = Join-Path -Path "/tmp" -ChildPath (([URI]$DVLSLinux.URL).Segments)[-1] Invoke-RestMethod -Method 'GET' -Uri $DVLSLinux.URL -OutFile $DVLSDownloadPath & tar -xzf $DVLSDownloadPath -C $DVLSPath --strip-components=1 Remove-Item -Path $DVLSDownloadPath & sudo pwsh -Command { Param( $DVLSPath ) chown -R dvls:dvls $DVLSPath chmod -R o-rwx $DVLSPath chmod 660 (Join-Path -Path $DVLSPath -ChildPath 'appsettings.json') chmod 770 (Join-Path -Path $DVLSPath -ChildPath 'App_Data') chown -R dvls:dvls $DVLSPath } -Args $DVLSPath Set-Location -Path $DVLSPath
Il est préférable que Devolutions Server puisse répondre via TLS. Si un certificat n'existe pas déjà, il peut être rapidement généré en utilisant cette invite Bash :
cd /opt/devolutions/dvls openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout cert.key -out cert.crt -subj "/CN=MYHOST" -addext "subjectAltName=DNS:MYHOST" openssl pkcs12 -export -out cert.pfx -inkey cert.key -in cert.crt -passout pass:
Dans l'exemple ci-dessus, le
subjectAltName
utiliseDNS:.
Pour répondre uniquement sur une IP, utiliserIP:
à la place.
Notez que le certificat .pfx généré n'a pas de mot de passe.
-
À l'aide du module Devolutions.PowerShell, exécuter l'installation de Devolutions Server via PowerShell. Assurez-vous de personnaliser les valeurs listées ici :
MYHOST
MSSQLHOST
DBUSERNAME
YOURSTRONGPASSWORD
MYEMAIL
Import-Module -Name 'Devolutions.PowerShell' $DVLSPath = "/opt/devolutions/dvls" # Modify the $DVLSURI to use 'https' if using SSL $DVLSURI = "http://MYHOST:5000/" $DVLSAdminUsername = 'dvls-admin' $DVLSAdminPassword = 'dvls-admin' $DVLSAdminEmail = 'MYEMAIL' $Params = @{ "DatabaseHost" = "MSSQLHOST" "DatabaseName" = "dvls" "DatabaseUserName" = "DBUSERNAME" "DatabasePassword" = "YOURSTRONGPASSWORD" "ServerName" = "dvls" "AccessUri" = $DVLSURI "HttpListenerUri" = $DVLSURI "DPSPath" = $DVLSPath "UseEncryptedconnection" = $False # Modify as needed "TrustServerCertificate" = $False # Modify as needed "EnableTelemetry" = $True # Modify as needed "DisableEncryptConfig" = $True } $Configuration = New-DPSInstallConfiguration @Params New-DPSAppsettings -Configuration $Configuration $Settings = Get-DPSAppSettings -ApplicationPath $DVLSPath New-DPSDatabase -ConnectionString $Settings.ConnectionStrings.LocalSqlServer Update-DPSDatabase -ConnectionString $Settings.ConnectionStrings.LocalSqlServer -InstallationPath $DVLSPath New-DPSDataSourceSettings -ConnectionString $Settings.ConnectionStrings.LocalSqlServer New-DPSEncryptConfiguration -ApplicationPath $DVLSPath New-DPSDatabaseAppSettings -Configuration $Configuration New-DPSAdministrator -ConnectionString $Settings.ConnectionStrings.LocalSqlServer -Name $DVLSAdminUsername -Password $DVLSAdminPassword -Email $DVLSAdminEmail
Si un certificat a déjà été généré, procéder à la modification du fichier appsettings.json pour permettre à Kestrel de répondre via TLS en utilisant ce script PowerShell :
Import-Module -Name 'Devolutions.PowerShell' $DVLSPath = '/opt/devolutions/dvls' $JSON = Get-Content -Path (Join-Path -Path $DVLSPath -ChildPath 'appsettings.json') | ConvertFrom-JSON -Depth 100 $JSON.Kestrel.Endpoints.Http | Add-Member -MemberType NoteProperty -Name 'Certificate' -Value @{ 'Path' = (Join-Path -Path $DVLSPath -ChildPath 'cert.pfx') 'Password' = '' } $JSON | ConvertTo-JSON -Depth 100 | Set-Content -Path (Join-Path -Path $DVLSPath -ChildPath 'appsettings.json') $Settings = Get-DPSAppSettings -ApplicationPath $DVLSPath $AccessUri = (Get-DPSAccessUri -ConnectionString $Settings.ConnectionStrings.LocalSqlServer).AccessUri Set-DPSAccessUri -ApplicationPath $DVLSPath -ConnectionString $Settings.ConnectionStrings.LocalSqlServer -AccessURI ($AccessUri -Replace "http","https") & sudo pwsh -Command { Param( $DVLSPath ) & chown dvls:dvls (Join-Path -Path $DVLSPath -ChildPath 'cert.pfx') } -Args $DVLSPath
Pour offrir un fonctionnement en arrière-plan de Devolutions Server pour Linux, il est recommandé de créer un fichier d'unité pour systemd via cette invite Bash :
sudo tee /etc/systemd/system/dvls.service > /dev/null <<EOT [Unit] Description=DVLS [Service] Type=simple Restart=always RestartSec=10 User=dvls ExecStart=/opt/devolutions/dvls/Devolutions.Server WorkingDirectory=/opt/devolutions/dvls KillSignal=SIGINT SyslogIdentifier=dvls Environment="SCHEDULER_EMBEDDED=true" [Install] WantedBy=multi-user.target Alias=dvls.service EOT sudo systemctl daemon-reload
-
Pour démarrer Devolutions Server, exécuter :
sudo systemctl start dvls # View status sudo systemctl status dvls
Accéder à Devolutions Server pour Linux
Par défaut, Devolutions Server pour Linux écoute sur le port 5000 sur l'adresse IP ou le nom d'hôte du système d'installation, qui ressemble le plus souvent à : http://MYHOST:5000. Soyez conscient que des erreurs OAuth peuvent se produire lors du premier lancement en essayant d'accéder à Devolutions Server depuis une URL non configurée. Si c'est le cas, ajouter des URI supplémentaires pour écouter dessus, ou modifier l'URI principal en exécutant le script suivant dans PowerShell:
Import-Module -Name 'Devolutions.PowerShell'
$DVLSPath = "/opt/devolutions/dvls"
$Settings = Get-DPSAppSettings -ApplicationPath $DVLSPath
$ConnectionString = $Settings.ConnectionStrings.LocalSqlServer
Get-DPSAccessUri -ConnectionString $ConnectionString
Set-DPSAccessUri -ConnectionString $ConnectionString -ApplicationPath $DVLSPath -AccessURI 'http://10.10.0.20:5000/' -AdditionalAccessURIs @('http://ubuntu-2204:5000/')
Si Devolutions Server reste inaccessible en dehors du système installé, vérifier si les ports requis du pare-feu sont ouverts, en ajoutant Uncomplicated Firewall à l'invite, par exemple : sudo ufw allow 5000
.
Supprimer Devolutions Server
Pour supprimer Devolutions Server, exécuter l'invite Bash ci-dessous et la personnaliser pour le système. Ce script repose sur le module DbaTools PowerShell pour faciliter la suppression de la base de données MSSQL. Il suppose que localhost
est l'installation de MSSQL et dvls
le nom de la base de données.
# Remove DVLS on Linux, adjust as necessary
& sudo systemctl stop dvls.service
& sudo rm /etc/systemd/system/dvls.service
& sudo rm -rf /opt/devolutions/dvls
& sudo userdel -r dvls
& sudo groupdel dvls
Import-Module dbatools
$Credential = Get-Credential
Set-DbaToolsInsecureConnection
Remove-DbaDatabase -SqlInstance localhost -SqlCredential $Credential -Database 'dvls' -Confirm:$False