mirror of
https://github.com/containers/podman.git
synced 2025-12-10 07:42:12 +08:00
BuildOrigin is a field that can be set at build time by packagers. This helps us trace how and where the binary was built and installed from, allowing us to see if the issue is due to a specfic installation or a general podman bug. This field shows up in podman version and in podman info when populated. Note that podman info has a new field, Client, that only appears when running podman info using the remote client. Automatically set the BuildOrigin field when building the macOS pkginstaller to pkginstaller. Usage: make podman-remote BUILD_ORIGIN="mypackaging" Signed-off-by: Ashley Cui <acui@redhat.com>
117 lines
3.4 KiB
Bash
Executable File
117 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euxo pipefail
|
|
|
|
BASEDIR=$(dirname "$0")
|
|
OUTPUT=$1
|
|
CODESIGN_IDENTITY=${CODESIGN_IDENTITY:--}
|
|
PRODUCTSIGN_IDENTITY=${PRODUCTSIGN_IDENTITY:-mock}
|
|
NO_CODESIGN=${NO_CODESIGN:-0}
|
|
HELPER_BINARIES_DIR="/opt/podman/bin"
|
|
MACHINE_POLICY_JSON_DIR="/opt/podman/config"
|
|
BUILD_ORIGIN="pkginstaller"
|
|
|
|
tmpBin="contrib/pkginstaller/tmp-bin"
|
|
|
|
binDir="${BASEDIR}/root/podman/bin"
|
|
libDir="${BASEDIR}/root/podman/lib"
|
|
docDir="${BASEDIR}/root/podman/docs/man/man1"
|
|
|
|
version=$(cat "${BASEDIR}/VERSION")
|
|
arch=$(cat "${BASEDIR}/ARCH")
|
|
|
|
function build_podman() {
|
|
pushd "$1"
|
|
|
|
make podman-remote-darwin-docs
|
|
mkdir -p "contrib/pkginstaller/out/packaging/${docDir}"
|
|
cp -v docs/build/remote/darwin/*.1 "contrib/pkginstaller/out/packaging/${docDir}"
|
|
|
|
case ${goArch} in
|
|
universal)
|
|
build_fat
|
|
cp "${tmpBin}/podman-universal" "contrib/pkginstaller/out/packaging/${binDir}/podman"
|
|
cp "${tmpBin}/podman-mac-helper-universal" "contrib/pkginstaller/out/packaging/${binDir}/podman-mac-helper"
|
|
;;
|
|
|
|
amd64 | arm64)
|
|
build_podman_arch ${goArch}
|
|
cp "${tmpBin}/podman-${goArch}" "contrib/pkginstaller/out/packaging/${binDir}/podman"
|
|
cp "${tmpBin}/podman-mac-helper-${goArch}" "contrib/pkginstaller/out/packaging/${binDir}/podman-mac-helper"
|
|
;;
|
|
*)
|
|
echo -n "Unknown arch: ${goArch}"
|
|
;;
|
|
esac
|
|
|
|
popd
|
|
}
|
|
|
|
function build_podman_arch(){
|
|
make -B GOARCH="$1" podman-remote HELPER_BINARIES_DIR="${HELPER_BINARIES_DIR}" BUILD_ORIGIN="${BUILD_ORIGIN}"
|
|
make -B GOARCH="$1" podman-mac-helper
|
|
mkdir -p "${tmpBin}"
|
|
cp bin/darwin/podman "${tmpBin}/podman-$1"
|
|
cp bin/darwin/podman-mac-helper "${tmpBin}/podman-mac-helper-$1"
|
|
}
|
|
|
|
function build_fat(){
|
|
echo "Building ARM Podman"
|
|
build_podman_arch "arm64"
|
|
echo "Building AMD Podman"
|
|
build_podman_arch "amd64"
|
|
|
|
echo "Creating universal binary"
|
|
lipo -create -output "${tmpBin}/podman-universal" "${tmpBin}/podman-arm64" "${tmpBin}/podman-amd64"
|
|
lipo -create -output "${tmpBin}/podman-mac-helper-universal" "${tmpBin}/podman-mac-helper-arm64" "${tmpBin}/podman-mac-helper-amd64"
|
|
}
|
|
|
|
function sign() {
|
|
local opts=""
|
|
entitlements="${BASEDIR}/$(basename "$1").entitlements"
|
|
if [ -f "${entitlements}" ]; then
|
|
opts="--entitlements ${entitlements}"
|
|
fi
|
|
if [ ! "${NO_CODESIGN}" -eq "1" ]; then
|
|
opts="$opts --options runtime"
|
|
fi
|
|
codesign --deep --sign "${CODESIGN_IDENTITY}" --timestamp --force ${opts} "$1"
|
|
}
|
|
|
|
goArch="${arch}"
|
|
if [ "${goArch}" = aarch64 ]; then
|
|
goArch=arm64
|
|
fi
|
|
|
|
build_podman "../../../../"
|
|
|
|
sign "${binDir}/podman"
|
|
sign "${binDir}/gvproxy"
|
|
sign "${binDir}/vfkit"
|
|
sign "${binDir}/podman-mac-helper"
|
|
|
|
sign "${binDir}/krunkit"
|
|
sign "${libDir}/libkrun-efi.dylib"
|
|
sign "${libDir}/libvirglrenderer.1.dylib"
|
|
sign "${libDir}/libepoxy.0.dylib"
|
|
sign "${libDir}/libMoltenVK.dylib"
|
|
|
|
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-${goArch}.pkg"
|
|
else
|
|
mv "${OUTPUT}/podman-unsigned.pkg" "${OUTPUT}/podman-installer-macos-${goArch}.pkg"
|
|
fi
|