From e2ff5d4e5dba94a5908b0517db6eef027ce7bdc9 Mon Sep 17 00:00:00 2001 From: Lokesh Mandvekar Date: Fri, 5 Jul 2024 15:28:19 -0400 Subject: [PATCH] Windows Installer: switch to wix5 The chocolatey tool that was fetching us wix v3 can no longer be used to fetch wix v4+ so we had to switch to dotnet to fetch the latest wix. This commit builds the installer with wix v5. wix v5 is installed via the `dotnet` tool in the windows image itself at https://github.com/containers/automation_images/pull/354. Going forward, the `dotnet` tool will also be used to build the installer. In the process, the wix v3 files were converted to wix v4+ using `wix convert` followed by manual modifications along with switch to wixproj builds with dotnet. The GitHub Action to upload windows installer now builds the installer using winmake.ps1. Contributions from Mario Loriedo: - bundle setup update to wix5 - updates to build and release process scripts Ref: https://github.com/lsm5/podman/pull/3 - small fixes to windows installer theme Ref: https://github.com/lsm5/podman/pull/4 - Better win-installer sidebar logo Ref: https://github.com/lsm5/podman/pull/5 Resolves: RUN-2055 Co-authored-by: Mario Loriedo Signed-off-by: Lokesh Mandvekar --- .cirrus.yml | 2 +- .github/workflows/upload-win-installer.yml | 31 +- .gitignore | 7 +- build_windows.md | 43 ++- contrib/cirrus/win-installer-main.ps1 | 10 +- contrib/win-installer/build-burn.bat | 7 - contrib/win-installer/build-msi.bat | 8 - contrib/win-installer/build.ps1 | 44 +-- contrib/win-installer/burn.wxs | 87 +++-- contrib/win-installer/podman-setup.wixproj | 12 + contrib/win-installer/podman-theme.wxl | 108 +++--- contrib/win-installer/podman-theme.xml | 212 ++++++------ contrib/win-installer/podman-ui.wxs | 32 +- contrib/win-installer/podman.sln | 37 +++ contrib/win-installer/podman.wixproj | 21 ++ contrib/win-installer/podman.wxs | 308 ++++++++---------- contrib/win-installer/process-release.ps1 | 6 +- .../resources/podman-sidebar.png | Bin 13016 -> 16145 bytes contrib/win-installer/welcome-install-dlg.wxs | 40 +-- 19 files changed, 505 insertions(+), 510 deletions(-) delete mode 100644 contrib/win-installer/build-burn.bat delete mode 100644 contrib/win-installer/build-msi.bat create mode 100644 contrib/win-installer/podman-setup.wixproj create mode 100644 contrib/win-installer/podman.sln create mode 100644 contrib/win-installer/podman.wixproj diff --git a/.cirrus.yml b/.cirrus.yml index 05e1656dd20c..2f0c84cf9fe7 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -33,7 +33,7 @@ env: DEBIAN_NAME: "debian-13" # Image identifiers - IMAGE_SUFFIX: "c20240701t155130z-f40f39d13" + IMAGE_SUFFIX: "c20240702t180702z-f40f39d13" # EC2 images FEDORA_AMI: "fedora-aws-${IMAGE_SUFFIX}" diff --git a/.github/workflows/upload-win-installer.yml b/.github/workflows/upload-win-installer.yml index c818c6a8261d..843293071c01 100644 --- a/.github/workflows/upload-win-installer.yml +++ b/.github/workflows/upload-win-installer.yml @@ -78,17 +78,20 @@ jobs: # The podman release process requires a cross-compile of the windows binaries be uploaded to # the release page as a hard-coded filename. If non-existent, this workflow will fail in # non-obvious ways with a non-obvious error message. Address that here. - - name: Confirm upload_asset_name is non-empty - if: ${{ steps.check.outputs.upload_asset_name == '' }} - run: | - Write-Output "::error::check.ps1 script failed to find manually uploaded podman-remote-release-windows_amd64.zip github release asset for version ${{steps.getversion.outputs.version}}." - Exit 1 + # TODO: Remove this in a future PR once verified to not cause artifact issues + #- name: Confirm upload_asset_name is non-empty + # if: steps.check.outputs.upload_asset_name == '' && github.event_name != 'pull_request' + # run: | + # Write-Output "::error::check.ps1 script failed to find manually uploaded podman-remote-release-windows_amd64.zip github release asset for version ${{steps.getversion.outputs.version}}." + # Exit 1 - name: Set up Go uses: actions/setup-go@v5 # N/B: already-exists may be an empty-string or "false", handle both cases. if: steps.check.outputs.already-exists != 'true' || steps.actual_dryrun.outputs.dryrun == 'true' with: go-version: stable + - name: Set up WiX + run: dotnet tool install --global wix - name: Setup Signature Tooling if: steps.Check.outputs.already-exists != 'true' || steps.actual_dryrun.outputs.dryrun == 'true' run: | @@ -98,20 +101,18 @@ jobs: echo "APP_ID=${{secrets.AZ_APP_ID}}" | Out-File -FilePath $env:GITHUB_ENV -Append echo "TENANT_ID=${{secrets.AZ_TENANT_ID}}" | Out-File -FilePath $env:GITHUB_ENV -Append echo "CLIENT_SECRET=${{secrets.AZ_CLIENT_SECRET}}" | Out-File -FilePath $env:GITHUB_ENV -Append + - name: Pandoc Setup + uses: r-lib/actions/setup-pandoc@v2 + with: + pandoc-version: '3.1.11' - name: Build id: build if: steps.check.outputs.already-exists != 'true' || steps.actual_dryrun.outputs.dryrun == 'true' run: | - Push-Location contrib\win-installer - .\build.ps1 ${{steps.getversion.outputs.version}} prod - $code = $LASTEXITCODE - if ($code -eq 2) { - Write-Output "artifact-missing=true" | Out-File -FilePath $env:GITHUB_OUTPUT -Append - Pop-Location - Exit 0 - } - Pop-Location - Exit $code + .\winmake.ps1 podman + .\winmake.ps1 win-gvproxy + .\winmake.ps1 docs + .\winmake.ps1 installer - name: Artifact if: steps.check.outputs.already-exists != 'true' || steps.actual_dryrun.outputs.dryrun == 'true' uses: actions/upload-artifact@v4 diff --git a/.gitignore b/.gitignore index 7ea6620913d0..d1813cc8fbd4 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ release.txt /test/copyimg/copyimg /test/goecho/goecho /test/version/version +/test/version/version.exe /test/testvol/testvol /test/tools/build /test/e2e/ginkgo-node-* @@ -45,12 +46,14 @@ result /*runner_stats.log .generate-bindings contrib/win-installer/artifacts/ +contrib/win-installer/current/ contrib/win-installer/docs/ +contrib/win-installer/en-US/ contrib/win-installer/fetch/ -contrib/win-installer/podman.msi contrib/win-installer/podman-*setup.exe contrib/win-installer/engine.exe +contrib/win-installer/obj/ contrib/win-installer/shasums -contrib/win-installer/pages.wxs contrib/win-installer/*.wixobj contrib/win-installer/*.wixpdb +contrib/win-installer/*.log diff --git a/build_windows.md b/build_windows.md index 5a93faca7b13..e523e62ffce6 100644 --- a/build_windows.md +++ b/build_windows.md @@ -10,7 +10,7 @@ Windows. - [OS requirements](#os-requirements) - [Git and go](#git-and-go) - [Pandoc](#pandoc) - - [WiX Toolset v3](#wix-toolset-v3) + - [.NET SDK](#net-sdk) - [Virtualization Provider](#virtualization-provider) - [WSL](#wsl) - [Hyper-V](#hyper-v) @@ -70,14 +70,22 @@ Pandoc can be installed from https://pandoc.org/installing.html. When performing the Pandoc installation one, has to choose the option "Install for all users" (to put the binaries into "Program Files" directory). -### WiX Toolset v3 +### .NET SDK -[WiX Toolset](https://wixtoolset.org) **v3** is used to develop and build the -Podman Windows installer. It's not required for the Podman Windows client. -Version 3 of the WiX Toolset can be obtained from -https://wixtoolset.org/docs/wix3/. Installing it into a clean VM might require -an additional installation of .NET Framework 3.5 in advance -([instructions for adding .NET Framework 3.5 via enabling the Windows feature](https://learn.microsoft.com/en-us/dotnet/framework/install/dotnet-35-windows#enable-the-net-framework-35-in-control-panel)) +[.NET SDK](https://learn.microsoft.com/en-us/dotnet/core/sdk), version 6 or +later, is required to develop and build the Podman Windows installer. It's not +required for the Podman Windows client. + +```pwsh +winget install -e Microsoft.DotNet.SDK.8 +``` + +[WiX Toolset](https://wixtoolset.org) **v5**, distributed as a .NET SDK tool, is +used too and can be installed using `dotnet install`: + +```pwsh +dotnet tool install --global wix +``` ### Virtualization Provider @@ -304,9 +312,9 @@ The `installer` target of `winmake.ps1` runs the script - `build-hooks.bat`: builds `podman-wslkerninst.exe` (WSL kernel installer) and `podman-msihooks.dll` (helper that checks if WSL and Hyper-V are installed). -- `build-msi.bat`: builds `podman.msi` from the WiX source files `podman.wxs`, +- `dotnet build podman.wixproj`: builds `podman.msi` from the WiX source files `podman.wxs`, `pages.wxs`, `podman-ui.wxs` and `welcome-install-dlg.wxs`. -- `build-burn.bat`: builds `podman-setup.exe` file from +- `dotnet build podman-setup.wixproj`: builds `podman-setup.exe` file from [WiX Burn bundle](https://wixtoolset.org/docs/tools/burn/) `burn.wxs`. ### Test the Windows installer @@ -340,21 +348,20 @@ Podman is released (it's included in the `podman-setup.exe` bundle), it can be faster to build and test that rather than the full bundle during the development phase. -Run the script `contrib\win-installer\build-msi.bat` to build the standalone -`podman.msi` file: +Run the command `dotnet build` to build the standalone `podman.msi` file: ```pwsh Push-Location .\contrib\win-installer\ -.\build-msi.bat 9.9.9 +dotnet build podman.wixproj /property:DefineConstants="VERSION=9.9.9" -o . Pop-Location ``` -It creates the file `.\contrib\win-installer\podman.msi`. Test it using the +It creates the file `.\contrib\win-installer\en-US\podman.msi`. Test it using the [Microsoft Standard Installer](https://learn.microsoft.com/en-us/windows/win32/msi/standard-installer-command-line-options) command line tool: ```pwsh -msiexec /package contrib\win-installer\podman.msi /l*v podman-msi.log +msiexec /package contrib\win-installer\en-US\podman.msi /l*v podman-msi.log ``` To run it in quiet, non-interactive mode, open the terminal **as an @@ -364,7 +371,7 @@ of the installation, `0` otherwise) and `WITH_HYPERV` (`1` to install Hyper-V as part of the installation, `0` otherwise): ```pwsh -msiexec /package contrib\win-installer\podman.msi /l*v podman-msi.log /quiet MACHINE_PROVIDER=wsl WITH_WSL=0 WITH_HYPERV=0 +msiexec /package contrib\win-installer\en-US\podman.msi /l*v podman-msi.log /quiet MACHINE_PROVIDER=wsl WITH_WSL=0 WITH_HYPERV=0 ``` :information_source: `podman.msi` GUI dialogs, defined in the file @@ -390,12 +397,12 @@ Test-Path -Path "$ENV:PROGRAMFILES\RedHat\Podman\podman.exe" # Check the generation of the podman configuration file Test-Path -Path "$ENV:PROGRAMDATA\containers\containers.conf.d\99-podman-machine-provider.conf" # Check that the installer configured the right provider -Get-Content '$ENV:PROGRAMDATA\containers\containers.conf.d\99-podman-machine-provider.conf' | Select -Skip 1 | ConvertFrom-StringData | % { $_.provider } +Get-Content "$ENV:PROGRAMDATA\containers\containers.conf.d\99-podman-machine-provider.conf" | Select -Skip 1 | ConvertFrom-StringData | % { $_.provider } # Check the creation of the registry key Test-Path -Path "HKLM:\SOFTWARE\Red Hat\Podman" Get-ItemProperty "HKLM:\SOFTWARE\Red Hat\Podman" InstallDir # Check the podman.exe is in the $PATH -$env:PATH | Select-String -Pattern "$ENV:PROGRAMFILES\RedHat\Podman" +$env:PATH | Select-String -Pattern "Podman" ``` :information_source: Podman CI uses script diff --git a/contrib/cirrus/win-installer-main.ps1 b/contrib/cirrus/win-installer-main.ps1 index c951a01f6815..54b55e5521ad 100644 --- a/contrib/cirrus/win-installer-main.ps1 +++ b/contrib/cirrus/win-installer-main.ps1 @@ -8,7 +8,7 @@ if ($Env:CI -eq "true") { } else { $WIN_INST_FOLDER = "$PSScriptRoot\..\win-installer" $ENV:WIN_INST_VER = "9.9.9" - $RELEASE_DIR = "$PSScriptRoot\..\.." + $RELEASE_DIR = "$PSScriptRoot\..\..\contrib\win-installer\current" $ENV:CONTAINERS_MACHINE_PROVIDER = "wsl" } @@ -18,7 +18,7 @@ $WindowsPathsToTest = @("C:\Program Files\RedHat\Podman\podman.exe", "$ConfFilePath", "HKLM:\SOFTWARE\Red Hat\Podman") -Set-Location $WIN_INST_FOLDER +Push-Location $WIN_INST_FOLDER # Build Installer # Note: consumes podman-remote-release-windows_amd64.zip from repo.tbz2 @@ -30,15 +30,18 @@ $ret = Start-Process -Wait -PassThru ".\podman-${ENV:WIN_INST_VER}-dev-setup.exe if ($ret.ExitCode -ne 0) { Write-Host "Install failed, dumping log" Get-Content inst.log + Pop-Location throw "Exit code is $($ret.ExitCode)" } $WindowsPathsToTest | ForEach-Object { if (! (Test-Path -Path $_) ) { + Pop-Location throw "Expected $_ but it's not present after uninstall" } } $machineProvider = Get-Content $ConfFilePath | Select-Object -Skip 1 | ConvertFrom-StringData | ForEach-Object { $_.provider } if ( $machineProvider -ne "`"$ENV:CONTAINERS_MACHINE_PROVIDER`"" ) { + Pop-Location throw "Expected `"$ENV:CONTAINERS_MACHINE_PROVIDER`" as default machine provider but got $machineProvider" } @@ -49,12 +52,15 @@ $ret = Start-Process -Wait -PassThru ".\podman-${ENV:WIN_INST_VER}-dev-setup.exe if ($ret.ExitCode -ne 0) { Write-Host "Uninstall failed, dumping log" Get-Content uninst.log + Pop-Location throw "Exit code is $($ret.ExitCode)" } $WindowsPathsToTest | ForEach-Object { if ( Test-Path -Path $_ ) { + Pop-Location throw "Path $_ is still present after uninstall" } } Write-Host "Uninstaller verification successful!" +Pop-Location diff --git a/contrib/win-installer/build-burn.bat b/contrib/win-installer/build-burn.bat deleted file mode 100644 index 637a4e74444f..000000000000 --- a/contrib/win-installer/build-burn.bat +++ /dev/null @@ -1,7 +0,0 @@ -@if "%1" == "" ( - @echo "usage: build-burn.bat " - @exit /b 1 -) - -candle -ext WixUIExtension -ext WixUtilExtension -ext WixBalExtension -arch x64 -dManSource="docs" -dVERSION="%1" burn.wxs || exit /b 1 -light -ext WixUIExtension -ext WixUtilExtension -ext WixBalExtension .\burn.wixobj -out podman-setup.exe || exit /b 1 diff --git a/contrib/win-installer/build-msi.bat b/contrib/win-installer/build-msi.bat deleted file mode 100644 index 28a77734de23..000000000000 --- a/contrib/win-installer/build-msi.bat +++ /dev/null @@ -1,8 +0,0 @@ -@if "%1" == "" ( - @echo "usage: build-msi.bat " - @exit /b 1 -) - -heat dir docs -var var.ManSource -cg ManFiles -dr INSTALLDIR -gg -g1 -srd -out pages.wxs || exit /b 1 -candle -ext WixUIExtension -ext WixUtilExtension -ext .\artifacts\PanelSwWixExtension.dll -arch x64 -dManSource="docs" -dVERSION="%1" podman.wxs pages.wxs podman-ui.wxs welcome-install-dlg.wxs || exit /b 1 -light -ext WixUIExtension -ext WixUtilExtension -ext .\artifacts\PanelSwWixExtension.dll .\podman.wixobj .\pages.wixobj .\podman-ui.wixobj .\welcome-install-dlg.wixobj -out podman.msi || exit /b 1 diff --git a/contrib/win-installer/build.ps1 b/contrib/win-installer/build.ps1 index 6c5189d7f9b9..710748f35ca7 100644 --- a/contrib/win-installer/build.ps1 +++ b/contrib/win-installer/build.ps1 @@ -4,31 +4,6 @@ function ExitOnError() { } } -function FetchPanel() { - Remove-Item -Recurse -Force -Path fetch -ErrorAction SilentlyContinue | Out-Null - New-Item -Force -ItemType Directory fetch | Out-Null - Push-Location fetch - - $ProgressPreference = 'SilentlyContinue' - Invoke-WebRequest -UseBasicParsing -OutFile nuget.exe -ErrorAction Stop ` - -Uri https://dist.nuget.org/win-x86-commandline/latest/nuget.exe - # 3.3.3.224 generates invalid schema with RemoveFeature defaults. - # Lock the version to 211 until this issue is fixed (7/18/2023) - .\nuget.exe install PanelSwWixExtension -Version 3.3.3.211 - $code = $LASTEXITCODE - Pop-Location - if ($code -gt 0) { - Exit 1 - } - $loc = Get-ChildItem -Recurse -Path fetch -Name PanelSwWixExtension.dll - if (!$loc) { - Write-Host "Could not locate PanelSwWixExtension.dll" - Exit 1 - } - - Copy-Item -Path fetch/$loc -Destination artifacts/PanelSwWixExtension.dll -ErrorAction Stop -} - function SignItem() { param( [Parameter(Mandatory)] @@ -71,7 +46,7 @@ function CheckCommand() { function CheckRequirements() { CheckCommand "gcc" "MingW CC" - CheckCommand "candle" "WiX Toolset" + CheckCommand "wix" "WiX Toolset" CheckCommand "go" "Golang" } @@ -99,7 +74,7 @@ if ($args.Count -lt 1 -or $args[0].Length -lt 1) { } # Pre-set to standard locations in-case build env does not refresh paths -$Env:Path="$Env:Path;C:\Program Files (x86)\WiX Toolset v3.14\bin;C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin;;C:\Program Files\Go\bin" +$Env:Path="$Env:Path;C:\Users\micro\mingw64\bin;C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin;;C:\Program Files\Go\bin;C:\Program Files\dotnet" CheckRequirements @@ -129,8 +104,6 @@ if ($ENV:INSTVER -eq "") { Exit 1 } -FetchPanel - .\build-hooks.bat; ExitOnError SignItem @("artifacts/win-sshproxy.exe", "artifacts/podman.exe", @@ -151,15 +124,18 @@ if ($gvExists) { # } else { # $env:IncludePolicyJSON = "Skip" # } -.\build-msi.bat $ENV:INSTVER; ExitOnError -SignItem @("podman.msi") +if (Test-Path ./obj) { + Remove-Item ./obj -Recurse -Force -Confirm:$false +} +dotnet build podman.wixproj /property:DefineConstants="VERSION=$ENV:INSTVER" -o .; ExitOnError +SignItem @("en-US\podman.msi") -.\build-burn.bat $ENV:INSTVER; ExitOnError -insignia -ib podman-setup.exe -o engine.exe; ExitOnError +dotnet build podman-setup.wixproj /property:DefineConstants="VERSION=$ENV:INSTVER" -o .; ExitOnError +wix burn detach podman-setup.exe -engine engine.exe; ExitOnError SignItem @("engine.exe") $file = "podman-$version$suffix-setup.exe" -insignia -ab engine.exe podman-setup.exe -o $file; ExitOnError +wix burn reattach -engine engine.exe podman-setup.exe -o $file; ExitOnError SignItem @("$file") if (Test-Path -Path shasums) { diff --git a/contrib/win-installer/burn.wxs b/contrib/win-installer/burn.wxs index 6a367c5457ea..0ac25a91008a 100644 --- a/contrib/win-installer/burn.wxs +++ b/contrib/win-installer/burn.wxs @@ -1,50 +1,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - = v10.0 AND (CBNumber >= 19041 OR AllowOldWin = 1)]]> - - - 5 OR WixBundleInstalled OR WixBundleForcedRestartPackage OR PreviousVersion <> VERSION]]> - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/win-installer/podman-setup.wixproj b/contrib/win-installer/podman-setup.wixproj new file mode 100644 index 000000000000..361873a26c6d --- /dev/null +++ b/contrib/win-installer/podman-setup.wixproj @@ -0,0 +1,12 @@ + + + x64 + false + Bundle + + + + + + + diff --git a/contrib/win-installer/podman-theme.wxl b/contrib/win-installer/podman-theme.wxl index 7fea09054ae4..2afa59ef7e52 100644 --- a/contrib/win-installer/podman-theme.wxl +++ b/contrib/win-installer/podman-theme.wxl @@ -2,67 +2,67 @@ - - [WixBundleName] [VERSION] Setup - [WixBundleName] [VERSION] - Welcome to [WixBundleName] Setup - Welcome to the [WixBundleName] [VERSION] setup wizard. This will install [WixBundleName] on your computer. + + + + + Version [WixBundleVersion] - Are you sure you want to cancel? - Previous version - Setup Help - /install | /repair | /uninstall | /layout [directory] - installs, repairs, uninstalls or +Finally, click install to continue, or Close to abort the installation." /> + + + + + &Close - [WixBundleName] <a href="#">license terms</a>. - I &agree to the license terms and conditions - &Options - &Install - &Close - Setup Options - Install location: - &Browse - &OK - &Cancel - Setup Progress - Processing: - Initializing... - &Cancel - Modify Setup - &Repair - &Uninstall - &Close - Repair Successfully Completed - Uninstall Successfully Completed - Installation Successfully Completed - Setup Successful - &Open Guide && Close - You must restart your computer before you can use the software. - &Restart - &Close - Setup Failed - Setup Failed - Uninstall Failed - Repair Failed - One or more issues caused the setup to fail. Please fix the issues and then retry setup. For more information see the <a href="#">log file</a>. - You must restart your computer to complete the rollback of the software. - &Restart - &Close - Files In Use - The following applications are using files that need to be updated: - Close the &applications and attempt to restart them. - &Do not close applications. A reboot will be required. - &OK - &Cancel - No action was taken as a system reboot is required. +/log log.txt - logs to a specific file. By default a log file is created in %TEMP%." /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/win-installer/podman-theme.xml b/contrib/win-installer/podman-theme.xml index 8d7be5d722fd..8b62768deae0 100644 --- a/contrib/win-installer/podman-theme.xml +++ b/contrib/win-installer/podman-theme.xml @@ -1,97 +1,123 @@ - + + - - #(loc.Title) Setup - Segoe UI - Segoe UI - Segoe UI - Segoe UI - Segoe UI - Segoe UI - Segoe UI - - Segoe UI - - - - #(loc.HelpHeader) - #(loc.HelpText) - - - - - #(loc.InstallHeader) - #(loc.InstallMessage) - - #(loc.InstallLicenseLinkText) - #(loc.InstallVersion) - Install WSL if not present - - - - - - - #(loc.OptionsHeader) - #(loc.OptionsLocationLabel) - - - - - - - - - #(loc.FilesInUseHeader) - #(loc.FilesInUseLabel) - - - - - - - - - - - #(loc.ProgressHeader) - #(loc.ProgressLabel) - #(loc.OverallProgressPackageText) - - - - - #(loc.Title) - - #(loc.ModifyHeader) - - - - - - #(loc.Title) - - #(loc.SuccessHeader) - #(loc.SuccessInstallHeader) - #(loc.SuccessRepairHeader) - #(loc.SuccessUninstallHeader) - - #(loc.SuccessRestartText) - - - - - - #(loc.FailureHeader) - #(loc.FailureInstallHeader) - #(loc.FailureUninstallHeader) - #(loc.FailureRepairHeader) - #(loc.FailureHyperlinkLogText) - - #(loc.FailureRestartText) - - - + + Segoe UI + Segoe UI + Segoe UI + Segoe UI + Segoe UI + Segoe UI + Segoe UI + + Segoe UI + + + + + + + + + + + + + + #(loc.InstallLicenseLinkText) + + Install WSL if not present + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #(loc.FailureHyperlinkLogText) + + + + + + diff --git a/contrib/win-installer/podman-ui.wxs b/contrib/win-installer/podman-ui.wxs index 1270459500de..c3122cfa999e 100644 --- a/contrib/win-installer/podman-ui.wxs +++ b/contrib/win-installer/podman-ui.wxs @@ -1,4 +1,3 @@ - - + - - @@ -33,30 +30,19 @@ Patch dialog sequence: - - - 1 - - 1 - - 1 - - 1 - 1 - 1 - - Installed AND PATCH - Installed AND PATCH - + + + + + + + - Installed AND PATCH - (NOT Installed) AND NOT AFTERREBOOT + - - diff --git a/contrib/win-installer/podman.sln b/contrib/win-installer/podman.sln new file mode 100644 index 000000000000..33d9b6af9264 --- /dev/null +++ b/contrib/win-installer/podman.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.10.35004.147 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{B7DD6F7E-DEF8-4E67-B5B7-07EF123DB6F0}") = "podman", "podman.wixproj", "{3EBBAB4A-A15D-4986-98FF-FEC3892997DB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Debug|ARM64.Build.0 = Debug|ARM64 + {3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Debug|x64.ActiveCfg = Debug|x64 + {3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Debug|x64.Build.0 = Debug|x64 + {3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Debug|x86.ActiveCfg = Debug|x86 + {3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Debug|x86.Build.0 = Debug|x86 + {3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Release|ARM64.ActiveCfg = Release|ARM64 + {3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Release|ARM64.Build.0 = Release|ARM64 + {3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Release|x64.ActiveCfg = Release|x64 + {3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Release|x64.Build.0 = Release|x64 + {3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Release|x86.ActiveCfg = Release|x86 + {3EBBAB4A-A15D-4986-98FF-FEC3892997DB}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0F83E058-C6D8-49C2-95BD-645730145A9D} + EndGlobalSection +EndGlobal diff --git a/contrib/win-installer/podman.wixproj b/contrib/win-installer/podman.wixproj new file mode 100644 index 000000000000..7bccb56ffb5e --- /dev/null +++ b/contrib/win-installer/podman.wixproj @@ -0,0 +1,21 @@ + + + x64 + false + + + + ManFiles + INSTALLDIR + true + + + + + + + + + + + diff --git a/contrib/win-installer/podman.wxs b/contrib/win-installer/podman.wxs index d1590c85ef50..065797891916 100644 --- a/contrib/win-installer/podman.wxs +++ b/contrib/win-installer/podman.wxs @@ -1,87 +1,64 @@ - - + - - - + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CREATE_MACHINE_PROVIDER_CONFIG_FILE - - - - - - - - - - - - - - - - - - - (NOT Installed) AND WSL_INSTALL = 1 - - - - - - - - (NOT Installed) AND HYPERV_INSTALL = 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed - + + + + + + - - - - - (NOT Installed) - AND ((WSL_INSTALL = 1) OR (HYPERV_INSTALL = 1)) - AND (NOT AFTERREBOOT) - - - - + + + + + + + + + + + diff --git a/contrib/win-installer/process-release.ps1 b/contrib/win-installer/process-release.ps1 index 230ad7a43b90..539283163258 100644 --- a/contrib/win-installer/process-release.ps1 +++ b/contrib/win-installer/process-release.ps1 @@ -111,11 +111,11 @@ try { } Write-Host "Old release, zip does not include win-sshproxy.exe, fetching via msi" DownloadOrSkip "$base_url/releases/download/$version/podman-$version.msi" "podman.msi" - dark -x expand ./podman.msi + wix msi decompile -x expand ./podman.msi if (!$?) { - throw "Dark command failed" + throw "wix msi decompile command failed" } - $loc = Get-ChildItem -Recurse -Path expand -Name 4A2AD125-34E7-4BD8-BE28-B2A9A5EDBEB5 + $loc = Get-ChildItem -Recurse -Path expand -Name WinSshProxyExecutableFile if (!$loc) { throw "Could not obtain win-sshproxy.exe" } diff --git a/contrib/win-installer/resources/podman-sidebar.png b/contrib/win-installer/resources/podman-sidebar.png index cc02497065abab93a10659b28f5da6c9cdd2bbf5..24058da95ce7d3650c5754774ff255d317067475 100644 GIT binary patch literal 16145 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 diff --git a/contrib/win-installer/welcome-install-dlg.wxs b/contrib/win-installer/welcome-install-dlg.wxs index 325cd74821d3..b49d74f35a87 100644 --- a/contrib/win-installer/welcome-install-dlg.wxs +++ b/contrib/win-installer/welcome-install-dlg.wxs @@ -1,4 +1,4 @@ - + @@ -6,44 +6,30 @@ - - HIDE_PROVIDER_CHOICE - - + + - HIDE_PROVIDER_CHOICE - - - MACHINE_PROVIDER = "wsl" - MACHINE_PROVIDER = "hyperv" OR HIDE_PROVIDER_CHOICE - HAS_WSLFEATURE = 1 - - - MACHINE_PROVIDER = "hyperv" - MACHINE_PROVIDER = "wsl" OR HIDE_PROVIDER_CHOICE - HAS_HYPERVFEATURE = 1 + + + - !(wix.WixUICostingPopupOptOut) OR CostingComplete = 1 - 1]]> - OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST) - OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D" - OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D" - (OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F") + + + + + + - 1 + - - - NOT Installed -