FROM debian:stable-slim # update package manager RUN apt-get update -y && \ apt-get upgrade -y && \ apt-get dist-upgrade -y && \ apt-get -y autoremove && \ apt-get clean # install requirements RUN apt-get -y install \ lsof \ bc \ build-essential \ curl \ ffmpeg \ gawk \ git \ gnupg \ grep \ joe \ jq \ less \ openssl \ procps \ python3 \ python3-poetry \ pipx \ rsyslog \ sed \ sqlite3 \ subversion \ wget \ unzip \ default-jre-headless \ libpci3 \ libpciaccess0 \ libssl-dev \ ca-certificates \ libcrypto++-dev \ xmlstarlet # install Docker RUN apt-get update && \ apt-get install -y ca-certificates curl && \ install -m 0755 -d /etc/apt/keyrings && \ curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && \ chmod a+r /etc/apt/keyrings/docker.asc && \ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ tee /etc/apt/sources.list.d/docker.list > /dev/null && \ apt-get update && \ apt-get install -y \ docker-ce \ docker-ce-cli \ containerd.io \ docker-buildx-plugin \ docker-compose-plugin # non root user for shell plugin ARG CRONICLE_UID=1000 # (original GID 1099) ARG CRONICLE_GID=1000 RUN addgroup cronicle --gid $CRONICLE_GID && \ adduser --disabled-password --disabled-login --home /opt/cronicle --uid $CRONICLE_UID --gid $CRONICLE_GID cronicle # this is dockeeerrrr!! # 995 -> debian host /var/run/docker.sock # 996 -> container docker GID RUN groupmod docker --gid 995 RUN usermod -o -g 1000 -G 1000 -u 1000 cronicle ########################################################################### # BEGIN TOOLS # ########################################################################### RUN mkdir -p /tmp/kitchen WORKDIR /tmp/kitchen # Install node-js RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \ apt-get install -y nodejs && \ node --version && npm --version # Build cronicle-edge RUN git clone https://github.com/cronicle-edge/cronicle-edge && \ cd cronicle-edge && \ ./bundle /opt/cronicle --sqlite --tools && \ chown -R cronicle:cronicle /opt/cronicle # selenese-runner RUN curl -L -s https://github.com/vmi/selenese-runner-java/releases/download/selenese-runner-java-4.3.0/selenese-runner.jar -o /usr/local/bin/selenese-runner.jar # Install xidel #RUN curl -s -L 'https://api.github.com/repos/benibela/xidel/releases/latest' | \ # jq '.assets[].browser_download_url' | \ # grep linux64 | \ # xargs curl -s -L -o - | \ # tar -zxvf - && \ # mv xidel /usr/local/bin/ # Install deno requirement RUN curl -s -L "https://api.github.com/repos/denoland/deno/releases/latest" | \ jq '.assets[].browser_download_url' | \ grep deno\-aarch64\-unknown\-linux\-gnu\.zip | \ grep -v sha256sum | \ xargs curl -sLo deno.zip && \ unzip deno.zip && \ mv deno /usr/local/bin/ && \ chmod +x /usr/local/bin/deno # Install YouTube downloader. RUN curl -s -L "https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest" | \ jq '.assets[].browser_download_url' | \ grep yt-dlp_linux_aarch64 | \ grep -v zip | \ xargs curl -sLo /usr/local/bin/yt-dlp && \ chmod +x /usr/local/bin/yt-dlp && \ /usr/local/bin/yt-dlp --help # install ytdl-nfo for yt-dlp .nfo files WORKDIR /tmp/kitchen RUN git clone https://github.com/SHOrTEVA/ytdl-nfo.git && \ cd ytdl-nfo && \ poetry install && \ poetry build && \ mkdir -p /opt/pipx && \ export PIPX_HOME=/opt/pipx && \ export PIPX_BIN_DIR=/usr/local/bin && \ pipx install ./dist/ytdl_nfo-0.3.0.tar.gz WORKDIR /tmp/kitchen # HDHomeRun RUN git clone https://github.com/Silicondust/libhdhomerun.git /tmp/kitchen/libhdhomerun && \ cd /tmp/kitchen/libhdhomerun && \ make && \ cp hdhomerun_config /usr/local/bin/ && \ cp libhdhomerun.so /usr/local/lib/ # rclone RUN curl -L -s https://downloads.rclone.org/rclone-current-linux-arm64.zip -o /tmp/kitchen/rclone-current-linux-arm64.zip && \ unzip -j rclone-current-linux-arm64.zip && \ ls -l && \ cp rclone /usr/local/bin && \ chmod +x /usr/local/bin/rclone # remove kitchen RUN rm -rf /tmp/kitchen WORKDIR / ########################################################################### # END TOOLS # ########################################################################### WORKDIR /opt/cronicle ENV PATH "/opt/cronicle/bin:${PATH}" ENV CRONICLE_foreground=1 ENV CRONICLE_echo=1 ENV TZ=Etc/UTC # add filesystem requirements ADD rootfs / # health check HEALTHCHECK --interval=1m --timeout=10s --retries=3 --start-period=1m \ CMD curl -f http://127.0.0.1:3012/ || exit 1 #RUN chmod +x /usr/local/bin/run #ENTRYPOINT [ "/usr/local/bin/run" ] ENTRYPOINT [ "/opt/cronicle/bin/manager" ]