synit/experiments/alpine-standalone/apks/Makefile

107 lines
3.2 KiB
Makefile

# Originally based on a Makefile from the FRμIT project,
# https://fruit-testbed.org/, which is CC Attribution-ShareAlike 4.0
# licensed.
.PHONY: build sign clean
TARGET = $(shell pwd)/target
KEYFILE ?= $(shell pwd)/syndicate-system-apk-key.rsa
USER = builder
ARCH ?= $(shell apk --print-arch)
SU_CMD = su $(USER)
SU_CMD_PATH_OVERRIDE = PATH=/usr/sbin:/sbin:$$PATH
PACKAGES = \
build: $(PACKAGES) sign
# Packages added:
# - alpine-sdk for build support
# - shadow for `sg`
.prepare:
apk update && apk upgrade && apk add alpine-sdk shadow
[ -f /etc/apk/keys/$$(basename $(KEYFILE)).pub ] || cp $(KEYFILE).pub /etc/apk/keys/.
adduser -s /bin/sh -D $(USER) && \
echo "$(USER) ALL=(ALL) ALL" >> /etc/sudoers && \
addgroup $(USER) abuild && \
chown $(USER):$(USER) . && \
chown $(USER):$(USER) -R packages && \
mkdir -p /home/$(USER)/.abuild/ && \
cp -f $(KEYFILE) /home/$(USER)/.abuild/ && \
chmod 0400 /home/$(USER)/.abuild/$$(basename $(KEYFILE)) && \
chown $(USER):$(USER) /home/$(USER)/.abuild/$$(basename $(KEYFILE)) && \
echo "PACKAGER_PRIVKEY=/home/$(USER)/.abuild/$$(basename $(KEYFILE))" > /home/$(USER)/.abuild/abuild.conf && \
mkdir -p $(TARGET)/packages/$(ARCH) && \
chown -R $(USER):$(USER) $(TARGET)
addgroup $(shell id -un) abuild
mkdir -p /var/cache/distfiles && chmod a+w /var/cache/distfiles
touch .prepare
$(TARGET): .prepare $(PACKAGES)
%.apk: .prepare
@if [ -e packages/$*/APKBUILD ]; then \
echo "Building $*..."; \
cd packages/$* && sg abuild "abuild -F -P $(TARGET) deps" && $(SU_CMD) -c "$(SU_CMD_PATH_OVERRIDE) abuild -P $(TARGET)"; \
else \
echo "Fetching $*..."; \
apk fetch -o $(TARGET)/packages/$(ARCH) -R $*; \
fi
%.checksum: .prepare
cd packages/$* && $(SU_CMD) -c "$(SU_CMD_PATH_OVERRIDE) abuild checksum"
sign:
rm -f $(TARGET)/packages/$(ARCH)/APKINDEX.tar.gz
cd $(TARGET)/packages/$(ARCH) && apk index -o APKINDEX.tar.gz --rewrite-arch $(ARCH) *.apk
sg abuild "abuild-sign -q -k $(KEYFILE) $(TARGET)/packages/$(ARCH)/APKINDEX.tar.gz"
tgz:
cd $(TARGET)/ && tar cvzf syndicate-system-apks.tar.gz packages
clean.packages:
@if [ $$(grep $(USER) /etc/passwd | wc -l) -ne 0 ] && [ -e /usr/bin/abuild ]; then \
for package in packages/*; do \
if [ -e $$package/APKBUILD ]; then \
echo "Cleaning $$package..."; \
$(SU_CMD) -c "cd $$package && $(SU_CMD_PATH_OVERRIDE) abuild clean"; \
fi; \
done; \
fi
clean: clean.packages
@[ "$$(grep $(USER) /etc/passwd)" = "" ] || deluser $(USER)
@[ ! -e /etc/sudoers ] || sed -i 's/^$(USER).*$$//' /etc/sudoers
@[ "$$(mount | grep ' on /var/cache/distfiles ')" = "" ] || umount -f /var/cache/distfiles
@chown -R $$(id -u -n):$$(id -g -n) .
rm -f .prepare
cleantarget:
rm -rf $(TARGET)
cleancache:
@if [ -e /usr/bin/abuild ]; then \
for package in packages/*; do \
if [ -e $$package/APKBUILD ]; then \
echo "Cleaning cache of $$package..."; \
cd $$package && sg abuild "abuild -F cleancache"; \
fi; \
done; \
fi
@rm -rf /var/cache/distfiles/*
clean.%:
@if [ -e packages/$* ]; then \
echo "Cleaning $*..."; \
cd packages/$* && sg abuild "abuild -F clean" && sg abuild "abuild -F cleancache"; \
else \
echo "Package $* does not exist"; \
fi
cleanapks:
rm -f $(TARGET)/syndicate-system-apks.tar.gz
cleanall: clean cleantarget cleancache cleanapks