Skip to content

Commit 95a8942

Browse files
committed
feat: Raspberry Pi ARM 64 support
1 parent 96ff2e1 commit 95a8942

4 files changed

Lines changed: 173 additions & 0 deletions

File tree

‎.github/workflows/docker-system.yml‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,21 @@ jobs:
6363
org.opencontainers.image.version=${{ steps.vars.outputs.tag }}
6464
#platforms: linux/amd64,linux/arm64,linux/arm/v7
6565

66+
- name: Build and push Docker image - cuos-system-rpi-arm64
67+
uses: docker/build-push-action@v6
68+
with:
69+
context: ./system
70+
file: ./system/Dockerfile.rpi-arm64
71+
push: true
72+
tags: |
73+
ghcr.io/${{ github.repository_owner }}/cuos-system-rpi-arm64:${{ steps.vars.outputs.tag }}
74+
labels: |
75+
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
76+
org.opencontainers.image.revision=${{ github.sha }}
77+
org.opencontainers.image.created=${{ github.run_id }}
78+
org.opencontainers.image.version=${{ steps.vars.outputs.tag }}
79+
platforms: linux/arm64
80+
6681
- name: Build and push Docker image - cuos-system-lxc
6782
uses: docker/build-push-action@v6
6883
with:

‎system/Dockerfile.rpi-arm64‎

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
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+
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
3+
curl -fsSL https://archive.raspberrypi.org/debian/raspberrypi.gpg.key | gpg --dearmor -o raspberrypi-archive.gpg

‎system/raspberrypi-archive.gpg‎

1.16 KB
Binary file not shown.

0 commit comments

Comments
 (0)