Dockerfile 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. FROM alpine:3.21 AS builder
  2. WORKDIR /src
  3. ENV CLAMD_VERSION=1.4.2
  4. RUN apk upgrade --no-cache \
  5. && apk add --update --no-cache \
  6. g++ \
  7. gcc \
  8. gdb \
  9. make \
  10. cmake \
  11. py3-pytest \
  12. python3 \
  13. valgrind \
  14. bzip2-dev \
  15. check-dev \
  16. curl-dev \
  17. json-c-dev \
  18. libmilter-dev \
  19. libxml2-dev \
  20. linux-headers \
  21. ncurses-dev \
  22. openssl-dev \
  23. pcre2-dev \
  24. zlib-dev \
  25. cargo \
  26. rust
  27. RUN mkdir -p /src \
  28. && wget -P /src https://www.clamav.net/downloads/production/clamav-${CLAMD_VERSION}.tar.gz \
  29. && tar xzfv /src/clamav-${CLAMD_VERSION}.tar.gz \
  30. && cd /src/clamav-${CLAMD_VERSION} \
  31. && mkdir build \
  32. && cmake . \
  33. -D CMAKE_BUILD_TYPE="Release" \
  34. -D CMAKE_INSTALL_PREFIX="/usr" \
  35. -D CMAKE_INSTALL_LIBDIR="/usr/lib" \
  36. -D APP_CONFIG_DIRECTORY="/etc/clamav" \
  37. -D DATABASE_DIRECTORY="/var/lib/clamav" \
  38. -D ENABLE_CLAMONACC=OFF \
  39. -D ENABLE_EXAMPLES=OFF \
  40. -D ENABLE_MILTER=ON \
  41. -D ENABLE_MAN_PAGES=OFF \
  42. -D ENABLE_STATIC_LIB=OFF \
  43. -D ENABLE_JSON_SHARED=ON \
  44. && cmake --build . \
  45. && make DESTDIR="/clamav" -j$(($(nproc) - 1)) install \
  46. && rm -r "/clamav/usr/lib/pkgconfig/" \
  47. && sed -e "s|^\(Example\)|\# \1|" \
  48. -e "s|.*\(LocalSocket\) .*|\1 /tmp/clamd.sock|" \
  49. -e "s|.*\(TCPSocket\) .*|\1 3310|" \
  50. -e "s|.*\(TCPAddr\) .*|#\1 0.0.0.0|" \
  51. -e "s|.*\(User\) .*|\1 clamav|" \
  52. -e "s|^\#\(LogFile\) .*|\1 /var/log/clamav/clamd.log|" \
  53. -e "s|^\#\(LogTime\).*|\1 yes|" \
  54. "/clamav/etc/clamav/clamd.conf.sample" > "/clamav/etc/clamav/clamd.conf" \
  55. && sed -e "s|^\(Example\)|\# \1|" \
  56. -e "s|.*\(DatabaseOwner\) .*|\1 clamav|" \
  57. -e "s|^\#\(UpdateLogFile\) .*|\1 /var/log/clamav/freshclam.log|" \
  58. -e "s|^\#\(NotifyClamd\).*|\1 /etc/clamav/clamd.conf|" \
  59. -e "s|^\#\(ScriptedUpdates\).*|\1 yes|" \
  60. "/clamav/etc/clamav/freshclam.conf.sample" > "/clamav/etc/clamav/freshclam.conf" \
  61. && sed -e "s|^\(Example\)|\# \1|" \
  62. -e "s|.*\(MilterSocket\) .*|\1 inet:7357|" \
  63. -e "s|.*\(User\) .*|\1 clamav|" \
  64. -e "s|^\#\(LogFile\) .*|\1 /var/log/clamav/milter.log|" \
  65. -e "s|^\#\(LogTime\).*|\1 yes|" \
  66. -e "s|.*\(\ClamdSocket\) .*|\1 unix:/tmp/clamd.sock|" \
  67. "/clamav/etc/clamav/clamav-milter.conf.sample" > "/clamav/etc/clamav/clamav-milter.conf" || exit 1
  68. FROM alpine:3.21
  69. LABEL maintainer = "The Infrastructure Company GmbH <info@servercow.de>"
  70. RUN apk upgrade --no-cache \
  71. && apk add --update --no-cache \
  72. tzdata \
  73. rsync \
  74. bind-tools \
  75. bash \
  76. tini \
  77. json-c \
  78. libbz2 \
  79. libcurl \
  80. libmilter \
  81. libxml2 \
  82. ncurses-libs \
  83. pcre2 \
  84. zlib \
  85. libgcc \
  86. && addgroup -S "clamav" && \
  87. adduser -D -G "clamav" -h "/var/lib/clamav" -s "/bin/false" -S "clamav" && \
  88. install -d -m 755 -g "clamav" -o "clamav" "/var/log/clamav" && \
  89. chown -R clamav:clamav /var/lib/clamav
  90. COPY --from=builder "/clamav" "/"
  91. # init
  92. COPY clamd.sh /clamd.sh
  93. RUN chmod +x /sbin/tini
  94. # healthcheck
  95. COPY healthcheck.sh /healthcheck.sh
  96. COPY clamdcheck.sh /usr/local/bin
  97. RUN chmod +x /healthcheck.sh
  98. RUN chmod +x /usr/local/bin/clamdcheck.sh
  99. HEALTHCHECK --start-period=6m CMD "/healthcheck.sh"
  100. ENTRYPOINT []
  101. CMD ["/sbin/tini", "-g", "--", "/clamd.sh"]