forked from synit/synit
107 lines
3.2 KiB
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
|