Initial commit

main
root 2021-12-06 13:22:09 +00:00 committed by Menci
commit 657ff2ec0e
No known key found for this signature in database
GPG Key ID: 175973D9764BC89F
9 changed files with 409 additions and 0 deletions

57
.github/workflows/build.yaml vendored 100644
View File

@ -0,0 +1,57 @@
name: Build and Push
on:
workflow_dispatch:
schedule:
- cron: '0 6 * * *'
env:
IMAGE_NAME: menci/archlinuxarm
jobs:
build:
strategy:
fail-fast: false
matrix:
target:
- tag: base
package-group: base
- tag: base-devel
package-group: base base-devel
name: ${{ matrix.target.tag }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Generate Tag List
run: |
echo "TAGS<<EOF" >> $GITHUB_ENV
DATE="$(date +'%Y%m%d')"
echo $IMAGE_NAME:$TAG >> $GITHUB_ENV
echo $IMAGE_NAME:$TAG-$DATE.$RUN_ID >> $GITHUB_ENV
if [[ "$TAG" == "base" ]]; then
echo $IMAGE_NAME:latest >> $GITHUB_ENV
fi
echo "EOF" >> $GITHUB_ENV
env:
TAG: ${{ matrix.target.tag }}
RUN_ID: ${{ github.run_id }}
- name: Build and Push
uses: docker/build-push-action@v2
with:
platforms: linux/arm64
push: true
tags: ${{ env.TAGS }}
build-args: |
PACKAGE_GROUP=${{ matrix.target.package-group }}

27
Dockerfile 100644
View File

@ -0,0 +1,27 @@
ARG PACKAGE_GROUP=base
FROM alpine:3.15 AS bootstrapper
COPY pacman /pacman
RUN \
apk add arch-install-scripts pacman-makepkg && \
cat /pacman/repos >> /etc/pacman.conf && \
cp -r /pacman/keyrings /usr/share/pacman/ && \
pacman-key --init && \
pacman-key --populate && \
mkdir /rootfs && \
/pacman/pacstrap-docker /rootfs $PACKAGE_GROUP && \
echo "en_US.UTF-8 UTF-8" > /rootfs/etc/locale.gen && \
echo "LANG=en_US.UTF-8" > /rootfs/etc/locale.conf && \
chroot /rootfs locale-gen && \
rm -rf /rootfs/var/lib/pacman/sync/* /root/pacman
FROM scratch
COPY --from=bootstrapper /rootfs/ /
ENV LANG=en_US.UTF-8
RUN \
ln -sf /usr/lib/os-release /etc/os-release && \
pacman-key --init && \
pacman-key --populate && \
rm -rf /etc/pacman.d/gnupg/{openpgp-revocs.d/,private-keys-v1.d/,pubring.gpg~,gnupg.S.}*
CMD ["/usr/bin/bash"]

21
LICENSE 100644
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Menci
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

18
README.md 100644
View File

@ -0,0 +1,18 @@
# Docker Image for Arch Linux ARM
[![Build and Push](https://github.com/Menci/docker-archlinuxarm/actions/workflows/build.yaml/badge.svg)](https://github.com/Menci/docker-archlinuxarm/actions/workflows/build.yaml)
This is the Docker image for Arch Linux ARM. All images are built on GitHub Actions automatically.
Just just like the official Arch Linux amd64 image, it has two tags:
* `base` (default): installed only the package group `base`.
* `base-devel`: installed the package group `base-devel`.
And, the pamcan lsign-key is also removed for [security reasons](https://gitlab.archlinux.org/archlinux/archlinux-docker/-/blob/bc4d9f8ec5bdcbedefc96a2a1beaf33f01c07812/README.md#principles).
# Under the Hood
The Dockerfile uses a Alpine Linux container to install `pacman` and bootstrap the Arch Linux ARM rootfs. Since `pacstrap` uses `mount`, it doesn't run in an unprivileged Docker container. I found the tool [`pacstrap-docker`](https://github.com/lopsided98/archlinux-docker/blob/d5a80b90aea37eee43bcc7efeaea69880a4aada7/pacstrap-docker) ([LICENSE](https://github.com/lopsided98/archlinux-docker/blob/d5a80b90aea37eee43bcc7efeaea69880a4aada7/LICENSE)) as a replacement.
After bootstrapping, the rootfs will be copied to a new container from `scratch` (aka. an empty file system), which will be commited as the result image.

View File

@ -0,0 +1,3 @@
02922214DE8981D14DC2ACABBC704E86B823CD25:4:
9D22B7BB678DC056B1F7723CB55C5315DCD9EE1A:4:
69DD6C8FD314223E14362848BF7EEF7A9C6B5765:4:

View File

@ -0,0 +1,238 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=5FlG
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=X/kt
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFLbDM0BEADC2zpL3p4Jxy4CRBCTufwq6Jr+QfDcKmNN4cMJkJfdf8HgbD4E
oZt5A0zqWiuNXOodvZAM0BrY8UrhvZpBDXVtTk/WdTTh7SQiPKOlHGIx1JwaPOdL
3ui6Clje/QURsSPALaOXzV+vEduKqz5vkj3v3k4OkMrIB4mAWEy/bPsvSFz4v23K
3wNjsR0Z4hrAS3CLVp8r7UCwhbocJKAxqujNJCqvI2l7xLKxc8htNWf5sroFJ7hE
FizBh+h3WXXJ5ayy0eyhZqxP1heqjUHF0Tmy8KNfimwQFOBCVgurtpg90VjF/fBJ
dtkmAvpsb8XeqXb5tqoXpqgbJcp3M8s6kvHs3H1tHascW4JHPUHwxQ2WYZ9ih/7m
9HejHmlG+w6BTMPr3J9YeKOjMU1YEDhQOr3tcKoEVjuznMK2qp+xzoTo9TGAV8FP
DPS66IKm/N6D8GfBxDLoqX32/58NyR6f+MctWxIwRCgGATzPLkeVCjr7JPCSAByC
VaaAr0P+ekC2SEuY+2HvCs7VOF0TsVUCPAYWI9fzkJHcH2bYac1VMeu2FMK6FbxO
A5Oc1Bl5jikJVuZEPPMYDVGZKSiTXArfkXh1D6Txa27++AJXfgGkJQiCBc8PHuro
Mhz5ycK6N8kuxOrTlhbS/4sB18ox5VLeI1vXhkXikCAZ8lTG4EMMvOZzQQARAQAB
tE1NaWNoYWVsIEJyb3duIChBcmNoTGludXggQVJNIE1hc3RlciBLZXkpIDxtYnJv
d25AbWFzdGVyLWtleS5hcmNobGludXhhcm0ub3JnPokCOAQTAQIAIgUCUtsMzQIb
AwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQv37vepxrV2UFjQ//QJHE5d5s
6DPyDdu9XTADN23oVkDiub5CW3/mhQapPi+t9ZTE5giwh+IuMtJPghW9cuN23CYH
1RrrGJcLGZtuoQMBb/sw4/pLgo7UkQUdWfEsauIypydbwGwS/v7GsL9SJU6WTiqf
29skg4Qv5YB91rz0yCzV+7URBEyQR46AVlIaDjWrEzUi7wcXewLf0sXZOLY+bCA6
dsBvDMJTcQeAsDmgnH4mJXC9KXYNx1T0RVe5qNRzPLECN0ecxWtErMbpkj83qrnm
fGPnherSGA7DLV1xjyYtzlfhCsynx54hKwoNROVsuxfrsvheTrrr5y0BVgEf9cFg
PHsOyiBgp0wVy+GBt9W1f1MebgJ5/sUelm2eFr7zeOqMs1eSwcilOju9Dx4txBTl
8I9AIqAz38TjnsuX6JFMkJlqbjG/cXcY8MFWXxGewgWHlqJWpVbpaDePv5WA4ajL
Q6eZTOmdqzEwlR7zxWeby/UC8NjlOmu7KZ4HDNP/Qks8XVUtFgg1YLfPdxMIIzrN
Vx3ic9r27cLv/NCzqEwBjgi7A1xm6X+8xocUM9q2qR1/9daQ7ScJzbFgQMijkdkh
q/F9TiNE20IrFDNJCsIZfCkXKdIWciPum32+0lGvwSUqE/QWGJd+vuHOVqxa3Uhk
iaMQmavviFB/MlyupCWGisVmpCJ33W6fhua5Ag0EUtsMzQEQALlft0QSeXWDR5MK
+1jgnY8wL7UpjfBHA46Aow/W8oxAaQmmmx8cxV17PeootOXJrfPw+crNUWYM1r6W
3Us5bvFjjIJuIEbqqcPYArRBpIzeOLoNGaRIgfG9rUgM4Q5bUbS3pEdCbPf93yBD
XldVckAY8E8LBaF4vBBDvUNFJahYUUd0P2e/46bD6nRf5R237P7J/bpT+y9xvGYZ
0sJZO0hDYcrDH/5L4m4TJ3eaEmbIZ5AL/PDWHQweH+eIKETxwCMgvX9cRFywYCM+
DavF/JPlbD3OhgpadS6cwxrfPKiKuqDkmRr/y3rdcs9fgLLYIvja60T6+f6fkBF8
av8DVze9Clm4ozv2AbUXbDgU/PrJOyPqOPy6NpFt7yj6sNe+5QFxKtlGpm5J2QSl
VjuxcrLKYvKEE3Ocghj4x6oOdl8pCeMZRMo7wP9Jl2mSg3pkJvQgvNLabw8oRe0U
YVRxKIf33LyOWi0Rwtnn/pnXul826uNehFkoXWWIelA5Yy30tHIECiXUwiPg0g84
RwYakVulRJ4UJimjjcubYO1isCUXCWd0ftESipj4i3xM3aJQeBRN5XEvubaxQWJ4
K/099oPfbosRo5Xv7YolFXmlAeEg0BF12nVHmjM45CzDfN7mOnyh6ukUw3y7mHhS
XAoe8kl1cNa+snRrGZCaJCLZJHSZABEBAAGJAh8EGAECAAkFAlLbDM0CGwwACgkQ
v37vepxrV2XI7RAAkqxKf/MPfYW5Flo1TCq4ExUcdJIsHAYafFwTJZiP91hhjswB
IY2z0ardSxgK9EyNWp7/OryATT+ZFbG5VJ+AiHLj/8wJ8lNiurq0ARWmcE7bKIGH
AFcsjZOVnvYe+eWSf64lrz0SdfjnHW0b0/qiy+dCz+jgbZBFR8GMuI4xTcXp+nWn
TtQay9iDHRvPRMURKYALi+KG/nW3SbG8r4rGYpqnmrR8wLgDQ2JHPO+wFIiIGmDS
pY0PiH6IFhYFuyVGGYrumKmgwZpqn47s8E5IBXvgP2naey360sO60GbS6gkREsI9
lXnj/wisQoMMu/WJZUcITCMbYwX4I1sPQjOOgJUDZRCEJLJ2QYPJKB+dPA1yAJ70
X+twODToz366pLHZMuab7klDcDk6iXG1vEvok5+zmbHxWKbG5pmwBEN7TP1b953P
ZeexH2vUw3gRAqH+1+u5FSB/1EA8r1dDQEHIpmER3AfdbRTl31CgNCuWTupzhHTy
v/DrVYrfjf+4SBvxTU0PabOXJqUuyv4LgjJSeJ0ddJtzz76Wp5I4Vtu2prH7wEJr
G/DE8IEVPpw/eoy4IsHJpBbqrwVS7RvwnW38gBQ2MdEzzrobENyd0GfD7g2nWQGg
9ZjNPdeERrlwDm3y0bZl4+FWFSR6viI52kR5rvhnt8itROmqLhDtG1pvwVQ=
=7TM/
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
8+A0kBiaAmcY01U/upYXeHs=
=YwSO
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,31 @@
#!/bin/bash
out() { printf "$1 $2\n" "${@:3}"; }
error() { out "==> ERROR:" "$@"; } >&2
die() { error "$@"; exit 1; }
(( $# )) || die "No root directory specified"
newroot=$1; shift
pacman_args=("${@:-base}")
if [[ $EUID -ne 0 ]]; then
die "This script must be run as root"
fi
[[ -d $newroot ]] || die "%s is not a directory" "$newroot"
echo 'Creating install root at %s' "$newroot"
mkdir -m 0755 -p "$newroot"/var/{cache/pacman/pkg,lib/pacman,log} "$newroot"/{dev,run,etc}
mkdir -m 1777 -p "$newroot"/tmp
mkdir -m 0555 -p "$newroot"/{sys,proc}
echo 'Creating /dev/null in new root'
mknod "$newroot/dev/null" c 1 3
echo 'Installing packages to %s' "$newroot"
if ! pacman -r "$newroot" -Sy --noconfirm "${pacman_args[@]}"; then
die 'Failed to install packages to new root'
fi
echo 'Deleting /dev/null from new root'
rm "$newroot/dev/null"

14
pacman/repos 100644
View File

@ -0,0 +1,14 @@
[core]
Server = http://mirror.archlinuxarm.org/$arch/$repo
[extra]
Server = http://mirror.archlinuxarm.org/$arch/$repo
[community]
Server = http://mirror.archlinuxarm.org/$arch/$repo
[alarm]
Server = http://mirror.archlinuxarm.org/$arch/$repo
[aur]
Server = http://mirror.archlinuxarm.org/$arch/$repo