Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support building Windows msi file #3999

Merged
merged 2 commits into from
Sep 12, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ LIBSECCOMP_COMMIT := release-2.3
GINKGOTIMEOUT ?= -timeout=90m

RELEASE_VERSION ?= $(shell hack/get_release_info.sh VERSION)
RELEASE_NUMBER ?= $(shell hack/get_release_info.sh NUMBER)
RELEASE_NUMBER ?= $(shell hack/get_release_info.sh NUMBER|sed -e 's/^v\(.*\)/\1/')
RELEASE_DIST ?= $(shell hack/get_release_info.sh DIST)
RELEASE_DIST_VER ?= $(shell hack/get_release_info.sh DIST_VER)
RELEASE_ARCH ?= $(shell hack/get_release_info.sh ARCH)
Expand Down Expand Up @@ -164,6 +164,10 @@ podman: .gopathok $(PODMAN_VARLINK_DEPENDENCIES) ## Build with podman
podman-remote: .gopathok $(PODMAN_VARLINK_DEPENDENCIES) ## Build with podman on remote environment
$(GO_BUILD) $(BUILDFLAGS) -gcflags '$(GCFLAGS)' -asmflags '$(ASMFLAGS)' -ldflags '$(LDFLAGS_PODMAN)' -tags "$(BUILDTAGS) remoteclient" -o bin/$@ $(PROJECT)/cmd/podman

.PHONY: podman.msi
podman.msi: podman-remote-windows ## Will always rebuild exe as there is no podman-remote-windows.exe target to verify timestamp
wixl -D VERSION=$(RELEASE_NUMBER) -o bin/podman-v$(RELEASE_NUMBER).msi contrib/msi/podman.wxs

podman-remote-%: .gopathok $(PODMAN_VARLINK_DEPENDENCIES) ## Build podman for a specific GOOS
$(eval BINSFX := $(shell test "$*" != "windows" || echo ".exe"))
CGO_ENABLED=0 GOOS=$* $(GO_BUILD) -gcflags '$(GCFLAGS)' -asmflags '$(ASMFLAGS)' -ldflags '$(LDFLAGS_PODMAN)' -tags "remoteclient containers_image_openpgp exclude_graphdriver_devicemapper" -o bin/$@$(BINSFX) $(PROJECT)/cmd/podman
Expand Down Expand Up @@ -328,9 +332,9 @@ release.txt:
echo -n " $$field"; done >> "$@"
echo "" >> "$@"

podman-$(RELEASE_NUMBER).tar.gz: binaries docs release.txt
podman-v$(RELEASE_NUMBER).tar.gz: binaries docs release.txt
$(eval TMPDIR := $(shell mktemp -d -p '' podman_XXXX))
$(eval SUBDIR := podman-$(RELEASE_NUMBER))
$(eval SUBDIR := podman-v$(RELEASE_NUMBER))
mkdir -p "$(TMPDIR)/$(SUBDIR)"
$(MAKE) install.bin install.man install.cni install.systemd "DESTDIR=$(TMPDIR)/$(SUBDIR)" "PREFIX=/usr"
# release.txt location and content depended upon by automated tooling
Expand All @@ -339,7 +343,7 @@ podman-$(RELEASE_NUMBER).tar.gz: binaries docs release.txt
-rm -rf "$(TMPDIR)"

# Must call make in-line: Dependency-spec. w/ wild-card also consumes variable value.
podman-remote-$(RELEASE_NUMBER)-%.zip:
podman-remote-v$(RELEASE_NUMBER)-%.zip:
$(MAKE) podman-remote-$* install-podman-remote-docs release.txt \
RELEASE_BASENAME=$(shell hack/get_release_info.sh REMOTENAME) \
RELEASE_DIST=$* RELEASE_DIST_VER="-"
Expand All @@ -364,12 +368,12 @@ podman-remote-$(RELEASE_NUMBER)-%.zip:
.PHONY: podman-release
podman-release:
rm -f release.txt
$(MAKE) podman-$(RELEASE_NUMBER).tar.gz
$(MAKE) podman-v$(RELEASE_NUMBER).tar.gz

.PHONY: podman-remote-%-release
podman-remote-%-release:
rm -f release.txt
$(MAKE) podman-remote-$(RELEASE_NUMBER)-$*.zip
$(MAKE) podman-remote-v$(RELEASE_NUMBER)-$*.zip

docker-docs: docs
(cd docs; ./dckrman.sh *.1)
Expand Down
Binary file added contrib/msi/podman-logo.ico
Binary file not shown.
43 changes: 43 additions & 0 deletions contrib/msi/podman.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
@echo off
setlocal enableextensions

title Podman

:: If remote-host is given on command line -- use it
setlocal enabledelayedexpansion
for %%a in (%*) do (
echo "%%a" |find "--remote-host" >NUL
if !errorlevel! == 0 (
goto run_podman
)
)

:: If PODMAN_VARLINK_BRIDGE is set -- use it
if defined PODMAN_VARLINK_BRIDGE (
goto run_podman
)

:: If the configuration file exists -- use it
set config_home=%USERPROFILE%\AppData\podman
set config_file=%config_home%\podman-remote.conf
if exist "%config_file%" (
goto run_podman
)

:: Get connection information from user and build configuration file
md "%config_home%"
set /p host="Please enter the remote hosts name or IP address: "
set /p user="Please enter the remote user name: "
(
echo [connections]
echo [connections."%host%"]
echo destination = "%host%"
echo username = "%user%"
echo default = true
) >"%config_file%"

:run_podman
endlocal
podman-remote-windows.exe %*

:End
48 changes: 48 additions & 0 deletions contrib/msi/podman.wxs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

<?ifndef var.VERSION?>
<?error VERSION must be defined via command line argument?>
<?endif?>

<Product Name="Podman $(var.VERSION)" Id="*" UpgradeCode="696BAB5D-CA1F-4B05-B123-320F245B8D6D" Version="$(var.VERSION)" Language="1033" Manufacturer="Red Hat Inc.">

<Package Id="*" Keywords="Installer" Description="Red Hat's Podman $(var.VERSION) Installer" Comments="Apache 2.0 License" Manufacturer="Red Hat Inc." InstallScope="perMachine" InstallerVersion="100" Compressed="yes"/>
<Media Id="1" Cabinet="Podman.cab" EmbedCab="yes"/>
<Property Id="DiskPrompt" Value="Red Hat's Podman $(var.VERSION) Installation"/>

<Directory Id="TARGETDIR" Name="SourceDir">

<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="RedHatPFiles" Name="RedHat">
<Directory Id="INSTALLDIR" Name="Podman">
<Component Id="INSTALLDIR_Component" Guid="14B310C4-9B5D-4DA5-ADF9-B9D008E4CD82">
<CreateFolder/>
</Component>
<Component Id="MainExecutable" Guid="73752F94-6589-4C7B-ABED-39D655A19714">
<File Id="520C6E17-77A2-4F41-9611-30FA763A0702" Name="podman-remote-windows.exe" Source="bin/podman-remote-windows.exe"/>
<File Id="A14218A0-4180-44AC-B109-7C63B3099DCA" Name="podman.bat" Source="podman.bat" KeyPath="yes"/>
</Component>
</Directory>
</Directory>
</Directory>
</Directory>

<Property Id="setx" Value="setx.exe"/>
<CustomAction Id="ChangePath" ExeCommand='PATH "%PATH%;[INSTALLDIR]"' Property="setx" Execute="deferred" Impersonate="yes" Return="check"/>

<Feature Id="Complete" Level="1">
<ComponentRef Id="INSTALLDIR_Component"/>
<ComponentRef Id="MainExecutable"/>
</Feature>

<Icon Id="podman.ico" SourceFile="contrib/msi/podman-logo.ico"/>
<Property Id="ARPPRODUCTICON" Value="podman.ico"/>

<InstallExecuteSequence>
<RemoveExistingProducts Before="InstallInitialize"/>
<Custom Action="ChangePath" After="InstallServices">NOT Installed</Custom>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed that this doesn't cleanup the PATH on uninstall. Seems a bit dodgy to try to do that actually, but mentioning in case you know a clean way.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you open a fresh issue about this? We don't actively review two-year-old closed PRs so this will get lost otherwise

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

np thanks for offering it issue worthy! #11089

</InstallExecuteSequence>

</Product>
</Wix>