diff --git a/.github/workflows/build-deploy.yml b/.github/workflows/build-deploy.yml new file mode 100644 index 0000000..846052f --- /dev/null +++ b/.github/workflows/build-deploy.yml @@ -0,0 +1,66 @@ +name: Build and Deploy + +on: + push: + branches: + - master + pull_request: + branches: + - master + schedule: + - cron: '0 0 * * 0' # Run weekly on Sunday at midnight + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + arch: + - arm32v7 + - arm64v8 + steps: + - uses: actions/checkout@v2 + - name: Enable Docker experimental mode for image squashing + if: github.actor != 'nektos/act' + run: | + echo '{ "experimental": true }' | sudo tee /etc/docker/daemon.json + sudo systemctl restart docker + - name: Setup dependencies + run: | + sudo apt-get update && \ + sudo apt-get --yes --no-install-recommends install qemu-user-static + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + chmod -R g-w ./ + - name: Build images + run: ./build + env: + BUILD_ARCH: ${{ matrix.arch }} + DOCKER_ORG: ${{ secrets.DOCKER_USERNAME }} + - name: Deploy images + if: github.event_name != 'pull_request' + run: docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" && ./push + env: + BUILD_ARCH: ${{ matrix.arch }} + DOCKER_ORG: ${{ secrets.DOCKER_USERNAME }} + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + + manifests: + runs-on: ubuntu-latest + if: github.event_name != 'pull_request' + needs: + - build + steps: + - uses: actions/checkout@v2 + - name: Setup dependencies + run: docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" + env: + DOCKER_ORG: ${{ secrets.DOCKER_USERNAME }} + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + - name: Create Manifest + run: ./create-manifest + env: + DOCKER_ORG: ${{ secrets.DOCKER_USERNAME }} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 32dddb0..0000000 --- a/.travis.yml +++ /dev/null @@ -1,29 +0,0 @@ -dist: xenial -language: generic -sudo: required -go: - - stable -services: - - docker -env: - - BUILD_ARCH=arm32v7 - - BUILD_ARCH=arm64v8 -install: - - 'echo ''{ "experimental": true }'' | sudo tee /etc/docker/daemon.json' - - sudo systemctl restart docker - - sudo apt-get --yes --no-install-recommends install qemu-user-static -before_script: - - sudo ./prepare-qemu - - chmod -R g-w ./ -script: - - ./build -after_success: - - '[ "$TRAVIS_PULL_REQUEST" == "false" ] && docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" && ./push' - -jobs: - include: - - stage: deploy - name: "Create Manifest" - install: 'mkdir $HOME/.docker/ && echo ''{ "experimental": "enabled" }'' > $HOME/.docker/config.json' - before_script: docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" - script: ./create-manifest diff --git a/Dockerfile.arm32v7 b/Dockerfile.arm32v7 index b21f409..da933f6 100644 --- a/Dockerfile.arm32v7 +++ b/Dockerfile.arm32v7 @@ -7,7 +7,7 @@ RUN mkdir -p /archlinux/rootfs COPY pacstrap-docker /archlinux/ RUN ./pacstrap-docker /archlinux/rootfs \ - bash sed gzip pacman + bash sed gzip pacman archlinuxarm-keyring # Remove current pacman database, likely outdated very soon RUN rm rootfs/var/lib/pacman/sync/* diff --git a/Dockerfile.arm64v8 b/Dockerfile.arm64v8 index 6cd1fb9..5e3a387 100644 --- a/Dockerfile.arm64v8 +++ b/Dockerfile.arm64v8 @@ -7,7 +7,7 @@ RUN mkdir -p /archlinux/rootfs COPY pacstrap-docker /archlinux/ RUN ./pacstrap-docker /archlinux/rootfs \ - bash sed gzip pacman + bash sed gzip pacman archlinuxarm-keyring # Remove current pacman database, likely outdated very soon RUN rm rootfs/var/lib/pacman/sync/* diff --git a/README.md b/README.md index cfed3ca..2b0859f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Basic Arch Linux ARM Docker images [![Build Status](https://travis-ci.org/agners/archlinuxarm-docker.svg?branch=master)](https://travis-ci.org/agners/archlinuxarm-docker) +# Basic Arch Linux ARM Docker images [![Build and Deploy](https://github.com/agners/archlinuxarm-docker/actions/workflows/build-deploy.yml/badge.svg)](https://github.com/agners/archlinuxarm-docker/actions/workflows/build-deploy.yml) Docker images for Arch Linux ARM on AArch32 (ARMv7-A) and AArch64 (ARMv8-A). Built using native pacman and Docker multi-stage builds. Builds weekly by Travis CI on publicly visible infrastructure using Qemu emulation. @@ -16,7 +16,7 @@ Instead of using the multi-arch container above, you can also get the architectu | Tag | Update | Type | Description | |:------:|:----------:|:-------:|:-----------------------------------------------------------------------------------| -| latest | **weekly** | minimal | minimal Arch Linux ARM with pacman support | +| latest | **weekly** | minimal | minimal Arch Linux ARM with pacman support | ### Layer structure @@ -43,16 +43,15 @@ docker run -e TZ=Europe/Berlin agners/archlinuxarm ### Prerequisites - Docker with experimental mode on (required for squash) -- sudo or root is neccessary to setup binfmt for Qemu user mode emulation ### Building -- Prepare binfmt use with Qemu user mode using `sudo ./prepare-qemu` -- Run `BUILD_ARCH= ./build` to build +- Prepare binfmt use with Qemu user mode using `docker run --rm --privileged multiarch/qemu-user-static --reset -p yes` +- Run `BUILD_ARCH= DOCKER_ORG= ./build` to build - Use `BUILD_ARCH=arm32v7` for ARMv7 Aarch32 - Use `BUILD_ARCH=arm64v8` for ARMv8 Aarch64 -If you want to push the images, run `./push`. *But be aware you have no push access to the repos! Edit the scripts to push to custom Docker Hub locations!* +If you want to push the images, run `DOCKER_ORG= ./push`. ### Building from scratch diff --git a/build b/build index 0beea81..a110052 100755 --- a/build +++ b/build @@ -1,7 +1,7 @@ #!/bin/bash -ex DOCKER_ARCH=${BUILD_ARCH:-arm32v7} -DOCKER_ORG=agners +DOCKER_ORG=${DOCKER_ORG:-agners} DOCKER_IMAGE=archlinuxarm-${DOCKER_ARCH} TAG_DATE=$(date +'%Y%m%d') diff --git a/create-manifest b/create-manifest index e6e743f..c5c40be 100755 --- a/create-manifest +++ b/create-manifest @@ -1,6 +1,6 @@ #!/bin/bash -ex -DOCKER_ORG=agners +DOCKER_ORG=${DOCKER_ORG:-agners} DOCKER_IMAGE=archlinuxarm TAGS="latest $(date +'%Y%m%d')" @@ -8,8 +8,8 @@ TAGS="latest $(date +'%Y%m%d')" for TAG in $TAGS do docker manifest create --amend $DOCKER_ORG/$DOCKER_IMAGE:$TAG \ - $DOCKER_ORG/$DOCKER_IMAGE-arm32v7:$TAG \ - $DOCKER_ORG/$DOCKER_IMAGE-arm64v8:$TAG + $DOCKER_ORG/$DOCKER_IMAGE-arm32v7:$TAG \ + $DOCKER_ORG/$DOCKER_IMAGE-arm64v8:$TAG docker manifest annotate $DOCKER_ORG/$DOCKER_IMAGE:$TAG \ $DOCKER_ORG/$DOCKER_IMAGE-arm32v7:$TAG \ diff --git a/prepare-qemu b/prepare-qemu deleted file mode 100755 index a57687e..0000000 --- a/prepare-qemu +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -ex - -if [[ $EUID -ne 0 ]]; then - echo "This script must be run as root" - exit 1 -fi - -# Delete currently existing configurations -if [ -f /proc/sys/fs/binfmt_misc/qemu-arm ]; then - echo -1 > /proc/sys/fs/binfmt_misc/qemu-arm -fi -if [ -f /proc/sys/fs/binfmt_misc/qemu-aarch64 ]; then - echo -1 > /proc/sys/fs/binfmt_misc/qemu-aarch64 -fi - -echo ':qemu-arm:M:0:\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm-static:CF' > /proc/sys/fs/binfmt_misc/register - -echo ':qemu-aarch64:M:0:\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:CF' > /proc/sys/fs/binfmt_misc/register diff --git a/push b/push index ae3206c..8df7c00 100755 --- a/push +++ b/push @@ -1,7 +1,7 @@ #!/bin/bash -ex DOCKER_ARCH=${BUILD_ARCH:-arm32v7} -DOCKER_ORG=agners +DOCKER_ORG=${DOCKER_ORG:-agners} DOCKER_IMAGE=archlinuxarm-${DOCKER_ARCH} TAG_DATE=$(date +'%Y%m%d')