Compare commits

..

7 Commits

Author SHA1 Message Date
cfcaeb766b permissions
All checks were successful
Build images / Build images (push) Successful in 1h47m5s
2025-05-09 01:40:53 -05:00
474786d796 compress published images
Some checks failed
Build images / Build images (push) Failing after 1h43m31s
2025-05-08 21:37:01 -05:00
31c56b594a update default wallpaper, video config uses hdmi2
All checks were successful
Build images / Build images (push) Successful in 1h37m25s
2025-05-07 16:47:12 -05:00
3ec0a6670c avoid parallel uploads
All checks were successful
Build images / Build images (push) Successful in 1h38m7s
2025-04-29 00:29:36 -05:00
fdc2eec104 Fix publish step url
Some checks failed
Build images / Build images (push) Failing after 1h38m53s
2025-04-28 10:48:56 -05:00
940bc767a4 Define build action
Some checks failed
Build images / Build images (push) Has been cancelled
2025-04-28 01:55:06 -05:00
6bdb5a72fe initial showpiece patches 2025-04-27 16:25:47 -05:00
24 changed files with 208 additions and 4 deletions

68
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,68 @@
name: Build images
on:
push:
branches:
- showpiece
tags:
- 'v*'
jobs:
build_images:
name: Build images
runs-on: ubuntu-latest
timeout-minutes: 120
strategy:
fail-fast: true
env:
DEPLOY: startsWith(github.ref, 'refs/tags/v')
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: https://github.com/actions/checkout@v4
- name: Apply patches
run: ./runtime-patches.sh
- name: Install dependencies
run: |
sudo apt-get update &&
sudo apt-get install -y qemu-user-static quilt debootstrap libarchive-tools arch-test binfmt-support
- name: Setup binfmt_misc
run: |
ls /proc/sys/fs/binfmt_misc/ || true
sudo mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc || true
sudo update-binfmts --enable qemu-aarch64
- name: Run build process
run: |
sudo ./build.sh &&
sudo mv deploy/*-arm64-standalone.img deploy/showpieceos-arm64-standalone.img &&
sudo mv deploy/*-arm64-client.img deploy/showpieceos-arm64-client.img
- name: Compress images
if: startsWith(github.ref, 'refs/tags/v')
run: sudo ./compress-images.sh
- name: Publish client
if: startsWith(github.ref, 'refs/tags/v')
uses: https://github.com/softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
files: deploy/*-client.img.gz
- name: Publish standalone
if: startsWith(github.ref, 'refs/tags/v')
uses: https://github.com/softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
files: deploy/*-standalone.img.gz

3
.gitignore vendored
View File

@ -1,8 +1,5 @@
deploy/* deploy/*
work/* work/*
config
postrun.sh postrun.sh
SKIP
SKIP_IMAGES
.pc .pc
*-pc *-pc

5
compress-images.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
for img in "deploy/"*.img; do
gzip -4 -v -k "$img"
done

22
config Normal file
View File

@ -0,0 +1,22 @@
IMG_NAME="showpieceos-bookworm-arm64"
PI_GEN_RELEASE="Showpiece OS Bookworm"
RELEASE="bookworm"
DEPLOY_COMPRESSION="none"
COMPRESSION_LEVEL=0
LOCALE_DEFAULT="en_US.UTF-8"
TARGET_HOSTNAME="showpiece"
KEYBOARD_KEYMAP="us"
KEYBOARD_LAYOUT="English (US)"
TIMEZONE_DEFAULT="America/Chicago"
FIRST_USER_NAME="pi"
FIRST_USER_PASS="letmein"
DISABLE_FIRST_BOOT_USER_RENAME=1
WPA_COUNTRY=US
ENABLE_SSH=0
STAGE_LIST=""
for d in stage*; do
if [ -d "$d" ] && [ ! -f "$d/SKIP" ]; then
STAGE_LIST+="$d "
fi
done
STAGE_LIST="$(echo "$STAGE_LIST" | xargs)"

6
runtime-patches.sh Executable file
View File

@ -0,0 +1,6 @@
#!/bin/bash
# Patches to run before building showpieceos
# Allows for non-destructive deletion of files
rm stage2/EXPORT_IMAGE

View File

@ -10,6 +10,8 @@ firefox rpi-firefox-mods
gldriver-test gldriver-test
fonts-droid-fallback fonts-droid-fallback
fonts-liberation2 fonts-liberation2
fonts-noto
fonts-noto-color-emoji
obconf obconf
raindrop raindrop
libcamera-tools libcamera-tools

View File

@ -1,6 +1,8 @@
xserver-xorg xinit xserver-xorg xinit
x11-xserver-utils
mousepad mousepad
eom eom
vim
lxde lxtask menu-xdg lxde lxtask menu-xdg
zenity xdg-utils zenity xdg-utils
gvfs-backends gvfs-fuse gvfs-backends gvfs-fuse

View File

@ -0,0 +1,6 @@
#!/bin/bash -e
install -d -o 1000 -g 1000 "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config/autostart"
install -m 644 files/kiosk.desktop "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config/autostart/"
chown -R 1000:1000 "${ROOTFS_DIR}"/home/"${FIRST_USER_NAME}"/.config
mkdir -p "${ROOTFS_DIR}/tmp"

View File

@ -0,0 +1,6 @@
[Desktop Entry]
Type=Application
Name=Chromium
Exec=chromium-browser --profile-directory="showpiece-browser" --kiosk https://showpiece.sanin.dev/
StartupNotify=false
Terminal=false

View File

@ -0,0 +1,6 @@
#!/bin/bash -e
echo "Setting default wallpaper"
for conf in "${ROOTFS_DIR}/etc/xdg/pcmanfm/LXDE-pi/desktop-items-"*.conf; do
sed -E 's|/usr/share/rpd-wallpaper/.+$|/usr/share/rpd-wallpaper/RPiSystem.png|' -i "$conf"
done

View File

@ -0,0 +1,4 @@
#!/bin/bash -e
echo "Setting custom cmdline"
sed -i 's/$/ video=HDMI-A-2:1920x1080M@60/' "${ROOTFS_DIR}/boot/firmware/cmdline.txt"

View File

@ -1,4 +1,4 @@
IMG_SUFFIX="" IMG_SUFFIX="-client"
if [ "${USE_QEMU}" = "1" ]; then if [ "${USE_QEMU}" = "1" ]; then
export IMG_SUFFIX="${IMG_SUFFIX}-qemu" export IMG_SUFFIX="${IMG_SUFFIX}-qemu"
fi fi

0
stage5/SKIP Normal file
View File

View File

@ -0,0 +1,3 @@
apt-transport-https
gnupg2
software-properties-common

View File

@ -0,0 +1,7 @@
#!/bin/bash
#change to "debian" if necessary:
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -
echo "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) stable" | \
tee /etc/apt/sources.list.d/docker.list
apt update

View File

@ -0,0 +1,3 @@
docker-ce
docker-compose-plugin
cgroupfs-mount

View File

@ -0,0 +1,5 @@
#!/bin/bash
systemctl enable docker
systemctl start docker
gpasswd -a pi docker
newgrp docker

11
stage9/02-showpiece/01-run.sh Executable file
View File

@ -0,0 +1,11 @@
#!/bin/bash -e
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config/showpiece"
install -v -o 1000 -g 1000 -d "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config/showpiece/config"
install -m 644 files/docker-compose.yml "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config/showpiece/"
install -m 644 files/config.json5 "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config/showpiece/config/"
install -d -o 1000 -g 1000 "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config/autostart"
install -m 644 files/kiosk.desktop "${ROOTFS_DIR}/home/${FIRST_USER_NAME}/.config/autostart/"
chown -R 1000:1000 "${ROOTFS_DIR}"/home/"${FIRST_USER_NAME}"/.config
mkdir -p "${ROOTFS_DIR}/tmp"
echo "$FIRST_USER_NAME" > "${ROOTFS_DIR}/tmp/first_username"

View File

@ -0,0 +1,12 @@
#!/bin/bash
USERNAME=$(cat /tmp/first_username)
COMPOSEFILE="/home/$USERNAME/.config/showpiece/docker-compose.yml"
echo "@reboot docker compose --file '$COMPOSEFILE' up -d && chromium --kiosk 'http://localhost:8080/?w=1080'" >> /tmp/user.crontab
echo "40 3 * * * docker compose --file '$COMPOSEFILE' pull && docker compose --file '$COMPOSEFILE' up -d" >> /tmp/user.crontab
crontab -u "$USERNAME" /tmp/user.crontab
rm /tmp/first_username
rm /tmp/user.crontab

View File

@ -0,0 +1,14 @@
{
// Port for the viewer
"port": 8080,
// Port for the control panel
// (use a different port to restrict access to this interface)
"controlport": 8080,
// (optional) provide weather data to modules that support it
"weather": {
// Provide an OpenWeatherMap API key
// https://openweathermap.org/price
// "key": "not0a0real0key00281f631aef6ad3a1",
// "city": "chicago"
}
}

View File

@ -0,0 +1,10 @@
services:
showpiece:
container_name: showpiece
image: corysanin/showpiece:latest
restart: always
ports:
- 8080:8080
volumes:
- /etc/localtime:/etc/localtime:ro
- ./config:/usr/src/showpiece/config

View File

@ -0,0 +1,6 @@
[Desktop Entry]
Type=Application
Name=Chromium
Exec=chromium-browser --profile-directory="showpiece-browser" --kiosk http://localhost:8080/?w=1080
StartupNotify=false
Terminal=false

4
stage9/EXPORT_IMAGE Normal file
View File

@ -0,0 +1,4 @@
IMG_SUFFIX="-standalone"
if [ "${USE_QEMU}" = "1" ]; then
export IMG_SUFFIX="${IMG_SUFFIX}-qemu"
fi

5
stage9/prerun.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash -e
if [ ! -d "${ROOTFS_DIR}" ]; then
copy_previous
fi