|
| 1 | +FROM debian:trixie-slim |
| 2 | + |
| 3 | +ENV DEBIAN_FRONTEND=noninteractive |
| 4 | +ENV container=docker |
| 5 | + |
| 6 | +ENTRYPOINT ["sh", "-c", "rm -f /.dockerenv; trap 'echo Received SIGTERM; exit 0' TERM; sleep infinity & wait"] |
| 7 | + |
| 8 | +COPY seccomp-default.json /etc/docker/ |
| 9 | +COPY raspberrypi-archive.gpg /etc/apt/keyrings/ |
| 10 | + |
| 11 | +RUN apt-get update && apt-get install --no-install-recommends -y \ |
| 12 | + ca-certificates curl lsb-release apt-transport-https \ |
| 13 | + busybox-static parted dosfstools e2fsprogs \ |
| 14 | + coreutils findutils util-linux \ |
| 15 | + && apt-get clean && rm -rf /var/lib/apt/lists/* |
| 16 | + |
| 17 | +# Add Raspberry Pi apt repository and key |
| 18 | +RUN echo "deb [signed-by=/etc/apt/keyrings/raspberrypi-archive.gpg] http://archive.raspberrypi.org/debian/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/raspi.list \ |
| 19 | + && apt-get update \ |
| 20 | + && apt-get full-upgrade -y \ |
| 21 | + && apt-get clean && rm -rf /var/lib/apt/lists/* |
| 22 | + |
| 23 | + |
| 24 | +# Pre-install initramfs-tools |
| 25 | +RUN apt-get update && apt-get install --no-install-recommends -y \ |
| 26 | + initramfs-tools \ |
| 27 | + zstd \ |
| 28 | + && echo "btrfs" >>/etc/initramfs-tools/modules \ |
| 29 | + && echo "nvme" >>/etc/initramfs-tools/modules \ |
| 30 | + && echo "sd_mod" >>/etc/initramfs-tools/modules \ |
| 31 | + && echo "sdhci" >>/etc/initramfs-tools/modules \ |
| 32 | + && echo "sdhci_pci" >>/etc/initramfs-tools/modules \ |
| 33 | + && echo "usb_storage" >>/etc/initramfs-tools/modules \ |
| 34 | + && echo "mmc_block" >>/etc/initramfs-tools/modules \ |
| 35 | + && echo "mmc_core" >>/etc/initramfs-tools/modules \ |
| 36 | + && echo "sr_mod" >>/etc/initramfs-tools/modules \ |
| 37 | + && echo "RESUME=none" >>/etc/initramfs-tools/conf.d/resume \ |
| 38 | + && apt-get clean && rm -rf /var/lib/apt/lists/* |
| 39 | + |
| 40 | + |
| 41 | +# Install Raspberry Pi firmware, kernel and related packages |
| 42 | +RUN apt-get update && apt-get install --no-install-recommends -y \ |
| 43 | + linux-image-rpi-2712 \ |
| 44 | + linux-image-rpi-v8 \ |
| 45 | + raspberrypi-archive-keyring \ |
| 46 | + raspberrypi-net-mods \ |
| 47 | + raspberrypi-sys-mods \ |
| 48 | + raspi-config \ |
| 49 | + raspi-firmware \ |
| 50 | + raspi-utils \ |
| 51 | + raspi-utils-core \ |
| 52 | + raspi-utils-dt \ |
| 53 | + raspi-utils-eeprom \ |
| 54 | + raspi-utils-otp \ |
| 55 | + raspinfo \ |
| 56 | + device-tree-compiler \ |
| 57 | + firmware-atheros \ |
| 58 | + firmware-brcm80211 \ |
| 59 | + firmware-libertas \ |
| 60 | + firmware-linux-free \ |
| 61 | + firmware-misc-nonfree \ |
| 62 | + firmware-realtek \ |
| 63 | + flashrom \ |
| 64 | + gpiod \ |
| 65 | + fake-hwclock \ |
| 66 | + fakeroot \ |
| 67 | + rpi-swap \ |
| 68 | + rpi-eeprom \ |
| 69 | + rpi-update \ |
| 70 | + initramfs-tools \ |
| 71 | + initramfs-tools-core \ |
| 72 | + iw \ |
| 73 | + kbd \ |
| 74 | + lsb-release \ |
| 75 | + && apt-get clean && rm -rf /var/lib/apt/lists/* |
| 76 | + |
| 77 | + |
| 78 | +#pigpio |
| 79 | +#pigpio-tools |
| 80 | +#pigpiod |
| 81 | + |
| 82 | + |
| 83 | +#linux-image-6.6.51+rpt-rpi-2712 |
| 84 | +#linux-image-6.6.51+rpt-rpi-v8 |
| 85 | +#linux-image-rpi-2712 |
| 86 | + |
| 87 | +# Regenerate initramfs for installed kernels (best-effort) |
| 88 | +#RUN update-initramfs -c -k all |
| 89 | + |
| 90 | + |
| 91 | +# Install required packages |
| 92 | +RUN apt-get update && apt-get install --no-install-recommends -y \ |
| 93 | + btrfs-progs \ |
| 94 | + busybox \ |
| 95 | + ca-certificates \ |
| 96 | + cloud-guest-utils \ |
| 97 | + curl \ |
| 98 | + dbus \ |
| 99 | + dbus-broker \ |
| 100 | + dialog \ |
| 101 | + docker-cli \ |
| 102 | + docker.io \ |
| 103 | + gnupg2 \ |
| 104 | + inetutils-ping \ |
| 105 | + jq \ |
| 106 | + jsonschema-jv \ |
| 107 | + kbd \ |
| 108 | + kmod \ |
| 109 | + less \ |
| 110 | + openssh-server \ |
| 111 | + pass \ |
| 112 | + selinux-policy-default \ |
| 113 | + sudo \ |
| 114 | + systemd \ |
| 115 | + systemd-sysv \ |
| 116 | + systemd-timesyncd \ |
| 117 | + vim \ |
| 118 | + yq \ |
| 119 | + && apt-get clean && rm -rf /var/lib/apt/lists/* \ |
| 120 | + && systemctl enable systemd-timesyncd.service |
| 121 | + |
| 122 | +# Install CuOS scripts (systemd required) |
| 123 | +COPY cuos/ /usr/local/cuos/ |
| 124 | +RUN /usr/local/cuos/install.sh |
| 125 | + |
| 126 | +# Install network services |
| 127 | +RUN apt-get update && apt-get install --no-install-recommends -y \ |
| 128 | + hostname \ |
| 129 | + ifupdown \ |
| 130 | + iproute2 \ |
| 131 | + iptables \ |
| 132 | + isc-dhcp-client \ |
| 133 | + isc-dhcp-common \ |
| 134 | + openresolv \ |
| 135 | + && apt-get clean && rm -rf /var/lib/apt/lists/* \ |
| 136 | + && echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf |
| 137 | + |
| 138 | +# Ensure persistence |
| 139 | +RUN mkdir -p /data && \ |
| 140 | + rm -f /etc/machine-id && ln -sf /data/machine-id /etc/machine-id && \ |
| 141 | + rm -Rf /var/log && ln -sf /data/log /var/log && \ |
| 142 | + rm -Rf /var/lib/dhcp && ln -sf /data/dhcp /var/lib/dhcp && \ |
| 143 | + rm -Rf /var/lib/docker && mkdir -p /data/docker && ln -sf /data/docker /var/lib/docker && \ |
| 144 | + rm -Rf /var/lib/containerd && mkdir -p /data/containerd && ln -sf /data/containerd /var/lib/containerd && \ |
| 145 | + rm -Rf /root/.docker && mkdir -p /data/.docker && ln -sf /data/.docker /root/.docker && \ |
| 146 | + echo "[Journal]\nStorage=persistent\nSystemMaxUse=1G\nRuntimeMaxUse=50M\nCompress=yes\nSeal=yes\nSplitMode=uid\nSyncIntervalSec=5m\nRateLimitInterval=30s\nRateLimitBurst=1000" >/etc/systemd/journald.conf && \ |
| 147 | + rm /etc/network/interfaces && \ |
| 148 | + mkdir -p /data/shieldor && \ |
| 149 | + ln -sf /data/shieldor /usr/local/shieldor && \ |
| 150 | + rm -f /etc/ssh/ssh_host_* |
| 151 | + |
| 152 | +# Set up SSH |
| 153 | +RUN echo 'root:root' | chpasswd && \ |
| 154 | + sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config |
| 155 | + |
0 commit comments