Devolutions Server est disponible pour Linux avec Microsoft Kestrel comme serveur Web intégré et Microsoft PowerShell 7 pour l'installation en ligne de commande. La rubrique présente montre comment installer manuellement Devolutions Server pour Linux à l'aide d'invites Bash et de scripts PowerShell, ainsi que comment y accéder et le supprimer.
Alternativement, Devolutions Server peut être installé automatiquement en utilisant les scripts trouvés sur le référentiel ScriptLibrary de Devolutions sur GitHub.
-
Si Microsoft SQL Server n'est pas déjà installé, exécuter l'invite Bash suivante avec la variable
MSSQL_SA_PASSWORDchangé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-serverMSSQL_PIDest défini sur evaluation dans cet exemple, mais une clé de produit peut être entrée ici à la place.
Microsoft ne prend en charge que certaines versions SQL. Consulter la documentation de Microsoft pour s'assurer que la version SQL soit officiellement prise en charge pour votre distribution.
-
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 ait lieu dans un répertoire accessible pour l'utilisateur actuel car la ligne de commande wget télécharge un paquet .deb dans ce répertoire.
-
Choisir d’installer le module Devolutions.PowerShell pour l’utilisateur courant 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 TrustedBien que non requis, il est fortement recommandé de provisionner des utilisateurs et groupes distincts pour Devolutions Server. 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 -
-
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.gzdans 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 $DVLSPathIl 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
subjectAltNameutiliseDNS:.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 :
MYHOSTMSSQLHOSTDBUSERNAMEYOURSTRONGPASSWORDMYEMAIL
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" = "DSERVER" "DatabaseUserName" = "DBUSERNAME" "DatabasePassword" = "YOURSTRONGPASSWORD" "ServerName" = "DSERVER" "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 $DVLSAdminEmailSi un certificat a déjà été généré, procéder à la modification du fichier
appsettings.jsonpour 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 $DVLSPathPour 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
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 survenir au premier lancement lors de la tentative d'accès à Devolutions Server depuis une URL non configurée. Si tel est le cas, ajouter des URI supplémentaires pour écouter, 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.
Exporter depuis une installation Windows existante
Import-Module -Name 'Devolutions.PowerShell
$existingDVLSInstance = 'C:\my\path\dvlsInstance\'
$destination = 'C:\other\path\encryption.config'
Export-DPSEncryptionKeys -ApplicationPath $existingDVLSInstance -Destination $destination
Importer dans une nouvelle installation Linux
Import-Module -Name 'Devolutions.PowerShell
$newDvlsInstance = '/home/user/linuxDlvsInstance'
$keysToImport = '/path/to/encryption.config'
Import-DPSEncryptionKeys -ApplicationPath $newDvlsInstance -Filename $keysToImport
Ne pas extraire la nouvelle archive .tar.gz directement sur /opt/devolutions/dvls. Procéder ainsi écrase appsettings.json et encryption.config, ce qui empêche le service de démarrer et peut rendre les données existantes indéchiffrables. Toujours suivre la méthode de mise à jour détaillée sur cette page.
-
Sauvegarder la base de données. Voici comment procéder pour Microsoft SQL Server (Linux ou distant) :
/opt/mssql-tools18/bin/sqlcmd -S <MSSQLHOST> -U <DBUSERNAME> -P '<PASSWORD>' -C \ -Q "BACKUP DATABASE [DSERVER] TO DISK = N'/var/opt/mssql/data/DSERVER-$(date +%F-%H%M).bak' WITH INIT, COMPRESSION;"Le chemin complet vers
sqlcmdévite l'erreur "commande introuvable" dans les shells sans connexion où/etc/profile.d/mssql-tools.shn'a pas été sourcé.-Cfait confiance au certificat du serveur (requis pour les installations SQL Server locales utilisant un certificat auto-signé).Sauvegarder dans un répertoire accessible en écriture par l'utilisateur MSSQL.
/var/opt/mssql/data/fonctionne nativement. -
S'assurer que le fichier
.bakexiste et n'est pas vide avant de passer à l'étape suivante. -
Arrêter le service Devolutions Server à l'aide du script suivant :
sudo systemctl stop dvls.service sudo systemctl status dvls.service # confirm inactive (dead) -
Sauvegarder les fichiers d'installation et de configuration. Garder à l'esprit que
/opt/devolutions/dvlsest en mode 550 et appartient àdvls:dvls, donc les applets de commande de sauvegarde doivent être exécutées en tant que root. Démarrer PowerShell avecsudo pwsh, puis coller ce script :Import-Module Devolutions.PowerShell $DVLSPath = '/opt/devolutions/dvls' $BackupBase = "/var/backups/dvls/$(Get-Date -Format 'yyyy-MM-dd-HHmm')" $BackupConfig = Join-Path $BackupBase 'config' $BackupInstall = Join-Path $BackupBase 'installation' mkdir -p $BackupConfig $BackupInstall Backup-DPSConfigurationFiles -ApplicationPath $DVLSPath -BackupConfigurationPath $BackupConfig Backup-DPSInstallationFiles -ApplicationPath $DVLSPath -BackupPath $BackupInstallBackup-DPSConfigurationFilespréserve :appsettings.json,web.config, etencryption.config.Backup-DPSInstallationFilespréserve les dossiers personnalisés, le dossier de détection d'anomalies et tout actif ajouté par l'utilisateur.
-
Vider le répertoire d'installation sauf
App_data, car il contient l'état d'exécution qui reste après les mises à jour. Utiliser ce script pour ce faire :sudo find /opt/devolutions/dvls -mindepth 1 -maxdepth 1 ! -name 'App_Data' -exec rm -rf {} + sudo tar -xzf /tmp/DVLS.<version>.linux-x64.tar.gz -C /opt/devolutions/dvls --strip-components=1Utiliser
--strip-componentsuniquement si l'archive possède un dossier de niveau supérieur. -
Restaurer la configuration et les données personnalisées. À cette étape,
appsettings.json(chaîne de connexion BD) etweb.configsont replacés dans la nouvelle installation. Puisqueencryption.configa déjà été préservé dansApp_Data/à l'étape #5,Restore-DPSConfigurationFilesne le dépose pas à la racine de l'installation car ce n'est pas sa place sur Linux. Voici le script de restauration :Restore-DPSCustomFolders -BackupPath $BackupInstall -ApplicationPath $DVLSPath Restore-DPSAnomalyDetectionFolder -BackupPath $BackupInstall -ApplicationPath $DVLSPath Restore-DPSConfigurationFiles -BackupConfigurationPath $BackupConfig -ApplicationPath $DVLSPath -
Récupérer les chaînes de connexion à partir du
appsettings.jsonrestauré :$ConnectionString = (Get-DPSAppSettings -ApplicationPath $DVLSPath).ConnectionStrings.LocalSqlServer Update-DPSDatabase -ConnectionString $ConnectionString -InstallationPath $DVLSPathUpdate-DPSDatabasen'affiche aucune sortie en cas de succès. Vérifier que cela a fonctionné en vérifiant que la commande a renvoyé le code de sortie 0 et qu'après avoir démarré le service à l'étape #9, le journal contient des entrées Migration done with status Done sans aucune ligne[ERR]. -
Réappliquer la propriété et les permissions :
sudo chown -R dvls:dvls /opt/devolutions/dvls sudo chmod 550 /opt/devolutions/dvls sudo chmod 660 /opt/devolutions/dvls/appsettings.json sudo chmod 770 /opt/devolutions/dvls/App_Data # If a certs/ directory is in use: [ -d /opt/devolutions/dvls/certs ] && sudo chmod 750 /opt/devolutions/dvls/certs -
Démarrer le service et vérifier s'il fonctionne correctement :
sudo systemctl start dvls.service sudo systemctl status dvls.service sudo journalctl -u dvls.service -n 100 --no-pager
Le service ne démarre pas,
appsettings.jsonmanquant ou vide : restaurer depuis$BackupConfig/appsettings.json, répéter les étapes #8 et 9.La connexion fonctionne mais les entrées échouent à se déchiffrer :
encryption.confign'a pas été restauré. Copier$BackupConfig/encryption.configdans$DVLSPath/App_Data/, corriger les permissions (chown dvls:dvlsetchmod 660), puis redémarrer.Erreurs de schéma BD à l'exécution :
Update-DPSDatabasea été omis ou a échoué. Répéter l'étape #7.Rétablissement complet : arrêter le service (voir étape #3), vider
/opt/devolutions/dvlssaufApp_Data/(étape #5), copier le contenu de$BackupInstallde retour dans/opt/devolutions/dvls, restaurerappsettings.jsondepuis$BackupConfig, réappliquer les permissions et la propriété de l'étape #8, restaurer la base de données à partir du.bakproduit à l'étape #1, puis redémarrer.
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 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