Premiere commit - Omika

This commit is contained in:
2026-10-23 18:46:50 +02:00
commit 8ea76c1b24
2155 changed files with 984301 additions and 0 deletions
+136
View File
@@ -0,0 +1,136 @@
# ============================================================
# Omika - Test de disponibilite d'un port TCP loopback
# ============================================================
# Repond a UNE question : « puis-je utiliser ce port, oui ou non ? »
#
# A executer SUR LE SERVEUR (SRV-OMIKA), en PowerShell ADMINISTRATEUR :
# sans elevation, la verification des plages reservees par Windows
# (Hyper-V / WSL / Docker) ne peut pas etre faite et le resultat est INCOMPLET.
#
# Ce script NE MODIFIE RIEN : il lit, puis reserve brievement le port sur
# 127.0.0.1 pour le relacher aussitot.
#
# Quatre causes de refus sont detectees :
# 1. un processus ecoute deja sur ce port ;
# 2. le port est dans une plage RESERVEE par Windows ;
# 3. le port est dans la plage EPHEMERE (une connexion sortante peut le prendre) ;
# 4. la reservation reelle sur 127.0.0.1 echoue.
#
# Le port n'est PAS choisi ici : il se decide contre le plan de ports Apache
# (voir docs\DEPLOIEMENT_API_LANGUES.md §6bis).
#
# EXEMPLES :
# .\Test-PortDisponible.ps1 -Port 5099
# .\Test-PortDisponible.ps1 -Port 5099 -EssayerSuivants 5
#
# Codes de sortie : 0 = un port disponible trouve, 1 = aucun.
# ============================================================
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[ValidateRange(1, 65535)]
[int]$Port,
# Nombre de ports consecutifs a tester en plus (ballotage).
[ValidateRange(0, 50)]
[int]$EssayerSuivants = 0
)
$ErrorActionPreference = 'Stop'
# La logique de test vit dans le module commun : une seule implementation,
# partagee avec Install-OmikaLanguesApi.ps1 (-Port).
$moduleCommun = Join-Path $PSScriptRoot 'Omika.Deploy.Common.psm1'
if (-not (Test-Path -LiteralPath $moduleCommun)) {
Write-Host "ERREUR : module introuvable : $moduleCommun" -ForegroundColor Red
Write-Host "Copiez Omika.Deploy.Common.psm1 dans le meme dossier que ce script." -ForegroundColor Red
exit 1
}
Import-Module $moduleCommun -Force
function Test-EstAdministrateur {
try {
$identite = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal($identite)
return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
catch {
return $false
}
}
# --- En-tete -----------------------------------------------------------------
Write-Host ''
Write-Host '=== Test de disponibilite d''un port TCP ===' -ForegroundColor Cyan
Write-Host "Machine : $env:COMPUTERNAME"
Write-Host "Utilisateur : $env:USERNAME"
$estAdmin = Test-EstAdministrateur
if ($estAdmin) {
Write-Host 'Mode : ADMINISTRATEUR (test complet)' -ForegroundColor Green
}
else {
Write-Host 'Mode : NON administrateur' -ForegroundColor Yellow
Write-Host ' -> les plages reservees par Windows ne sont PAS verifiables.' -ForegroundColor Yellow
Write-Host ' -> relancez ce script en tant qu''administrateur.' -ForegroundColor Yellow
}
Write-Host ("Plage ephemere Windows : a partir de {0}" -f (Get-OmikaDebutPlageEphemere))
if ($estAdmin) {
$plages = @(Get-OmikaPlagesReservees)
Write-Host ("Plages reservees : {0} plage(s)" -f $plages.Count)
foreach ($plage in $plages) {
Write-Host (" {0} - {1}" -f $plage.Debut, $plage.Fin)
}
}
else {
Write-Host 'Plages reservees : NON VERIFIE (droits insuffisants)'
}
# --- Tests -------------------------------------------------------------------
Write-Host ''
$resultats = @()
for ($i = 0; $i -le $EssayerSuivants; $i++) {
$resultats += Test-OmikaPortLibre -Port ($Port + $i) -VerifierPlagesReservees:$estAdmin
}
foreach ($resultat in $resultats) {
if ($resultat.Libre) {
Write-Host (" {0} DISPONIBLE" -f $resultat.Port) -ForegroundColor Green
}
else {
Write-Host (" {0} INDISPONIBLE -> {1}" -f $resultat.Port, $resultat.Raisons) -ForegroundColor Red
}
}
$premier = $resultats | Where-Object { $_.Libre } | Select-Object -First 1
# --- Verdict -----------------------------------------------------------------
Write-Host ''
if ($premier) {
Write-Host ("RESULTAT : le port {0} est DISPONIBLE sur ce serveur." -f $premier.Port) -ForegroundColor Green
Write-Host ''
Write-Host 'A poser ensuite en variable MACHINE (variables du service) :' -ForegroundColor Cyan
Write-Host ''
Write-Host (" [Environment]::SetEnvironmentVariable('ASPNETCORE_URLS', 'http://127.0.0.1:{0}', 'Machine')" -f $premier.Port)
Write-Host ''
Write-Host 'Puis, dans le vhost Apache, faire pointer le ProxyPass vers CE MEME port.'
Write-Host 'Un ecart entre les deux envoie les requetes vers un autre service, en silence.'
Write-Host ''
}
else {
Write-Host 'RESULTAT : aucun port disponible dans la plage testee.' -ForegroundColor Red
Write-Host 'Relancez avec davantage de candidats, par exemple :' -ForegroundColor Yellow
Write-Host (" .\Test-PortDisponible.ps1 -Port {0} -EssayerSuivants 10" -f ($Port + $EssayerSuivants + 1))
Write-Host ''
}
if (-not $estAdmin) {
Write-Host 'RAPPEL : sans droits administrateur, ce resultat est INCOMPLET.' -ForegroundColor Yellow
Write-Host 'Un port peut etre dans une plage reservee et echouer au demarrage de Kestrel.' -ForegroundColor Yellow
Write-Host ''
}
if ($premier) { exit 0 } else { exit 1 }