Dockerfile.debug
Rama master · réplica de lectura del repositorio original.
# docker build -t gerbera-debug --progress plain . -f Dockerfile.debug
ARG BASE_IMAGE=alpine:edge
FROM ${BASE_IMAGE} AS builder
RUN apk add --no-cache \
sudo \
bash \
cmake zlib-dev \
curl-dev \
ffmpeg-dev \
file-dev \
g++ \
gcc \
git \
make \
patch \
tar \
xz \
lsb-release \
mariadb-connector-c-dev \
pkgconf \
sqlite-dev \
jsoncpp-dev \
libpq-dev \
icu-dev \
tini \
util-linux-dev \
autoconf \
automake \
libtool \
wget \
file
# Build googletest
WORKDIR /gtest_build
COPY scripts/install-googletest.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-googletest.sh
# Build fmt
WORKDIR /fmt_build
COPY scripts/install-fmt.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-fmt.sh
# Build spdlog
WORKDIR /spdlog_build
COPY scripts/install-spdlog.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-spdlog.sh
# Build pugixml
WORKDIR /pugixml_build
COPY scripts/install-pugixml.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-pugixml.sh
# Build wavpack
WORKDIR /wavpack_build
COPY scripts/install-wavpack.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-wavpack.sh shared apps
# Build ebml
WORKDIR /ebml_build
COPY scripts/install-ebml.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-ebml.sh
# Build matroska
WORKDIR /mastroska_build
COPY scripts/install-matroska.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-matroska.sh
# Build duktape
WORKDIR /duktape_build
COPY scripts/install-duktape.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-duktape.sh
# Build ffmpegthumbnailer
WORKDIR /ffmpegthumbnailer_build
COPY scripts/install-ffmpegthumbnailer.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-ffmpegthumbnailer.sh
# Build libupnp
WORKDIR /libupnp_build
COPY scripts/install-pupnp.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-pupnp.sh
# Build taglib
WORKDIR /taglib_build
COPY scripts/install-taglib.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-taglib.sh
# Build libexiv2
WORKDIR /libexiv2_build
COPY scripts/install-libexiv2.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-libexiv2.sh
# Build libexif
WORKDIR /libexif_build
COPY scripts/install-libexif.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-libexif.sh
# Build libpqxx
WORKDIR /libpqxx_build
COPY scripts/install-libpqxx.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-libpqxx.sh
# Build libzippp
WORKDIR /libzippp_build
COPY scripts/install-libzip*.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-libzip.sh
RUN ./install-libzippp.sh
# Build cxxopts
WORKDIR /cxxopts_build
COPY scripts/install-cxxopts.sh scripts/versions.sh scripts/gerbera-install-shell.sh ./
COPY scripts/alpine/*.* ./alpine/
COPY scripts/alpine/deps/*.sh ./alpine/deps/
RUN ./install-cxxopts.sh
# Build Gerbera
WORKDIR /gerbera_build
COPY . .
RUN cmake -S . -B build --preset=develop \
-DWITH_SYSTEMD=NO \
-DBUILD_DOC=NO \
-DINSTALL_DOC=NO \
-DBUILD_CHANGELOG=NO \
-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=NO \
&& \
cmake --build build -v -j$(nproc) \
&& \
(cmake --build build -v -t test ARGS="--output-on-failure" || cmake --build build -v -t test ARGS="--output-on-failure --rerun-failed --debug") \
&& DESTDIR=/container-icons-stage cmake --install build --component ContainerIcons
FROM ${BASE_IMAGE} AS gerbera
RUN apk add --no-cache \
sudo \
bash \
shadow \
curl \
ffmpeg-libavutil \
ffmpeg-libavformat \
ffmpeg-libavcodec \
ffmpeg-libavfilter \
libjpeg \
file \
expat brotli inih inih-inireader \
mariadb-connector-c \
sqlite \
sqlite-libs \
jsoncpp \
libpq \
icu \
su-exec \
tini \
tzdata \
util-linux \
zlib \
# libexecinfo \
# Transcoding \
ffmpeg \
libheif-tools \
vlc \
# Debugging
gdb
# Copy libupnp
COPY --from=builder /usr/local/lib/libixml.so* /usr/local/lib/libupnp.so* /usr/lib/
# Copy libexiv2
COPY --from=builder /usr/local/lib/libexiv2.so* /usr/lib/
# Copy libexif
COPY --from=builder /usr/local/lib/libexif.so* /usr/lib/
# Copy ffmpegthumbnailer
COPY --from=builder /usr/local/lib/libffmpegthumbnailer.so* /usr/lib/
# Copy ebml
COPY --from=builder /usr/local/lib/libebml.so* /usr/lib/
# Copy mastroska
COPY --from=builder /usr/local/lib/libmatroska.so* /usr/lib/
# Copy wavpack
COPY --from=builder /usr/local/lib/libwavpack.so* /usr/lib/
# Copy fmt
COPY --from=builder /usr/local/lib/libfmt.so* /usr/lib/
# Copy spdlog
COPY --from=builder /usr/local/lib/libspdlog.so* /usr/lib/
# Copy duktape
COPY --from=builder /usr/local/lib/libduktape.so* /usr/lib/
# Copy libpqxx
COPY --from=builder /usr/local/lib/libpqxx*.so* /usr/lib/
# Copy libzippp
COPY --from=builder /usr/local/lib/libzip*.so* /usr/lib/
# Copy Gerbera
COPY --from=builder /gerbera_build/build/gerbera /bin/gerbera
COPY --from=builder /gerbera_build/scripts/js /usr/local/share/gerbera/js
COPY --from=builder /gerbera_build/web /usr/local/share/gerbera/web
COPY --from=builder /container-icons-stage/usr/local/share/gerbera/container-icons /usr/local/share/gerbera/container-icons
COPY --from=builder /gerbera_build/src/database/*/*.sql /gerbera_build/src/database/*/*.xml /usr/local/share/gerbera/
COPY --from=builder /gerbera_build/scripts/docker/docker-entrypoint.sh /usr/local/bin
ARG IMAGE_USER=gerbera
ARG IMAGE_GROUP=gerbera
ARG IMAGE_UID=1042
ARG IMAGE_GID=1042
ARG IMAGE_PORT=49494
RUN addgroup -S ${IMAGE_GROUP} --gid=${IMAGE_GID} 2>/dev/null \
&& adduser -S -D -H -h /var/run/gerbera -s /sbin/nologin -G ${IMAGE_GROUP} -g ${IMAGE_GROUP} --uid=${IMAGE_UID} ${IMAGE_USER} 2>/dev/null \
&& echo "${IMAGE_USER} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers \
&& addgroup ${IMAGE_USER} video \
&& mkdir /var/run/gerbera/ \
&& chmod 2775 /var/run/gerbera/ \
&& mkdir /content \
&& chmod 777 /content \
&& ln -s /content /mnt/content \
&& mkdir -p /mnt/customization/js \
&& mkdir -p /mnt/customization/shell \
&& chmod -R 777 /mnt/customization
# Update entrypoint
RUN chmod 0755 /usr/local/bin/docker-entrypoint.sh \
&& sed "s/\$IMAGE_UID/$IMAGE_UID/g" -i /usr/local/bin/docker-entrypoint.sh \
&& sed "s/\$IMAGE_GID/$IMAGE_GID/g" -i /usr/local/bin/docker-entrypoint.sh \
&& sed "s/\$IMAGE_USER/$IMAGE_USER/g" -i /usr/local/bin/docker-entrypoint.sh \
&& sed "s/\$IMAGE_GROUP/$IMAGE_GROUP/g" -i /usr/local/bin/docker-entrypoint.sh
EXPOSE ${IMAGE_PORT}
EXPOSE 1900/udp
ENV IMAGE_PORT=${IMAGE_PORT:-49494}
ENTRYPOINT ["/sbin/tini", "--", "docker-entrypoint.sh"]
CMD ["/bin/sh", "-c", "gerbera --port ${IMAGE_PORT} --config /var/run/gerbera/config.xml"]
FROM gerbera AS debug