feat: full rootless setup (#165)

* use local devtools configs instead of global ones

* make docker image rootless

* add migration notes

* fix setup command

* fix regress jo
This commit is contained in:
2026-08-14 13:34:42 +03:00
committed by GitHub
parent 695424fa16
commit 3548b434be
36 changed files with 581 additions and 147 deletions
+28 -5
View File
@@ -1,4 +1,21 @@
services:
volume-init:
image: arcan1s/ahriman:edge
user: root
entrypoint: [
"chown",
]
command: [
"ahriman:ahriman",
"/var/lib/ahriman",
]
volumes:
- type: volume
source: repository
target: /var/lib/ahriman
backend:
image: arcan1s/ahriman:edge
privileged: true
@@ -8,9 +25,9 @@ services:
AHRIMAN_OUTPUT: console
AHRIMAN_PASSWORD: ${AHRIMAN_PASSWORD}
AHRIMAN_PORT: 8080
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | sudo -u ahriman ahriman user-add demo -R full
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | ahriman user-add demo -R full
AHRIMAN_REPOSITORY: ahriman-demo
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman/ahriman.sock
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman.sock
configs:
- source: service
@@ -22,8 +39,10 @@ services:
- type: volume
source: repository
target: /var/lib/ahriman
volume:
nocopy: true
depends_on:
volume-init:
condition: service_completed_successfully
healthcheck:
test: curl --fail --silent --output /dev/null http://backend:8080/api/v1/info
@@ -37,6 +56,10 @@ services:
ports:
- 8080:80
depends_on:
backend:
condition: service_healthy
configs:
- source: nginx
target: /etc/nginx/conf.d/default.conf
@@ -57,7 +80,7 @@ services:
AHRIMAN_DEBUG: yes
AHRIMAN_OUTPUT: console
AHRIMAN_REPOSITORY: ahriman-demo
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman/ahriman.sock
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman.sock
volumes:
- type: volume
+21 -2
View File
@@ -1,4 +1,21 @@
services:
volume-init:
image: arcan1s/ahriman:edge
user: root
entrypoint: [
"chown",
]
command: [
"ahriman:ahriman",
"/var/lib/ahriman",
]
volumes:
- type: volume
source: repository
target: /var/lib/ahriman
backend:
image: arcan1s/ahriman:edge
privileged: true
@@ -12,8 +29,10 @@ services:
- type: volume
source: repository
target: /var/lib/ahriman
volume:
nocopy: true
depends_on:
volume-init:
condition: service_completed_successfully
command: repo-daemon
+27 -4
View File
@@ -1,4 +1,21 @@
services:
volume-init:
image: arcan1s/ahriman:edge
user: root
entrypoint: [
"chown",
]
command: [
"ahriman:ahriman",
"/var/lib/ahriman",
]
volumes:
- type: volume
source: repository
target: /var/lib/ahriman
backend:
image: arcan1s/ahriman:edge
privileged: true
@@ -8,9 +25,9 @@ services:
AHRIMAN_OUTPUT: console
AHRIMAN_PASSWORD: ${AHRIMAN_PASSWORD}
AHRIMAN_PORT: 8080
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | sudo -u ahriman ahriman user-add demo -R full
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | ahriman user-add demo -R full
AHRIMAN_REPOSITORY: ahriman-demo
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman/ahriman.sock
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman.sock
configs:
- source: service
@@ -22,8 +39,10 @@ services:
- type: volume
source: repository
target: /var/lib/ahriman
volume:
nocopy: true
depends_on:
volume-init:
condition: service_completed_successfully
healthcheck:
test: curl --fail --silent --output /dev/null http://backend:8080/api/v1/info
@@ -37,6 +56,10 @@ services:
ports:
- 8080:80
depends_on:
backend:
condition: service_healthy
configs:
- source: nginx
target: /etc/nginx/conf.d/default.conf
+28 -5
View File
@@ -1,4 +1,21 @@
services:
volume-init:
image: arcan1s/ahriman:edge
user: root
entrypoint: [
"chown",
]
command: [
"ahriman:ahriman",
"/var/lib/ahriman",
]
volumes:
- type: volume
source: repository
target: /var/lib/ahriman
backend:
image: arcan1s/ahriman:edge
privileged: true
@@ -8,9 +25,9 @@ services:
AHRIMAN_OUTPUT: console
AHRIMAN_PASSWORD: ${AHRIMAN_PASSWORD}
AHRIMAN_PORT: 8080
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | sudo -u ahriman ahriman user-add demo -R full
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | ahriman user-add demo -R full
AHRIMAN_REPOSITORY: ahriman-demo
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman/ahriman.sock
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman.sock
configs:
- source: service
@@ -22,8 +39,10 @@ services:
- type: volume
source: repository
target: /var/lib/ahriman
volume:
nocopy: true
depends_on:
volume-init:
condition: service_completed_successfully
healthcheck:
test: curl --fail --silent --output /dev/null http://backend:8080/api/v1/info
@@ -37,6 +56,10 @@ services:
ports:
- 8080:80
depends_on:
backend:
condition: service_healthy
configs:
- source: nginx
target: /etc/nginx/conf.d/default.conf
@@ -62,7 +85,7 @@ services:
AHRIMAN_OUTPUT: console
AHRIMAN_PASSWORD: ${AHRIMAN_PASSWORD}
AHRIMAN_PORT: 8080
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | sudo -u ahriman ahriman user-add demo -R full
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | ahriman user-add demo -R full
AHRIMAN_REPOSITORY: ahriman-demo
AHRIMAN_REPOSITORY_SERVER: http://frontend/repo/$$repo/$$arch
+4
View File
@@ -2,8 +2,12 @@ FROM arcan1s/ahriman:edge
ENV ARCH32_KEYRING_VERSION="20231126-1.0"
USER root
RUN pacman-key --init
RUN pacman -Sy --noconfirm wget && \
wget -nv https://pool.mirror.archlinux32.org/i686/core/archlinux32-keyring-${ARCH32_KEYRING_VERSION}-any.pkg.tar.zst && \
pacman -U --noconfirm archlinux32-keyring-${ARCH32_KEYRING_VERSION}-any.pkg.tar.zst
USER ahriman
+27 -4
View File
@@ -1,4 +1,21 @@
services:
volume-init:
image: arcan1s/ahriman:edge
user: root
entrypoint: [
"chown",
]
command: [
"ahriman:ahriman",
"/var/lib/ahriman",
]
volumes:
- type: volume
source: repository
target: /var/lib/ahriman
backend:
image: ahriman-i686
build: .
@@ -12,9 +29,9 @@ services:
AHRIMAN_PACMAN_MIRROR: https://de.mirror.archlinux32.org/$$arch/$$repo
AHRIMAN_PASSWORD: ${AHRIMAN_PASSWORD}
AHRIMAN_PORT: 8080
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | sudo -u ahriman ahriman user-add demo -R full
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | ahriman user-add demo -R full
AHRIMAN_REPOSITORY: ahriman-demo
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman/ahriman.sock
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman.sock
configs:
- source: makepkg
@@ -30,8 +47,10 @@ services:
- type: volume
source: repository
target: /var/lib/ahriman
volume:
nocopy: true
depends_on:
volume-init:
condition: service_completed_successfully
healthcheck:
test: curl --fail --silent --output /dev/null http://backend:8080/api/v1/info
@@ -45,6 +64,10 @@ services:
ports:
- 8080:80
depends_on:
backend:
condition: service_healthy
configs:
- source: nginx
target: /etc/nginx/conf.d/default.conf
+21 -2
View File
@@ -1,4 +1,21 @@
services:
volume-init:
image: arcan1s/ahriman:edge
user: root
entrypoint: [
"chown",
]
command: [
"ahriman:ahriman",
"/var/lib/ahriman",
]
volumes:
- type: volume
source: repository
target: /var/lib/ahriman
backend:
image: arcan1s/ahriman:edge
privileged: true
@@ -16,8 +33,10 @@ services:
- type: volume
source: repository
target: /var/lib/ahriman
volume:
nocopy: true
depends_on:
volume-init:
condition: service_completed_successfully
command: repo-report
+27 -4
View File
@@ -1,4 +1,21 @@
services:
volume-init:
image: arcan1s/ahriman:edge
user: root
entrypoint: [
"chown",
]
command: [
"ahriman:ahriman",
"/var/lib/ahriman",
]
volumes:
- type: volume
source: repository
target: /var/lib/ahriman
backend:
image: arcan1s/ahriman:edge
privileged: true
@@ -8,10 +25,10 @@ services:
AHRIMAN_OUTPUT: console
AHRIMAN_PASSWORD: ${AHRIMAN_PASSWORD}
AHRIMAN_PORT: 8080
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | sudo -u ahriman ahriman user-add demo -R full
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | ahriman user-add demo -R full
AHRIMAN_PRESETUP_COMMAND: ahriman --architecture x86_64 --repository another-demo service-setup --build-as-user ahriman --packager 'ahriman bot <ahriman@example.com>'
AHRIMAN_REPOSITORY: ahriman-demo
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman/ahriman.sock
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman.sock
configs:
- source: service
@@ -23,8 +40,10 @@ services:
- type: volume
source: repository
target: /var/lib/ahriman
volume:
nocopy: true
depends_on:
volume-init:
condition: service_completed_successfully
healthcheck:
test: curl --fail --silent --output /dev/null http://backend:8080/api/v1/info
@@ -38,6 +57,10 @@ services:
ports:
- 8080:80
depends_on:
backend:
condition: service_healthy
configs:
- source: nginx
target: /etc/nginx/conf.d/default.conf
+27 -4
View File
@@ -1,4 +1,21 @@
services:
volume-init:
image: arcan1s/ahriman:edge
user: root
entrypoint: [
"chown",
]
command: [
"ahriman:ahriman",
"/var/lib/ahriman",
]
volumes:
- type: volume
source: repository
target: /var/lib/ahriman
backend:
image: arcan1s/ahriman:edge
privileged: true
@@ -9,9 +26,9 @@ services:
AHRIMAN_OAUTH_CLIENT_SECRET: ${AHRIMAN_OAUTH_CLIENT_SECRET}
AHRIMAN_OUTPUT: console
AHRIMAN_PORT: 8080
AHRIMAN_POSTSETUP_COMMAND: sudo -u ahriman ahriman user-add ${AHRIMAN_OAUTH_USER} -R full -p ""
AHRIMAN_POSTSETUP_COMMAND: ahriman user-add ${AHRIMAN_OAUTH_USER} -R full -p ""
AHRIMAN_REPOSITORY: ahriman-demo
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman/ahriman.sock
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman.sock
configs:
- source: service
@@ -21,8 +38,10 @@ services:
- type: volume
source: repository
target: /var/lib/ahriman
volume:
nocopy: true
depends_on:
volume-init:
condition: service_completed_successfully
healthcheck:
test: curl --fail --silent --output /dev/null http://backend:8080/api/v1/info
@@ -36,6 +55,10 @@ services:
ports:
- 8080:80
depends_on:
backend:
condition: service_healthy
configs:
- source: nginx
target: /etc/nginx/conf.d/default.conf
+26 -3
View File
@@ -1,4 +1,21 @@
services:
volume-init:
image: arcan1s/ahriman:edge
user: root
entrypoint: [
"chown",
]
command: [
"ahriman:ahriman",
"/var/lib/ahriman",
]
volumes:
- type: volume
source: repository
target: /var/lib/ahriman
backend:
image: arcan1s/ahriman:edge
privileged: true
@@ -10,7 +27,7 @@ services:
AHRIMAN_PORT: 8080
AHRIMAN_PRESETUP_COMMAND: useradd -d / -G wheel -M demo; (cat /run/secrets/password; echo; cat /run/secrets/password) | passwd demo
AHRIMAN_REPOSITORY: ahriman-demo
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman/ahriman.sock
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman.sock
configs:
- source: service
@@ -22,8 +39,10 @@ services:
- type: volume
source: repository
target: /var/lib/ahriman
volume:
nocopy: true
depends_on:
volume-init:
condition: service_completed_successfully
healthcheck:
test: curl --fail --silent --output /dev/null http://backend:8080/api/v1/info
@@ -37,6 +56,10 @@ services:
ports:
- 8080:80
depends_on:
backend:
condition: service_healthy
configs:
- source: nginx
target: /etc/nginx/conf.d/default.conf
+21 -2
View File
@@ -1,4 +1,21 @@
services:
volume-init:
image: arcan1s/ahriman:edge
user: root
entrypoint: [
"chown",
]
command: [
"ahriman:ahriman",
"/var/lib/ahriman",
]
volumes:
- type: volume
source: repository
target: /var/lib/ahriman
backend:
image: arcan1s/ahriman:edge
privileged: true
@@ -16,8 +33,10 @@ services:
- type: volume
source: repository
target: /var/lib/ahriman
volume:
nocopy: true
depends_on:
volume-init:
condition: service_completed_successfully
frontend:
image: nginx
+22 -3
View File
@@ -1,4 +1,21 @@
services:
volume-init:
image: arcan1s/ahriman:edge
user: root
entrypoint: [
"chown",
]
command: [
"ahriman:ahriman",
"/var/lib/ahriman",
]
volumes:
- type: volume
source: repository
target: /var/lib/ahriman
backend:
image: arcan1s/ahriman:edge
privileged: true
@@ -6,7 +23,7 @@ services:
environment:
AHRIMAN_DEBUG: yes
AHRIMAN_OUTPUT: console
AHRIMAN_POSTSETUP_COMMAND: sudo -u ahriman gpg --import /run/secrets/key
AHRIMAN_POSTSETUP_COMMAND: gpg --import /run/secrets/key
AHRIMAN_REPOSITORY: ahriman-demo
configs:
@@ -19,8 +36,10 @@ services:
- type: volume
source: repository
target: /var/lib/ahriman
volume:
nocopy: true
depends_on:
volume-init:
condition: service_completed_successfully
command: repo-daemon
+27 -4
View File
@@ -1,4 +1,21 @@
services:
volume-init:
image: arcan1s/ahriman:edge
user: root
entrypoint: [
"chown",
]
command: [
"ahriman:ahriman",
"/var/lib/ahriman",
]
volumes:
- type: volume
source: repository
target: /var/lib/ahriman
backend:
image: arcan1s/ahriman:edge
privileged: true
@@ -8,9 +25,9 @@ services:
AHRIMAN_OUTPUT: console
AHRIMAN_PASSWORD: ${AHRIMAN_PASSWORD}
AHRIMAN_PORT: 8080
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | sudo -u ahriman ahriman user-add demo -R full
AHRIMAN_POSTSETUP_COMMAND: (cat /run/secrets/password; echo; cat /run/secrets/password) | ahriman user-add demo -R full
AHRIMAN_REPOSITORY: ahriman-demo
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman/ahriman.sock
AHRIMAN_UNIX_SOCKET: /var/lib/ahriman/ahriman.sock
configs:
- source: service
@@ -22,8 +39,10 @@ services:
- type: volume
source: repository
target: /var/lib/ahriman
volume:
nocopy: true
depends_on:
volume-init:
condition: service_completed_successfully
healthcheck:
test: curl --fail --silent --output /dev/null http://backend:8080/api/v1/info
@@ -37,6 +56,10 @@ services:
ports:
- 8080:80
depends_on:
backend:
condition: service_healthy
configs:
- source: nginx
target: /etc/nginx/conf.d/default.conf