diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 52b508329..2dc105923 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,16 +18,16 @@ variables: default: image: - name: registry.uniworx.de/uniworx/containers/debian:12.5 + name: registry.uniworx.de/fradrive/fradrive/debian-podman:latest # name: registry.uniworx.de/fradrive/fradrive/docker:dind # name: registry.uniworx.de/fradrive/fradrive/fradrive-env:latest # Debian 12.5 Bookworm # entrypoint: [""] # docker: # platform: x86_64 - # user: ${ENV_USER} - before_script: - - apt-get -y update - - apt-get -y install make + # # user: ${ENV_USER} + # before_script: + # - apt-get -y update + # - apt-get -y install make podman # - chown -R ${ENV_USER} . # Change project directory ownership to (non-root) user inside docker container artifacts: name: "${CI_JOB_NAME}-${CI_COMMIT_SHORT_SHA}" @@ -48,8 +48,8 @@ frontend image: stage: build images script: # TODO: define make target for this? - - make -- --docker-build-frontend-build FRADRIVE_SERVICE=frontend - - docker image save frontend | gzip > docker/frontend/image.tar.gz + - make -- --docker-build-frontend-build FRADRIVE_SERVICE=frontend CONTAINER_RUNNER=podman + - podman image save frontend | gzip > docker/frontend/image.tar.gz artifacts: paths: - docker/frontend/image.tar.gz @@ -60,8 +60,8 @@ frontend build: - job: frontend image artifacts: true script: - - &load-frontend-image zcat docker/frontend/image.tar.gz | docker image load - - make -- --docker-run-frontend-build FRADRIVE_SERVICE=frontend + - &load-frontend-image zcat docker/frontend/image.tar.gz | podman image load + - make -- --docker-run-frontend-build FRADRIVE_SERVICE=frontend CONTAINER_RUNNER=podman artifacts: paths: - /fradrive/node_modules @@ -80,7 +80,7 @@ frontend lint: artifacts: true script: - *load-frontend-image - - make -- --docker-run-frontend-lint FRADRIVE_SERVICE=frontend + - make -- --docker-run-frontend-lint FRADRIVE_SERVICE=frontend CONTAINER_RUNNER=podman cache: *frontend-cache frontend test: @@ -92,7 +92,7 @@ frontend test: artifacts: true script: - *load-frontend-image - - make -- --docker-run-frontend-test FRADRIVE_SERVICE=frontend + - make -- --docker-run-frontend-test FRADRIVE_SERVICE=frontend CONTAINER_RUNNER=podman cache: *frontend-cache @@ -108,14 +108,14 @@ push frontend image: script: - *load-frontend-image # - docker image tag - - docker push frontend + - podman push frontend backend image: stage: build images script: # TODO: define make target for this? - - make -- --docker-build-backend-build FRADRIVE_SERVICE=backend - - docker image save backend | gzip > docker/backend/image.tar.gz + - make -- --docker-build-backend-build FRADRIVE_SERVICE=backend CONTAINER_RUNNER=podman + - podman image save backend | gzip > docker/backend/image.tar.gz artifacts: paths: - docker/backend/image.tar.gz @@ -128,8 +128,8 @@ backend build: - job: frontend build artifacts: true script: - - &load-backend-image zcat docker/backend/image.tar.gz | docker image load - - make -- --docker-run-backend-build FRADRIVE_SERVICE=backend + - &load-backend-image zcat docker/backend/image.tar.gz | podman image load + - make -- --docker-run-backend-build FRADRIVE_SERVICE=backend CONTAINER_RUNNER=podman artifacts: paths: - /fradrive/.stack/ @@ -143,7 +143,7 @@ backend lint: artifacts: true script: - *load-backend-image - - make -- --docker-run-backend-lint FRADRIVE_SERVICE=backend + - make -- --docker-run-backend-lint FRADRIVE_SERVICE=backend CONTAINER_RUNNER=podman cache: *backend-cache backend test: @@ -155,7 +155,7 @@ backend test: artifacts: true script: - *load-backend-image - - make -- --docker-run-backend-test FRADRIVE_SERVICE=backend + - make -- --docker-run-backend-test FRADRIVE_SERVICE=backend CONTAINER_RUNNER=podman cache: *backend-cache push backend image: @@ -169,7 +169,7 @@ push backend image: artifacts: false script: - *load-backend-image - - docker push backend + - podman push backend # frontend dependencies: # stage: setup diff --git a/Makefile b/Makefile index af5887be1..119f23c71 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,8 @@ db ?= -cf +CONTAINER_RUNNER ?= docker + .PHONY: help help: @echo "Nothing to see here, go away" @@ -167,6 +169,6 @@ well-known/.well-known: # run-s frontend:build --parallel "frontend:build:watch" "yesod:start" --docker-build-%: - docker compose build $(FRADRIVE_SERVICE) + $(CONTAINER_RUNNER) compose build $(FRADRIVE_SERVICE) --docker-run-%: - docker compose run -u `id -u`:`id -g` --env FRADRIVE_MAKE_TARGET=$* $(FRADRIVE_SERVICE) \ No newline at end of file + $(CONTAINER_RUNNER) compose run -u `id -u`:`id -g` --env FRADRIVE_MAKE_TARGET=$* $(FRADRIVE_SERVICE) \ No newline at end of file diff --git a/docker/podman/Dockerfile b/docker/podman/Dockerfile new file mode 100644 index 000000000..368404500 --- /dev/null +++ b/docker/podman/Dockerfile @@ -0,0 +1,29 @@ +# Debian-based podman daemon image for building docker images +# inside docker containers (e.g. gitlab runners). +# +# Yoinked with love from: +# https://www.redhat.com/sysadmin/podman-inside-container + +FROM registry.uniworx.de/uniworx/containers/debian:12.5 + +RUN apt-get -y update + +RUN apt-get -y install make podman fuse-overlayfs + +RUN useradd podman; \ +echo podman:10000:5000 > /etc/subuid; \ +echo podman:10000:5000 > /etc/subgid; + +VOLUME /var/lib/containers +VOLUME /home/podman/.local/share/containers + +ADD https://raw.githubusercontent.com/containers/image_build/main/podman/containers.conf /etc/containers/containers.conf +ADD https://raw.githubusercontent.com/containers/image_build/main/podman/podman-containers.conf /home/podman/.config/containers/containers.conf + +RUN chown podman:podman -R /home/podman + +# chmod containers.conf and adjust storage.conf to enable Fuse storage. +RUN chmod 644 /etc/containers/containers.conf; sed -i -e 's|^#mount_program|mount_program|g' -e '/additionalimage.*/a "/var/lib/shared",' -e 's|^mountopt[[:space:]]*=.*$|mountopt = "nodev,fsync=0"|g' /etc/containers/libpod.conf +RUN mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers /var/lib/shared/vfs-images /var/lib/shared/vfs-layers; touch /var/lib/shared/overlay-images/images.lock; touch /var/lib/shared/overlay-layers/layers.lock; touch /var/lib/shared/vfs-images/images.lock; touch /var/lib/shared/vfs-layers/layers.lock + +ENV _CONTAINERS_USERNS_CONFIGURED="" \ No newline at end of file