airgap/Makefile

128 lines
3.0 KiB
Makefile
Raw Normal View History

2024-06-18 08:45:21 +00:00
VERSION := $(shell git tag --points-at HEAD)
GIT_REF := $(shell git log -1 --format=%H)
GIT_AUTHOR := $(shell git log -1 --format=%an)
GIT_KEY := $(shell git log -1 --format=%GP)
GIT_TIMESTAMP := $(shell git log -1 --format=%cd --date=iso)
2024-08-03 04:44:19 +00:00
VERSION := development
export
## Use env vars from latest release when reproducing
2024-08-03 04:58:30 +00:00
ifdef REPRODUCE
include dist/release.env
NO_CACHE := --no-cache
export
endif
2024-06-18 08:45:21 +00:00
2023-02-12 12:40:54 +00:00
.DEFAULT_GOAL :=
.PHONY: default
default: \
out/release.env \
out/manifest.txt \
out/airgap.iso
## Primary targets
out/airgap.iso: Containerfile $(shell git ls-files rootfs)
docker build \
--progress=plain \
--output type=local,rewrite-timestamp=true,dest=out \
2024-08-03 05:05:27 +00:00
--build-arg VERSION="$(VERSION)" \
--build-arg GIT_REF="$(GIT_REF)" \
--build-arg GIT_AUTHOR="$(GIT_AUTHOR)" \
--build-arg GIT_KEY="$(GIT_KEY)" \
--build-arg GIT_TIMESTAMP="$(GIT_TIMESTAMP)" \
$(NO_CACHE) \
-f Containerfile \
.
## Development Targets
.PHONY: vm
2024-06-17 18:56:18 +00:00
vm: vm-bios
.PHONY: vm-bios
vm-bios: out/airgap.iso
qemu-system-x86_64 \
2024-06-17 18:56:18 +00:00
-m 4G \
-machine pc \
2024-06-17 18:56:18 +00:00
-serial stdio \
2024-06-26 07:46:56 +00:00
-usb \
-device sdhci-pci \
-device sd-card,drive=external \
-usbdevice tablet \
2024-06-26 07:46:56 +00:00
-drive id=external,if=none,format=raw,file=out/sdcard.img \
-display gtk,show-menubar=off,zoom-to-fit=on \
-cdrom "out/airgap.iso"
2020-07-24 10:07:39 +00:00
2024-06-17 18:56:18 +00:00
.PHONY: vm-efi
2024-06-18 08:45:21 +00:00
vm-efi: out/airgap.iso
qemu-system-x86_64 \
-m 4G \
2024-06-17 18:56:18 +00:00
-machine pc \
-serial stdio \
-bios /usr/share/ovmf/OVMF.fd \
2024-06-26 07:46:56 +00:00
-usb \
-device sdhci-pci \
-device sd-card,drive=external \
-usbdevice tablet \
2024-06-26 07:46:56 +00:00
-drive id=external,if=none,format=raw,file=out/sdcard.img \
-display gtk,show-menubar=off,zoom-to-fit=on \
-cdrom "out/airgap.iso"
## Signing, Verification, and Release Targets
.PHONY: clean
clean:
rm -rf out
.PHONY: release
release: default
rm -rf dist/*
cp -R out/release.env out/airgap.iso out/manifest.txt dist/
.PHONY: sign
sign:
set -e; \
git config --get user.signingkey 2>&1 >/dev/null || { \
echo "Error: git user.signingkey is not defined"; \
exit 1; \
}; \
fingerprint=$$(\
git config --get user.signingkey \
| sed 's/.*\([A-Z0-9]\{16\}\).*/\1/g' \
); \
gpg --armor \
--detach-sig \
--output dist/manifest.$${fingerprint}.asc \
dist/manifest.txt
.PHONY: verify
verify: | dist/manifest.txt
set -e; \
for file in dist/manifest.*.asc; do \
echo "\nVerifying: $${file}\n"; \
gpg --verify $${file} dist/manifest.txt; \
done;
.PHONY: reproduce
reproduce: clean | out
2024-08-03 04:58:30 +00:00
$(MAKE) REPRODUCE=true
diff -q out/manifest.txt dist/manifest.txt;
out:
mkdir -p $@
2024-08-03 04:44:19 +00:00
out/release.env: $(shell git ls-files) | out
echo 'VERSION=$(VERSION)' > out/release.env
echo 'GIT_REF=$(GIT_REF)' >> out/release.env
echo 'GIT_AUTHOR=$(GIT_AUTHOR)' >> out/release.env
echo 'GIT_KEY=$(GIT_KEY)' >> out/release.env
echo 'GIT_TIMESTAMP=$(GIT_TIMESTAMP)' >> out/release.env
out/manifest.txt: out/airgap.iso out/release.env | out
openssl sha256 -r \
out/airgap.iso \
out/release.env \
| sed -e 's/ \*out\// /g' -e 's/ \.\// /g' \
> $@