|
| 1 | +# 1. Use Debian base |
| 2 | +FROM debian:trixie |
| 3 | + |
| 4 | +ENV DEBIAN_FRONTEND=noninteractive |
| 5 | + |
| 6 | +# 2. Install necessary tools |
| 7 | +RUN apt update && apt install -y \ |
| 8 | + dpkg-dev \ |
| 9 | + apt-utils \ |
| 10 | + adduser \ |
| 11 | + && rm -rf /var/lib/apt/lists/* |
| 12 | + |
| 13 | +# 3. Symlink addgroup for minimal system scripts |
| 14 | +RUN ln -s /usr/sbin/addgroup /usr/bin/addgroup || true |
| 15 | + |
| 16 | +# 4. Build args for parameterization |
| 17 | +ARG OLD_PACKAGE_PATH=build/old_package |
| 18 | +ARG NEW_PACKAGE_PATH=build |
| 19 | +ARG APP_PACKAGE_NAME=arduino-app-cli |
| 20 | +ARG ROUTER_PACKAGE_NAME=arduino-router |
| 21 | +ARG ARCH=arm64 |
| 22 | +ARG VERSION=0.6.3 |
| 23 | + |
| 24 | +# 5. Copy packages dynamically |
| 25 | +COPY ${OLD_PACKAGE_PATH}/${APP_PACKAGE_NAME}*.deb /tmp/old_app.deb |
| 26 | +COPY ${NEW_PACKAGE_PATH}/${APP_PACKAGE_NAME}*.deb /tmp/new_app.deb |
| 27 | +COPY ${NEW_PACKAGE_PATH}/${ROUTER_PACKAGE_NAME}*.deb /tmp/new_router.deb |
| 28 | + |
| 29 | +# 6. Install old package + router dependency |
| 30 | +RUN apt update && apt install -y \ |
| 31 | + /tmp/old_app.deb \ |
| 32 | + /tmp/new_router.deb \ |
| 33 | + && rm /tmp/old_app.deb |
| 34 | + |
| 35 | +# 7. Setup local APT repo with new packages |
| 36 | +RUN mkdir -p /var/www/html/myrepo/dists/trixie/main/binary-${ARCH} |
| 37 | + |
| 38 | +# Rename new packages to match their real package/version/arch |
| 39 | +RUN mv /tmp/new_app.deb /var/www/html/myrepo/dists/trixie/main/binary-${ARCH}/${APP_PACKAGE_NAME}_${VERSION}_${ARCH}.deb |
| 40 | +RUN mv /tmp/new_router.deb /var/www/html/myrepo/dists/trixie/main/binary-${ARCH}/${ROUTER_PACKAGE_NAME}_0.6.2-1_${ARCH}.deb |
| 41 | + |
| 42 | +# 8. Generate Packages.gz metadata |
| 43 | +WORKDIR /var/www/html/myrepo |
| 44 | +RUN dpkg-scanpackages dists/trixie/main/binary-arm64 /dev/null | gzip -9c > dists/trixie/main/binary-arm64/Packages.gz |
| 45 | +WORKDIR / |
| 46 | + |
| 47 | +# 9. Configure local APT repo |
| 48 | +RUN echo "deb [trusted=yes arch=${ARCH}] file:/var/www/html/myrepo trixie main" \ |
| 49 | + > /etc/apt/sources.list.d/my-mock-repo.list |
| 50 | + |
| 51 | +# 10. Fix home dir for arduino user (optional) |
| 52 | +RUN usermod -s /bin/bash arduino || true |
| 53 | +RUN mkdir -p /home/arduino && chown -R arduino:arduino /home/arduino |
| 54 | + |
| 55 | +# 11. Entrypoint: show upgrade availability |
| 56 | +RUN echo '#!/bin/bash\n\ |
| 57 | +set -e\n\ |
| 58 | +echo "--- Updating APT ---"\n\ |
| 59 | +apt update\n\ |
| 60 | +echo "--- Installed version ---"\n\ |
| 61 | +dpkg -l | grep ${APP_PACKAGE_NAME} || true\n\ |
| 62 | +echo "--- Upgrade candidate ---"\n\ |
| 63 | +apt-cache policy ${APP_PACKAGE_NAME}\n\ |
| 64 | +echo "--- Available upgrades ---"\n\ |
| 65 | +apt list --upgradable | grep ${APP_PACKAGE_NAME} || echo "No upgrade found"\n\ |
| 66 | +echo "--- Simulating upgrade ---"\n\ |
| 67 | +apt upgrade --simulate\n\ |
| 68 | +' > /entrypoint.sh |
| 69 | + |
| 70 | +RUN chmod +x /entrypoint.sh |
| 71 | +CMD ["/entrypoint.sh"] |
0 commit comments