diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a98c564 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM alpine:3.22.0 + +LABEL maintainer="Phil " +LABEL version="0.1" +LABEL description="Docker image for TFTP server using dnsmasq" + + +WORKDIR / + +RUN apk add --no-cache \ + bash \ + dnsmasq + +EXPOSE 69/udp + +COPY start.sh init.sh / + +RUN chmod +x start.sh init.sh + +VOLUME ["/tftp"] + +ENTRYPOINT ["./start.sh"] \ No newline at end of file diff --git a/init.sh/init.sh b/init.sh/init.sh new file mode 100644 index 0000000..7dd5e76 --- /dev/null +++ b/init.sh/init.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Configure user and group IDs +PUID=${PUID:-1000} +PGID=${PGID:-1000} + +echo "[init] Setting up user nbxyz with PUID=${PUID} and PGID=${PGID}" + +if ! getent group ${PGID} > /dev/null 2>&1; then + addgroup --gid ${PGID} tftp +else + echo "[init] Group with GID ${PGID} already exists" +fi + +if ! getent passwd ${PUID} > /dev/null 2>&1; then + adduser -u ${PUID} -G tftp -h /tftp -s /bin/false -D tftp +else + echo "[init] User with UID ${PUID} already exists" +fi + +usermod -a -G users tftp 2>/dev/null || true + +chown -R nbxyz:nbxyz /tftp +chmod -R 7777 -R /tftp \ No newline at end of file diff --git a/init.sh/start.sh b/init.sh/start.sh new file mode 100644 index 0000000..bf28f6f --- /dev/null +++ b/init.sh/start.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Init File +/init.sh + +# Wrapper script for dnsmasq to ensure TFTP logs are visible in docker logs +echo "[dnsmasq] Starting TFTP server on port 69" +echo "[dnsmasq] TFTP root: /config/menus" +echo "[dnsmasq] TFTP security: enabled" +echo "[dnsmasq] Logging: enabled (dhcp and queries)" + +# Start dnsmasq as root to bind to port 69, then drop privileges to tftp +exec /usr/sbin/dnsmasq --port=0 --keep-in-foreground --enable-tftp --user=tftp --tftp-secure --tftp-root=/tftp --log-facility=- --log-dhcp --log-queries "$@" \ No newline at end of file diff --git a/woodpecker.yml b/woodpecker.yml new file mode 100644 index 0000000..89515e6 --- /dev/null +++ b/woodpecker.yml @@ -0,0 +1,22 @@ +when: + branch: main + event: push + +variables: + - &repo git.hackmi.ch/${CI_REPO_OWNER}/${CI_REPO_NAME} + +steps: + publish: + image: docker.io/woodpeckerci/plugin-docker-buildx:latest + settings: + platforms: linux/amd64 + repo: *repo + registry: git.hackmi.ch + tags: latest + username: + from_secret: git-package-user + password: + from_secret: git-package-pw + when: + branch: main + event: push \ No newline at end of file