Build packages on my own, separate from pmbootstrap

This commit is contained in:
Tony Garnock-Jones 2021-11-11 19:38:35 +01:00
parent 93d02e040a
commit a7dd8fc0bd
7 changed files with 186 additions and 0 deletions

5
packaging/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
.build-image.*
distfiles/
target/
synit-apk-key
synit-apk-key.pub

19
packaging/Dockerfile Normal file
View File

@ -0,0 +1,19 @@
ARG DOCKER_ARCH
FROM --platform=linux/${DOCKER_ARCH} alpine:latest
RUN sed -i -e s:https:http:g /etc/apk/repositories
ARG http_proxy
RUN http_proxy=${http_proxy} apk add bash sudo alpine-sdk linux-headers
ARG UID
ARG BUILD_USER
RUN adduser -D -u ${UID} ${BUILD_USER} && addgroup ${BUILD_USER} abuild
RUN echo "${BUILD_USER} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
ARG KEYFILE
COPY ${KEYFILE}.pub /etc/apk/keys/.
RUN mkdir -p /home/${BUILD_USER}/.abuild/
RUN echo "PACKAGER_PRIVKEY=/home/${BUILD_USER}/.abuild/signing-key.rsa" >> /home/${BUILD_USER}/.abuild/abuild.conf
USER ${BUILD_USER}
WORKDIR /data

68
packaging/Makefile Normal file
View File

@ -0,0 +1,68 @@
.PHONY: build-image build sign clean veryclean keyfile
# If you run:
# docker run --rm --name squid adricu/alpine-squid
# and set DOCKER_SQUID_CONTAINER=squid
# then you can avoid repeated downloads of a lot of alpine packages.
#
DOCKER_SQUID_CONTAINER?=squid
ifeq ($(DOCKER_SQUID_CONTAINER),)
DOCKER_SQUID_OPTS=
else
DOCKER_SQUID_OPTS=--link $(DOCKER_SQUID_CONTAINER):squid -e http_proxy=http://squid:3128/
HTTP_PROXY=http://$(shell docker inspect squid | preserves-tool convert -o unquoted --select '/ . "NetworkSettings" . "IPAddress"'):3128/
endif
ARCH?=aarch64
DOCKER_ARCH=$(shell ./map_docker_arch.sh $(ARCH))
KEYFILE?=$(CURDIR)/synit-apk-key
UID:=$(shell id -u)
GID:=$(shell id -g)
BUILD_USER?=build
DOCKER_CMD=\
mkdir -p $(CURDIR)/distfiles && \
docker run --platform linux/$(DOCKER_ARCH) -it --rm \
$(DOCKER_SQUID_OPTS) \
-v `pwd`:/data \
-v $(KEYFILE):/home/$(BUILD_USER)/.abuild/signing-key.rsa \
-v $(CURDIR)/distfiles:/var/cache/distfiles \
synit-build:$(ARCH)
build: build-image
$(DOCKER_CMD) make -f Makefile.internal build
sign: build-image
$(DOCKER_CMD) make -f Makefile.internalsign
%.apk:
clean:
rm -f .build-image.*
-docker rmi synit-build:aarch64
-docker rmi synit-build:x86_64
-docker rmi synit-build:armv7
veryclean: clean
rm -rf target
build-image: .build-image.$(ARCH)
.build-image.$(ARCH): $(KEYFILE)
docker buildx build \
--platform=linux/$(DOCKER_ARCH) \
--build-arg http_proxy=$(HTTP_PROXY) \
--build-arg DOCKER_ARCH=$(DOCKER_ARCH) \
--build-arg KEYFILE=$(KEYFILE:$(abspath $(dir $(KEYFILE)))/%=%) \
--build-arg UID=$(UID) \
--build-arg BUILD_USER=$(BUILD_USER) \
-t synit-build:$(ARCH) .
touch $@
keyfile: $(KEYFILE)
$(KEYFILE):
docker run -it --rm \
-v $(abspath $(dir $(KEYFILE))):/data \
alpine \
sh -c "apk add abuild && echo /data/$(notdir $(KEYFILE)) | abuild-keygen && chown $(UID):$(GID) /data/$(notdir $(KEYFILE))*"

View File

@ -0,0 +1,35 @@
# Expects to run from *within* alpine. -*- Makefile-gmake -*-
.PHONY: build sign
TARGET = $(CURDIR)/target
ARCH = $(shell apk --print-arch)
ARCH_TARGET = $(TARGET)/packages/$(ARCH)
SIGNING_KEY = $(HOME)/.abuild/signing-key.rsa
PACKAGES = \
squeak-vm.apk \
build: $(PACKAGES) sign
%.apk: $(ARCH_TARGET)
@echo proxy $$http_proxy
@cat ~/.abuild/abuild.conf
@echo "Building $*..."
@cd packages/$* && (unset MAKEFLAGS; abuild -F -P $(TARGET) deps && abuild -P $(TARGET))
$(ARCH_TARGET):
mkdir -p $@
%.checksum:
cd packages/$* && abuild checksum
sign: $(ARCH_TARGET)
rm -f $(ARCH_TARGET)/APKINDEX.tar.gz
cd $(ARCH_TARGET) && apk index -o APKINDEX.tar.gz --rewrite-arch $(ARCH) *.apk
abuild-sign -q -k $(HOME)/.abuild/signing-key.rsa $(ARCH_TARGET)/APKINDEX.tar.gz
clean:
veryclean: clean
rm -rf $(ARCH_TARGET)

1
packaging/README.md Normal file
View File

@ -0,0 +1 @@
# Packaging scripts for PostmarketOS

9
packaging/map_docker_arch.sh Executable file
View File

@ -0,0 +1,9 @@
#!/bin/sh
case $1 in
aarch64) echo arm64;;
x86_64) echo x86_64;;
armv7) echo armhf;;
*)
echo 'ERROR: Unknown Alpine ARCH '"$1" >&2
exit 1
esac

View File

@ -0,0 +1,49 @@
# Contributor: Tony Garnock-Jones <tonyg@leastfixedpoint.com>
# Maintainer: Tony Garnock-Jones <tonyg@leastfixedpoint.com>
pkgname=squeak-vm
pkgver=202107301330
pkgrel=0
pkgdesc="Squeak Spur stack (non-JIT) Virtual Machine"
url="https://opensmalltalk.org/"
arch="all"
license="MIT"
depends=""
makedepends="git bash linux-headers alsa-lib-dev openssl-dev libevdev-dev mesa-dev"
source="$pkgname-$pkgver.tar.gz::https://github.com/OpenSmalltalk/opensmalltalk-vm/archive/refs/tags/$pkgver.tar.gz"
builddir="$srcdir/opensmalltalk-vm-$pkgver"
options="!check"
build() {
PATH=$(echo "$PATH" | tr ':' '\n' | grep -v crossdirect | tr '\n' ':')
echo 'false' > ./scripts/checkSCCSversion
case "$CARCH" in
aarch64*)
cd build.linux64ARMv8
;;
*)
echo "Architecture $CARCH not yet supported"
exit 1
;;
esac
cd squeak.stack.spur/build
echo y | ./mvm
echo n | ./mvm
}
package() {
case "$CARCH" in
aarch64*)
cd products/sqstkspur64ARMv8linuxht
;;
*)
echo "Architecture $CARCH not yet supported"
exit 1
;;
esac
mkdir -p "$pkgdir/usr/lib/squeak"
cp -rp lib/squeak/*/. "$pkgdir/usr/lib/squeak/."
}
sha512sums="
3ea16d90bc64b53b1e865b7e7e84457d564b60de2b8a2179c52528c1c1a574177a4aa933b634de5dd8d82557ea1bd7e453a119dfabdad133dc47eca7c8ca6aa8 squeak-vm-202107301330.tar.gz
"