From ebc0dfe575e018755e477c3004f4f65af1acc7ea Mon Sep 17 00:00:00 2001 From: Bryce Milton Date: Mon, 17 Oct 2016 18:06:32 -0700 Subject: [PATCH] Release versions of WindowsServerCore and Nano DockerFiles Embedded POWERSHELL_* ARGs will need to be updated when new releases become available --- docker/release/nanoserver/Dockerfile | 59 +++++++++++++++++++++ docker/release/windowsservercore/Dockerfile | 57 ++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 docker/release/nanoserver/Dockerfile create mode 100644 docker/release/windowsservercore/Dockerfile diff --git a/docker/release/nanoserver/Dockerfile b/docker/release/nanoserver/Dockerfile new file mode 100644 index 0000000000..9ba5f48aa7 --- /dev/null +++ b/docker/release/nanoserver/Dockerfile @@ -0,0 +1,59 @@ +# escape=` +FROM microsoft/nanoserver +MAINTAINER brycem@microsoft.com +LABEL Readme.md="https://github.com/PowerShell/PowerShell/blob/master/docker/README.md" +LABEL Description="This Dockerfile will install and build the latest reslease of PS on NanoServer." + +ARG POWERSHELL_ZIP=https://github.com/PowerShell/PowerShell/releases/download/v6.0.0-alpha.10/powershell-6.0.0-alpha.10-win10-x64.zip +ARG POWERSHELL_SHA256=f394b51b6c8a865c0a1dd0c3645bb354e65339862ea95b60c9ff0226a307ded6 + +# Preparing shell environment - Log-to > C:\Docker.log +SHELL ["C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", "-command"] + +RUN [ScriptBlock]$Prof= ` + { ` + $ErrorActionPreference='Stop'; ` + $ConfirmPreference='None'; ` + $VerbosePreference='Continue'; ` + Start-Transcript -path C:\Dockerfile.log -append -IncludeInvocationHeader ; ` + $PSVersionTable | Write-Output ; ` + $RegPath = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' ; ` + $BuildString = $(Get-ItemProperty -Path $RegPath).BuildLabEx ; ` + $EditionId = $(Get-ItemProperty -Path $RegPath).EditionId ; ` + $ProductName = $(Get-ItemProperty -Path $RegPath).ProductName ; ` + $InstallationType = $(Get-ItemProperty -Path $RegPath).InstallationType ; ` + Write-Output -InputObject $('FullBuildString: '+$BuildString) ; ` + Write-Output -InputObject $('OperatingSystem: '+$ProductName+' '+$EditionId+' '+$InstallationType) ` + } ; Write-Output $Prof | Out-File $(New-Item -Path $PROFILE -ItemType File -Force).FullName -Encoding utf8 -NoNewline ; + +# Setup PowerShell +ADD $POWERSHELL_ZIP /powershell-win10-x64.zip +ENV POWERSHELL_SHA256=$POWERSHELL_SHA256 + +# Install PowerShell package and clean up +RUN [System.IO.FileInfo]$ZipFile = Get-Item -Path ./powershell-win10-x64.zip ; ` + [String]$ZipHash=(Get-FileHash -Path $ZipFile -Algorithm SHA256 | select -ExpandProperty Hash) ; ` + If ($ZipHash -notmatch $Env:POWERSHELL_SHA256) { ` + Throw [String]$('['+$ZipHash+'] does not match ['+$Env:POWERSHELL_SHA256+']!') ` + } ; ` + New-Item -Path $Env:ProgramFiles/PowerShell -ItemType Directory -Force | out-null ; ` + [System.IO.DirectoryInfo]$PsFolder=New-Item -Path $Env:ProgramFiles\PowerShell -ItemType Directory -Force ; ` + try { Add-Type -AssemblyName System.IO.Compression.FileSystem ` + } catch {Add-Type -AssemblyName System.IO.Compression.ZipFile ` + } finally { [System.IO.Compression.ZipFile]::ExtractToDirectory($ZipFile,$PsFolder) } ; ` + if (Get-ChildItem -Path $PsFolder/powershell.exe) { ` + Remove-Item -Path $PROFILE ; Remove-Item -Path $ZipFile ; ` + $psexe=Get-Item -Path $Env:ProgramFiles\PowerShell\powershell.exe ; ` + $psexe; ` + New-Item -Type SymbolicLink -Path $PsFolder\ -Name Core -Value $PsFolder ` + } else { throw 'Installation failed! See c:\Dockerfile.log' } ; + +SHELL ["C:\\Program Files\\PowerShell\\Core\\PowerShell.exe", "-command"] + +# Verify New Powershell.exe runs +RUN $ErrorActionPreference='Stop'; ` + If ($PSVersionTable.PSEdition -Match 'Core') { ` + Write-Output $PSVersionTable ` + } else { ` + Throw [String]$('['+$PSVersionTable.PSEdition+'] is not [Core]!') ` + } ; diff --git a/docker/release/windowsservercore/Dockerfile b/docker/release/windowsservercore/Dockerfile new file mode 100644 index 0000000000..f557f781d6 --- /dev/null +++ b/docker/release/windowsservercore/Dockerfile @@ -0,0 +1,57 @@ +# escape=` +FROM microsoft/windowsservercore +MAINTAINER brycem@microsoft.com +LABEL Readme.md="https://github.com/PowerShell/PowerShell/blob/master/docker/README.md" +LABEL Description="This Dockerfile will install and build the latest reslease of PS on WindowsServerCore." + +ARG POWERSHELL_MSI=https://github.com/PowerShell/PowerShell/releases/download/v6.0.0-alpha.10/PowerShell_6.0.0.10-alpha.10-win10-x64.msi +ARG POWERSHELL_SHA256=f669482aeab8de04f4da5ac03a36ce6b4e9f6569401b4cc842a4cd59196756a0 + +# Preparing shell environment - Log-to > C:\Docker.log +SHELL ["C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", "-command"] + +RUN [ScriptBlock]$Prof= ` + { ` + $ErrorActionPreference='Stop'; ` + $ConfirmPreference='None'; ` + $VerbosePreference='Continue'; ` + Start-Transcript -path C:\Dockerfile.log -append -IncludeInvocationHeader ; ` + $PSVersionTable | Write-Output ; ` + $RegPath = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' ; ` + $BuildString = $(Get-ItemProperty -Path $RegPath).BuildLabEx ; ` + $EditionId = $(Get-ItemProperty -Path $RegPath).EditionId ; ` + $ProductName = $(Get-ItemProperty -Path $RegPath).ProductName ; ` + $InstallationType = $(Get-ItemProperty -Path $RegPath).InstallationType ; ` + Write-Output -InputObject $('FullBuildString: '+$BuildString) ; ` + Write-Output -InputObject $('OperatingSystem: '+$ProductName+' '+$EditionId+' '+$InstallationType) ` + } ; Write-Output $Prof | Out-File $(New-Item -Path $PROFILE -ItemType File -Force).FullName -Encoding utf8 -NoNewline ; + +# Setup PowerShell +ADD $POWERSHELL_MSI /PowerShell-win10-x64.msi +ENV POWERSHELL_SHA256=$POWERSHELL_SHA256 + +# Install PowerShell package and clean up +RUN [System.IO.FileInfo]$MsiFile = Get-Item -Path ./PowerShell-win10-x64.msi ; ` + [String]$MsiHash=(Get-FileHash -Path $MSiFile -Algorithm SHA256 | select -ExpandProperty Hash) ; ` + If ($MsiHash -notmatch $Env:POWERSHELL_SHA256) { ` + Throw [String]$('['+$MsiHash+'] does not match ['+$Env:POWERSHELL_SHA256+']!') ` + } ; ` + Start-Process -FilePath msiexec.exe -ArgumentList '-qn','-i c:\PowerShell-win10-x64.msi', ` + '-log c:\PowerShell-win10-x64.msi.log','-norestart' -wait ; ` + $log=get-content -Path C:\PowerShell-win10-x64.msi.log -Last 10 ; ` + if ($log -match 'Installation success or error status: 0') { ` + Remove-Item -Path $PROFILE ; Remove-Item -Path $MsiFile ; ` + $psexe=Get-Item -Path $Env:ProgramFiles\PowerShell\*\powershell.exe ; ` + $psexe; ` + New-Item -Type SymbolicLink -Path $Env:ProgramFiles\PowerShell\ -Name Core -Value $psexe.DirectoryName ` + } else { throw 'Installation failed! See c:\PowerShell-win10-x64.msi.log' } ; + +SHELL ["C:\\Program Files\\PowerShell\\Core\\PowerShell.exe", "-command"] + +# Verify new Core Powershell.exe runs +RUN $ErrorActionPreference='Stop'; ` + If ($PSVersionTable.PSEdition -Match 'Core') { ` + Write-Output $PSVersionTable ` + } else { ` + Throw [String]$('['+$PSVersionTable.PSEdition+'] is not [Core]!') ` + } ;