Compare commits

...

342 Commits
v1.0 ... master

Author SHA1 Message Date
Justin Kromlinger
0d7c4c0017
Revert "Temporarily drop profile.d/80-systemd-osc-context to avoid machine-id nsf error spam"
This reverts commit 2ae497c16d7647c505b1cb39e19659d26193a5a0.

Resolves #107.
2025-12-19 17:09:57 +01:00
Justin Kromlinger
b8a77b2c87
Add temporary workaround until pacman 7.1.0 rollout is done 2025-12-14 19:12:51 +01:00
Justin Kromlinger
60e4a6c9bb
Fix pacman v7.1.0 sandbox config 2025-12-14 18:46:41 +01:00
Justin Kromlinger
7bdde954b0
Fix fakechroot build with pacman v7.1.0
Every `pacman -Sy*` call executed with fakeroot will fail with the new pacman release.
Until we have an alternative we need to add `--disable-sandbox-filesystem`.

See https://gitlab.archlinux.org/archlinux/archlinux-wsl/-/merge_requests/77
2025-12-13 18:38:33 +01:00
hashworks
d886fb482e Merge branch 'renovate/alpine-3.x' into 'master'
Update alpine Docker tag to v3.23

See merge request archlinux/archlinux-docker!93
2025-12-11 15:45:25 +01:00
renovate
d08dcc818c Update alpine Docker tag to v3.23 2025-12-11 15:42:26 +01:00
Justin Kromlinger
14a5131df7
Revert "Debug #108"
This reverts commit f7a03d6b9d48bff92af94b6d5bf2f54e0e408260.
2025-12-11 15:41:42 +01:00
Justin Kromlinger
f7a03d6b9d
Debug #108 2025-12-10 16:36:05 +01:00
hashworks
fd06401276 Merge branch 'fastly-mirror' into 'master'
Use new fastly CDN as default mirror

See merge request archlinux/archlinux-docker!92
2025-10-30 16:29:48 +01:00
Justin Kromlinger
648ec9e246
Use new fastly CDN as default mirror 2025-10-30 14:12:46 +01:00
Justin Kromlinger
2ae497c16d
Temporarily drop profile.d/80-systemd-osc-context to avoid machine-id nsf error spam
See #107
2025-10-08 16:41:01 +02:00
hashworks
744b1c5c6a Merge branch 'renovate/alpine-3.x' into 'master'
Update alpine Docker tag to v3.22

See merge request archlinux/archlinux-docker!91
2025-06-01 14:31:27 +02:00
renovate
cb7b8eb35d
Update alpine Docker tag to v3.22 2025-05-30 18:25:59 +00:00
Justin Kromlinger
ae0527df18
Disable sandbox in oci images due to missing kernel landlock
Resolves the `error: restricting filesystem access failed because the
landlock ruleset could not be applied!` when running pacman.

Closes #103.
2025-01-31 12:22:15 +01:00
hashworks
cac42fb2e6 Merge branch 'renovate/alpine-3.x' into 'master'
Update alpine Docker tag to v3.21

See merge request archlinux/archlinux-docker!90
2025-01-31 11:01:54 +00:00
renovate
b232b17c94
Update alpine Docker tag to v3.21 2024-12-05 22:24:48 +00:00
Justin Kromlinger
61cb892bfc
Replace httpie dependency with curl
Closes #102
2024-07-04 19:28:27 +02:00
Justin Kromlinger
bd60189bf8
Add documentation about GITLAB_PROJECT_TOKEN 2024-06-13 13:13:54 +02:00
Justin Kromlinger
6b71ded64e
Revert "Use predefined env variable for GitLab curl requests"
This reverts commit 210098dcc3c8da9c5c7a63bdf2db5abc8054c3af.
2024-06-06 14:00:51 +02:00
Justin Kromlinger
210098dcc3
Use predefined env variable for GitLab curl requests 2024-06-06 13:53:41 +02:00
Justin Kromlinger
c87f7c259d
Use predefined env variable for GitLab Registry Login 2024-06-06 13:41:26 +02:00
Justin Kromlinger
98cd79111d
Use daily images for CI 2024-01-01 16:45:55 +01:00
hashworks
19c9adc97f Merge branch 'renovate/alpine-3.x' into 'master'
Update alpine Docker tag to v3.19

See merge request archlinux/archlinux-docker!88
2023-12-09 21:58:12 +00:00
renovate
7229f536b4
Update alpine Docker tag to v3.19 2023-12-08 02:23:29 +00:00
Justin Kromlinger
337a19c996
Run release jobs on weekly publish-dockerhub schedule 2023-11-19 16:05:21 +01:00
Justin Kromlinger
f1fa835d97
Fix typo 2023-11-19 15:51:11 +01:00
Justin Kromlinger
9d2060177d
Add pre-release dep to publish-dockerhub, which provides BUILD_COMMIT
Fixes https://gitlab.archlinux.org/archlinux/archlinux-docker/-/jobs/192975
2023-11-19 15:44:39 +01:00
Justin Kromlinger
a162c7ebbe
Fix typo 2023-11-18 17:24:36 +01:00
Justin Kromlinger
aaffed1742
Move "inofficial" DockerHub description update out of "official" publish-dockerhub job
See https://gitlab.archlinux.org/archlinux/archlinux-docker/-/merge_requests/86#note_133349

Also adds a link where the description of the "offical" DockerHub
description is maintained.
2023-11-18 17:07:58 +01:00
hashworks
7dd6177315 Merge branch 'releasing' into 'master'
Remove misc workarounds, split/rework release stage

See merge request archlinux/archlinux-docker!86
2023-11-18 16:07:40 +00:00
Emil Velikov
76c722561f Split the release stage, reorder
Currently the release stage does 3-4 fairly distinct things:
 - uploads the rootfs tarballs to the Gitlab Generic Packages repo
 - creates and commits Dockerfile* to the release branch, for the
   Dockerhub/Github publishing
 - creates a Gitlab release, referencing the Packages artefacts and the
   release branch
 - updates the Dockerhub webpage

Currently these are intertwined, where the docker website is updated
first, the packages are uploaded, then the Dockerfiles are created and
committed and finally the release is made.

As result we intermix the tools required and permissions.

Split out the Gitlab release into it's own stage, using the yaml driven
format. This should save us some escaping/quoting mayhem.

In addition, move the Dockerhub webpage update as part of the github
publishing, since they require the same permissions.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-11-18 14:58:56 +00:00
Emil Velikov
d251908f91 Use the PACKAGE_REGISTRY_URL during releasing
The bug that mandated the get-public-download-for-generic-package.sh
use has been fixed a while ago.

Directly use the URL variable and drop the no longer needed script.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-11-18 14:58:56 +00:00
Emil Velikov
ee1b64a7ff Use rootfs_file across the board, rename and quote
Currently things are a bit mixed up - just rename all the files to
include the BUILD_VERSION and consistently use the rootfs_file variable.

Throw in some quotes while in there.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-11-18 14:58:56 +00:00
Emil Velikov
bf931bf033 Don't fetch the tarballs during publish-dockerhub
They are not needed at this point, so don't fetch them.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-11-18 14:58:56 +00:00
Emil Velikov
b06e3250d5 Remove bot workaround for the test stage
The issue referenced was fixed a few months after we added the
workaround.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-11-18 14:58:56 +00:00
Emil Velikov
93e0f66a3a Remove not applicable before_script
The image template, has a before_script stage which is overridden by all
instances that use it. Just drop it - it's rather misleading.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-11-18 14:58:56 +00:00
Justin Kromlinger
34b3f4f131
Push multilib-devel to official dockerhub 2023-11-18 15:58:16 +01:00
Justin Kromlinger
49b83e2f55
Fix missing \ 2023-11-01 16:51:57 +01:00
hashworks
199f647532 Merge branch 'multilib-devel' into 'master'
Introduce multilib-devel

See merge request archlinux/archlinux-docker!81
2023-10-31 19:40:54 +00:00
Emil Velikov
244718b5c9 Also release the multilib-devel container
So it can be useful for the wider community. I've intentionally left it
out as separate commit, since:
 - it is untested
 - there is lots of duplication that can/should be fixed
 - if publishing seems like an overkill, people can locally still use it

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-10-22 19:20:46 +01:00
Emil Velikov
5d404ea4bd Introduce multilib-devel container
Can be used to build 32bit (aka multilib) packages. With all the
simplification and de-duplication done with the previous commits, this
turns out to be a fairly simple job ;-)

Notes:
 - there is currently no test stage for this container
 - the release bits will come with next commit

v2:
 - preserve extra.conf for base/base-devel

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-10-22 19:20:06 +01:00
Justin Kromlinger
0ba93e3ec9
Fix copy command removal 2023-10-22 15:45:29 +02:00
Justin Kromlinger
fb332d2218
Provide rootfs file name to make-dockerfile.sh script
Fixes https://gitlab.archlinux.org/archlinux/archlinux-docker/-/jobs/186685
2023-10-22 15:37:37 +02:00
Justin Kromlinger
82f4544917
Make sure bash is available in release job for non-posix scripts 2023-10-22 15:04:02 +02:00
Justin Kromlinger
97fcff2abf
Fix make-dockerfile.sh call 2023-10-22 14:48:22 +02:00
hashworks
b34fe7a1e0 Merge branch 'dedup-cleanup' into 'master'
Misc de-duplication and cleanups

See merge request archlinux/archlinux-docker!85
2023-10-16 21:20:41 +00:00
Emil Velikov
ed0440cca2 Parametrise Github/Dockerhub dockerfile
Not a big win as-is. It will make the upcoming introduction of
multilib-devel a bit saner.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-10-02 12:48:41 +01:00
Emil Velikov
d1254eeee4 scripts/make-dockerfile.sh: reuse in the release stage
Bonus point, we actually error out when the git command fails.

v2:
 - fix curl quoting
 - sed match-complete-line-and-remove
 - inline update make-dockerfile.sh variables

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-10-02 12:46:17 +01:00
Emil Velikov
0a6910cade Use pattern rules in the makefile
Less duplication ftw, specially with multilib-devel on the horizon.
Unfortunately we'd need to tag the file pattern rules as precious,
otherwise make thinks they are intermediate files and nukes them.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-10-02 12:45:57 +01:00
Emil Velikov
64cb18a0c3 scripts/make-dockerfile.sh: drop TEMPLATE_ROOTFS_RELEASE_URL
The field is an inline comment, which by default is not present in the
podman log. Plus we do have the exact URL list a couple of lines further
down.

Haven't seen any other Dockerfile have one either, so let's nuke it.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-10-02 11:53:30 +01:00
Emil Velikov
a972ead2e0 scripts/make-dockerfile.sh: rework TEMPLATE_ROOTFS_DOWNLOAD handling
Currently the TEMPLATE_ROOTFS_DOWNLOAD handling is overly complicated.
For the local builds, we set a ROOTFS=$GROUP.tar.zst. While for remote
builds, we:
 - invoke curl to fetch the remote tarball - ok
 - do curl and shell escaping contortions to prints the filename - ehhh
   - that we already now
   - and rely upon to not change, otherwise sha256sum will fail

Just use a dummy "true", for the local builds and a normal curl
command otherwise.

v2:
 - don't call curl in a sub-shell - no longer needed

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-10-02 11:51:59 +01:00
Emil Velikov
2f43fc413a scripts/make-dockerfile.sh: tweak sha256 sum handling
Drop the spurious cat, we already echo the value the like above so it's
pretty clear what it is in the logs.

While here, rename the file to the what's commonly used by us (see the
ISOs) and others, while removing the misleading "rootfs.tar" - we're
having a tar.zst tarball.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-25 23:49:58 +01:00
Emil Velikov
c4b62bb18f scripts/make-rootfs.sh: move non-wrapper calls further up
Move the cp/ln calls outside of the WRAPPER call block. The files that
are referenced are either disowned by pacman or are explicitly "backup"
files, such that pacman will not override them.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-25 23:49:58 +01:00
Emil Velikov
0067757d21 scripts/make-rootfs.sh: drop pacman gnupg removal
The files are explicitly omitted from the tarball via the excludes file.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-25 23:49:52 +01:00
Emil Velikov
f737d64397 Move shell scripts out of the Makefile
Embedding one pieces of code into another (shell script into a makefiles
in this case) is rarely pretty. Split things up, as appropriate.

While here, simplify the rootfs in a few ways:
 - pass only the extra non-base (and effectively group name) package
 - add a handy variable for the fakeroot/fakechroot combo
 - split and rewrap long lines

As a bonus point, this makes it easier to use pattern rules in the
makefile - which will be handy for the upcoming multilib-devel
group/target.

Plus we can check the scripts via shellcheck/etc CI stage, as follow-up.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-25 23:40:44 +01:00
Emil Velikov
b213655855 De-duplicate podman tag/push commands
The commands are identical across the three hosts. Just flesh that into
a simple for loop.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-25 23:40:44 +01:00
Emil Velikov
069a4dee59 Drop duplicate parallel/matrix
The option was moved the to template and an earlier commit
reintroduced/copied them back seemingly by mistake.

Cc: nl6720 <nl6720@gmail.com>
Fixes: ca9957f ("Do not use secure runners on forks")
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-25 23:40:44 +01:00
Kristian Klausen
e688cede58
Merge branch 'install-git' into 'master'
Install git, add to the README

See merge request archlinux/archlinux-docker!83
2023-09-25 20:21:11 +02:00
Emil Velikov
92315d6eaa Install git, add to the README
We use git in the makefile to create the container revision label.
This did not have any affect outside the local containers, since the
official ones use the CI_COMMIT_TAG variable from the CI.

Fixes: 5ec09f5 ("gitlab-ci: install devtools without its dependencies")
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-25 18:20:34 +00:00
Kristian Klausen
486eadb65e
Merge branch 'omit-tar-artefacts' into 'master'
Remove the uncompressed tar artefact

See merge request archlinux/archlinux-docker!82
2023-09-23 00:44:36 +02:00
Emil Velikov
cda5b61390 Remove the uncompressed tar artefact
The file may be useful locally, but for the other stages we don't need
it. Explicitly remove it since it tends to be 3-4x the size of
everything else.

v2
 - switch from rm to artefacts:exclude:

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-22 22:56:31 +01:00
Kristian Klausen
6d3ea0c032
Fix incorrect cosign verify commands
The identity has been changed[1] to also include the "CI config path"
and the ref path should be the git tag of the release.

Also remove `jq` as it is only nice to have, not needed and it masks the
return code of `cosign verify`.

[1] a4b3e128c1

Fixes: 8317be4 ("Sign the images with sigstore's fulcio/rekor")
2023-09-21 06:42:36 +02:00
Kristian Klausen
c432cbcbe2
Add use-sigstore-attachments: true to the image:publish:secure job
Fixes: 8317be4 ("Sign the images with sigstore's fulcio/rekor")
2023-09-21 06:12:54 +02:00
Justin Kromlinger
797702633e
Add sigstore-param-file.yaml to releases branch
Fixes https://gitlab.archlinux.org/archlinux/archlinux-docker/-/jobs/179122#L222
2023-09-16 16:24:18 +02:00
hashworks
9bbf04eac9 Merge branch 'sigstore' into 'master'
Sign the images with sigstore's fulcio/rekor

Closes #77

See merge request archlinux/archlinux-docker!77
2023-09-16 14:04:11 +00:00
Justin Kromlinger
6090c65290
README 80 column wrap, cleanup 2023-09-16 16:00:30 +02:00
Kristian Klausen
8317be4d2d
Sign the images with sigstore's fulcio/rekor
The ecosystem is moving towards sigstore and we are federated with the
public fulcio instance[1], so let's sign our images. Cosign is not used,
but the sigstore feature built into podman, which works basically the
same way as cosign.

[1] https://github.com/sigstore/fulcio/pull/1214

Fix #77
2023-09-16 15:55:50 +02:00
hashworks
3be9448db8 Merge branch 'fix-ci-on-forks' into 'master'
Do not use secure runners on forks

See merge request archlinux/archlinux-docker!66
2023-09-16 13:54:47 +00:00
nl6720
ca9957f7d1
Do not use secure runners on forks
Forks may not have access to secure runners.
2023-09-16 15:50:45 +02:00
hashworks
4c107498cf Merge branch 'mixed-bag' into 'master'
Mixed bags of fixes and polish

See merge request archlinux/archlinux-docker!78
2023-09-16 13:47:17 +00:00
Emil Velikov
ffd47f737e
Use the in-tree mirrorlist
Currently we use the system mirrorlist for the pacman invocation.
The system config may or may not be identical to the in-tree one - as
one of my dev machines was kind enough to remind me.

The tooling should be self-contained and leak as few builder specific as
possible.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-16 15:37:25 +02:00
Emil Velikov
9c32b05bfa
README: rewrap, use standalone references
Re-wrap the readme to about 80 columns and use standalone references for
the long URLs. Reduces the eye-bleed for casual contributors.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-16 15:37:22 +02:00
Emil Velikov
615bfa55ea
Drop erroneous oci- prefix for image-base{,-devel} targets
The targets never had a docker/oci prefix. Update the PHONY targets in
the Makefile and the README.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-16 15:30:21 +02:00
Emil Velikov
8589e40bd8
README: s/docker/podman/ in the requirements
We're switched to podman a while ago.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-16 15:30:20 +02:00
Emil Velikov
9d3774ce35
gitlab-ci: de-duplicate matrix option
Just push the parallel/matrix into the templates.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-16 15:30:19 +02:00
Emil Velikov
5ec09f5357
gitlab-ci: install devtools without its dependencies
We only need devtools for the pacman.conf. While currently we install a
dozen+ of extra dependencies, weighting in at over 100M.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-16 15:30:18 +02:00
Emil Velikov
c90b1ab2f1
gitlab-ci: document the get_version implicit nature
Had a silly moment a while back, assuming the stage is no longer needed.
That's not the case, so add a brief commit about that.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2023-09-16 15:30:17 +02:00
hashworks
4618632641 Merge branch 'xeonacid-master-patch-23599' into 'master'
Delete `package group` in README

See merge request archlinux/archlinux-docker!79
2023-09-16 13:18:40 +00:00
Acid Xeon
e39d28dcce Delete package group in README
`base-devel` is also meta package now.
2023-08-12 09:19:34 +00:00
Justin Kromlinger
301942f9e5
Replace temporary link 2023-06-27 00:00:07 +02:00
Justin Kromlinger
e4875c7e36
Add ghcr.io daily target 2023-06-21 20:54:10 +02:00
Justin Kromlinger
3ef8b2737b
Fix dockerfile lint 2023-06-20 12:16:16 +02:00
Justin Kromlinger
c42fc6a251
Switch back to alpine to fix official DockerHub builds
Reverts a76517d48c788dab06537b45964ef0ea26fb1e06
2023-06-20 12:13:56 +02:00
Justin Kromlinger
17c4a88a88
Use docker.io for Dockerfile verify step to please DockerHub Official Builds
https://github.com/docker-library/official-images/actions/runs/5300787500/jobs/9594533073?pr=14883
2023-06-20 11:54:26 +02:00
Justin Kromlinger
d2ad02b012
Fix release of latest tags 2023-06-16 11:52:15 +02:00
Justin Kromlinger
10fb4f9e4f
Be more explicit about runner tags 2023-06-15 22:39:14 +02:00
Justin Kromlinger
af3c3dcff0
Fix SUID test 2023-06-15 17:20:33 +02:00
Justin Kromlinger
87d3f29452
Drop image tag for VM runners, install podman
The executer gives us a fresh Arch VM with a shell.
2023-06-15 17:05:30 +02:00
Justin Kromlinger
62d2b0fa76
Update base image just in case 2023-06-15 16:34:30 +02:00
Justin Kromlinger
b2322a4600
Ignore DL3007 since we use :latest 2023-06-15 16:34:29 +02:00
Justin Kromlinger
a76517d48c
Eat our own dog food, drop renovate since we no longer pin any versions 2023-06-15 16:34:28 +02:00
Justin Kromlinger
6aa7dcc287
Replace kaniko with podman
Resolves #71, fixes #70.
2023-06-15 16:33:58 +02:00
Justin Kromlinger
0b819be950
Fix pull commands for the DockerHub library images 2023-06-14 14:46:20 +02:00
Justin Kromlinger
9df81a9cbf
Add daily releases to quay.io repository
See #73.
2023-06-14 14:43:34 +02:00
Justin Kromlinger
de5fe5cbe7
Avoid creation of .pacnew files for every image
This was just confusing to users, since a pacdiff on a new Arch container
should always exit cleanly.
2023-06-14 14:06:27 +02:00
hashworks
a395f71b63 Merge branch 'renovate/gcr.io-kaniko-project-executor-1.x' into 'master'
Update gcr.io/kaniko-project/executor Docker tag to v1.11.0

See merge request archlinux/archlinux-docker!75
2023-06-09 09:22:48 +00:00
renovate
db6f1e46e4
Update gcr.io/kaniko-project/executor Docker tag to v1.11.0 2023-06-08 23:23:51 +00:00
hashworks
cd6d85768d Merge branch 'renovate/gcr.io-kaniko-project-executor-1.x' into 'master'
Update gcr.io/kaniko-project/executor Docker tag to v1.10.0

See merge request archlinux/archlinux-docker!69
2023-06-08 18:46:03 +00:00
renovate
6a986d0426 Update gcr.io/kaniko-project/executor Docker tag to v1.10.0 2023-06-08 18:34:19 +00:00
Justin Kromlinger
875fdf5e26
Fix missing | in sed 2023-06-08 20:31:21 +02:00
Justin Kromlinger
fb1d1a3499
Drop duplicate labels 2023-06-08 20:20:09 +02:00
Justin Kromlinger
e2d91e1ea7
Merge branch 'master' of ssh://gitlab.archlinux.org:222/archlinux/archlinux-docker 2023-06-08 20:18:13 +02:00
Justin Kromlinger
74dc761af8
Add additional opencontainers labels, fix version id 2023-06-08 20:18:07 +02:00
Justin Kromlinger
c3cc18f520
Add opencontainers labels to the image
Resolves #75.
2023-06-08 19:01:27 +02:00
hashworks
4afa2a09af Merge branch 'renovate/alpine-3.x' into 'master'
Update alpine Docker tag to v3.18

See merge request archlinux/archlinux-docker!73
2023-05-26 20:23:08 +00:00
renovate
9e02744bb9 Update alpine Docker tag to v3.18 2023-05-26 20:10:41 +00:00
hashworks
c2f9a8ac85 Merge branch 'devtools-1.0.0' into 'master'
Adjust the path to "pacman-extra.conf" for devtools>=1.0.0

See merge request archlinux/archlinux-docker!74
2023-05-26 20:09:51 +00:00
Kristian Klausen
44c5b4f90e
Adjust the path to "pacman-extra.conf" for devtools>=1.0.0 2023-05-26 22:01:42 +02:00
hashworks
6a1f7a1965 Merge branch 'units' into 'master'
README: update image sizes and use proper units

See merge request archlinux/archlinux-docker!67
2023-04-19 10:56:12 +00:00
nl6720
80898b1da2
README: update image sizes and use proper units
The sizes are liberally rounded values from https://gitlab.archlinux.org/archlinux/archlinux-docker/container_registry/2.
2023-04-19 08:56:41 +03:00
hashworks
a866d979b3 Merge branch 'vorburger-master-patch-31338' into 'master'
Fix minor typo in Dockerfile.template

See merge request archlinux/archlinux-docker!70
2023-04-16 21:18:11 +00:00
Michael Vorburger.ch
d89f8be698
Fix minor typo in Dockerfile.template 2023-04-16 23:08:02 +02:00
hashworks
d60d2173b6 Merge branch 'renovate/alpine-3.x' into 'master'
Update alpine Docker tag to v3.17

See merge request archlinux/archlinux-docker!71
2022-11-17 15:39:28 +00:00
renovate
fcd0328e30
Update alpine Docker tag to v3.17 2022-11-16 22:23:54 +00:00
hashworks
c80251c457 Revert "Merge branch 'renovate/gcr.io-kaniko-project-executor-1.x' into 'master'"
This reverts merge request !68
2022-07-21 10:31:24 +00:00
hashworks
68795f4ab5 Merge branch 'renovate/gcr.io-kaniko-project-executor-1.x' into 'master'
Update dependency gcr.io/kaniko-project/executor to v1.8.1

See merge request archlinux/archlinux-docker!68
2022-07-19 19:29:11 +00:00
renovate
e8e68a0448
Update dependency gcr.io/kaniko-project/executor to v1.8.1 2022-07-19 19:17:47 +00:00
hashworks
da9db8e3cf Merge branch 'renovate/configure' into 'master'
Configure Renovate

See merge request archlinux/archlinux-docker!62
2022-06-30 06:36:59 +00:00
renovate
3e25a3ff6c
Add renovate.json 2022-06-29 09:23:39 +00:00
hashworks
1c25d3ae65 Merge branch 'x11-locale' into 'master'
keep some more /usr/share/X11/locale files

See merge request archlinux/archlinux-docker!63
2022-06-29 08:35:29 +00:00
Pace Willisson
5e137bab0f keep some more /usr/share/X11/locale files 2022-06-25 19:11:45 -04:00
hashworks
6c28971174 Merge branch 'pacman-key-populate' into 'master'
Do not pass a keyring name to pacman-key

See merge request archlinux/archlinux-docker!65
2022-06-19 15:07:10 +00:00
nl6720
f3f1068b7a
Do not pass a keyring name to pacman-key
If the keyring is not specified, pacman-key will simply use all keyrings from /usr/share/pacman/keyrings/.
2022-06-17 18:22:48 +03:00
hashworks
531f908607 Merge branch 'C.UTF-8' into 'master'
Use C.UTF-8

See merge request archlinux/archlinux-docker!64
2022-06-17 13:40:08 +00:00
nl6720
18e8a88aec
Use C.UTF-8
The glibc 2.35-6 package ships with the C.UTF-8 locale included.
This means there is now a UTF-8 locale available by default and en_US.UTF-8, which requires editing /etc/locale.gen and running locale-gen, is not needed anymore.
2022-06-17 08:28:46 +03:00
Justin Kromlinger
5a681fd335
Add date and build number as VERSION_ID to /etc/os-release
Resolves #68
2022-06-16 17:04:25 +02:00
Justin Kromlinger
64d4832a71
Update alpine in multistage Dockerfile template
Resolves https://github.com/docker-library/official-images/pull/12535#issuecomment-1142701007
2022-06-01 12:26:26 +02:00
Justin Kromlinger
de90f8c38d
Use zst in CI 2022-04-15 10:40:25 +02:00
hashworks
5380ff0684 Merge branch 'zstd' into 'master'
Replace xz with zstd

Closes #63

See merge request archlinux/archlinux-docker!61
2022-04-13 23:08:01 +00:00
Justin Kromlinger
47a614ade9
Add --long to zstd call 2022-04-14 01:02:30 +02:00
Justin Kromlinger
d47ca225ee
Replace xz with zstd
Closes #63.

Using `zstd -T0 -8` instead of `gz -T0 -9` results in a larger rootfs
file, but requires significantly less time and memory:

```

zstd  -3 115M   1.60user 0.18system 0:00.32elapsed 557%CPU (0avgtext+0avgdata  130212maxresident)k
zstd  -6 107M   5.03user 0.24system 0:00.72elapsed 729%CPU (0avgtext+0avgdata  149660maxresident)k
zstd  -7 106M   7.33user 0.29system 0:01.04elapsed 728%CPU (0avgtext+0avgdata  174368maxresident)k
zstd  -8 105M   8.45user 0.27system 0:01.23elapsed 707%CPU (0avgtext+0avgdata  173008maxresident)k
zstd  -9 104M   9.35user 0.37system 0:01.42elapsed 683%CPU (0avgtext+0avgdata  335920maxresident)k
zstd -13 104M  30.57user 0.31system 0:04.76elapsed 648%CPU (0avgtext+0avgdata  498740maxresident)k
zstd -19  91M 132.06user 0.53system 0:21.98elapsed 603%CPU (0avgtext+0avgdata 1106328maxresident)k
xz    -9  81M 105.71user 0.58system 0:58.24elapsed 182%CPU (0avgtext+0avgdata 2006964maxresident)k
```

Additionally this drops bash from the build Dockerfile, since `SHELL` is
not OCI compliant.
2022-04-13 17:48:07 +02:00
Justin Kromlinger
30d0b5b130
Parametrize 'docker' command
Allows 'make image-base DOCKER=podman'

Originally from: Grzegorz Klimaszewski <2612193+grzegorzk@users.noreply.github.com>
https://github.com/archlinux/archlinux-docker/pull/38/files

Closes #51.
2022-04-13 16:46:25 +02:00
hashworks
ff51588eac Merge branch 'switch-to-geoip-mirror' into 'master'
Switch to GeoIP mirror

See merge request archlinux/archlinux-docker!60
2022-04-13 13:38:54 +00:00
Evangelos Foutras
0b36cae9ab
Switch to GeoIP mirror
Currently consists of 3 geographically diverse boxes which are managed
by DevOps. (See commit 9f65f99c6b2330e7e2fbceb988115c5cc65db09f in the
archlinux/infrastructure project.)
2022-04-13 04:30:04 +03:00
Justin Kromlinger
bc4d9f8ec5
Also use ignore-var-run in image:publish:secure
See 52729f99118540eb7c3b711c43fc371e46465d8b
2021-11-13 13:21:54 +01:00
Justin Kromlinger
eaafb9773e
Use fixed kaniko image tag 2021-11-01 14:19:49 +01:00
Justin Kromlinger
52729f9911
Kaniko: whitelist-var-run has been deprecated by ignore-var-run 2021-10-21 09:45:42 +02:00
Justin Kromlinger
3cc06c313a
Remove unused pacman config
Not used, copied from devtools since 2cbbe5a7201944c58f35af2fccc068dbe0b43d0c.

Resolves #58.
2021-10-21 08:14:28 +02:00
Justin Kromlinger
ed6f8898e0
Make sure --private-token is set before the release-cli create subcommand 2021-10-18 12:03:30 +02:00
Justin Kromlinger
ce17571d1f
Set private token of release-cli call to project token
As suggested by @klausenbusk, this ensures that the releases are created
by the project bot/user instead of the schedule-owner.
2021-10-17 16:22:55 +02:00
hashworks
cd3beac574 Merge branch 'fix/localBuild' into 'master'
Avoid curl call on local builds

See merge request archlinux/archlinux-docker!59
2021-09-19 00:17:00 +00:00
Justin Kromlinger
e8d7daa790
Avoid curl call on local builds 2021-09-18 16:11:09 +02:00
Justin Kromlinger
3c694ab7f1
Drop --continue-at from curl call
It is incompatible with -J and done automatically. See [1].

[1] https://gitlab.archlinux.org/archlinux/archlinux-docker/-/jobs/34434#L72
2021-09-18 13:04:19 +02:00
Justin Kromlinger
20c6261eb0
Revert "Drop -J / --remote-header-name from curl call"
This reverts commit 1d15a041f708fa5bf2ae84a5a9377ea5400f1ceb.
2021-09-18 13:02:46 +02:00
Justin Kromlinger
1d15a041f7
Drop -J / --remote-header-name from curl call
It is incompatible with --continue-at. See [1].

[1] https://gitlab.archlinux.org/archlinux/archlinux-docker/-/jobs/34434#L72
2021-09-16 20:33:52 +02:00
Justin Kromlinger
9cbe452289
Update pacman.conf to pacman-6.0.0-2
As suggested by xatier on GitHub:
* https://github.com/archlinux/archlinux-docker/pull/41
* https://github.com/archlinux/archlinux-docker/pull/42/files
2021-06-07 18:25:27 +02:00
hashworks
183225149d Merge branch 'add-warning-on-lsign-key' into 'master'
README: add note on lsign-key

Closes #18

See merge request archlinux/archlinux-docker!58
2021-05-02 14:34:27 +00:00
Santiago Torres
be068a16d3
README: add note on lsign-key 2021-04-29 15:52:57 -04:00
Justin Kromlinger
96bb688fb7
Add --force to kaniko to override cgroup-v2 container detection
Revert after [0] is fixed

[0] https://github.com/GoogleContainerTools/kaniko/issues/1592
2021-04-17 16:32:02 +02:00
hashworks
293bcb10aa Merge branch 'package-registry-cleanup' into 'master'
Remove the rootfses from the package registry after 60 days

Closes #57

See merge request archlinux/archlinux-docker!57
2021-04-17 14:19:26 +00:00
Kristian Klausen
e74230023c Remove the rootfses from the package registry after 60 days
According to upstream two months is fine:
tianon: yeah, cleaning them out is reasonable, although I'd request that
they be available for something like 1-2 months after they're no longer
supported / "active"
tianon: in the case of something constantly changing like arch, 1 month
is probably pretty reasonable

Fix #57
2021-04-06 01:17:42 +02:00
hashworks
cce3f61a84 Merge branch 'github-pr-maintainers' into 'master'
Add the $maintainers to the PR's body instead of the commit

See merge request archlinux/archlinux-docker!56
2021-04-05 11:46:23 +00:00
Kristian Klausen
18b9d9f730 Add the $maintainers to the PR's body instead of the commit
This should fix the notification spam caused by users pushing the
commits to their own repository.
2021-04-04 21:33:36 +02:00
hashworks
eabc3c8b25 Merge branch 'pierre-master-patch-14921' into 'master'
Remove my name from the template to reduce notification spam by Github

See merge request archlinux/archlinux-docker!55
2021-04-04 14:15:00 +00:00
Pierre Schmitz
c2370be081 Remove my name from the template to reduce notification spam by Github 2021-04-04 13:56:19 +00:00
Justin Kromlinger
90da405dc3
Use hadolint:latest-alpine since :latest no longer contains a shell 2021-03-25 17:53:09 +01:00
hashworks
4b0bc2ddf2 Merge branch 'docker-library/gitlabRepo' into 'master'
Use our GitLab repo in the docker library template

See merge request archlinux/archlinux-docker!54
2020-12-22 19:37:07 +00:00
Justin Kromlinger
bd44d9997a
Use our GitLab repo in the docker library template
See https://github.com/docker-library/official-images/pull/9340
2020-12-22 12:47:16 +01:00
hashworks
acde5a3704 Merge branch 'fix/sysusers' into 'master'
Make sure sysusers call actually generates users and groups

Closes #52

See merge request archlinux/archlinux-docker!53
2020-12-11 15:08:28 +00:00
Santiago Torres
eb0c127ba6
Makefile: use sysusers directly
Instead of using the libalpm systemd-syusers hook, use sysusers
directly. The --root parameter allows us to avoid using the host's
namespace and populate using the conf files in the target's build
directory.
2020-12-11 16:00:56 +01:00
Justin Kromlinger
c0e73cd900
Drop ls pipe for sysusers call
It had no effect whatsoever anyway.
2020-12-11 16:00:54 +01:00
Justin Kromlinger
3e3b44b68c
Move sysusers call back to Dockerfile
Resolves #52. Added small tests for user/group counts.
2020-12-11 16:00:51 +01:00
Justin Kromlinger
65afb6ca64
Replace ~ in README since it's strikeout on DockerHub
Resolves #54.
2020-12-09 23:39:29 +01:00
Sven-Hendrik Haase
95f4c09f9d Fix some typos 2020-12-01 07:41:24 +00:00
hashworks
2c27f13737 Merge branch 'doc/README' into 'master'
Make README more user-centric and explain CI processes

Closes #40 and #48

See merge request archlinux/archlinux-docker!51
2020-11-30 21:17:12 +00:00
Justin Kromlinger
1a5fbeea9d
Make README more user-centric and explain CI processes
Resolves #40 and #48.
2020-11-30 22:13:02 +01:00
hashworks
86fb81c860 Merge branch 'dockerfile/prettyReleaseURL' into 'master'
Provide a pretty release link in the Dockerfile

Closes #49

See merge request archlinux/archlinux-docker!52
2020-11-18 18:33:21 +00:00
Justin Kromlinger
6b36cb9812
Provide a pretty release link in the Dockerfile
Resolves #49.
2020-11-18 19:04:34 +01:00
Sven-Hendrik Haase
67dddfbf76 Merge branch 'fix/apiPagination' into 'master'
Always retrieve the latest package from the API, add error handling

See merge request archlinux/archlinux-docker!50
2020-11-13 10:20:11 +00:00
Justin Kromlinger
c1cc41db1a
Fail public download script on API / json parsing errors 2020-11-13 11:09:11 +01:00
Justin Kromlinger
9c39d53baf
Always retrieve the latest package from the API
Without this stuff fails after a while since the API is paginated and
sorted by ASC by default.
2020-11-13 11:07:13 +01:00
hashworks
73504a73cd Merge branch 'dockerfileCMDsToMakefile' into 'master'
Move all Dockerfile commands to Makefile

Closes #45

See merge request archlinux/archlinux-docker!49
2020-11-13 09:22:32 +00:00
Justin Kromlinger
17b668efb4
Add configuration files before we run locale-gen 2020-11-07 21:14:58 +01:00
Justin Kromlinger
f875ac9565
Move ldconfig back to Dockerfile since its a noop in fakechroot
strace: execve("/bin/true", ["ldconfig"], 0x563fc29f9fa0 /* 101 vars */) = 0
2020-11-07 17:52:39 +01:00
Justin Kromlinger
52c1613c20
Don't use after_script to test base-devel
after_script won't affect the job exit code [1], so we can't use it for
tests. Instead we are using YAML anchors for script [2].

[1] https://docs.gitlab.com/ee/ci/yaml/#before_script-and-after_script
[2] https://docs.gitlab.com/ee/ci/yaml/#yaml-anchors-for-script
2020-11-07 17:19:16 +01:00
Justin Kromlinger
a51b77535a
Clean GitLabCI make commands 2020-11-07 17:09:11 +01:00
Justin Kromlinger
0b616a629a
Always build rootfs archives before the Dockerfiles
The Dockerfiles require them for their sha256sum.
2020-11-07 16:50:03 +01:00
Justin Kromlinger
d177146b3b
Move all Dockerfile commands to Makefile
Resolves #45.
2020-11-07 16:49:07 +01:00
Justin Kromlinger
41d5da410a
Drop depth=1 to fix "shallow update not allowed" 2020-11-02 22:29:45 +01:00
Sven-Hendrik Haase
ac398b334a Merge branch 'fix/dockerHubLibraryBuilds' into 'master'
Switch to alpine in verify stage

See merge request archlinux/archlinux-docker!47
2020-11-02 20:47:19 +00:00
Justin Kromlinger
9c5a9ccc95
Drop DL3020 ignore since we are using COPY 2020-11-02 20:14:12 +01:00
Justin Kromlinger
7d5a90c0a0
Drop apk update since we use --no-cache 2020-11-02 20:13:19 +01:00
Justin Kromlinger
2f647bce74
Drop DL3007 from ignore list since we pin alpine:3.12 2020-11-02 20:05:46 +01:00
Justin Kromlinger
0ad84af7b7
Drop alpine version pins, ignore DL3018
https://gitlab.archlinux.org/archlinux/archlinux-docker/-/merge_requests/47#note_6125
2020-11-02 20:03:42 +01:00
Justin Kromlinger
fdd9e81fc0
Switch to 3.12 versions for curl and bash 2020-11-02 19:44:04 +01:00
Justin Kromlinger
1fe6646735
DL3018, DL3018: Pin apk package versions, use --no-cache 2020-11-02 19:37:20 +01:00
Justin Kromlinger
daa67d1857
Switch to alpine in verify stage
This fixes a circular dependency issue noted in [1].

`curl -s` and removal of `--auto-compress` are needed because of
differences in the binaries in alpine.

[1] https://github.com/docker-library/official-images/pull/8999#issuecomment-720622797
2020-11-02 19:30:07 +01:00
Justin Kromlinger
d4bfcb130c
Add missing semicolon 2020-11-02 17:42:50 +01:00
Sven-Hendrik Haase
463ac73b69
Use http --ignore-stdin 2020-11-02 17:33:25 +01:00
Sven-Hendrik Haase
3c58c3c471
Fix httpie call 2020-11-02 17:24:42 +01:00
Sven-Hendrik Haase
90b3a2e66b
Remove orphan upload stage 2020-11-02 17:18:06 +01:00
Sven-Hendrik Haase
b5a8800a6f Merge branch 'replacePublishWithKaniko' into 'master'
Replace publish with multi-destination kaniko

See merge request archlinux/archlinux-docker!46
2020-11-02 16:13:34 +00:00
Justin Kromlinger
1038040aee
Replace $DESTS with $LATEST 2020-11-02 17:04:17 +01:00
Justin Kromlinger
ed4f0cb47e
Replace publish with multi-destination kaniko 2020-11-02 16:49:16 +01:00
Sven-Hendrik Haase
192c28c4f2 Merge branch 'fix/scheduledRelease' into 'master'
Run release on PUBLISH_OFFICIAL_LIBRARY as well

See merge request archlinux/archlinux-docker!45
2020-11-02 14:58:34 +00:00
Justin Kromlinger
9ced99a464 Check for both schedule variables in release in case we add more 2020-11-02 08:42:06 +00:00
Justin Kromlinger
a94af6ecbe Drop PUBLISH_ARCHLINUX_REPOSITORY
This provides publish:offical with BUILD_COMMIT and enables a normal
daily release to archlinux/archlinux on the weekly schedule run.
2020-11-02 08:42:06 +00:00
Sven-Hendrik Haase
c55fdbdda1 Merge branch 'update-dockerhub-readme' into 'master'
Update description on Dockerhub on release

Closes #47

See merge request archlinux/archlinux-docker!44
2020-11-01 23:22:55 +00:00
Kristian Klausen
24b10ce133 Use httpie for the Dockerhub description update logic 2020-11-02 00:18:13 +01:00
Kristian Klausen
ba0b4700fa Update description on Dockerhub on release
Fix #47
2020-11-02 00:17:41 +01:00
Sven-Hendrik Haase
648e0259c8
Rename variables to be more explicit 2020-11-01 23:43:42 +01:00
Sven-Hendrik Haase
798259754f
Move retry to more useful position 2020-11-01 23:35:48 +01:00
Sven-Hendrik Haase
b46d0d43a5
Retry push operations up to 2 times
In the past, we've observed intermittent network issues while communicating with dockerhub and this should help
alleviate that.
2020-11-01 23:29:10 +01:00
Sven-Hendrik Haase
76f871dc8b
Set different schedules for official publish and own repo
This fixes #42.
2020-11-01 23:07:39 +01:00
Sven-Hendrik Haase
db43bb3894 Merge branch 'feature/automatedGitHubPRs' into 'master'
Perform automatic releases to GitHub

Closes #41

See merge request archlinux/archlinux-docker!43
2020-11-01 21:51:43 +00:00
hashworks
8f3eaab36b Remove old tags as recommended by @tianon
> Removing tags here will remove them from the "Supported" section on
> the Hub readme (and will prevent us from spending cycles rebuilding them
> on the official build servers), but the tags will still be available to
> users who want them.
> See https://github.com/docker-library/official-images#library-definition-files
> for more detail on this.
2020-11-01 21:51:43 +00:00
Sven-Hendrik Haase
b8283cff28
Don't run lint for tags 2020-10-28 10:11:04 +01:00
Sven-Hendrik Haase
44b30da60d
Don't run anything on releases branch except for tags 2020-10-28 09:32:30 +01:00
Sven-Hendrik Haase
50de890c48
Don't run lint for releases branch 2020-10-28 09:27:20 +01:00
Sven-Hendrik Haase
d8c04d1c35
Also commit .gitlab-ci.yml to orphaned branch
We have to do this in order to ensure that an updated .gitlab-ci.yml is actually available on every release.
2020-10-28 09:21:19 +01:00
Kristian Klausen
2c964100fa Commit the releases to a separate disconneted branch
We do a release every day so we end up with a lot of "release commits"
(noise) in the master branch, which we don't want.
2020-10-27 18:02:05 +01:00
Arch Linux Docker release bot
4cade873b4 Release 20201025.0.7257 2020-10-25 04:45:23 +00:00
Sven-Hendrik Haase
d7eb0c91c1
Do some post-merge cleanups 2020-10-25 05:28:23 +01:00
Sven-Hendrik Haase
4f076e8624 Merge branch 'add-base-devel-tags' into 'master'
Add base-devel tag

Closes #35

See merge request archlinux/archlinux-docker!39
2020-10-25 04:26:15 +00:00
Arch Linux Docker release bot
9a9b2ad409 Release 20201025.0.7220 2020-10-25 04:16:29 +00:00
Sven-Hendrik Haase
4443f7f8bd
Turns out we need --continue-at - for local builds still 2020-10-25 05:09:47 +01:00
Sven-Hendrik Haase
ca6e2dbddf
Proper way to get effective filename 2020-10-25 04:49:26 +01:00
Arch Linux Docker release bot
bfac114869 Release 20201025.0.7175 2020-10-25 03:32:52 +00:00
Sven-Hendrik Haase
0ed3e80249
Fix duplicated name 2020-10-25 04:25:45 +01:00
Arch Linux Docker release bot
81dd765c7a Release 20201025.0.7144 2020-10-25 03:22:53 +00:00
Sven-Hendrik Haase
1b964f9715
Better debug 2020-10-25 04:16:09 +01:00
Arch Linux Docker release bot
2d5363c385 Release 20201025.0.7116 2020-10-25 03:00:51 +00:00
Sven-Hendrik Haase
1a1089e341
Merge things down a bit 2020-10-25 03:53:53 +01:00
Sven-Hendrik Haase
6830497ed8
Let's hope that sh is enough 2020-10-25 03:44:24 +01:00
Sven-Hendrik Haase
682a053a76
Fix syntax slip-up 2020-10-25 03:33:42 +01:00
Sven-Hendrik Haase
afb314e64b
Get URL via external script 2020-10-25 03:23:20 +01:00
Arch Linux Docker release bot
b23b74dcb1 Release 20201025.0.7033 2020-10-25 01:48:52 +00:00
Sven-Hendrik Haase
7c705e36e0
Fix line breaks 2020-10-25 02:41:56 +01:00
automatic-release-token
a4474f5604 Release 20201025.0.7009 2020-10-25 01:39:35 +00:00
Sven-Hendrik Haase
ff3bc769ba
Fix typo 2020-10-25 02:32:32 +01:00
automatic-release-token
9b9dd39ba8 Release 20201023.0.6898 2020-10-23 04:41:20 +00:00
Sven-Hendrik Haase
583324fa84
Fix syntax 2020-10-23 06:33:29 +02:00
Sven-Hendrik Haase
6833b127eb
We don't actually need the web_path
We can simply construct it ourselves.
2020-10-23 06:32:05 +02:00
automatic-release-token
f4276f9af5 Release 20201023.0.6866 2020-10-23 04:31:53 +00:00
Sven-Hendrik Haase
bb2c6330d8
Add curl 2020-10-23 06:25:00 +02:00
automatic-release-token
6aab81717a Release 20201023.0.6841 2020-10-23 04:22:14 +00:00
Sven-Hendrik Haase
bcab556065
Implement hacky way to get public download URLs 2020-10-23 06:15:02 +02:00
automatic-release-token
c54a082b46 Release 20201023.0.6809 2020-10-23 03:15:42 +00:00
Sven-Hendrik Haase
1e99d443b7
Fix variables 2020-10-23 05:08:38 +02:00
Sven-Hendrik Haase
aeac512739
More debug 2020-10-23 05:04:41 +02:00
Sven-Hendrik Haase
def049d8a3
Debug 2020-10-23 04:58:51 +02:00
automatic-release-token
5b3de15ee6 Release 20201023.0.6754 2020-10-23 02:49:38 +00:00
Sven-Hendrik Haase
197fc6ff36
Fix typo 2020-10-23 04:42:55 +02:00
Sven-Hendrik Haase
4dc22b3704
Make YAML happy 2020-10-23 04:34:32 +02:00
Sven-Hendrik Haase
0aa9aba8d2
Fix newline handling 2020-10-23 04:31:57 +02:00
Sven-Hendrik Haase
05f8b8f3eb
Fix version format to look like n.n.n
This is expected of the new generic package API:
https://docs.gitlab.com/ee/user/packages/generic_packages/
2020-10-23 04:31:46 +02:00
Sven-Hendrik Haase
53b90611f1
Upload SHA256 integrity files beside actual artifacts 2020-10-23 04:10:58 +02:00
Sven-Hendrik Haase
34f172d65a
Add big block of documentation to Dockerfile 2020-10-23 04:10:36 +02:00
Sven-Hendrik Haase
3ec2383069
Fix multiline YAML 2020-10-23 04:01:21 +02:00
Sven-Hendrik Haase
ef0c0eae64
Get rid of Python deploy script 2020-10-23 04:00:26 +02:00
Sven-Hendrik Haase
e791991ce6
Check whether we can use matrices to get rid of a lot of duplication
GitLab 13.5 introduced support for one-dimensional matrices:
https://about.gitlab.com/releases/2020/10/22/gitlab-13-5-released/#allow-one-dimensional-parallel-matrices
Hopefully this works as intended. :)
2020-10-23 02:48:34 +02:00
Sven-Hendrik Haase
60059beb72
Get rid of unused packages file 2020-10-23 02:47:41 +02:00
automatic-release-token
447f68507e Release 20201020.6556 2020-10-20 03:27:02 +00:00
Sven-Hendrik Haase
6172cf1aa6
Exclude test job when job was made by project access token
See https://gitlab.com/gitlab-org/gitlab/-/issues/259663
2020-10-20 05:17:34 +02:00
automatic-release-token
7f684cdd75 Release 20201020.6523 2020-10-20 02:45:20 +00:00
Sven-Hendrik Haase
8f7837598b
Generate docker auth again 2020-10-20 04:37:52 +02:00
automatic-release-token
3b8874980b Release 20201020.6493 2020-10-20 02:26:11 +00:00
Sven-Hendrik Haase
2d6948afc5
Debug 2020-10-20 04:18:35 +02:00
automatic-release-token
10e066082d Release 20201020.6467 2020-10-20 01:57:30 +00:00
Sven-Hendrik Haase
026333d880
We need the env in the publish image job after all 2020-10-20 03:50:04 +02:00
automatic-release-token
3ec9c84f70 Release 20201020.6441 2020-10-20 01:44:44 +00:00
Sven-Hendrik Haase
40d4275198
Unrestrict test jobs 2020-10-20 03:37:31 +02:00
Sven-Hendrik Haase
6383077e81
Debug 2020-10-20 03:28:26 +02:00
Sven-Hendrik Haase
d89a5f781d
Don't run CI for generated files 2020-10-20 03:24:32 +02:00
automatic-release-token
24985d5d2e Release 20201020.6383 2020-10-20 00:58:32 +00:00
Sven-Hendrik Haase
bb6ff3c73b
Add 'v' prefix for git tags 2020-10-20 02:50:56 +02:00
Sven-Hendrik Haase
d5681dcb99
Try to use GitLab access token for pushing 2020-10-20 02:49:05 +02:00
automatic-release-token
d525b6da10 Release 20201020.6342 2020-10-20 00:29:45 +00:00
Sven-Hendrik Haase
ff691ecc2a
Fix another format string 2020-10-20 02:22:37 +02:00
Sven-Hendrik Haase
b6d16e1829
Remove restriction on test stage 2020-10-20 02:04:56 +02:00
Sven-Hendrik Haase
fe15ce7922
Better way to build official release 2020-10-20 01:51:46 +02:00
automatic-release-token
c13ad972f9 Release 20201019.6288 2020-10-19 20:49:45 +00:00
Sven-Hendrik Haase
33d42dd0e5
Use proper CI rules 2020-10-19 22:42:21 +02:00
Sven-Hendrik Haase
d6d626619e
Refactor to use BUILD_VERSION instead of BUILD_DATE 2020-10-19 22:34:24 +02:00
Sven-Hendrik Haase
b0ecf075d4
Fix another format string 2020-10-19 22:11:22 +02:00
Sven-Hendrik Haase
dba6a9053a
Fix format string 2020-10-19 19:44:03 +02:00
Sven-Hendrik Haase
c786b40a38
Use pacman --noconfirm 2020-10-19 19:26:55 +02:00
Sven-Hendrik Haase
03fe0b4250
Undebug 2020-10-19 19:20:05 +02:00
Sven-Hendrik Haase
2f411f062c
Debug 2020-10-19 19:18:08 +02:00
Sven-Hendrik Haase
559d5053b3
Define archlinux:latest as default image 2020-10-19 19:15:52 +02:00
Sven-Hendrik Haase
7747e4616e
Add CI_JOB_ID GitLab CI variable to BUILD_DATE 2020-10-19 19:10:49 +02:00
Sven-Hendrik Haase
5a83584a67
Move tags keyword up 2020-10-19 05:18:46 +02:00
Sven-Hendrik Haase
2de94ea296
Run release on schedules 2020-10-19 05:03:48 +02:00
Sven-Hendrik Haase
24157ab019
Properly exclude add-base-devel-tags branch 2020-10-19 04:54:08 +02:00
Sven-Hendrik Haase
0e58892c75
Run secure jobs also on add-base-devel-tags for testing 2020-10-19 04:50:18 +02:00
Sven-Hendrik Haase
7da8f99ca4
Re-enable release stage 2020-10-19 04:27:02 +02:00
Sven-Hendrik Haase
21ba6bc967
Re-add test stage 2020-10-19 04:18:12 +02:00
Sven-Hendrik Haase
cf6a172694
Update README for all the new changes 2020-10-19 04:15:13 +02:00
Sven-Hendrik Haase
dc895e48cf
Rename second layer to root 2020-10-19 04:10:52 +02:00
Sven-Hendrik Haase
80d8c5ee91
Fix incorrect name 2020-10-19 04:05:15 +02:00
Sven-Hendrik Haase
94d242fb87
Make kaniko use proper output paths 2020-10-19 03:55:27 +02:00
Sven-Hendrik Haase
2d20a3f878
Fix make target calls 2020-10-19 03:50:00 +02:00
Sven-Hendrik Haase
8d8d296f6d
Generate correct artifacts 2020-10-19 03:41:22 +02:00
Sven-Hendrik Haase
36bc03260d
Use new Makefile targets to .gitlab-ci.yml 2020-10-19 03:35:07 +02:00
Sven-Hendrik Haase
2cbbe5a720
Deduplicate a lot of code 2020-10-19 03:32:25 +02:00
Sven-Hendrik Haase
3f2721cb6b
Change ci-only Dockerfile location 2020-10-19 02:33:44 +02:00
Sven-Hendrik Haase
ecb01053cc
Use ./exclude mechanism for /etc/resolv.conf 2020-10-19 01:13:04 +02:00
Sven-Hendrik Haase
f114a6d454
Revert "Don't use xz -9 - it takes too long to no benefit"
This reverts commit 4fbd8d2d7dd4adf2cbca1a728faaa08e792f1458.
2020-10-19 01:05:18 +02:00
Kristian Klausen
3bf05f92aa
Exclude /etc/resolv.conf 2020-10-19 01:03:22 +02:00
Sven-Hendrik Haase
2706f3bb9a
Add note for kaniko and resolv.conf 2020-10-18 05:02:53 +02:00
Sven-Hendrik Haase
13793e559d
Try copying underlying /etc/resolv.conf 2020-10-18 04:47:36 +02:00
Sven-Hendrik Haase
4fbd8d2d7d
Don't use xz -9 - it takes too long to no benefit 2020-10-18 03:24:15 +02:00
Sven-Hendrik Haase
dcf7c44d12
Ignore Dockerfile.base and Dockerfile.base-devel
We don't be checking these in as they are generated by the build.
2020-10-14 01:16:28 +02:00
Sven-Hendrik Haase
72d1d5eb2d
Observe security concept 2020-10-14 01:15:22 +02:00
Sven-Hendrik Haase
9f60536bd5 Merge branch 'verify-rootfs' into 'add-base-devel-tags'
Generate and verify checksum for the rootfs

See merge request archlinux/archlinux-docker!40
2020-10-13 22:44:52 +00:00
Kristian Klausen
9b52d5674a Generate and verify checksum for the rootfs 2020-10-13 16:11:15 +02:00
Sven-Hendrik Haase
d51a887efb
Add base-devel tag 2020-08-31 18:20:52 +02:00
hashworks
a0d65ca9a9 Merge branch 'no-root-build' into 'master'
Merge no-root-build branch into master

Closes #22

See merge request archlinux/archlinux-docker!38
2020-08-28 23:21:02 +00:00
Justin Kromlinger
6448568daa
Merge remote-tracking branch 'origin/master' into no-root-build 2020-08-12 09:41:41 +02:00
Santiago Torres-Arias
79e8df9a00 Merge branch 'gitlabCI' into 'no-root-build'
Add GitLabCI definition

See merge request archlinux/archlinux-docker!37
2020-07-30 16:39:11 +00:00
Justin Kromlinger
59e29b7a9b
Switch to compress-rootfs in CI since xz is now using --threads 2020-07-30 18:05:57 +02:00
Justin Kromlinger
0fa3f77f16
Add GitLabCI definition
Additionally drops the GitHub and Travis CI definitions since they are no longer
needed.
2020-07-30 18:02:58 +02:00
hashworks
005e032e98 Merge branch 'github/fork/TheLinuxNinja/dockerfile-typo' into 'no-root-build'
a handful of fixes and improvements found while testing this branch

See merge request archlinux/archlinux-docker!16
2020-07-30 15:58:32 +00:00
Justin Kromlinger
cbaf17832e
Add the ability to adjust the thread count of xz, drop -e
`xz --extreme` would only save us about 1MB but take ~50% longer.
2020-07-30 17:55:36 +02:00
Justin Kromlinger
026d2788df
Add fakeroot as a build dependency 2020-07-30 17:55:18 +02:00
Justin Kromlinger
fa1ed71419
Merge remote-tracking branch 'origin/no-root-build' into github/fork/TheLinuxNinja/dockerfile-typo 2020-07-30 17:47:49 +02:00
Santiago Torres
9bd11c95c2
Dockerfile: manually symlink os-release 2020-06-08 10:54:44 -04:00
Santiago Torres
8f683e3cdc
packages: +likely necessary pkgs from base group 2019-11-26 17:03:20 -05:00
Santiago Torres
9091d1ebb9
Makefile: add archlinux.tar target, force xz 2019-11-26 17:02:56 -05:00
Santiago Torres
4ebfbe5883
packages: add base group 2019-11-26 16:02:21 -05:00
Eli Schwartz
2fc6d9f3ee
pacstrap: usie NoExtract to prune dead weight
A docker container does not need tons of locales in order to do its job,
nor does it need extensive (or any) documentation.

With this change, a bare pacstrapped directory drops from 500MB to 390MB
2019-11-25 14:42:44 -05:00
Santiago Torres
b20da68230
Merge pull request #13 from eli-schwartz/noextract
pacstrap: set up the image using NoExtract rules to prune dead weight
2019-11-25 14:33:14 -05:00
Santiago Torres
e5ee97ef26
github-actions: add rootfs target to make
This is relevant for the no-root-build.
2019-10-23 21:04:36 -04:00
Christian Rebischke
ed424bc02f
add Github Actions
Signed-off-by: Christian Rebischke <chris@nullday.de>
2019-10-23 21:03:48 -04:00
Santiago Torres
368a504fa3
Makefile: use fakeroot for tar-ing rootfs
When tar-ing the rootfs, the permissions preserved are from the worker
process. This is not the intended behavior, as we want to preserve the
permissions of the root user to most of the files. Use fakeroot during
the tar process to automagically map the uid of the user to that of
root's.

Fixes #22

Signed-off-by: Santiago Torres <santiago@archlinux.org>
2019-10-23 20:24:42 -04:00
Sven-Hendrik Haase
95a5091f02
Merge pull request #20 from shibumi/shibumi/use-github-actions
add Github Actions
2019-10-12 18:02:57 +02:00
Christian Rebischke
82340e87fa
add Github Actions
Signed-off-by: Christian Rebischke <chris@nullday.de>
2019-10-12 15:29:12 +02:00
Santiago Torres
a2b08c5fc1
Makefile:compress:use the existing archlinux.tar
The requirements for the compress rule used to rebuild the rootfs
regardless. Update the requirement to use the existing archlinux archive
for compression
2019-10-06 12:32:39 -04:00
Santiago Torres
19fb8aeb46
Makefile: add fix for CVE-2019-5021
The previous instances of the docker image allowed for passwordless root
login. Update the default shadow setting so the root account to disallow
this.
2019-10-06 12:31:21 -04:00
Santiago Torres
3a7de54a80
Merge pull request #15 from TheLinuxNinja/fix-hook
fix pacman hook to not delete the /var/cache/pacman/pkg directory - …
2019-08-10 15:41:01 -04:00
Linux Ninja
eaa38cb44e add xz params to tighten archive size (saves 5M currently), use all available CPU cores, overwrite existing file
Signed-off-by: Linux Ninja <linuxninja@bryangay.com>
2019-08-10 03:16:54 -04:00
Linux Ninja
b2e07647e9 add fakechroot dependency in README.md, prevent 'already exists' error when running ln -s by adding -f in Makefile, combine two layers of Dockerfile and fix typo of pugring.gpg~
Signed-off-by: Linux Ninja <linuxninja@bryangay.com>
2019-08-10 02:57:40 -04:00
Linux Ninja
5d1c81df79 fix pacman hook to not delete the /var/cache/pacman/pkg directory - Fixes https://bugs.archlinux.org/task/63311
Signed-off-by: Linux Ninja <linuxninja@bryangay.com>
2019-08-10 02:19:09 -04:00
Santiago Torres
b274212ca5
Merge branch 'master' into no-root-build 2019-06-25 19:47:49 -04:00
Santiago Torres
8ec2549c3e
Dockerfile,Makefile: use a compressed tarball
When building the image for publishing in the infrastructure, we need a
rootfs that's <100MB, due to github filesize restrictions (this, plus
the fact that there's no git-lfs support for building in the docker
library toolchain). Compress the rootfs image so that it can be
hosted on github.
2019-06-25 19:21:44 -04:00
Eli Schwartz
b6727d838f
pacstrap: set up the image using NoExtract rules to prune dead weight
A docker container does not need tons of locales in order to do its job,
nor does it need extensive (or any) documentation.

With this change, a bare pacstrapped directory drops from 500MB to 390MB
2019-02-28 15:25:30 -05:00
Santiago Torres
cb1c8b8b37
Merge branch 'master' into no-root-build 2019-02-22 18:08:41 -05:00
putty182
e612e65be1 Add docker as a build dependency 2019-02-16 11:22:44 +01:00
Santiago Torres
c1f7a83627
Merge pull request #10 from SantiagoTorres/add-license
LICENSE: add license
2019-02-11 12:35:40 -05:00
Santiago Torres
a607a865fd
LICENSE: add license 2018-11-11 14:31:59 -05:00
Pierre Schmitz
c92bb1c858 GH-9: Prefer rackspace over leaseweb 2018-11-09 20:50:48 +01:00
Pierre Schmitz
2c01a091eb GH-9: Add rackspace mirror
Add secondary mirror that itself redirects to various locations:
https://www.archlinux.org/mirrors/rackspace.com/
2018-11-09 20:41:27 +01:00
20 changed files with 1369 additions and 186 deletions

6
.gitignore vendored
View File

@ -1,4 +1,2 @@
*~
*.orig
/.idea
/archlinux.tar
build
output

372
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,372 @@
default:
image: "archlinux/archlinux:latest"
stages:
- cleanup
- lint
- rootfs
- image
- test
- pre-release
- release
- publish
cleanup:
stage: cleanup
tags:
- secure
- docker
only:
refs:
- schedules@archlinux/archlinux-docker
variables:
- $CLEANUP_PACKAGE_REGISTRY == "TRUE"
before_script:
- pacman -Syu --noconfirm jq
script:
- |
for id in $(curl --silent --fail --show-error "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages?per_page=100&order_by=created_at&sort=asc" | jq '.[] | select(.created_at | split("T")[0] | . < (now-60*60*24*60|strflocaltime("%Y-%m-%d"))) | .id'); do
curl --silent --fail --show-error --request DELETE --header "PRIVATE-TOKEN: ${GITLAB_PROJECT_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/${id}"
done
lint:
stage: lint
image: hadolint/hadolint:latest-alpine
# DL3018: We don't need apk version pins, we use the bleeding edge
script: hadolint --ignore DL3018 Dockerfile.template
except:
- releases
- tags
# This is an implicit gitlab stage, with the build.env variables used by either
# other stages or auxiliarry scripts.
get_version:
stage: .pre
script:
- |
# If we're building a tagged release, use the tag (without the 'v' prefix) as the
# BUILD_VERSION. Otherwise, determine a new BUILD_VERSION.
if [[ -n "$CI_COMMIT_TAG" ]]; then
echo "BUILD_VERSION=${CI_COMMIT_TAG/v/}" > build.env
else
echo "BUILD_VERSION=$(date +%Y%m%d).0.$CI_JOB_ID" > build.env
fi
- export $(< build.env)
- echo "PACKAGE_REGISTRY_URL=${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/rootfs/${BUILD_VERSION}" >> build.env
artifacts:
reports:
dotenv: build.env
.rootfs:
stage: rootfs
parallel:
matrix:
- GROUP: [base, base-devel, multilib-devel]
before_script:
- pacman -Syu --noconfirm git make fakechroot fakeroot
- pacman -Sdd --noconfirm devtools
script:
- make $PWD/output/Dockerfile.$GROUP
artifacts:
paths:
- output/*
exclude:
- output/*.tar
expire_in: 2h
rootfs:
extends: .rootfs
except:
- master@archlinux/archlinux-docker
- releases@archlinux/archlinux-docker
- schedules@archlinux/archlinux-docker
- tags@archlinux/archlinux-docker
rootfs:secure:
extends: .rootfs
tags:
- secure
- docker
only:
- master@archlinux/archlinux-docker
- schedules@archlinux/archlinux-docker
except:
- tags
- releases
.image:
stage: image
parallel:
matrix:
- GROUP: [base, base-devel, multilib-devel]
tags:
- vm
id_tokens:
SIGSTORE_ID_TOKEN:
aud: sigstore
script:
- podman build
-f "$CI_PROJECT_DIR/output/Dockerfile.$GROUP"
-t "$CI_REGISTRY_IMAGE:$GROUP-$CI_COMMIT_REF_SLUG"
"$CI_PROJECT_DIR/output"
- podman push --sign-by-sigstore=<(sed "s/TEMPLATE_OIDC_ID_TOKEN/${SIGSTORE_ID_TOKEN}/" sigstore-param-file.yaml) "$CI_REGISTRY_IMAGE:$GROUP-$CI_COMMIT_REF_SLUG"
image:build:
extends: .image
except:
- master@archlinux/archlinux-docker
- releases
- schedules@archlinux/archlinux-docker
- tags
before_script:
- pacman -Syu --noconfirm podman
- podman login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
- 'echo -e "default-docker:\n use-sigstore-attachments: true" > /etc/containers/registries.d/sigstore.yaml'
image:build:secure:
extends: .image
tags:
- secure
- vm
only:
- master@archlinux/archlinux-docker
- schedules@archlinux/archlinux-docker
except:
- tags
before_script:
- pacman -Syu --noconfirm podman
- podman login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
- 'echo -e "default-docker:\n use-sigstore-attachments: true" > /etc/containers/registries.d/sigstore.yaml'
# Build and publish to the Arch Linux group namespaces:
# https://hub.docker.com/r/archlinux/archlinux
# https://quay.io/repository/archlinux/archlinux
image:publish:secure:
extends: .image
retry: 2
tags:
- secure
- vm
only:
- tags@archlinux/archlinux-docker
before_script:
- pacman -Syu --noconfirm podman
- podman login -u "$DOCKERHUB_USERNAME" -p "$DOCKERHUB_ACCESS_TOKEN" "docker.io"
- podman login -u "$QUAY_USERNAME" -p "$QUAY_PASSWORD" "quay.io"
- podman login -u "$GHCR_USERNAME" -p "$GHCR_PASSWORD" "ghcr.io"
- 'echo -e "default-docker:\n use-sigstore-attachments: true" > /etc/containers/registries.d/sigstore.yaml'
script:
- podman build
-f "$CI_PROJECT_DIR/Dockerfile.$GROUP"
-t "archlinux:$GROUP-$BUILD_VERSION"
"$CI_PROJECT_DIR"
- |
for host in "docker.io" "quay.io" "ghcr.io"; do
podman tag "archlinux:$GROUP-$BUILD_VERSION" "$host/archlinux/archlinux:$GROUP"
podman tag "archlinux:$GROUP-$BUILD_VERSION" "$host/archlinux/archlinux:$GROUP-$BUILD_VERSION"
podman push "$host/archlinux/archlinux:$GROUP"
podman push --sign-by-sigstore=<(sed "s/TEMPLATE_OIDC_ID_TOKEN/${SIGSTORE_ID_TOKEN}/" sigstore-param-file.yaml) "$host/archlinux/archlinux:$GROUP-$BUILD_VERSION"
if [[ "$GROUP" == "base" ]]; then
podman tag "archlinux:$GROUP-$BUILD_VERSION" "$host/archlinux/archlinux:latest"
podman push "$host/archlinux/archlinux:latest"
fi
done
.test:
stage: test
dependencies: []
except:
refs:
- releases
- tags
.test-script: &test-script
- test "$(cat /etc/group | wc -l)" -gt 10
- test "$(cat /etc/passwd | wc -l)" -gt 10
- pacman -Sy
- pacman -Qqk
- pacman -Syu --noconfirm podman grep
- podman -v
- id -u http
- locale | grep -q UTF-8
test:base:
extends: .test
image: $CI_REGISTRY_IMAGE:base-$CI_COMMIT_REF_SLUG
script:
- *test-script
test:base-devel:
extends: .test
image: $CI_REGISTRY_IMAGE:base-devel-$CI_COMMIT_REF_SLUG
script:
- *test-script
- gcc -v
- g++ -v
- make -v
- test -u /usr/bin/sudo # issue 70
- test -u /usr/bin/passwd
pre-release:
stage: pre-release
image: registry.gitlab.com/gitlab-org/release-cli:latest
tags:
- secure
- docker
only:
refs:
- schedules@archlinux/archlinux-docker
variables:
- $PUBLISH_ARCHLINUX_REPOSITORY == "TRUE"
- $PUBLISH_OFFICIAL_LIBRARY == "TRUE"
before_script:
- apk update
- apk add jq curl bash
script:
- |
echo "Update the description of our daily DockerHub repository at https://hub.docker.com/r/archlinux/archlinux"
TOKEN="$(curl -X POST https://hub.docker.com/v2/users/login -H "Content-Type: application/json" -d "{\"username\": \"${DOCKERHUB_USERNAME}\", \"password\": \"${DOCKERHUB_PASSWORD}\"}" | jq -er .token)"
curl -X PATCH https://hub.docker.com/v2/repositories/archlinux/archlinux/ \
-H "Authorization: JWT ${TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"full_description\": $(cat README.md | jq -sR .)}"
# Upload rootfs to the Generic Packages Repository
for group in base base-devel multilib-devel; do
rootfs_file="${group}-${BUILD_VERSION}.tar.zst"
mv "output/${group}.tar.zst" "output/${rootfs_file}"
mv "output/${group}.tar.zst.SHA256" "output/${rootfs_file}.SHA256"
sed -i "s|${group}.tar.zst|${rootfs_file}|" "output/${rootfs_file}.SHA256"
echo "Uploading ${rootfs_file}"
curl -sSf --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file "output/${rootfs_file}" "${PACKAGE_REGISTRY_URL}/"
echo "Uploading ${rootfs_file}.SHA256"
curl -sSf --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file "output/${rootfs_file}.SHA256" "${PACKAGE_REGISTRY_URL}/"
done
# Create the Dockerfiles, commit to the release branch
for group in base base-devel multilib-devel; do
rootfs_file="${group}-${BUILD_VERSION}.tar.zst"
./scripts/make-dockerfile.sh "${rootfs_file}" "${group}" "output" "curl -sOJL \"${PACKAGE_REGISTRY_URL}/${rootfs_file}\"" "${group}"
sed -i "/^COPY ${rootfs_file} \/$/d" output/Dockerfile.${group}
done
# See README.md###Maintenance for notes about `GITLAB_PROJECT_TOKEN`
- >
curl -sSf --request POST -o commit-response.json
--header "PRIVATE-TOKEN: ${GITLAB_PROJECT_TOKEN}"
--form "branch=releases"
--form "commit_message=Release ${BUILD_VERSION}"
--form "actions[][action]=update"
--form "actions[][file_path]=Dockerfile.base"
--form "actions[][content]=<output/Dockerfile.base"
--form "actions[][action]=update"
--form "actions[][file_path]=Dockerfile.base-devel"
--form "actions[][content]=<output/Dockerfile.base-devel"
--form "actions[][action]=update"
--form "actions[][file_path]=Dockerfile.multilib-devel"
--form "actions[][content]=<output/Dockerfile.multilib-devel"
--form "actions[][action]=update"
--form "actions[][file_path]=.gitlab-ci.yml"
--form "actions[][content]=<.gitlab-ci.yml"
--form "actions[][action]=update"
--form "actions[][file_path]=sigstore-param-file.yaml"
--form "actions[][content]=<sigstore-param-file.yaml"
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/repository/commits"
- echo "BUILD_COMMIT=$(jq -r '.id' commit-response.json)" >> build.env
artifacts:
reports:
dotenv: build.env
release:
stage: release
dependencies:
- get_version
image: registry.gitlab.com/gitlab-org/release-cli:latest
tags:
- secure
- docker
only:
refs:
- schedules@archlinux/archlinux-docker
variables:
- $PUBLISH_ARCHLINUX_REPOSITORY == "TRUE"
- $PUBLISH_OFFICIAL_LIBRARY == "TRUE"
script:
- echo 'Creating release'
release:
name: 'Release ${BUILD_VERSION}'
description: 'Release ${BUILD_VERSION}'
tag_name: 'v${BUILD_VERSION}'
ref: 'releases'
assets:
links:
- name: 'base-${BUILD_VERSION}.tar.zst'
url: '${PACKAGE_REGISTRY_URL}/base-${BUILD_VERSION}.tar.zst'
- name: 'base-${BUILD_VERSION}.tar.zst.SHA256'
url: '${PACKAGE_REGISTRY_URL}/base-${BUILD_VERSION}.tar.zst.SHA256'
- name: 'base-devel-${BUILD_VERSION}.tar.zst'
url: '${PACKAGE_REGISTRY_URL}/base-devel-${BUILD_VERSION}.tar.zst'
- name: 'base-devel-${BUILD_VERSION}.tar.zst.SHA256'
url: '${PACKAGE_REGISTRY_URL}/base-devel-${BUILD_VERSION}.tar.zst.SHA256'
- name: 'multilib-devel-${BUILD_VERSION}.tar.zst'
url: '${PACKAGE_REGISTRY_URL}/multilib-devel-${BUILD_VERSION}.tar.zst'
- name: 'multilib-devel-${BUILD_VERSION}.tar.zst.SHA256'
url: '${PACKAGE_REGISTRY_URL}/multilib-devel-${BUILD_VERSION}.tar.zst.SHA256'
# Publish to the official Docker namespace: https://hub.docker.com/_/archlinux
# Note: The description is maintained here: https://github.com/docker-library/docs/tree/master/archlinux
publish-dockerhub:
stage: publish
dependencies:
- get_version
- pre-release
only:
refs:
- schedules
variables:
- $PUBLISH_OFFICIAL_LIBRARY == "TRUE"
before_script:
- export | grep -q BUILD_VERSION=
- export | grep -q BUILD_COMMIT=
- test -n "$BUILD_VERSION"
- test -n "$BUILD_COMMIT"
- test -n "$GITHUB_TOKEN"
- pacman -Syu --noconfirm github-cli git gettext
- git config --global user.email "github@archlinux.org"
- git config --global user.name "Arch Linux Technical User"
script:
- echo "Update the Docker library Github repo"
- mkdir official-images
- cd official-images
- git init
- 'git remote add origin "https://x-access-token:${GITHUB_TOKEN}@github.com/archlinux/official-images.git"'
- git fetch https://github.com/docker-library/official-images.git
- git reset --hard FETCH_HEAD
- head="release/${BUILD_VERSION}"
- git checkout -b "$head"
- cp ../docker-library.template library/archlinux
- |
for group in base base-devel multilib-devel; do
test "${group}" = "base" && extra="latest, " || extra=""
echo "Tags: ${extra}${group}, ${group}-${BUILD_VERSION}" >> library/archlinux
echo "GitCommit: ${BUILD_COMMIT}" >> library/archlinux
echo "GitFetch: refs/tags/v${BUILD_VERSION}" >> library/archlinux
echo "File: Dockerfile.${group}" >> library/archlinux
echo >> library/archlinux
done
- git diff
- git add library/archlinux
- maintainers="$(grep \(@ ../docker-library.template | cut -d\( -f2 | cut -d\) -f1 | xargs)"
- test -n "$maintainers"
- 'git commit
-m "archlinux: Release ${BUILD_VERSION}"
-m "This is an automated release [1]."
-m "[1] ${CI_PROJECT_URL}/-/blob/master/.gitlab-ci.yml"'
- git push -u origin "$head"
- 'gh pr create
--repo docker-library/official-images
--title "$(git show --no-patch --format="%s")"
--body "$(printf "%s\n\n---\n\nMaintainers: ${maintainers}\n" "$(git show --no-patch --format="%b")")"
--base master
--head archlinux:"$head"'

View File

@ -1,9 +0,0 @@
sudo: required
language: bash
services:
- docker
script:
- make ci-test

View File

@ -1,13 +0,0 @@
FROM scratch
ADD archlinux.tar /
# manually run all alpm hooks that can't be run inside the fakechroot
RUN ldconfig && update-ca-trust && locale-gen
RUN sh -c 'ls usr/lib/sysusers.d/*.conf | /usr/share/libalpm/scripts/systemd-hook sysusers '
# initialize the archilnux keyring, but discard any private key that may be shipped.
RUN pacman-key --init && pacman-key --populate archlinux
RUN rm -rf etc/pacman.d/gnupg/{openpgp-revocs.d/,private-keys-v1.d/,pugring.gpg~,gnupg.S.}*
ENV LANG=en_US.UTF-8
CMD ["/usr/bin/bash"]

43
Dockerfile.template Normal file
View File

@ -0,0 +1,43 @@
# Docker image when built on the official Docker infrastructure.
# They require us to verify the source integrity in some way while making sure that this is a
# reproducible build.
# See https://github.com/docker-library/official-images#image-build
# In order to achieve this, we externally host the rootfs archives and their checksums and then
# just download and verify it in the first stage of this Dockerfile.
# The second stage is for actually configuring the system a little bit.
# Some templating is done in order to allow us to easily build different configurations and to
# allow us to automate the release process.
# Note: Only official DockerHub images are allowed, see https://gitlab.archlinux.org/archlinux/archlinux-docker/-/commit/daa67d18579024947d69a45e6d028c5adb1c8c23
# While we could use archlinux:base it could also break our build process, so we avoid dog fooding here
FROM alpine:3.23 AS verify
COPY TEMPLATE_ROOTFS_FILE /
RUN apk add --no-cache curl tar zstd
RUN TEMPLATE_ROOTFS_DOWNLOAD && \
echo "TEMPLATE_ROOTFS_HASH" > /tmp/sha256sums.txt && \
sha256sum -c /tmp/sha256sums.txt && \
mkdir /rootfs && \
tar -C /rootfs --extract --file TEMPLATE_ROOTFS_FILE
FROM scratch AS root
LABEL org.opencontainers.image.title="TEMPLATE_TITLE"
LABEL org.opencontainers.image.description="Official containerd image of Arch Linux, a simple, lightweight Linux distribution aimed for flexibility."
LABEL org.opencontainers.image.authors="Santiago Torres-Arias <santiago@archlinux.org> (@SantiagoTorres), Christian Rebischke <Chris.Rebischke@archlinux.org> (@shibumi), Justin Kromlinger <hashworks@archlinux.org> (@hashworks)"
LABEL org.opencontainers.image.url="https://gitlab.archlinux.org/archlinux/archlinux-docker/-/blob/master/README.md"
LABEL org.opencontainers.image.documentation="https://wiki.archlinux.org/title/Docker#Arch_Linux"
LABEL org.opencontainers.image.source="https://gitlab.archlinux.org/archlinux/archlinux-docker"
LABEL org.opencontainers.image.licenses="GPL-3.0-or-later"
LABEL org.opencontainers.image.version="TEMPLATE_VERSION_ID"
LABEL org.opencontainers.image.revision="TEMPLATE_REVISION"
LABEL org.opencontainers.image.created="TEMPLATE_CREATED"
COPY --from=verify /rootfs/ /
RUN ldconfig && \
sed -i '/BUILD_ID/a VERSION_ID=TEMPLATE_VERSION_ID' /etc/os-release
ENV LANG=C.UTF-8
CMD ["/usr/bin/bash"]

674
LICENSE Normal file
View File

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

View File

@ -1,43 +1,21 @@
DOCKER_USER:=pierres
DOCKER_ORGANIZATION=archlinux
DOCKER_IMAGE:=base
BUILDDIR=build
PWD=$(shell pwd)
OCITOOL=podman # or docker
BUILDDIR=$(shell pwd)/build
OUTPUTDIR=$(shell pwd)/output
hooks:
mkdir -p alpm-hooks/usr/share/libalpm/hooks
find /usr/share/libalpm/hooks -exec ln -s /dev/null $(PWD)/alpm-hooks{} \;
.PHONY: clean
clean:
rm -rf $(BUILDDIR) $(OUTPUTDIR)
rootfs: hooks
mkdir -vp $(BUILDDIR)/var/lib/pacman/
fakechroot -- fakeroot -- pacman -Sy -r $(BUILDDIR) \
--noconfirm --dbpath $(PWD)/$(BUILDDIR)/var/lib/pacman \
--config pacman.conf \
--noscriptlet \
--hookdir $(PWD)/alpm-hooks/usr/share/libalpm/hooks/ $(shell cat packages)
cp --recursive --preserve=timestamps --backup --suffix=.pacnew rootfs/* $(BUILDDIR)/
tar --numeric-owner --xattrs --acls --exclude-from=exclude -C $(BUILDDIR) -c . -f archlinux.tar
rm -rf $(BUILDDIR) alpm-hooks
.PRECIOUS: $(OUTPUTDIR)/%.tar.zst
$(OUTPUTDIR)/%.tar.zst:
scripts/make-rootfs.sh $(*) $(BUILDDIR) $(OUTPUTDIR)
docker-image: rootfs
docker build -t $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) .
.PRECIOUS: $(OUTPUTDIR)/Dockerfile.%
$(OUTPUTDIR)/Dockerfile.%: $(OUTPUTDIR)/%.tar.zst
scripts/make-dockerfile.sh "$(*).tar.zst" $(*) $(OUTPUTDIR) "true" "Dev"
docker-image-test: docker-image
# FIXME: /etc/mtab is hidden by docker so the stricter -Qkk fails
docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) sh -c "/usr/bin/pacman -Sy && /usr/bin/pacman -Qqk"
docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) sh -c "/usr/bin/pacman -Syu --noconfirm docker && docker -v"
# Ensure that the image does not include a private key
! docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) pacman-key --lsign-key pierre@archlinux.de
docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) sh -c "/usr/bin/id -u http"
docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) sh -c "/usr/bin/pacman -Syu --noconfirm grep && locale | grep -q UTF-8"
# The following is for local builds only, it is not used by the CI/CD pipeline
ci-test:
docker run --rm --privileged --tmpfs=/tmp:exec --tmpfs=/run/shm -v /run/docker.sock:/run/docker.sock \
-v $(PWD):/app -w /app $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) \
sh -c 'pacman -Syu --noconfirm fakechroot fakeroot make devtools docker && make docker-image-test'
docker-push:
docker login -u $(DOCKER_USER)
docker push $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE)
.PHONY: rootfs docker-image docker-image-test ci-test docker-push
all: image-base image-base-devel image-multilib-devel
image-%: $(OUTPUTDIR)/Dockerfile.%
${OCITOOL} build -f $(OUTPUTDIR)/Dockerfile.$(*) -t archlinux/archlinux:$(*) $(OUTPUTDIR)

130
README.md
View File

@ -1,13 +1,121 @@
# Docker Base Image for Arch Linux [![Build Status](https://travis-ci.org/archlinux/archlinux-docker.svg?branch=master)](https://travis-ci.org/archlinux/archlinux-docker)
This repository contains all scripts and files needed to create a Docker base image for the Arch Linux distribution.
## Dependencies
Install the following Arch Linux packages:
* make
* devtools
## Usage
Run `make docker-image` as root to build the base image.
## Purpose
* Provide the Arch experience in a Docker Image
* Provide the most simple but complete image to base every other upon
# Arch Linux OCI Images
[![pipeline status][pipeline]][commits]
Arch Linux provides OCI-Compliant container images in multiple repositories:
* [Weekly in the official DockerHub library][hub-arch]:
`podman pull docker.io/library/archlinux:latest` or `docker pull archlinux:latest`
* [Daily in our DockerHub repository][hub-containers]:
`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`
Three versions of the image are provided: `base` (approx. 150 MiB), `base-devel`
(approx. 260 MiB) and `multilib-devel` (approx. 300MiB) containing the
respective meta package. All of them 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.
All the images, with the exception of the official DockerHub library image, are
signed by using [cosign's keyless signing][openid-signing]. The images can be
verified with one of the following commands:
```sh
$ cosign verify docker.io/archlinux/archlinux:latest --certificate-identity-regexp="https://gitlab\.archlinux\.org/archlinux/archlinux-docker//\.gitlab-ci\.yml@refs/tags/v[0-9]+\.0\.[0-9]+" --certificate-oidc-issuer=https://gitlab.archlinux.org
$ cosign verify quay.io/archlinux/archlinux:latest --certificate-identity-regexp="https://gitlab\.archlinux\.org/archlinux/archlinux-docker//\.gitlab-ci\.yml@refs/tags/v[0-9]+\.0\.[0-9]+" --certificate-oidc-issuer=https://gitlab.archlinux.org
$ cosign verify ghcr.io/archlinux/archlinux:latest --certificate-identity-regexp="https://gitlab\.archlinux\.org/archlinux/archlinux-docker//\.gitlab-ci\.yml@refs/tags/v[0-9]+\.0\.[0-9]+" --certificate-oidc-issuer=https://gitlab.archlinux.org
```
## Principles
* Provide the Arch experience in a Docker image
* Provide the simplest but complete image to `base`, `base-devel` and
`multilib-devel` on a regular basis
* `pacman` needs to work out of the box
* All installed packages have to be kept unmodified
>>>
⚠️⚠️⚠️ NOTE: For Security Reasons, these images strip the pacman lsign key.
This is because the same key would be spread to all containers of the same
image, allowing for malicious actors to inject packages (via, for example,
a man-in-the-middle). In order to create a lsign-key run `pacman-key
--init` on the first execution, but be careful to not redistribute that
key.⚠️⚠️⚠️
>>>
## Building your own image
[This repository][self] contains all scripts and files needed to create an OCI
image for Arch Linux.
### Dependencies
Install the following Arch Linux packages:
* make
* devtools (for the pacman.conf files)
* git (to fetch the commit/revision number)
* podman
* fakechroot
* fakeroot
Make sure your user can directly interact with Podman (i.e. `podman info` works).
### Usage
There are multiple `make image-XXX` targets, where each creates the
respective `archlinux:XXX` image based on the corresponding meta package.
Currently those include `base`, `base-devel` and `multilib-devel`.
## Pipeline
### Daily releases
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 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
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].
### Maintenance
Every year in June the content of the protected `GITLAB_PROJECT_TOKEN` variable needs to be replaced. To do this a GitLab admin needs to create a new [Access Token][access-tokens] with `api` and `write_repository` scope and the `Maintainer` role. This will create a new Bot User which needs to be given access to the protected `releases` branch.
[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
[openid-signing]: (https://docs.sigstore.dev/cosign/openid_signing/)
[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
[access-tokens]: https://gitlab.archlinux.org/archlinux/archlinux-docker/-/settings/access_tokens

7
docker-library.template Normal file
View File

@ -0,0 +1,7 @@
# https://gitlab.archlinux.org/archlinux/archlinux-docker
Maintainers: Santiago Torres-Arias <santiago@archlinux.org> (@SantiagoTorres),
Christian Rebischke <Chris.Rebischke@archlinux.org> (@shibumi),
Justin Kromlinger <hashworks@archlinux.org> (@hashworks)
GitRepo: https://gitlab.archlinux.org/archlinux/archlinux-docker.git

31
exclude
View File

@ -1,13 +1,18 @@
.dockerenv
.dockerinit
etc/hostname
etc/machine-id
etc/pacman.d/gnupg/openpgp-revocs.d/*
etc/pacman.d/gnupg/private-keys-v1.d/*
etc/pacman.d/gnupg/pubring.gpg~
etc/pacman.d/gnupg/S.*
root/*
tmp/*
var/cache/pacman/pkg/*
var/lib/pacman/sync/*
var/tmp/*
./.dockerenv
./.dockerinit
./sys
./proc
./dev
./etc/hostname
./etc/machine-id
./etc/resolv.conf
./etc/pacman.d/gnupg/openpgp-revocs.d/*
./etc/pacman.d/gnupg/private-keys-v1.d/*
./etc/pacman.d/gnupg/pubring.gpg~
./etc/pacman.d/gnupg/S.*
./root/*
./tmp/*
./var/cache/pacman/pkg/*
./var/lib/pacman/sync/*
./var/tmp/*
./alpm-hooks

View File

@ -1,4 +0,0 @@
sed
gzip
pacman
systemd

View File

@ -0,0 +1,13 @@
[options]
NoExtract = usr/share/help/* !usr/share/help/en* !usr/share/help/C/*
NoExtract = usr/share/gtk-doc/html/* usr/share/doc/*
NoExtract = usr/share/locale/* usr/share/X11/locale/* usr/share/i18n/*
NoExtract = !*locale*/en*/* !usr/share/i18n/charmaps/UTF-8.gz !usr/share/*locale*/locale.*
NoExtract = !usr/share/*locales/en_?? !usr/share/*locales/i18n* !usr/share/*locales/iso*
NoExtract = !usr/share/*locales/trans*
NoExtract = !usr/share/X11/locale/C/*
NoExtract = !usr/share/X11/locale/compose.dir !usr/share/X11/locale/iso8859-1/*
NoExtract = !usr/share/*locales/C !usr/share/*locales/POSIX !usr/share/i18n/charmaps/ANSI_X3.4-1968.gz
NoExtract = usr/share/man/* usr/share/info/*
NoExtract = usr/share/vim/vim*/lang/*
NoExtract = etc/pacman.conf etc/pacman.d/mirrorlist

View File

@ -1,91 +0,0 @@
#
# /etc/pacman.conf
#
# See the pacman.conf(5) manpage for option and repository directives
#
# GENERAL OPTIONS
#
[options]
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
#RootDir = /
#DBPath = /var/lib/pacman/
#CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/
#HoldPkg = pacman glibc
#XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
#UseDelta = 0.7
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options
#UseSyslog
#Color
#TotalDownload
CheckSpace
#VerbosePkgLists
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
SigLevel = Required DatabaseOptional
LocalFileSigLevel = Optional
#RemoteFileSigLevel = Required
# NOTE: You must run `pacman-key --init` before first using pacman; the local
# keyring can then be populated with the keys of all official Arch Linux
# packagers with `pacman-key --populate archlinux`.
#
# REPOSITORIES
# - can be defined here or included from another file
# - pacman will search repositories in the order defined here
# - local/custom mirrors can be added here or in separate files
# - repositories listed first will take precedence when packages
# have identical names, regardless of version number
# - URLs will have $repo replaced by the name of the current repo
# - URLs will have $arch replaced by the name of the architecture
#
# Repository entries are of the format:
# [repo-name]
# Server = ServerName
# Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#
# The testing repositories are disabled by default. To enable, uncomment the
# repo name header and Include lines. You can add preferred servers immediately
# after the header, and they will be used before the default mirrors.
[core]
Include = rootfs/etc/pacman.d/mirrorlist
[extra]
Include = rootfs/etc/pacman.d/mirrorlist
[community]
Include = rootfs/etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.
#[multilib]
#Include = /etc/pacman.d/mirrorlist
#
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs

6
renovate.json Normal file
View File

@ -0,0 +1,6 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base"
]
}

View File

@ -1 +1 @@
LANG=en_US.UTF-8
LANG=C.UTF-8

View File

@ -1 +0,0 @@
en_US.UTF-8 UTF-8

View File

@ -1 +1,2 @@
Server = https://mirror.leaseweb.net/archlinux/$repo/os/$arch
Server = https://fastly.mirror.pkgbuild.com/$repo/os/$arch
Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch

22
scripts/make-dockerfile.sh Executable file
View File

@ -0,0 +1,22 @@
#!/bin/bash
set -euo pipefail
declare -r ROOTFS_FILE="$1"
declare -r GROUP="$2"
declare -r OUTPUTDIR="$3"
declare -r DOWNLOAD="$4"
declare -r TITLE="$5"
# Do not use these directly in the sed below - it will mask git failures
BUILD_VERSION="${BUILD_VERSION:-dev}"
CI_COMMIT_SHA="${CI_COMMIT_SHA:-$(git rev-parse HEAD)}"
sed -e "s|TEMPLATE_ROOTFS_FILE|$ROOTFS_FILE|" \
-e "s|TEMPLATE_ROOTFS_DOWNLOAD|$DOWNLOAD|" \
-e "s|TEMPLATE_ROOTFS_HASH|$(cat $OUTPUTDIR/$ROOTFS_FILE.SHA256)|" \
-e "s|TEMPLATE_TITLE|Arch Linux $TITLE Image|" \
-e "s|TEMPLATE_VERSION_ID|$BUILD_VERSION|" \
-e "s|TEMPLATE_REVISION|$CI_COMMIT_SHA|" \
-e "s|TEMPLATE_CREATED|$(date -Is)|" \
Dockerfile.template > "$OUTPUTDIR/Dockerfile.$GROUP"

68
scripts/make-rootfs.sh Executable file
View File

@ -0,0 +1,68 @@
#!/bin/bash
set -euo pipefail
declare -r WRAPPER="fakechroot -- fakeroot"
declare -r GROUP="$1"
declare -r BUILDDIR="$2"
declare -r OUTPUTDIR="$3"
mkdir -vp "$BUILDDIR/alpm-hooks/usr/share/libalpm/hooks"
find /usr/share/libalpm/hooks -exec ln -sf /dev/null "$BUILDDIR/alpm-hooks"{} \;
mkdir -vp "$BUILDDIR/var/lib/pacman/" "$OUTPUTDIR"
[[ "$GROUP" == "multilib-devel" ]] && pacman_conf=multilib.conf || pacman_conf=extra.conf
install -Dm644 "/usr/share/devtools/pacman.conf.d/$pacman_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
if grep -q '#DisableSandboxFilesystem' "$BUILDDIR/etc/pacman.conf"; then
sed -i '/#DisableSandboxFilesystem/{c\
# No kernel landlock in containerd\
DisableSandboxFilesystem
}' "$BUILDDIR/etc/pacman.conf"
else
sed -i '/#DisableSandbox/{c\
# No kernel landlock in containerd\
DisableSandbox
}' "$BUILDDIR/etc/pacman.conf"
fi
cp --recursive --preserve=timestamps rootfs/* "$BUILDDIR/"
ln -fs /usr/lib/os-release "$BUILDDIR/etc/os-release"
$WRAPPER -- \
pacman -Sy -r "$BUILDDIR" \
--disable-sandbox-filesystem \
--noconfirm --dbpath "$BUILDDIR/var/lib/pacman" \
--config pacman.conf \
--noscriptlet \
--hookdir "$BUILDDIR/alpm-hooks/usr/share/libalpm/hooks/" base "$GROUP"
$WRAPPER -- chroot "$BUILDDIR" update-ca-trust
$WRAPPER -- chroot "$BUILDDIR" pacman-key --init
$WRAPPER -- chroot "$BUILDDIR" pacman-key --populate
# add system users
$WRAPPER -- chroot "$BUILDDIR" /usr/bin/systemd-sysusers --root "/"
# remove passwordless login for root (see CVE-2019-5021 for reference)
sed -i -e 's/^root::/root:!:/' "$BUILDDIR/etc/shadow"
# fakeroot to map the gid/uid of the builder process to root
# fixes #22
fakeroot -- \
tar \
--numeric-owner \
--xattrs \
--acls \
--exclude-from=exclude \
-C "$BUILDDIR" \
-c . \
-f "$OUTPUTDIR/$GROUP.tar"
cd "$OUTPUTDIR"
zstd --long -T0 -8 "$GROUP.tar"
sha256sum "$GROUP.tar.zst" > "$GROUP.tar.zst.SHA256"

6
sigstore-param-file.yaml Normal file
View File

@ -0,0 +1,6 @@
fulcio:
fulcioURL: "https://fulcio.sigstore.dev"
oidcMode: "staticToken"
oidcIssuerURL: "https://gitlab.archlinux.org"
oidcIDToken: "TEMPLATE_OIDC_ID_TOKEN"
rekorURL: "https://rekor.sigstore.dev"