kms-website: activate against vlmcs.viktorbarzin.me, drop ODT-install + deep-legacy GVLKs
The page advertised kms.viktorbarzin.me:1688 as the KMS host, but that name is the website (Traefik) — internally it resolves to 10.0.20.203 which has no :1688 listener, so LAN clients failed with "KMS server cannot be reached". Split the concern: siteHost (kms.viktorbarzin.me) serves the page + /scripts downloads; kmsHost is now the dedicated A-only vlmcs.viktorbarzin.me endpoint that resolves to the vlmcsd MetalLB IP (10.0.20.202) on the LAN (Technitium) and to the public IP over the internet (Cloudflare -> pfSense WAN NAT :1688). Moderate cleanup: - remove the Office-install-via-ODT path from kms-bootstrap.ps1 (activation only now; manual ODT install docs stay on the page) - collapse Windows 8.1/8/7/Vista + Server 2012/2008 GVLK tables into a legacy note (those keys still activate; just no longer tabled) - drop the unused kmsHostLan param Pairs with the infra /scripts Anubis carve-out that makes `iwr | iex` work. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
8bcb64bf99
commit
efa1353e6b
5 changed files with 30 additions and 202 deletions
|
|
@ -82,67 +82,6 @@ windows:
|
|||
edition: "Enterprise N LTSB 2015"
|
||||
gvlk: "2F77B-TNFGY-69QQF-B8YKP-D69TJ"
|
||||
|
||||
# Legacy desktop
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 8.1 Pro"
|
||||
gvlk: "GCRJD-8NW9H-F2CDX-CCM8D-9D6T9"
|
||||
notes: "Out of support since Jan 2023."
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 8.1 Pro N"
|
||||
gvlk: "HMCNV-VVBFX-7HMBH-CTY9B-B4FXY"
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 8.1 Enterprise"
|
||||
gvlk: "MHF9N-XY6XB-WVXMC-BTDCT-MKKG7"
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 8.1 Enterprise N"
|
||||
gvlk: "TT4HM-HN7YT-62K67-RGRQJ-JFFXW"
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 8 Pro"
|
||||
gvlk: "NG4HW-VH26C-733KW-K6F98-J8CK4"
|
||||
notes: "EOL Jan 2016."
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 8 Pro N"
|
||||
gvlk: "XCVCF-2NXM9-723PB-MHCB7-2RYQQ"
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 8 Enterprise"
|
||||
gvlk: "32JNW-9KQ84-P47T8-D8GGY-CWCK7"
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 8 Enterprise N"
|
||||
gvlk: "JMNMF-RHW7P-DMY6X-RF3DR-X2BQT"
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 7 Professional"
|
||||
gvlk: "FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4"
|
||||
notes: "EOL Jan 2020 (ESU through 2023)."
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 7 Professional N"
|
||||
gvlk: "MRPKT-YTG23-K7D7T-X2JMM-QY7MG"
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 7 Professional E"
|
||||
gvlk: "W82YF-2Q76Y-63HXB-FGJG9-GF7QX"
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 7 Enterprise"
|
||||
gvlk: "33PXH-7Y6KF-2VJC9-XBBR8-HVTHH"
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 7 Enterprise N"
|
||||
gvlk: "YDRBP-3D83W-TY26F-D46B2-XCKRJ"
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows 7 Enterprise E"
|
||||
gvlk: "C29WB-22CC8-VJ326-GHFJW-H9DH4"
|
||||
notes: "Win7 Ultimate is NOT KMS-activatable — not a Volume License SKU."
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows Vista Business"
|
||||
gvlk: "YFKBB-PQJJV-G996G-VWGXY-2V3X8"
|
||||
notes: "EOL Apr 2017."
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows Vista Business N"
|
||||
gvlk: "HMBQG-8H2RH-C77VX-27R82-VMQBT"
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows Vista Enterprise"
|
||||
gvlk: "VKK3X-68KWM-X2YGT-QR4M6-4BWMV"
|
||||
- family: "Legacy desktop"
|
||||
edition: "Windows Vista Enterprise N"
|
||||
gvlk: "VTC42-BM838-43QHV-84HX6-XJXKV"
|
||||
|
||||
windows_server:
|
||||
- family: "Windows Server 2025"
|
||||
edition: "Standard"
|
||||
|
|
@ -192,70 +131,6 @@ windows_server:
|
|||
- family: "Windows Server 2016"
|
||||
edition: "Essentials"
|
||||
gvlk: "JCKRF-N37P4-C2D82-9YXRT-4M63B"
|
||||
- family: "Windows Server 2012 R2"
|
||||
edition: "Standard"
|
||||
gvlk: "D2N9P-3P6X9-2R39C-7RTCD-MDVJX"
|
||||
notes: "EOL Oct 2023; ESU available."
|
||||
- family: "Windows Server 2012 R2"
|
||||
edition: "Datacenter"
|
||||
gvlk: "W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9"
|
||||
- family: "Windows Server 2012 R2"
|
||||
edition: "Essentials"
|
||||
gvlk: "KNC87-3J2TX-XB4WP-VCPJV-M4FWM"
|
||||
- family: "Windows Server 2012"
|
||||
edition: "Standard"
|
||||
gvlk: "XC9B7-NBPP2-83J2H-RHMBY-92BT4"
|
||||
- family: "Windows Server 2012"
|
||||
edition: "Datacenter"
|
||||
gvlk: "48HP8-DN98B-MYWDG-T2DCC-8W83P"
|
||||
- family: "Windows Server 2012"
|
||||
edition: "Essentials"
|
||||
gvlk: "HTDQM-NBMMG-KGYDT-2DTKT-J2MPV"
|
||||
- family: "Windows Server 2012"
|
||||
edition: "MultiPoint Standard"
|
||||
gvlk: "HM7DN-YVMH3-46JC3-XYTG7-CYQJJ"
|
||||
- family: "Windows Server 2012"
|
||||
edition: "MultiPoint Premium"
|
||||
gvlk: "XNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G"
|
||||
- family: "Windows Server 2008 R2"
|
||||
edition: "Standard"
|
||||
gvlk: "YC6KT-GKW9T-YTKYR-T4X34-R7VHC"
|
||||
notes: "EOL Jan 2020 (ESU 2023)."
|
||||
- family: "Windows Server 2008 R2"
|
||||
edition: "Enterprise"
|
||||
gvlk: "489J6-VHDMP-X63PK-3K798-CPX3Y"
|
||||
- family: "Windows Server 2008 R2"
|
||||
edition: "Datacenter"
|
||||
gvlk: "74YFP-3QFB3-KQT8W-PMXWJ-7M648"
|
||||
- family: "Windows Server 2008 R2"
|
||||
edition: "Web"
|
||||
gvlk: "6TPJF-RBVHG-WBW2R-86QPH-6RTM4"
|
||||
- family: "Windows Server 2008 R2"
|
||||
edition: "HPC"
|
||||
gvlk: "TT8MH-CG224-D3D7Q-498W2-9QCTX"
|
||||
- family: "Windows Server 2008 R2"
|
||||
edition: "Itanium"
|
||||
gvlk: "GT63C-RJFQ3-4GMB6-BRFB9-CB83V"
|
||||
- family: "Windows Server 2008"
|
||||
edition: "Standard"
|
||||
gvlk: "TM24T-X9RMF-VWXK6-X8JC9-BFGM2"
|
||||
notes: "EOL Jan 2020."
|
||||
- family: "Windows Server 2008"
|
||||
edition: "Enterprise"
|
||||
gvlk: "YQGMW-MPWTJ-34KDK-48M3W-X4Q6V"
|
||||
- family: "Windows Server 2008"
|
||||
edition: "Datacenter"
|
||||
gvlk: "7M67G-PC374-GR742-YH8V4-TCBY3"
|
||||
- family: "Windows Server 2008"
|
||||
edition: "Web"
|
||||
gvlk: "WYR28-R7TFJ-3X2YQ-YCY4H-M249D"
|
||||
- family: "Windows Server 2008"
|
||||
edition: "HPC"
|
||||
gvlk: "RCTX3-KWVHP-BR6TB-RB6DM-6X7HP"
|
||||
- family: "Windows Server 2008"
|
||||
edition: "Itanium"
|
||||
gvlk: "4DWFP-JF3DJ-B7DTH-78FJB-PDRHK"
|
||||
|
||||
office:
|
||||
# Office LTSC 2024 — current
|
||||
- family: "Office LTSC 2024"
|
||||
|
|
|
|||
|
|
@ -5,8 +5,12 @@ disableKinds = ["taxonomy", "term", "RSS", "sitemap", "404"]
|
|||
|
||||
[params]
|
||||
description = "Public KMS host for activating Microsoft Volume License Windows, Office, Project, and Visio. Free, no signup, no tracking."
|
||||
kmsHost = "kms.viktorbarzin.me"
|
||||
kmsHostLan = "kms.viktorbarzin.lan"
|
||||
# siteHost serves this website + the /scripts/*.ps1 downloads (Traefik).
|
||||
# kmsHost is the raw KMS endpoint on :1688 (vlmcsd) — a SEPARATE A-only host
|
||||
# so it resolves to the KMS server both on the LAN and over the internet.
|
||||
# They must stay distinct: kms.viktorbarzin.me:1688 hits Traefik (no KMS).
|
||||
siteHost = "kms.viktorbarzin.me"
|
||||
kmsHost = "vlmcs.viktorbarzin.me"
|
||||
kmsPort = 1688
|
||||
bootstrapURL = "/scripts/kms-bootstrap.ps1"
|
||||
setupURL = "/scripts/setup-kms.ps1"
|
||||
|
|
|
|||
|
|
@ -70,15 +70,15 @@
|
|||
<div class="quickstart-grid">
|
||||
<div class="card terminal">
|
||||
<div class="card-head"><span>Windows only</span><button class="btn-copy" data-copy-target="quickstart-win">Copy</button></div>
|
||||
<pre id="quickstart-win"><code>$env:KMS_AUTO='win'; iwr -UseBasicParsing https://{{ .Site.Params.kmsHost }}{{ .Site.Params.bootstrapURL }} | iex</code></pre>
|
||||
<pre id="quickstart-win"><code>$env:KMS_AUTO='win'; iwr -UseBasicParsing https://{{ .Site.Params.siteHost }}{{ .Site.Params.bootstrapURL }} | iex</code></pre>
|
||||
</div>
|
||||
<div class="card terminal">
|
||||
<div class="card-head"><span>Office / Project / Visio</span><button class="btn-copy" data-copy-target="quickstart-office">Copy</button></div>
|
||||
<pre id="quickstart-office"><code>$env:KMS_AUTO='office,project,visio'; iwr -UseBasicParsing https://{{ .Site.Params.kmsHost }}{{ .Site.Params.bootstrapURL }} | iex</code></pre>
|
||||
<pre id="quickstart-office"><code>$env:KMS_AUTO='office,project,visio'; iwr -UseBasicParsing https://{{ .Site.Params.siteHost }}{{ .Site.Params.bootstrapURL }} | iex</code></pre>
|
||||
</div>
|
||||
<div class="card terminal">
|
||||
<div class="card-head"><span>Windows + Office</span><button class="btn-copy" data-copy-target="quickstart-both">Copy</button></div>
|
||||
<pre id="quickstart-both"><code>$env:KMS_AUTO='win,office,project,visio'; iwr -UseBasicParsing https://{{ .Site.Params.kmsHost }}{{ .Site.Params.bootstrapURL }} | iex</code></pre>
|
||||
<pre id="quickstart-both"><code>$env:KMS_AUTO='win,office,project,visio'; iwr -UseBasicParsing https://{{ .Site.Params.siteHost }}{{ .Site.Params.bootstrapURL }} | iex</code></pre>
|
||||
</div>
|
||||
</div>
|
||||
<p class="hint">
|
||||
|
|
@ -111,7 +111,7 @@ cscript "C:\Program Files\Microsoft Office\Office16\ospp.vbs" /act</code></pre>
|
|||
Click any key to copy.
|
||||
</p>
|
||||
|
||||
{{ $order := slice "Windows 11 / 10" "Windows LTSC" "Legacy desktop" }}
|
||||
{{ $order := slice "Windows 11 / 10" "Windows LTSC" }}
|
||||
{{ range $family := $order }}
|
||||
{{ $items := where $windows "family" $family }}
|
||||
{{ if $items }}
|
||||
|
|
@ -131,6 +131,13 @@ cscript "C:\Program Files\Microsoft Office\Office16\ospp.vbs" /act</code></pre>
|
|||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
<p class="hint">
|
||||
<strong>Legacy desktop</strong> (Windows 8.1 / 8 / 7 / Vista) is out of support and omitted.
|
||||
Those GVLKs still work against this KMS — look them up in Microsoft's
|
||||
<a href="https://learn.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys" target="_blank" rel="noopener">KMS client key list</a>
|
||||
and activate with the same <code>slmgr</code> steps below.
|
||||
</p>
|
||||
|
||||
<details class="card">
|
||||
<summary>How to use a GVLK on Windows</summary>
|
||||
<pre><code>:: open cmd.exe as Administrator
|
||||
|
|
@ -146,7 +153,7 @@ slmgr /dlv :: verify (look for "LICEN
|
|||
<h2>Windows Server</h2>
|
||||
<p class="muted">Server SKUs need only 5 unique clients to satisfy the KMS activation count threshold (vs. 25 for desktop).</p>
|
||||
|
||||
{{ $serverOrder := slice "Windows Server 2025" "Windows Server 2022" "Windows Server 2019" "Windows Server 2016" "Windows Server 2012 R2" "Windows Server 2012" "Windows Server 2008 R2" "Windows Server 2008" }}
|
||||
{{ $serverOrder := slice "Windows Server 2025" "Windows Server 2022" "Windows Server 2019" "Windows Server 2016" }}
|
||||
{{ range $family := $serverOrder }}
|
||||
{{ $items := where $servers "family" $family }}
|
||||
{{ if $items }}
|
||||
|
|
@ -165,6 +172,11 @@ slmgr /dlv :: verify (look for "LICEN
|
|||
</table>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<p class="hint">
|
||||
<strong>Server 2012 R2 / 2012 / 2008 R2 / 2008</strong> are end-of-life and omitted.
|
||||
Their GVLKs still activate here — see Microsoft's
|
||||
<a href="https://learn.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys" target="_blank" rel="noopener">KMS client key list</a>.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="office">
|
||||
|
|
|
|||
|
|
@ -1,18 +1,15 @@
|
|||
# kms-bootstrap.ps1
|
||||
#
|
||||
# Interactive activator for a public KMS host (default: kms.viktorbarzin.me:1688).
|
||||
# Asks what you want to activate (Windows / already-installed Office / Project /
|
||||
# Visio), and optionally what you want to *install* (Office LTSC 2024 ProPlus,
|
||||
# Project Pro 2024, Visio Pro 2024 — all VL editions installed via the official
|
||||
# Microsoft Office Deployment Tool). Runs only what you confirm.
|
||||
# Interactive KMS activator. Asks what you want to activate (Windows /
|
||||
# already-installed Office / Project / Visio) and runs only what you confirm.
|
||||
# Points each product at the public KMS host (default: vlmcs.viktorbarzin.me:1688).
|
||||
#
|
||||
# Usage:
|
||||
# iwr -UseBasicParsing https://kms.viktorbarzin.me/scripts/kms-bootstrap.ps1 | iex
|
||||
#
|
||||
# Non-interactive (CI / automation):
|
||||
# $env:KMS_AUTO = 'win,office'; iwr ... | iex
|
||||
# (comma list of: win, office, project, visio, install-office,
|
||||
# install-project, install-visio)
|
||||
# (comma list of: win, office, project, visio)
|
||||
#
|
||||
# Custom KMS host:
|
||||
# $env:KMS_HOST = 'kms.example.com'; iwr ... | iex
|
||||
|
|
@ -22,7 +19,7 @@
|
|||
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[string]$KmsHost = $(if ($env:KMS_HOST) { $env:KMS_HOST } else { 'kms.viktorbarzin.me' }),
|
||||
[string]$KmsHost = $(if ($env:KMS_HOST) { $env:KMS_HOST } else { 'vlmcs.viktorbarzin.me' }),
|
||||
[int] $KmsPort = $(if ($env:KMS_PORT) { [int]$env:KMS_PORT } else { 1688 })
|
||||
)
|
||||
|
||||
|
|
@ -69,11 +66,7 @@ $doOfficeAct = Choice 'office' "Activate an already-installed Office (P
|
|||
$doProjAct = Choice 'project' "Activate an already-installed Project (Pro 2024 / 2021 / 2019 / 2016)?" $false
|
||||
$doVisioAct = Choice 'visio' "Activate an already-installed Visio (Pro 2024 / 2021 / 2019 / 2016)?" $false
|
||||
|
||||
$doInstOff = Choice 'install-office' "Install Office LTSC 2024 ProPlus (VL, ~3 GB) and activate?" $false
|
||||
$doInstProj = Choice 'install-project' "Install Project Pro 2024 (VL) and activate?" $false
|
||||
$doInstVis = Choice 'install-visio' "Install Visio Pro 2024 (VL) and activate?" $false
|
||||
|
||||
if (-not ($doWin -or $doOfficeAct -or $doProjAct -or $doVisioAct -or $doInstOff -or $doInstProj -or $doInstVis)) {
|
||||
if (-not ($doWin -or $doOfficeAct -or $doProjAct -or $doVisioAct)) {
|
||||
Warn "Nothing selected. Exiting."
|
||||
return
|
||||
}
|
||||
|
|
@ -124,62 +117,6 @@ if ($doOfficeAct) { Activate-Ospp 'Office' }
|
|||
if ($doProjAct) { Activate-Ospp 'Project' }
|
||||
if ($doVisioAct) { Activate-Ospp 'Visio' }
|
||||
|
||||
# --- Install via ODT -----------------------------------------------------
|
||||
$ODT_URL = 'https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_19127-20198.exe'
|
||||
|
||||
function Install-Odt-Bundle([string[]]$products) {
|
||||
$tmp = Join-Path $env:TEMP "kms-odt-$(Get-Random)"
|
||||
New-Item -ItemType Directory -Force -Path $tmp | Out-Null
|
||||
$odtExe = Join-Path $tmp 'odt.exe'
|
||||
Step "Downloading Office Deployment Tool to $tmp"
|
||||
Invoke-WebRequest -UseBasicParsing -Uri $ODT_URL -OutFile $odtExe
|
||||
Step "Extracting ODT"
|
||||
Start-Process -FilePath $odtExe -ArgumentList "/extract:`"$tmp`"", '/quiet' -Wait
|
||||
$setup = Join-Path $tmp 'setup.exe'
|
||||
if (-not (Test-Path $setup)) { Bad "ODT extraction failed (no setup.exe in $tmp)"; return }
|
||||
|
||||
# Build Configuration.xml — only the requested VL Products.
|
||||
$productXml = ($products | ForEach-Object { "<Product ID=`"$_`"><Language ID=`"en-us`" /></Product>" }) -join ''
|
||||
$cfgXml = @"
|
||||
<Configuration>
|
||||
<Add OfficeClientEdition="64" Channel="PerpetualVL2024">
|
||||
$productXml
|
||||
</Add>
|
||||
<Updates Enabled="TRUE" Channel="PerpetualVL2024" />
|
||||
<Display Level="None" AcceptEULA="TRUE" />
|
||||
<Property Name="AUTOACTIVATE" Value="1" />
|
||||
<Property Name="FORCEAPPSHUTDOWN" Value="TRUE" />
|
||||
</Configuration>
|
||||
"@
|
||||
$cfg = Join-Path $tmp 'Configuration.xml'
|
||||
Set-Content -Path $cfg -Value $cfgXml -Encoding UTF8
|
||||
|
||||
Step "Running setup.exe /configure (this can take 5-15 min depending on bandwidth)"
|
||||
Start-Process -FilePath $setup -ArgumentList '/configure', "`"$cfg`"" -Wait
|
||||
if ($LASTEXITCODE -ne 0 -and $LASTEXITCODE -ne $null) { Warn "ODT exit code $LASTEXITCODE" }
|
||||
|
||||
# Pin KMS host + activate
|
||||
$ospp = Find-Ospp
|
||||
if ($ospp) {
|
||||
Step "Pinning Office at $KmsHost`:$KmsPort and activating"
|
||||
& cscript //Nologo $ospp /sethst:$KmsHost | Out-Host
|
||||
& cscript //Nologo $ospp /setprt:$KmsPort | Out-Host
|
||||
& cscript //Nologo $ospp /act | Out-Host
|
||||
$st = & cscript //Nologo $ospp /dstatus 2>&1 | Out-String
|
||||
if ($st -match '---LICENSED---') { OK "Office bundle licensed" } else { Warn "Status not LICENSED yet" }
|
||||
} else {
|
||||
Warn "ospp.vbs still not found post-install — manual /act needed."
|
||||
}
|
||||
|
||||
Remove-Item -Recurse -Force $tmp -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
$installList = @()
|
||||
if ($doInstOff) { $installList += 'ProPlus2024Volume' }
|
||||
if ($doInstProj) { $installList += 'ProjectPro2024Volume' }
|
||||
if ($doInstVis) { $installList += 'VisioPro2024Volume' }
|
||||
if ($installList.Count -gt 0) { Install-Odt-Bundle $installList }
|
||||
|
||||
Write-Host ""
|
||||
Step "Done."
|
||||
Write-Host " Re-run any time to re-check status. KMS licences renew automatically every 7 days."
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[string]$KmsHost = $(if ($env:KMS_HOST) { $env:KMS_HOST } else { 'kms.viktorbarzin.me' }),
|
||||
[string]$KmsHost = $(if ($env:KMS_HOST) { $env:KMS_HOST } else { 'vlmcs.viktorbarzin.me' }),
|
||||
[int] $KmsPort = $(if ($env:KMS_PORT) { [int]$env:KMS_PORT } else { 1688 })
|
||||
)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue