|
| 1 | +$ProgressPreference = 'SilentlyContinue' |
| 2 | +$ErrorActionPreference = 'Stop' |
| 3 | +Set-StrictMode -Version 2.0 |
| 4 | + |
| 5 | +[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor 'Tls12' |
| 6 | + |
| 7 | +$rabbitmq_installer_download_url = 'https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.4/rabbitmq-server-3.7.4.exe' |
| 8 | +$rabbitmq_installer_path = Join-Path -Path $HOME -ChildPath 'rabbitmq-server-3.7.4.exe' |
| 9 | + |
| 10 | +$erlang_reg_path = 'HKLM:\SOFTWARE\Ericsson\Erlang' |
| 11 | +if (Test-Path 'HKLM:\SOFTWARE\WOW6432Node\') |
| 12 | +{ |
| 13 | + $erlang_reg_path = 'HKLM:\SOFTWARE\WOW6432Node\Ericsson\Erlang' |
| 14 | +} |
| 15 | +$erlang_erts_version = Get-ChildItem -Path $erlang_reg_path -Name |
| 16 | +$erlang_home = (Get-ItemProperty -LiteralPath $erlang_reg_path\$erlang_erts_version).'(default)' |
| 17 | + |
| 18 | +$env:ERLANG_HOME = $erlang_home |
| 19 | +[Environment]::SetEnvironmentVariable('ERLANG_HOME', $erlang_home, 'Machine') |
| 20 | + |
| 21 | +Write-Host '[INFO] Downloading RabbitMQ' |
| 22 | + |
| 23 | +if (-Not (Test-Path $rabbitmq_installer_path)) |
| 24 | +{ |
| 25 | + Invoke-WebRequest -UseBasicParsing -Uri $rabbitmq_installer_download_url -OutFile $rabbitmq_installer_path |
| 26 | +} |
| 27 | +else |
| 28 | +{ |
| 29 | + Write-Host "[INFO] Found $rabbitmq_installer_path in cache." |
| 30 | +} |
| 31 | + |
| 32 | +Write-Host '[INFO] Creating Erlang cookie files' |
| 33 | + |
| 34 | +function Set-ErlangCookie { |
| 35 | + Param($Path, $Value = 'RABBITMQ-COOKIE') |
| 36 | + Remove-Item -Force $Path -ErrorAction SilentlyContinue |
| 37 | + [System.IO.File]::WriteAllText($Path, $Value, [System.Text.Encoding]::ASCII) |
| 38 | +} |
| 39 | + |
| 40 | +$erlang_cookie_user = Join-Path -Path $HOME -ChildPath '.erlang.cookie' |
| 41 | +$erlang_cookie_system = Join-Path -Path $env:SystemRoot -ChildPath 'System32\config\systemprofile\.erlang.cookie' |
| 42 | + |
| 43 | +Set-ErlangCookie -Path $erlang_cookie_user |
| 44 | +Set-ErlangCookie -Path $erlang_cookie_system |
| 45 | + |
| 46 | +Write-Host '[INFO] Installing and starting RabbitMQ with default config' |
| 47 | + |
| 48 | +& $rabbitmq_installer_path '/S' | Out-Null |
| 49 | +(Get-Service -Name RabbitMQ).Status |
| 50 | + |
| 51 | +Write-Host '[INFO] Setting RABBITMQ_RABBITMQCTL_PATH' |
| 52 | + |
| 53 | +$regPath = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\RabbitMQ' |
| 54 | +if (Test-Path 'HKLM:\SOFTWARE\WOW6432Node\') |
| 55 | +{ |
| 56 | + $regPath = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\RabbitMQ' |
| 57 | +} |
| 58 | +$path = Split-Path -Parent (Get-ItemProperty $regPath 'UninstallString').UninstallString |
| 59 | +$rabbitmq_version = (Get-ItemProperty $regPath "DisplayVersion").DisplayVersion |
| 60 | + |
| 61 | +$rabbitmq_home = "$path\rabbitmq_server-$rabbitmq_version" |
| 62 | +[Environment]::SetEnvironmentVariable('RABBITMQ_HOME', $rabbitmq_home, 'Machine') |
| 63 | +$env:RABBITMQ_HOME = $rabbitmq_home |
| 64 | + |
| 65 | +$rabbitmqctl_path = "$path\rabbitmq_server-$rabbitmq_version\sbin\rabbitmqctl.bat" |
| 66 | +[Environment]::SetEnvironmentVariable('RABBITMQ_RABBITMQCTL_PATH', $rabbitmqctl_path, 'Machine') |
| 67 | +$env:RABBITMQ_RABBITMQCTL_PATH = $rabbitmqctl_path |
| 68 | + |
| 69 | +Write-Host '[INFO] Waiting for epmd to report that RabbitMQ has started' |
| 70 | + |
| 71 | +$epmd_running = $false |
| 72 | +[int]$count = 1 |
| 73 | + |
| 74 | +$epmd = [System.IO.Path]::Combine($erlang_home, "erts-$erlang_erts_version", "bin", "epmd.exe") |
| 75 | + |
| 76 | +Do { |
| 77 | + $epmd_running = & $epmd -names | Select-String -CaseSensitive -SimpleMatch -Quiet -Pattern 'name rabbit at port 25672' |
| 78 | + if ($epmd_running -eq $true) { |
| 79 | + Write-Host '[INFO] epmd reports that RabbitMQ is at port 25672' |
| 80 | + break |
| 81 | + } |
| 82 | + |
| 83 | + if ($count -gt 60) { |
| 84 | + throw '[ERROR] too many tries waiting for epmd to report RabbitMQ on port 25672' |
| 85 | + } |
| 86 | + |
| 87 | + Write-Host "[INFO] epmd NOT reporting yet that RabbitMQ is at port 25672, count: $count" |
| 88 | + $count = $count + 1 |
| 89 | + Start-Sleep -Seconds 5 |
| 90 | + |
| 91 | +} While ($true) |
| 92 | + |
| 93 | +[int]$count = 1 |
| 94 | + |
| 95 | +Do { |
| 96 | + $proc_id = (Get-Process -Name erl).Id |
| 97 | + if (-Not ($proc_id -is [array])) { |
| 98 | + & $rabbitmqctl_path wait -t 300000 -P $proc_id |
| 99 | + if ($LASTEXITCODE -ne 0) { |
| 100 | + throw "[ERROR] rabbitmqctl wait returned error: $LASTEXITCODE" |
| 101 | + } |
| 102 | + break |
| 103 | + } |
| 104 | + |
| 105 | + if ($count -gt 120) { |
| 106 | + throw '[ERROR] too many tries waiting for just one erl process to be running' |
| 107 | + } |
| 108 | + |
| 109 | + Write-Host '[INFO] multiple erl instances running still' |
| 110 | + $count = $count + 1 |
| 111 | + Start-Sleep -Seconds 5 |
| 112 | + |
| 113 | +} While ($true) |
| 114 | + |
| 115 | +Write-Host '[INFO] Getting RabbitMQ status' |
| 116 | +& $rabbitmqctl_path status |
0 commit comments