From c35ae7640cfa9503c814869347252025a9037637 Mon Sep 17 00:00:00 2001 From: Anjan Nath Date: Wed, 8 Jun 2022 14:38:20 +0530 Subject: [PATCH] Add support for building macOS pkg installer it installs podman and supporting binaries along with qemu to have a functioning podman install using a pkg podman and podman-mac-helper is compiled from source gvproxy binary is downloaded from its github releases and qemu from github release of containers/podman-machine-qemu [NO NEW TESTS NEEDED] Signed-off-by: Anjan Nath --- contrib/pkginstaller/.gitignore | 6 ++ contrib/pkginstaller/Distribution.in | 17 +++++ contrib/pkginstaller/Makefile | 50 +++++++++++++++ contrib/pkginstaller/README.md | 22 +++++++ contrib/pkginstaller/Resources/banner.png | Bin 0 -> 50381 bytes .../pkginstaller/Resources/conclusion.html | 13 ++++ contrib/pkginstaller/package.sh | 60 ++++++++++++++++++ contrib/pkginstaller/scripts/postinstall | 27 ++++++++ contrib/pkginstaller/scripts/preinstall | 5 ++ contrib/pkginstaller/welcome.html.in | 16 +++++ 10 files changed, 216 insertions(+) create mode 100644 contrib/pkginstaller/.gitignore create mode 100644 contrib/pkginstaller/Distribution.in create mode 100644 contrib/pkginstaller/Makefile create mode 100644 contrib/pkginstaller/README.md create mode 100644 contrib/pkginstaller/Resources/banner.png create mode 100644 contrib/pkginstaller/Resources/conclusion.html create mode 100755 contrib/pkginstaller/package.sh create mode 100755 contrib/pkginstaller/scripts/postinstall create mode 100755 contrib/pkginstaller/scripts/preinstall create mode 100644 contrib/pkginstaller/welcome.html.in diff --git a/contrib/pkginstaller/.gitignore b/contrib/pkginstaller/.gitignore new file mode 100644 index 0000000000..5e597ab071 --- /dev/null +++ b/contrib/pkginstaller/.gitignore @@ -0,0 +1,6 @@ +out +Distribution +welcome.html +tmp-download +.vscode +root diff --git a/contrib/pkginstaller/Distribution.in b/contrib/pkginstaller/Distribution.in new file mode 100644 index 0000000000..0e0d3843a6 --- /dev/null +++ b/contrib/pkginstaller/Distribution.in @@ -0,0 +1,17 @@ + + + Podman __VERSION__ + + + + + + + + + + + + + podman.pkg + diff --git a/contrib/pkginstaller/Makefile b/contrib/pkginstaller/Makefile new file mode 100644 index 0000000000..19c9b51aa2 --- /dev/null +++ b/contrib/pkginstaller/Makefile @@ -0,0 +1,50 @@ +SHELL := bash + +ARCH ?= aarch64 +PODMAN_VERSION ?= 4.1.0 +GVPROXY_VERSION ?= 0.4.0 +QEMU_VERSION ?= 7.0.0-2 +GVPROXY_RELEASE_URL ?= https://github.com/containers/gvisor-tap-vsock/releases/download/v$(GVPROXY_VERSION)/gvproxy-darwin +QEMU_RELEASE_URL ?= https://github.com/containers/podman-machine-qemu/releases/download/v$(QEMU_VERSION)/podman-machine-qemu-$(ARCH)-$(QEMU_VERSION).tar.xz +PACKAGE_DIR ?= out/packaging +TMP_DOWNLOAD ?= tmp-download +PACKAGE_ROOT ?= root + +default: pkginstaller + +get_gvproxy: + mkdir -p $(TMP_DOWNLOAD) + cd $(TMP_DOWNLOAD) && curl -sLo gvproxy $(GVPROXY_RELEASE_URL) + +get_qemu: + mkdir -p $(TMP_DOWNLOAD) + cd $(TMP_DOWNLOAD) && curl -sLO $(QEMU_RELEASE_URL) + +packagedir: package_root Distribution welcome.html + mkdir -p $(PACKAGE_DIR) + cp -r Resources $(PACKAGE_DIR)/ + cp welcome.html $(PACKAGE_DIR)/Resources/ + cp Distribution $(PACKAGE_DIR)/ + cp -r scripts $(PACKAGE_DIR)/ + cp -r $(PACKAGE_ROOT) $(PACKAGE_DIR)/ + cp package.sh $(PACKAGE_DIR)/ + cd $(PACKAGE_DIR) && pkgbuild --analyze --root ./root component.plist + echo -n $(PODMAN_VERSION) > $(PACKAGE_DIR)/VERSION + echo -n $(ARCH) > $(PACKAGE_DIR)/ARCH + cp ../../LICENSE $(PACKAGE_DIR)/Resources/LICENSE.txt + +package_root: get_gvproxy get_qemu + mkdir -p $(PACKAGE_ROOT)/podman/bin $(PACKAGE_ROOT)/podman/qemu + tar -C $(PACKAGE_ROOT)/podman/qemu -xf $(TMP_DOWNLOAD)/podman-machine-qemu-$(ARCH)-$(QEMU_VERSION).tar.xz + cp $(TMP_DOWNLOAD)/gvproxy $(PACKAGE_ROOT)/podman/bin/ + chmod a+x $(PACKAGE_ROOT)/podman/bin/* + +%: %.in + @sed -e 's/__VERSION__/'$(PODMAN_VERSION)'/g' $< >$@ + +pkginstaller: packagedir + cd $(PACKAGE_DIR) && ./package.sh .. + +.PHONY: clean +clean: + rm -rf $(TMP_DOWNLOAD) $(PACKAGE_ROOT) $(PACKAGE_DIR) Distribution welcome.html diff --git a/contrib/pkginstaller/README.md b/contrib/pkginstaller/README.md new file mode 100644 index 0000000000..37c59ce048 --- /dev/null +++ b/contrib/pkginstaller/README.md @@ -0,0 +1,22 @@ +## How to build + +```sh +$ make ARCH= NO_CODESIGN=1 pkginstaller + +# or to create signed pkg +$ make ARCH= CODESIGN_IDENTITY= PRODUCTSIGN_IDENTITY= pkginstaller +``` + +The generated pkg will be written to `out/podman-macos-installer-*.pkg`. +Currently the pkg installs `podman`, `qemu`, `gvproxy` and `podman-mac-helper` to `/Applications/podman` + +The `qemu` build it uses is from [containers/podman-machine-qemu](https://github.com/containers/podman-machine-qemu) + +## Uninstalling + +```sh +$ sudo rm -rf /opt/podman +``` + +### Screenshot +screenshot-macOS-pkg-podman diff --git a/contrib/pkginstaller/Resources/banner.png b/contrib/pkginstaller/Resources/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..7db75134121eadbdedc89795f2e96bd139bdc98f GIT binary patch literal 50381 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 E1D+A-Qvd(} literal 0 HcmV?d00001 diff --git a/contrib/pkginstaller/Resources/conclusion.html b/contrib/pkginstaller/Resources/conclusion.html new file mode 100644 index 0000000000..c442e4ebfe --- /dev/null +++ b/contrib/pkginstaller/Resources/conclusion.html @@ -0,0 +1,13 @@ + + + + + + +
+
+

Thanks for installing Podman!

+

You can now start using the 'podman' command. First run 'podman machine init'.

+
+ + diff --git a/contrib/pkginstaller/package.sh b/contrib/pkginstaller/package.sh new file mode 100755 index 0000000000..b7b33954d2 --- /dev/null +++ b/contrib/pkginstaller/package.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +set -euxo pipefail + +BASEDIR=$(dirname "$0") +OUTPUT=$1 +CODESIGN_IDENTITY=${CODESIGN_IDENTITY:-mock} +PRODUCTSIGN_IDENTITY=${PRODUCTSIGN_IDENTITY:-mock} +NO_CODESIGN=${NO_CODESIGN:-0} +HELPER_BINARIES_DIR="/opt/podman/qemu/bin" + +binDir="${BASEDIR}/root/podman/bin" + +function build_podman() { + pushd "$1" + make podman-remote HELPER_BINARIES_DIR="${HELPER_BINARIES_DIR}" + make podman-mac-helper + cp bin/darwin/podman "contrib/pkginstaller/out/packaging/${binDir}/podman" + cp bin/darwin/podman-mac-helper "contrib/pkginstaller/out/packaging/${binDir}/podman-mac-helper" + popd +} + +function sign() { + if [ "${NO_CODESIGN}" -eq "1" ]; then + return + fi + local opts="" + entitlements="${BASEDIR}/$(basename "$1").entitlements" + if [ -f "${entitlements}" ]; then + opts="--entitlements ${entitlements}" + fi + codesign --deep --sign "${CODESIGN_IDENTITY}" --options runtime --force --timestamp "${opts}" "$1" +} + +version=$(cat "${BASEDIR}/VERSION") +arch=$(cat "${BASEDIR}/ARCH") + +build_podman "../../../../" +sign "${binDir}/podman" +sign "${binDir}/gvproxy" +sign "${binDir}/podman-mac-helper" + +pkgbuild --identifier com.redhat.podman --version "${version}" \ + --scripts "${BASEDIR}/scripts" \ + --root "${BASEDIR}/root" \ + --install-location /opt \ + --component-plist "${BASEDIR}/component.plist" \ + "${OUTPUT}/podman.pkg" + +productbuild --distribution "${BASEDIR}/Distribution" \ + --resources "${BASEDIR}/Resources" \ + --package-path "${OUTPUT}" \ + "${OUTPUT}/podman-unsigned.pkg" +rm "${OUTPUT}/podman.pkg" + +if [ ! "${NO_CODESIGN}" -eq "1" ]; then + productsign --timestamp --sign "${PRODUCTSIGN_IDENTITY}" "${OUTPUT}/podman-unsigned.pkg" "${OUTPUT}/podman-installer-macos-${arch}.pkg" +else + mv "${OUTPUT}/podman-unsigned.pkg" "${OUTPUT}/podman-installer-macos-${arch}.pkg" +fi diff --git a/contrib/pkginstaller/scripts/postinstall b/contrib/pkginstaller/scripts/postinstall new file mode 100755 index 0000000000..db17eede83 --- /dev/null +++ b/contrib/pkginstaller/scripts/postinstall @@ -0,0 +1,27 @@ +#!/bin/bash + +set -e + +BZSH_PODMAN_PATH_EXP='PATH="/opt/podman/bin:$PATH"' +FISH_PODMAN_PATH_EXP='set PATH "/opt/podman/bin $PATH"' +BASHRC_PATH="$HOME/.bash_profile" +ZSHENV_PATH="$HOME/.zshenv" +ZSHRC_PATH="$HOME/.zshrc" +FSHCFG_PATH="$HOME/.config/fish/config.fish" + +# append /Applications/podman/bin to $PATH +if [ -f "$BASHRC_PATH" ]; then + grep -Fxq "$BZSH_PODMAN_PATH_EXP" "$BASHRC_PATH" || echo "$BZSH_PODMAN_PATH_EXP" >> "$BASHRC_PATH" +fi +if [ -f "$ZSHENV_PATH" ]; then + grep -Fxq "$BZSH_PODMAN_PATH_EXP" "$ZSHENV_PATH" || echo "$BZSH_PODMAN_PATH_EXP" >> "$ZSHENV_PATH" +fi +if [ -f "$ZSHRC_PATH" ]; then + grep -Fxq "$BZSH_PODMAN_PATH_EXP" "$ZSHRC_PATH" || echo "$BZSH_PODMAN_PATH_EXP" >> "$ZSHRC_PATH" +fi +if [ -f "$FSHCFG_PATH" ]; then + grep -Fxq "$FISH_PODMAN_PATH_EXP" "$FSHCFG_PATH" || echo "$FISH_PODMAN_PATH_EXP" >> "$FSHCFG_PATH" +fi + +ln -s /opt/podman/bin/podman-mac-helper /opt/podman/qemu/bin/podman-mac-helper +ln -s /opt/podman/bin/gvproxy /opt/podman/qemu/bin/gvproxy diff --git a/contrib/pkginstaller/scripts/preinstall b/contrib/pkginstaller/scripts/preinstall new file mode 100755 index 0000000000..a381868fcc --- /dev/null +++ b/contrib/pkginstaller/scripts/preinstall @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +rm -rf /opt/podman diff --git a/contrib/pkginstaller/welcome.html.in b/contrib/pkginstaller/welcome.html.in new file mode 100644 index 0000000000..b061987167 --- /dev/null +++ b/contrib/pkginstaller/welcome.html.in @@ -0,0 +1,16 @@ + + + + + + +
+
+

This will install Podman __VERSION__ + on your computer. You will be guided through the steps necessary to install this software.

+
+

Click “Continue" to continue the + setup

+
+ +