From f6cc3f3ea3a41b2a29029fa0c7b6e88c3cbc8b4d Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Wed, 29 Oct 2025 11:54:20 -0400 Subject: [PATCH] Initial working concept for aarch64 --- build/Dockerfile.aarch64 | 20 ++++++ build/bootstrap/Dockerfile.alarm-base | 7 ++ build/bootstrap/alarm-signing-key.asc | 51 ++++++++++++++ build/bootstrap/create-alarm-base.sh | 99 +++++++++++++++++++++++++++ 4 files changed, 177 insertions(+) create mode 100644 build/Dockerfile.aarch64 create mode 100644 build/bootstrap/Dockerfile.alarm-base create mode 100644 build/bootstrap/alarm-signing-key.asc create mode 100755 build/bootstrap/create-alarm-base.sh diff --git a/build/Dockerfile.aarch64 b/build/Dockerfile.aarch64 new file mode 100644 index 0000000..2dcbdb7 --- /dev/null +++ b/build/Dockerfile.aarch64 @@ -0,0 +1,20 @@ +FROM omarchy-alarm-base:latest + +RUN pacman-key --init && \ + pacman-key --populate archlinuxarm + +RUN pacman -Syu --noconfirm && \ + pacman -S --noconfirm base-devel git sudo wget jq gnupg + +RUN pacman-key --recv-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 --keyserver keys.openpgp.org && \ + pacman-key --lsign-key 40DFB630FF42BCFFB047046CF0134EE680CAC571 + +RUN useradd -m -G wheel builder && \ + echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers + +USER builder +WORKDIR /src + +RUN mkdir -p ~/.gnupg && chmod 700 ~/.gnupg + +CMD ["/build/build.sh"] diff --git a/build/bootstrap/Dockerfile.alarm-base b/build/bootstrap/Dockerfile.alarm-base new file mode 100644 index 0000000..2f9fd6e --- /dev/null +++ b/build/bootstrap/Dockerfile.alarm-base @@ -0,0 +1,7 @@ +FROM scratch + +ADD ArchLinuxARM-aarch64-latest.tar.gz / + +ENV LANG=en_US.UTF-8 + +CMD ["/usr/bin/bash"] diff --git a/build/bootstrap/alarm-signing-key.asc b/build/bootstrap/alarm-signing-key.asc new file mode 100644 index 0000000..c043b82 --- /dev/null +++ b/build/bootstrap/alarm-signing-key.asc @@ -0,0 +1,51 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +fx6y8+A0kBiaAmcY01U/upYXeHs= +=AIgD +-----END PGP PUBLIC KEY BLOCK----- diff --git a/build/bootstrap/create-alarm-base.sh b/build/bootstrap/create-alarm-base.sh new file mode 100755 index 0000000..b5fccdc --- /dev/null +++ b/build/bootstrap/create-alarm-base.sh @@ -0,0 +1,99 @@ +#!/bin/bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BUILD_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" + +source "$BUILD_ROOT/helpers/message-helpers.sh" + +TARBALL_URL="http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz" +TARBALL_MD5_URL="http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz.md5" +TARBALL_SIG_URL="http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz.sig" +ALARM_KEY_ID="68B3537F39A313B3E574D06777193F152BDBE6A6" + +TARBALL_FILE="$SCRIPT_DIR/ArchLinuxARM-aarch64-latest.tar.gz" +MD5_FILE="$SCRIPT_DIR/ArchLinuxARM-aarch64-latest.tar.gz.md5" +SIG_FILE="$SCRIPT_DIR/ArchLinuxARM-aarch64-latest.tar.gz.sig" + +print_header "Arch Linux ARM Bootstrap" + +print_info "This will create the omarchy-alarm-base:latest Docker image" +print_info "Source: https://archlinuxarm.org/platforms/armv8/generic" +echo "" + +if docker images | grep -q "omarchy-alarm-base.*latest"; then + print_warning "Image omarchy-alarm-base:latest already exists" + read -p "Rebuild it? (y/N): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + print_info "Skipping bootstrap" + exit 0 + fi +fi + +cd "$SCRIPT_DIR" + +print_info "Downloading ALARM aarch64 tarball (~450MB)..." +if [[ -f "$TARBALL_FILE" ]]; then + print_info "Tarball already exists, skipping download" +else + wget -O "$TARBALL_FILE" "$TARBALL_URL" +fi + +print_info "Downloading checksum and signature..." +wget -O "$MD5_FILE" "$TARBALL_MD5_URL" || true +wget -O "$SIG_FILE" "$TARBALL_SIG_URL" || true + +if [[ -f "$MD5_FILE" ]]; then + print_info "Verifying MD5 checksum..." + if md5sum -c "$MD5_FILE"; then + print_success "✓ MD5 checksum verified" + else + print_error "MD5 checksum verification failed" + exit 1 + fi +fi + +if [[ -f "$SIG_FILE" ]]; then + print_info "Verifying GPG signature..." + + if ! gpg --list-keys "$ALARM_KEY_ID" &>/dev/null; then + print_info "Importing ALARM signing key..." + if [[ -f "$SCRIPT_DIR/alarm-signing-key.asc" ]]; then + gpg --import "$SCRIPT_DIR/alarm-signing-key.asc" + else + gpg --keyserver keyserver.ubuntu.com --recv-keys "$ALARM_KEY_ID" + fi + fi + + if gpg --verify "$SIG_FILE" "$TARBALL_FILE"; then + print_success "✓ GPG signature verified" + else + print_error "GPG signature verification failed" + exit 1 + fi +else + print_warning "No signature file found, skipping GPG verification" +fi + +print_info "Building Docker image from tarball..." + +docker build --platform linux/arm64 -t omarchy-alarm-base:latest -f "$SCRIPT_DIR/Dockerfile.alarm-base" "$SCRIPT_DIR" + +if [[ $? -eq 0 ]]; then + print_success "Successfully created omarchy-alarm-base:latest" + echo "" + print_info "Testing the image..." + docker run --rm --platform linux/arm64 omarchy-alarm-base:latest uname -a + echo "" + print_success "Bootstrap complete!" + print_info "You can now build the aarch64 builder: docker build -f build/Dockerfile.aarch64" +else + print_error "Failed to create Docker image" + exit 1 +fi + +print_info "Cleaning up downloaded files..." +rm -f "$TARBALL_FILE" "$MD5_FILE" "$SIG_FILE" + +print_success "Done!"