Merge branch 'mixed-bag' into 'master'

Mixed bags of fixes and polish

See merge request archlinux/archlinux-docker!78
This commit is contained in:
hashworks 2023-09-16 13:47:17 +00:00
commit 4c107498cf
3 changed files with 69 additions and 34 deletions

View File

@ -37,6 +37,8 @@ lint:
- releases - releases
- tags - tags
# This is an implicit gitlab stage, with the build.env variables used by either
# other stages or auxiliarry scripts.
get_version: get_version:
stage: .pre stage: .pre
script: script:
@ -56,8 +58,12 @@ get_version:
.rootfs: .rootfs:
stage: rootfs stage: rootfs
parallel:
matrix:
- GROUP: [base, base-devel]
before_script: before_script:
- pacman -Syu --noconfirm make devtools fakechroot fakeroot - pacman -Syu --noconfirm make fakechroot fakeroot
- pacman -Sdd --noconfirm devtools
script: script:
- make $PWD/output/Dockerfile.$GROUP - make $PWD/output/Dockerfile.$GROUP
artifacts: artifacts:
@ -72,9 +78,6 @@ rootfs:
- releases - releases
- schedules - schedules
- tags - tags
parallel:
matrix:
- GROUP: [base, base-devel]
rootfs:secure: rootfs:secure:
extends: .rootfs extends: .rootfs
@ -87,12 +90,12 @@ rootfs:secure:
except: except:
- tags - tags
- releases - releases
parallel:
matrix:
- GROUP: [base, base-devel]
.image: .image:
stage: image stage: image
parallel:
matrix:
- GROUP: [base, base-devel]
tags: tags:
- vm - vm
before_script: before_script:
@ -111,9 +114,6 @@ image:build:
- releases - releases
- schedules - schedules
- tags - tags
parallel:
matrix:
- GROUP: [base, base-devel]
before_script: before_script:
- pacman -Syu --noconfirm podman - pacman -Syu --noconfirm podman
- podman login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY" - podman login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
@ -128,9 +128,6 @@ image:build:secure:
- schedules - schedules
except: except:
- tags - tags
parallel:
matrix:
- GROUP: [base, base-devel]
before_script: before_script:
- pacman -Syu --noconfirm podman - pacman -Syu --noconfirm podman
- podman login -u "$GITLAB_PROJECT_USER" -p "$GITLAB_PROJECT_TOKEN" "$CI_REGISTRY" - podman login -u "$GITLAB_PROJECT_USER" -p "$GITLAB_PROJECT_TOKEN" "$CI_REGISTRY"
@ -146,9 +143,6 @@ image:publish:secure:
- vm - vm
only: only:
- tags - tags
parallel:
matrix:
- GROUP: [base, base-devel]
before_script: before_script:
- pacman -Syu --noconfirm podman - pacman -Syu --noconfirm podman
- podman login -u "$DOCKERHUB_USERNAME" -p "$DOCKERHUB_ACCESS_TOKEN" "docker.io" - podman login -u "$DOCKERHUB_USERNAME" -p "$DOCKERHUB_ACCESS_TOKEN" "docker.io"

View File

@ -10,9 +10,11 @@ define rootfs
install -Dm644 /usr/share/devtools/pacman.conf.d/extra.conf $(BUILDDIR)/etc/pacman.conf install -Dm644 /usr/share/devtools/pacman.conf.d/extra.conf $(BUILDDIR)/etc/pacman.conf
cat pacman-conf.d-noextract.conf >> $(BUILDDIR)/etc/pacman.conf cat pacman-conf.d-noextract.conf >> $(BUILDDIR)/etc/pacman.conf
sed 's/Include = /&rootfs/g' < $(BUILDDIR)/etc/pacman.conf > pacman.conf
fakechroot -- fakeroot -- pacman -Sy -r $(BUILDDIR) \ fakechroot -- fakeroot -- pacman -Sy -r $(BUILDDIR) \
--noconfirm --dbpath $(BUILDDIR)/var/lib/pacman \ --noconfirm --dbpath $(BUILDDIR)/var/lib/pacman \
--config $(BUILDDIR)/etc/pacman.conf \ --config pacman.conf \
--noscriptlet \ --noscriptlet \
--hookdir $(BUILDDIR)/alpm-hooks/usr/share/libalpm/hooks/ $(2) --hookdir $(BUILDDIR)/alpm-hooks/usr/share/libalpm/hooks/ $(2)
@ -66,10 +68,10 @@ $(OUTPUTDIR)/Dockerfile.base-devel: $(OUTPUTDIR)/base-devel.tar.zst
# The following is for local builds only, it is not used by the CI/CD pipeline # The following is for local builds only, it is not used by the CI/CD pipeline
.PHONY: oci-image-base .PHONY: image-base
image-base: $(OUTPUTDIR)/Dockerfile.base image-base: $(OUTPUTDIR)/Dockerfile.base
${OCITOOL} build -f $(OUTPUTDIR)/Dockerfile.base -t archlinux/archlinux:base $(OUTPUTDIR) ${OCITOOL} build -f $(OUTPUTDIR)/Dockerfile.base -t archlinux/archlinux:base $(OUTPUTDIR)
.PHONY: oci-image-base-devel .PHONY: image-base-devel
image-base-devel: $(OUTPUTDIR)/Dockerfile.base-devel image-base-devel: $(OUTPUTDIR)/Dockerfile.base-devel
${OCITOOL} build -f $(OUTPUTDIR)/Dockerfile.base-devel -t archlinux/archlinux:base-devel $(OUTPUTDIR) ${OCITOOL} build -f $(OUTPUTDIR)/Dockerfile.base-devel -t archlinux/archlinux:base-devel $(OUTPUTDIR)

View File

@ -1,16 +1,25 @@
# Arch Linux OCI Images # Arch Linux OCI Images
[![pipeline status](https://gitlab.archlinux.org/archlinux/archlinux-docker/badges/master/pipeline.svg)](https://gitlab.archlinux.org/archlinux/archlinux-docker/-/commits/master) [![pipeline status][pipeline]][commits]
Arch Linux provides OCI-Compliant container images in multiple repositories: Arch Linux provides OCI-Compliant container images in multiple repositories:
* [Weekly in the official DockerHub library](https://hub.docker.com/_/archlinux): `podman pull docker.io/library/archlinux:latest` or `docker pull archlinux:latest` * [Weekly in the official DockerHub library][hub-arch]:
* [Daily in our DockerHub repository](https://hub.docker.com/r/archlinux/archlinux): `podman pull docker.io/archlinux/archlinux:latest` or `docker pull archlinux/archlinux:latest` `podman pull docker.io/library/archlinux:latest` or `docker pull archlinux:latest`
* [Daily in our quay.io repository](https://quay.io/repository/archlinux/archlinux): `podman pull quay.io/archlinux/archlinux:latest` or `docker pull quay.io/archlinux/archlinux:latest` * [Daily in our DockerHub repository][hub-containers]:
* [Daily in our ghcr.io repository](https://github.com/archlinux/archlinux-docker/pkgs/container/archlinux): `podman pull ghcr.io/archlinux/archlinux:latest` or `docker pull ghcr.io/archlinux/archlinux:latest` `podman pull docker.io/archlinux/archlinux:latest` or `docker pull archlinux/archlinux:latest`
* [Daily in our quay.io repository][quay-containers]:
`podman pull quay.io/archlinux/archlinux:latest` or `docker pull quay.io/archlinux/archlinux:latest`
* [Daily in our ghcr.io repository][ghcr-containers]:
`podman pull ghcr.io/archlinux/archlinux:latest` or `docker pull ghcr.io/archlinux/archlinux:latest`
Two versions of the image are provided: `base` (approx. 150 MiB) and `base-devel` (approx. 260 MiB), containing the respective meta package. Both are available as tags with `latest` pointing to `base`. Additionally, images are tagged with their date and build job number, f.e. `base-devel-20201118.0.9436`. Two versions of the image are provided: `base` (approx. 150 MiB) and `base-devel`
(approx. 260 MiB), containing the respective meta package. Both are available as
tags with `latest` pointing to `base`. Additionally, images are tagged with their
date and build job number, f.e. `base-devel-20201118.0.9436`.
While the images are regularly kept up to date it is strongly recommended running `pacman -Syu` right after starting a container due to the rolling release nature of Arch Linux. While the images are regularly kept up to date it is strongly recommended
running `pacman -Syu` right after starting a container due to the rolling
release nature of Arch Linux.
## Principles ## Principles
* Provide the Arch experience in a Docker image * Provide the Arch experience in a Docker image
@ -29,34 +38,64 @@ While the images are regularly kept up to date it is strongly recommended runnin
## Building your own image ## Building your own image
[This repository](https://gitlab.archlinux.org/archlinux/archlinux-docker) contains all scripts and files needed to create an OCI image for Arch Linux. [This repository][self] contains all scripts and files needed to create an OCI
image for Arch Linux.
### Dependencies ### Dependencies
Install the following Arch Linux packages: Install the following Arch Linux packages:
* make * make
* devtools * devtools
* docker * podman
* fakechroot * fakechroot
* fakeroot * fakeroot
Make sure your user can directly interact with Podman (i.e. `podman info` works). Make sure your user can directly interact with Podman (i.e. `podman info` works).
### Usage ### Usage
Run `make oci-image-base` to build the `archlinux:base` image with the Run `make image-base` to build the `archlinux:base` image with the `base` meta
`base` meta package installed. You can also run `make oci-image-base-devel` to package installed. You can also run `make image-base-devel` to build the image
build the image `archlinux:base-devel` which additionally has the `base-devel` group installed. `archlinux:base-devel` which additionally has the `base-devel` group installed.
## Pipeline ## Pipeline
### Daily releases ### Daily releases
Daily images are build with scheduled [GitLab CI](https://gitlab.archlinux.org/archlinux/archlinux-docker/-/blob/master/.gitlab-ci.yml) using our own runner infrastructure. Initially root filesystem archives are constructed and provided in our [package registry](https://gitlab.archlinux.org/archlinux/archlinux-docker/-/packages). The released multi-stage Dockerfile downloads those archives and verifies their integrity before unpacking it into an OCI image layer. Images are built using [podman](https://podman.io/), which also publishes them to our external repositories. Daily images are build with scheduled [GitLab CI][in-tree-CI] using our own
runner infrastructure. Initially root filesystem archives are constructed and
provided in our [package registry][self-package-registry]. The released
multi-stage Dockerfile downloads those archives and verifies their integrity
before unpacking it into an OCI image layer. Images are built using
[podman](https://podman.io/), which also publishes them to our external
repositories.
### Weekly releases ### Weekly releases
Weekly releases to the official DockerHub library use the same pipeline as daily builds. Updates are provided as automatic [pull requests](https://github.com/docker-library/official-images/pulls?q=is%3Apr+archlinux+is%3Aclosed+author%3Aarchlinux-github) to the [official-images library](https://github.com/docker-library/official-images/blob/master/library/archlinux), whose GitHub pipeline will build the images using our provided rootfs archives and Dockerfiles. Weekly releases to the official DockerHub library use the same pipeline as
daily builds. Updates are provided as automatic [pull requests][github-docker-prs]
to the [official-images library][github-docker-arch], whose GitHub pipeline will
build the images using our provided rootfs archives and Dockerfiles.
### Development ### Development
Changes in Git feature branches are built and tested using the pipeline as well. Development images are uploaded to our [GitLab Container Registry](https://gitlab.archlinux.org/archlinux/archlinux-docker/container_registry). Changes in Git feature branches are built and tested using the pipeline as well.
Development images are uploaded to our
[GitLab Container Registry][self-container-registry].
[pipeline]: https://gitlab.archlinux.org/archlinux/archlinux-docker/badges/master/pipeline.svg
[commits]: https://gitlab.archlinux.org/archlinux/archlinux-docker/-/commits/master
[hub-arch]: https://hub.docker.com/_/archlinux
[hub-containers]: https://hub.docker.com/r/archlinux/archlinux
[quay-containers]: https://quay.io/repository/archlinux/archlinux
[ghcr-containers]: https://github.com/archlinux/archlinux-docker/pkgs/container/archlinux
[self]: https://gitlab.archlinux.org/archlinux/archlinux-docker
[in-tree-CI]: https://gitlab.archlinux.org/archlinux/archlinux-docker/-/blob/master/.gitlab-ci.yml
[self-package-registry]: https://gitlab.archlinux.org/archlinux/archlinux-docker/-/packages
[github-docker-prs]: https://github.com/docker-library/official-images/pulls?q=is%3Apr+archlinux+is%3Aclosed+author%3Aarchlinux-github
[github-docker-arch]: https://github.com/docker-library/official-images/blob/master/library/archlinux
[self-container-registry]: https://gitlab.archlinux.org/archlinux/archlinux-docker/container_registry