diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +* diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f1862b5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +packages/* +!packages/.gitkeep +target/* +!target/.gitkeep diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..01bc63b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,64 @@ +FROM alpine:3.21 + +# Install build dependencies +# TODO: trim dependencies? +RUN apk update && apk add \ + build-base abuild \ + rustup \ + build-base \ + musl-dev \ + gcc \ + cmake \ + make \ + pkgconfig \ + perl \ + python3 \ + curl \ + git \ + llvm \ + clang \ + clang-libclang \ + protobuf-dev \ + libc-dev \ + linux-headers \ + freetype-dev \ + freetype-static \ + fontconfig-dev \ + fontconfig-static \ + bzip2-dev \ + bzip2-static \ + brotli-dev \ + brotli-static \ + expat-dev \ + expat-static \ + libx11-dev \ + libxcursor-dev \ + libxkbcommon-dev \ + libxkbcommon-static \ + wayland-dev \ + wayland-libs-client \ + wayland-libs-server \ + wayland-static \ + openssl-dev \ + openssl-libs-static \ + zlib-dev \ + zlib-static \ + libpng-dev \ + libpng-static \ + libwebp-dev \ + libwebp-static \ + tiff-dev \ + libjpeg-turbo-dev \ + libjpeg-turbo-static + +RUN rustup-init -y --default-toolchain stable + +# Set pkg-config to use static libraries +ENV PKG_CONFIG_ALLOW_STATIC=1 +ENV PKG_CONFIG_ALL_STATIC=1 + +# Slint/winit does not work when statically compiled +ENV RUSTFLAGS="-C target-feature=-crt-static" + +WORKDIR /build + diff --git a/README.md b/README.md new file mode 100644 index 0000000..1659cab --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# Alpine packages for mullvad-vpn + +## Setup + +1. Install `abuild` +2. Create keys: `abuild-keygen` + The keys will end up in ~/.abuild/, and will be mounted into the build container. +3. Remember to keep keys around. + +## Building + +``` +./podman-build.sh ./mullvad-vpn-slint +``` + +## Updating + +1. Update submodule +2. Either update `pkgver`. If so, set `pkgrel` to 0, + or bump `pkgrel` by 1. +3. `git commit -m "update packages"` diff --git a/abuild.conf b/abuild.conf new file mode 100644 index 0000000..7ff90e7 --- /dev/null +++ b/abuild.conf @@ -0,0 +1 @@ +PACKAGER_PRIVKEY="/key.rsa" diff --git a/packages/.gitkeep b/packages/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/podman-build.sh b/podman-build.sh new file mode 100644 index 0000000..81f87cd --- /dev/null +++ b/podman-build.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +set -ex +cd "$(dirname "$0")" + +package="$1" +builder_image="mullvad-slint-musl-builder" +. "$HOME/.abuild/abuild.conf" + +podman build . -f Dockerfile -t "$builder_image" +podman run --rm \ + -v "./$package":/build \ + -v ./abuild.conf:/root/.abuild/abuild.conf:ro \ + -v "$PACKAGER_PRIVKEY":/key.rsa:ro \ + -v "$PACKAGER_PRIVKEY.pub":/key.rsa.pub:ro \ + -v "$PACKAGER_PRIVKEY.pub":/etc/apk/keys/key.rsa.pub:ro \ + -v ./target:/cargo-target \ + -v ./packages:/root/packages \ + -e "CARGO_TARGET_DIR=/cargo-target" \ + -it \ + "$builder_image" \ + abuild -F + diff --git a/target/.gitkeep b/target/.gitkeep new file mode 100644 index 0000000..e69de29