Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cbb3eb0e22 | ||
|
|
98e2bee2a5 | ||
|
|
4b25e62b52 | ||
|
|
1c08727c5d | ||
|
|
af84720d71 | ||
|
|
c748c4f928 | ||
|
|
5164551f98 | ||
|
|
63b00ad2e7 | ||
|
|
2bda4c3be6 | ||
|
|
3b72178739 | ||
|
|
df8f46eb2d | ||
|
|
a1931efcc1 |
@@ -1,25 +1,54 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
stages:
|
default:
|
||||||
- build
|
image: quay.io/buildah/stable:v1.28.0
|
||||||
|
|
||||||
build:
|
|
||||||
stage: build
|
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
- linux
|
- linux
|
||||||
image:
|
|
||||||
name: gcr.io/kaniko-project/executor:v1.6.0-debug
|
# Since jobs are using 'rules' it's possible for duplicate pipelines to run
|
||||||
entrypoint: ["/busybox/sh", "-c"]
|
# (one for push to mr-branch, another for mr. Avoid this:
|
||||||
|
workflow:
|
||||||
|
rules:
|
||||||
|
- if: $CI_PIPELINE_SOURCE == "schedule"
|
||||||
|
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push"
|
||||||
|
when: never
|
||||||
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||||
|
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
|
||||||
|
when: never
|
||||||
|
- if: $CI_COMMIT_TAG == $CI
|
||||||
|
|
||||||
|
envars:
|
||||||
|
stage: test
|
||||||
|
script: |
|
||||||
|
echo "Select CI env. vars.:";
|
||||||
|
printenv | egrep '^CI_' | sort
|
||||||
|
|
||||||
|
commit_check:
|
||||||
|
stage: test
|
||||||
|
rules:
|
||||||
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_LABELS !~ /skip-ci/
|
||||||
|
- when: never
|
||||||
variables:
|
variables:
|
||||||
BASE_TAG: latest
|
BADRX: '^(squash!)|(fixup!)'
|
||||||
FLAVOR: stable
|
script: |
|
||||||
|
dnf install -y git
|
||||||
|
shortlogtmp=$(mktemp -p '' commit_check_tmp_XXXX)
|
||||||
|
git log --oneline --no-show-signature "${CI_MERGE_REQUEST_DIFF_BASE_SHA}..HEAD" > "$shortlogtmp"
|
||||||
|
if egrep -q "$BADRX" "$shortlogtmp"; then
|
||||||
|
egrep "$BADRX" "$shortlogtmp"
|
||||||
|
die "Found the above commits matching '$BADRX'"
|
||||||
|
fi
|
||||||
|
|
||||||
|
build:
|
||||||
|
stage: deploy
|
||||||
|
variables:
|
||||||
|
BUILDAH_FORMAT: docker
|
||||||
|
BUILDAH_ISOLATION: chroot
|
||||||
|
STORAGE_DRIVER: vfs
|
||||||
|
before_script:
|
||||||
|
- echo "$CI_REGISTRY_PASSWORD" | buildah login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
|
||||||
script:
|
script:
|
||||||
- 'mkdir -p /kaniko/.docker'
|
|
||||||
- 'echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json'
|
|
||||||
- |
|
|
||||||
echo "Select CI env. vars.:";
|
|
||||||
printenv | egrep '^CI_' | sort
|
|
||||||
# N/B: There could be more than one merge-request open with this branch's HEAD
|
# N/B: There could be more than one merge-request open with this branch's HEAD
|
||||||
- |
|
- |
|
||||||
IMAGE_TAG="${CI_COMMIT_BRANCH}";
|
IMAGE_TAG="${CI_COMMIT_BRANCH}";
|
||||||
@@ -31,10 +60,12 @@ build:
|
|||||||
IMAGE_TAG="latest";
|
IMAGE_TAG="latest";
|
||||||
fi
|
fi
|
||||||
echo "Building/Pushing to: ${CI_REGISTRY_IMAGE}:${IMAGE_TAG}";
|
echo "Building/Pushing to: ${CI_REGISTRY_IMAGE}:${IMAGE_TAG}";
|
||||||
- |
|
- >-
|
||||||
/kaniko/executor \
|
buildah build \
|
||||||
--context $CI_PROJECT_DIR \
|
--label "org.opencontainers.image.source=${CI_PROJECT_URL}" \
|
||||||
--dockerfile $CI_PROJECT_DIR/Containerfile \
|
--label "org.opencontainers.image.revision=$CI_COMMIT_SHA" \
|
||||||
--destination "${CI_REGISTRY_IMAGE}:${IMAGE_TAG}" \
|
--label "org.opencontainers.image.created=$CI_JOB_STARTED_AT" \
|
||||||
--build-arg "BASE_TAG=$BASE_TAG" \
|
--label "org.opencontainers.image.version=${IMAGE_TAG}" \
|
||||||
--build-arg "FLAVOR=$FLAVOR"
|
-t "${CI_REGISTRY_IMAGE}:${IMAGE_TAG}" "$CI_PROJECT_DIR"
|
||||||
|
- buildah images
|
||||||
|
- buildah push "${CI_REGISTRY_IMAGE}:${IMAGE_TAG}"
|
||||||
|
|||||||
@@ -6,9 +6,7 @@
|
|||||||
# https://docs.gitlab.com/runner/executors/docker.html#use-podman-to-run-docker-commands
|
# https://docs.gitlab.com/runner/executors/docker.html#use-podman-to-run-docker-commands
|
||||||
#
|
#
|
||||||
|
|
||||||
ARG FLAVOR="stable"
|
FROM quay.io/podman/stable:v4.3.1
|
||||||
ARG BASE_TAG="latest"
|
|
||||||
FROM quay.io/podman/$FLAVOR:$BASE_TAG
|
|
||||||
|
|
||||||
# This is a list of packages to remove and/or exclude from the image.
|
# This is a list of packages to remove and/or exclude from the image.
|
||||||
# Primarily this is done for security reasons, should a runner process
|
# Primarily this is done for security reasons, should a runner process
|
||||||
@@ -97,13 +95,15 @@ RUN sed -i -r \
|
|||||||
chmod +x /usr/local/bin/gitlab-runner-wrapper && \
|
chmod +x /usr/local/bin/gitlab-runner-wrapper && \
|
||||||
chmod +x /usr/local/bin/podman-in-podman-maintenance && \
|
chmod +x /usr/local/bin/podman-in-podman-maintenance && \
|
||||||
chown -R podman:podman /home/podman && \
|
chown -R podman:podman /home/podman && \
|
||||||
|
chmod u+s /usr/bin/new{uid,gid}map && \
|
||||||
rm -f /home/podman/.bash* && \
|
rm -f /home/podman/.bash* && \
|
||||||
echo DOCKER_HOST="unix:///tmp/podman-run-1000/podman/podman.sock" > /etc/profile.d/podman.sh
|
echo DOCKER_HOST="unix:///tmp/podman-run-1000/podman/podman.sock" > /etc/profile.d/podman.sh
|
||||||
|
|
||||||
# Runtime rootless-mode configuration
|
# Runtime rootless-mode configuration
|
||||||
USER podman
|
USER podman
|
||||||
VOLUME ["/home/podman/.local/share/containers/storage/",\
|
VOLUME ["/home/podman/.local/share/containers/storage/",\
|
||||||
"/home/podman/.gitlab-runner/"]
|
"/home/podman/.gitlab-runner/", \
|
||||||
|
"/cache"]
|
||||||
WORKDIR /home/podman
|
WORKDIR /home/podman
|
||||||
ENTRYPOINT ["/usr/local/bin/gitlab-runner-wrapper"]
|
ENTRYPOINT ["/usr/local/bin/gitlab-runner-wrapper"]
|
||||||
|
|
||||||
@@ -113,13 +113,17 @@ RUN mkdir -p .local/share/containers/storage
|
|||||||
# Gitlab-runner configuration options. Default to unprivileged (nested)
|
# Gitlab-runner configuration options. Default to unprivileged (nested)
|
||||||
# runner. Privileged is required to permit nested container image building.
|
# runner. Privileged is required to permit nested container image building.
|
||||||
ARG RUNNER_NAME="qontainers-pipglr"
|
ARG RUNNER_NAME="qontainers-pipglr"
|
||||||
ARG PRIVILEGED_RUNNER="false"
|
# Running inner-podman privileged is necessary at the time of this commit.
|
||||||
|
ARG PRIVILEGED_RUNNER="true"
|
||||||
# Tags allow pinning jobs to specific runners, comma-separated list of
|
# Tags allow pinning jobs to specific runners, comma-separated list of
|
||||||
# tags to add to runner (no spaces!)
|
# tags to add to runner (no spaces!)
|
||||||
ARG RUNNER_TAGS="podman-in-podman"
|
ARG RUNNER_TAGS="podman-in-podman"
|
||||||
# Permit running jobs without any tag at all
|
# Permit running jobs without any tag at all
|
||||||
ARG RUNNER_UNTAGGED="true"
|
ARG RUNNER_UNTAGGED="true"
|
||||||
ENV REGISTER_NON_INTERACTIVE="true" \
|
# Adjust based on usage and storage size to prevent ENOSPACE problems
|
||||||
|
ARG CLEAN_INTERVAL="24h"
|
||||||
|
ENV CLEAN_INTERVAL="$CLEAN_INTERVAL" \
|
||||||
|
REGISTER_NON_INTERACTIVE="true" \
|
||||||
RUNNER_TAG_LIST="$RUNNER_TAGS" \
|
RUNNER_TAG_LIST="$RUNNER_TAGS" \
|
||||||
REGISTER_RUN_UNTAGGED="$RUNNER_UNTAGGED" \
|
REGISTER_RUN_UNTAGGED="$RUNNER_UNTAGGED" \
|
||||||
REGISTER_ACCESS_LEVEL="ref_protected" \
|
REGISTER_ACCESS_LEVEL="ref_protected" \
|
||||||
@@ -132,15 +136,16 @@ ENV REGISTER_NON_INTERACTIVE="true" \
|
|||||||
DOCKER_HOST="unix:///tmp/podman-run-1000/podman/podman.sock" \
|
DOCKER_HOST="unix:///tmp/podman-run-1000/podman/podman.sock" \
|
||||||
DOCKER_DEVICES="/dev/fuse" \
|
DOCKER_DEVICES="/dev/fuse" \
|
||||||
DOCKER_IMAGE="registry.fedoraproject.org/fedora-minimal:latest" \
|
DOCKER_IMAGE="registry.fedoraproject.org/fedora-minimal:latest" \
|
||||||
DOCKER_CACHE_DIR="/home/podman/.cache/gitlab-runner" \
|
DOCKER_CACHE_DIR="/cache" \
|
||||||
|
DOCKER_VOLUMES="/cache" \
|
||||||
DOCKER_NETWORK_MODE="host" \
|
DOCKER_NETWORK_MODE="host" \
|
||||||
DOCKER_PRIVILEGED="$PRIVILEGED_RUNNER"
|
DOCKER_PRIVILEGED="$PRIVILEGED_RUNNER"
|
||||||
|
|
||||||
# Not a real build-arg. Simply here to save lots of typing.
|
# Not a real build-arg. Simply here to save lots of typing.
|
||||||
ARG _pm="--systemd=true --device=/dev/fuse --security-opt label=disable --user podman --volume pipglr-podman-root:/home/podman/.local/share/containers/storage:Z --volume pipglr-runner-config:/home/podman/.gitlab-runner:Z -e PODMAN_RUNNER_DEBUG -e LOG_LEVEL"
|
ARG _pm="--systemd=true --device=/dev/fuse --security-opt label=disable --user podman --volume pipglr-podman-root:/home/podman/.local/share/containers/storage --volume pipglr-config:/home/podman/.gitlab-runner -v pipglr-podman-cache:/cache -e PODMAN_RUNNER_DEBUG -e LOG_LEVEL"
|
||||||
|
|
||||||
# These labels simply make it easier to register and execute the runner.
|
# These labels simply make it easier to register and execute the runner.
|
||||||
# Define them last so they are absent should a image-build failure occur.
|
# Define them last so they are absent should a image-build failure occur.
|
||||||
LABEL register="podman run -it --rm $_pm --secret REGISTRATION_TOKEN,type=env \$IMAGE register"
|
LABEL register="podman run -it --rm $_pm --secret REGISTRATION_TOKEN,type=env \$IMAGE register"
|
||||||
# Note: Privileged mode is required to permit building container images with inner-podman
|
# Note: Privileged mode is required to permit building container images with inner-podman
|
||||||
LABEL run="podman run -d --rm --privileged --name gitlab-runner $_pm \$IMAGE run"
|
LABEL run="podman run -d --privileged --name pipglr $_pm \$IMAGE run"
|
||||||
|
|||||||
81
README.md
81
README.md
@@ -27,21 +27,28 @@ lacks this feature, Several labels are set on the image to support
|
|||||||
easy registration and execution of a runner container using a special
|
easy registration and execution of a runner container using a special
|
||||||
bash command. See the examples below for more information.
|
bash command. See the examples below for more information.
|
||||||
|
|
||||||
#### Volume Ownership Bug
|
#### [Volume Ownership Bug](https://github.com/containers/podman/issues/16576)
|
||||||
|
|
||||||
Some versions of podman contain a bug where named volumes aren't owned
|
Some versions of podman contain a bug where named local volumes aren't owned
|
||||||
by the namespaced user within a rootless container (i.e. in conjunction
|
by the namespaced user within a rootless container (i.e. the 'podman' user).
|
||||||
with the --user option). Since the `podman` user/group inside the `pipglr`
|
Since the `podman` user/group inside the `pipglr` container is known, it's
|
||||||
container is known, it's possible to manually set/reset ownership:
|
possible to manually setup ownership ahead of time. This should be be done
|
||||||
|
once, prior to registering your runners:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
VOLUME=pipglr-podman-root
|
$ for VOLUME in pipglr-podman-root pipglr-config pipglr-podman-cache; do \
|
||||||
podman volume create $VOLUME
|
PUPVM="podman unshare podman volume mount $VOLUME"
|
||||||
cd $(podman unshare podman volume mount $VOLUME)
|
podman volume create $VOLUME && \
|
||||||
podman unshare chown 1000:1000
|
podman unshare chown 1000:1000 $($PUPVM) && \
|
||||||
podman volume unmount $VOLUME
|
podman unshare chmod 02770 $($PUPVM) && \
|
||||||
|
podman unshare ls -land $($PUPVM) ; \
|
||||||
|
done
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you get `podman system service` startup permission-denied errors, or
|
||||||
|
errors from gitlab-runner, unable to connect to the podman socket, this is
|
||||||
|
likely the cause. You can fix it after-the-fact using the same commands as above, just add a `-R` option to the `chown`/`chmod`, and additionally target `./*`.
|
||||||
|
|
||||||
#### Runner registration
|
#### Runner registration
|
||||||
|
|
||||||
Each time the registration command is run, a new runner is added into
|
Each time the registration command is run, a new runner is added into
|
||||||
@@ -52,20 +59,27 @@ For modern versions of podman, registration can be performed with the
|
|||||||
following commands:
|
following commands:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
IMAGE="=registry.gitlab.com/qontainers/pipglr:latest"
|
$ IMAGE="registry.gitlab.com/qontainers/pipglr:latest"
|
||||||
echo '<actual registration token>' | podman secret create REGISTRATION_TOKEN -
|
$ echo '<actual registration token>' | podman secret create REGISTRATION_TOKEN -
|
||||||
podman container runlabel $IMAGE register --secret REGISTRATION_TOKEN,type=env
|
$ podman container runlabel register $IMAGE
|
||||||
```
|
```
|
||||||
|
|
||||||
Where `<actual registration token>` is the value obtained from the "runners"
|
Where `<actual registration token>` is the value obtained from the "runners"
|
||||||
settings page of a gitlab group or project.
|
settings page of a gitlab group or project. When you're finished registering
|
||||||
|
as many runners as you want, the secret is no-longer needed and may be removed:
|
||||||
|
|
||||||
Note: Some versions of podman don't support the `container runlabel` sub-command.
|
```bash
|
||||||
|
$ podman secret rm REGISTRATION_TOKEN
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Note
|
||||||
|
|
||||||
|
Some versions of podman don't support the `container runlabel` sub-command.
|
||||||
If this is the case, you may simulate it with the following command (in addition
|
If this is the case, you may simulate it with the following command (in addition
|
||||||
to the other example commands above):
|
to the other example commands above):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
eval $(podman inspect --format=json $IMAGE | jq -r .[].Labels.register)
|
$ eval $(podman inspect --format=json $IMAGE | jq -r .[].Labels.register)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Runner Startup
|
#### Runner Startup
|
||||||
@@ -74,9 +88,11 @@ With one or more runners successfully registered and configured, the GitLab
|
|||||||
runner container may be launched with the following commands:
|
runner container may be launched with the following commands:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
podman container runlabel $IMAGE run
|
$ podman container runlabel run $IMAGE
|
||||||
```
|
```
|
||||||
|
|
||||||
|
##### Note
|
||||||
|
|
||||||
As above, if you're missing the `container runlabel` sub-command, the following
|
As above, if you're missing the `container runlabel` sub-command, the following
|
||||||
may be used instead (assuming `$IMAGE` remains set):
|
may be used instead (assuming `$IMAGE` remains set):
|
||||||
|
|
||||||
@@ -84,8 +100,24 @@ may be used instead (assuming `$IMAGE` remains set):
|
|||||||
$ eval $(podman inspect --format=json $IMAGE | jq -r .[].Labels.run)
|
$ eval $(podman inspect --format=json $IMAGE | jq -r .[].Labels.run)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Runner configuration
|
||||||
|
|
||||||
|
You may inspect/modify the gitlab-runner configuration as you see fit, just be
|
||||||
|
sure to use the `podman unshare` command-wrapper to enter the usernamespace.
|
||||||
|
For example, to display the config:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ podman unshare $(podman unshare podman volume mount pipglr-config)/config.toml
|
||||||
|
```
|
||||||
|
|
||||||
#### Debugging
|
#### Debugging
|
||||||
|
|
||||||
|
The first thing to check is the container output:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ podman logs --since 0 pipglr
|
||||||
|
```
|
||||||
|
|
||||||
Before starting the runner, you may `export PODMAN_RUNNER_DEBUG=debug` to enable
|
Before starting the runner, you may `export PODMAN_RUNNER_DEBUG=debug` to enable
|
||||||
debugging on the inner-podman. Whereas `export LOG_LEVEL=debug` can be used to
|
debugging on the inner-podman. Whereas `export LOG_LEVEL=debug` can be used to
|
||||||
debug the gitlab-runner itself.
|
debug the gitlab-runner itself.
|
||||||
@@ -94,7 +126,9 @@ debug the gitlab-runner itself.
|
|||||||
|
|
||||||
This image may be built simply with:
|
This image may be built simply with:
|
||||||
|
|
||||||
`podman build -t registry.gitlab.com/qontainers/pipglr:latest .`
|
```bash
|
||||||
|
$ podman build -t registry.gitlab.com/qontainers/pipglr:latest .
|
||||||
|
```
|
||||||
|
|
||||||
This will utilize the latest stable version of podman and the latest
|
This will utilize the latest stable version of podman and the latest
|
||||||
stable version of the gitlab runner.
|
stable version of the gitlab runner.
|
||||||
@@ -120,6 +154,10 @@ Several build arguments are available to control the output image:
|
|||||||
exact podman version. Possible values include, `latest`, `vX`, `vX.Y`,
|
exact podman version. Possible values include, `latest`, `vX`, `vX.Y`,
|
||||||
and `vX.Y.Z` (where, `X`, `Y`, and `Z` represent the podman semantic
|
and `vX.Y.Z` (where, `X`, `Y`, and `Z` represent the podman semantic
|
||||||
version numbers). It's also possible to specify an image SHA.
|
version numbers). It's also possible to specify an image SHA.
|
||||||
|
* `CLEAN_INTERVAL` - A `sleep` (command) compatible time-argument that
|
||||||
|
determines how often to clean out podman storage of disused containers and
|
||||||
|
images. Defaults to 24-hours, but should be adjusted based on desired caching-effect
|
||||||
|
versus available storage space and rate of job execution.
|
||||||
* `EXCLUDE_PACKAGES` - A space-separated list of RPM packages to prevent
|
* `EXCLUDE_PACKAGES` - A space-separated list of RPM packages to prevent
|
||||||
their existence in the final image. This is intended as a security measure
|
their existence in the final image. This is intended as a security measure
|
||||||
to limit the attack-surface should a gitlab-runner process escape it's
|
to limit the attack-surface should a gitlab-runner process escape it's
|
||||||
@@ -140,10 +178,9 @@ Several build arguments are available to control the output image:
|
|||||||
and port supports various observability and debugging features of the
|
and port supports various observability and debugging features of the
|
||||||
gitlab runner. For more information see the [gitlab runner advanced
|
gitlab runner. For more information see the [gitlab runner advanced
|
||||||
configuration documentation](https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-global-section).
|
configuration documentation](https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-global-section).
|
||||||
* `PRIVILEGED_RUNNER` - Defaults to 'false', may be set 'true'. When
|
* `PRIVILEGED_RUNNER` - Defaults to 'true', may be set 'true' if you're brave.
|
||||||
`true`, this causes inner-containers to be created with the `--privileged`
|
However this may result in the gitlab-runner failing to launch inner-containers.
|
||||||
flag. This is a potential security weakness, but is necessary for
|
Setting it false will also prevent building container images using the runner.
|
||||||
(among other things) allowing nested container image builds.
|
|
||||||
* `RUNNER_TAGS` - Defaults to `podman_in_podman`, may be set to any comma-separated
|
* `RUNNER_TAGS` - Defaults to `podman_in_podman`, may be set to any comma-separated
|
||||||
list (with no spaces!) of tags. These show up in GitLab (not the runner
|
list (with no spaces!) of tags. These show up in GitLab (not the runner
|
||||||
configuration), and determines where jobs are run.
|
configuration), and determines where jobs are run.
|
||||||
|
|||||||
@@ -4,16 +4,23 @@
|
|||||||
# a podman-in-podman gitlab runner container. Any usage
|
# a podman-in-podman gitlab runner container. Any usage
|
||||||
# outside that context is not supported and may cause harm.
|
# outside that context is not supported and may cause harm.
|
||||||
|
|
||||||
set -e
|
set -eo pipefail
|
||||||
|
|
||||||
maintain_podman() {
|
maintain_podman() {
|
||||||
# Two days seems to be a good happy-medium beween filling up
|
# Two days seems to be a good happy-medium beween filling up
|
||||||
# about 40gig of storage space from moderate CI activity,
|
# about 40gig of storage space from moderate CI activity,
|
||||||
# and maintaining a useful level of caching.
|
# and maintaining a useful level of caching.
|
||||||
while sleep 2d; do
|
while sleep "$CLEAN_INTERVAL"; do
|
||||||
if [[ -n "$PODMAN_RUNNER_DEBUG" ]]; then
|
if [[ -n "$PODMAN_RUNNER_DEBUG" ]]; then
|
||||||
echo "$(date --iso-8601=second) ${BASH_SOURCE[0] performing podman maintenance}"
|
echo "$(date --iso-8601=second) ${BASH_SOURCE[0] performing podman maintenance}"
|
||||||
fi
|
fi
|
||||||
podman system prune --all --force
|
podman system prune --all --force
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if [[ -z "$CLEAN_INTERVAL" ]]; then
|
||||||
|
echo "ERROR: Empty/unset \$CLEAN_INTERVAL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
maintain_podman
|
||||||
|
|||||||
Reference in New Issue
Block a user