public
nobgit
read
NobMail
Based on mailcow: dockerized
Languages
Repository composition by tracked source files.
PHP
49%
JavaScript
35%
HTML
9%
CSS
4%
Shell
2%
Python
1%
Lua
0%
Perl
0%
Ruby
0%
SCSS
0%
Create file
Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git
Commit
[ClamAV] Use tini, check if background procs are running, use pipe to output to stdout
c5dd30b0
data/Dockerfiles/clamd/Dockerfile | 6 ++++--
data/Dockerfiles/clamd/bootstrap.sh | 32 ++++++++++++++++++++++++++------
2 files changed, 30 insertions(+), 8 deletions(-)
Diff
diff --git a/data/Dockerfiles/clamd/Dockerfile b/data/Dockerfiles/clamd/Dockerfile
index aa50b807..ec56bf1d 100644
--- a/data/Dockerfiles/clamd/Dockerfile
+++ b/data/Dockerfiles/clamd/Dockerfile
@@ -7,7 +7,7 @@ COPY dl_files.sh bootstrap.sh ./
# Installation
RUN apk add --update \
- && apk add --no-cache clamav clamav-libunrar curl bash \
+ && apk add --no-cache clamav clamav-libunrar curl bash tini \
&& chmod +x /dl_files.sh \
&& set -ex; /bin/bash /dl_files.sh \
&& mkdir /run/clamav \
@@ -15,12 +15,14 @@ RUN apk add --update \
&& chmod 750 /run/clamav \
&& sed -i '/Foreground yes/s/^#//g' /etc/clamav/clamd.conf \
&& sed -i '/TCPSocket 3310/s/^#//g' /etc/clamav/clamd.conf \
+ && sed -i 's#LogFile /var/log/clamav/clamd.log#LogFile /tmp/logpipe_clamd#g' /etc/clamav/clamd.conf \
&& sed -i 's/#PhishingSignatures yes/PhishingSignatures no/g' /etc/clamav/clamd.conf \
&& sed -i 's/#PhishingScanURLs yes/PhishingScanURLs no/g' /etc/clamav/clamd.conf \
+ && sed -i 's#UpdateLogFile /var/log/clamav/freshclam.log#UpdateLogFile /tmp/logpipe_freshclam#g' /etc/clamav/freshclam.conf \
&& sed -i '/Foreground yes/s/^#//g' /etc/clamav/freshclam.conf
# Port provision
EXPOSE 3310
# AV daemon bootstrapping
-CMD ["/bootstrap.sh"]
+CMD ["/sbin/tini", "-g", "--", "/bootstrap.sh"]
diff --git a/data/Dockerfiles/clamd/bootstrap.sh b/data/Dockerfiles/clamd/bootstrap.sh
index d815214b..ffe582c9 100755
--- a/data/Dockerfiles/clamd/bootstrap.sh
+++ b/data/Dockerfiles/clamd/bootstrap.sh
@@ -1,14 +1,34 @@
#!/bin/bash
-touch /var/log/clamav/clamd.log /var/log/clamav/freshclam.log
-chown -R clamav:clamav /var/log/clamav/
if [[ "${SKIP_CLAMD}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
- echo "SKIP_CLAMD=y, skipping ClamAV..."
- sleep 365d
- exit 0
+ echo "SKIP_CLAMD=y, skipping ClamAV..."
+ sleep 365d
+ exit 0
fi
+# Create log pipes
+touch /var/log/clamav/clamd.log /var/log/clamav/freshclam.log
+mkfifo -m 600 /tmp/logpipe_clamd
+mkfifo -m 600 /tmp/logpipe_freshclam
+chown -R clamav:clamav /var/log/clamav/ /tmp/logpipe_*
+cat <> /tmp/logpipe_clamd 1>&2 &
+cat <> /tmp/logpipe_freshclam 1>&2 &
+
+# Prepare
+BACKGROUND_TASKS=()
+
freshclam -d &
+BACKGROUND_TASKS+=($!)
+
clamd &
+BACKGROUND_TASKS+=($!)
-tail -f /var/log/clamav/clamd.log /var/log/clamav/freshclam.log
+while true; do
+ for bg_task in ${BACKGROUND_TASKS[*]}; do
+ if ! kill -0 ${bg_task} 1>&2; then
+ echo "Worker ${bg_task} died, stopping container waiting for respawn..."
+ kill -TERM 1
+ fi
+ sleep 10
+ done
+done