Compare commits

...

10 Commits

Author SHA1 Message Date
Dustin b2a7b2345c portage: Install-mask systemd-ssh-generator
dustin/photoframe2/pipeline/pr-main This commit looks good Details
This is pointless.
2025-01-01 10:16:57 -06:00
Dustin 4daf98816c wip: systemd bpf firewall 2025-01-01 10:16:57 -06:00
Dustin b8b33c8d20 wip: vc4 gpu support 2025-01-01 10:16:57 -06:00
Dustin 3a6d89df4c Update Aimee OS 2025-01-01 10:16:57 -06:00
Dustin d05b9ee098 wip: Install Sway WM 2025-01-01 10:16:57 -06:00
Dustin 3da17134f2 ci: archive build logs on failure 2025-01-01 10:16:57 -06:00
Dustin f74daa8e22 Install Firefox from Gentoo binpkg
Unfortunately, even building Firefox with GCC fails:

> 3:30.02 [gecko-profiler 0.1.0] /../lib/gcc/aarch64-unknown-linux-gnu/14/include/g++-v14/cstdlib:79:15: fatal error: 'stdlib.h' file not found
> 3:30.02 [gecko-profiler 0.1.0] thread 'main' panicked at tools/profiler/rust-api/build.rs:104:10:
> 3:30.02 [gecko-profiler 0.1.0] Unable to generate bindings: ClangDiagnostic("/../lib/gcc/aarch64-unknown-linux-gnu/14/include/g++-v14/cstdlib:79:15: fatal error: 'stdlib.h' file not found\n")

Clearly, something is misconfigured, because `stdlib.h` does indeed
exist.  I am not sure what, though, and I am getting tired of messing
with this.

Fortunately, the official Gentoo binary package project has a build of
_www-client/firefox_ for ARM64.  It has a rather different USE flag
configuration than what we did, though, so we have to pull in quite a
few more dependencies.

We can't just add _www-client/firefox_ to `install.packages` because
Aimee OS runs `emerge` with `--getbinpkgonly`, which implies
`--binpkg-changed-deps=y`.  This since we want to build everything
_except_ Firefox locally, the dependency graph is quite a bit different,
so Portage ignores the binary package and will try to build
_www-client/firefox_ from source.

To work around this limitation, we need to install Firefox manually in
the `customize.sh` script in two phases.  First, we install all of its
dependencies in the build root (`/usr/aarch64-…`), but not Firefox
itself, to get binpkgs for them.  Then, we install _www-client/firefox_
in the target root (`/mnt/gentoo`) with the `--getbinpkg` and
`--usepkgonly` flags.

Hopefully, one day I can figure out how to cross-compile Firefox (and it
doesn't take days to build once I do), and we can remove this hackery.
2025-01-01 10:16:57 -06:00
Dustin 445f59fbbd Build Firefox w/ gcc
Building _www-client/firefox_ fails fairly early with an error about not
being able to find `aarch64-unknown-linux-gnu-clang-19` to use as `CC`.
I have not been able to determine what is supposed to provide this
program/symlink, nor much information at all about cross-compiling with
Clang, really.  We shall try building Firefox with GCC, since we know
that toolchain is complete.
2025-01-01 10:16:57 -06:00
Dustin 4a555211f5 Install Firefox
Attempting to cross-compile Firefox will be rather challenging.  It has
loads of dependencies, written in a variety of languages.  Some issues
are more interesting than others.  Notably, _dev-libs/nss_ needs to be
installed on the host in order to cross-compile itself, but its ebuild
does not specify this ([Bug 759127][0]).  Also the build system for
_gnome-base/librsvg_ is broken: [Gentoo Bug 835758][1], [GNOME
Issue #810][2].  Cross-compiling _dev-libs/gobject-introspection_ is
also broken ([Bug 759127][3], [850895][4]).

With all of these changes, we can get to the point where Portage starts
building Firefox, it will take hours and all of my machine's resources,
so I haven't tested if will actually build.  We shall see once Jenkins
tries it...

[0]: https://bugs.gentoo.org/759127
[1]: https://bugs.gentoo.org/835758
[2]: https://gitlab.gnome.org/GNOME/librsvg/-/issues/810
[3]: https://bugs.gentoo.org/850895
[4]: https://bugs.gentoo.org/751325
2025-01-01 10:16:57 -06:00
Dustin 43d15bdbf8 ci: Prevent concurrent builds
The `disableConcurrentBuilds` pipeline option tells Jenkins to force
subsequent builds _of the same job_ to wait in queue until the one
running has completed.  This is sufficient when there is only one
branch/project in development at a time.  In order to prevent multiple
projects from running simultaneously, we need to acquire a global lock;
all projects need to have this same option in order for it to be
effective.
2024-12-31 13:11:47 -06:00
19 changed files with 228 additions and 12 deletions

@ -1 +1 @@
Subproject commit 554063e1f4e316a6d3087a27076e0c6d5a34fca1 Subproject commit 36429459e1f40de0989189d2b8296e73be81a602

View File

@ -1,2 +1,5 @@
sys-boot/raspberrypi-firmware sys-boot/raspberrypi-firmware
sys-boot/u-boot sys-boot/u-boot
x11-libs/gtk+
media-libs/mesa
media-video/ffmpeg

10
ci/Jenkinsfile vendored
View File

@ -8,6 +8,11 @@ pipeline {
} }
} }
options {
disableConcurrentBuilds()
lock 'aimee-os'
}
stages { stages {
stage('Prepare') { stage('Prepare') {
steps { steps {
@ -29,5 +34,10 @@ pipeline {
archiveArtifacts '*' archiveArtifacts '*'
} }
} }
failure {
dir('/var/tmp/portage') {
archiveArtifacts '*/*/temp/*.log'
}
}
} }
} }

View File

@ -32,6 +32,9 @@ spec:
subPath: distfiles subPath: distfiles
- mountPath: /var/db/repos/gentoo - mountPath: /var/db/repos/gentoo
name: portage name: portage
- mountPath: /var/tmp
name: workspace-volume
subPath: tmp
hostUsers: false hostUsers: false
volumes: volumes:
- name: binpkgs - name: binpkgs

2
config
View File

@ -2,5 +2,5 @@ target=aarch64-unknown-linux-gnu
profile=default/linux/arm64/23.0/systemd profile=default/linux/arm64/23.0/systemd
kernel_pkg=sys-kernel/raspberrypi-sources kernel_pkg=sys-kernel/raspberrypi-sources
kernel_defconfig=bcm2835 kernel_defconfig=bcm2835
device_tree=broadcom/bcm2711-rpi-4-b.dtb device_tree=broadcom/*.dtb
rootflags='ro rootwait=4' rootflags='ro rootwait=4'

View File

@ -1,12 +1,10 @@
# dch: Tested working 2025-01-01 08:28 CST
arm_64bit=1 arm_64bit=1
arm_boost=1
start_x=1 start_x=1
bootcode_delay=0
boot_delay=0
gpu_mem=32
kernel=u-boot.bin kernel=u-boot.bin
enable_uart=1 enable_uart=1
@ -14,4 +12,10 @@ dtoverlay=miniuart-bt
dtparam i2c_arm=on dtparam i2c_arm=on
device_tree=bcm2711-rpi-4-b.dtb display_auto_detect=1
dtoverlay=vc4-kms-v3d
dtoverlay=vc4-kms-dsi-ili9881-7inch
max_framebuffers=2
disable_fw_kms_setup=1
disable_overscan=1
dtparam=audio=on

View File

@ -1,6 +1,19 @@
#!/bin/sh #!/bin/sh
# vim: set sw=4 ts=4 sts=4 et : # vim: set sw=4 ts=4 sts=4 et :
. "${CONFIGDIR:=${PWD}}"/config
O=$1
export PORTAGE_CONFIGROOT="$O"/portage
${target}-emerge -vbknuUDj --onlydeps --with-bdeps=n www-client/firefox:esr
PORTAGE_BINHOST=https://distfiles.gentoo.org/releases/arm64/binpackages/23.0/arm64 \
${target}-emerge -vgKnj --root=/mnt/gentoo www-client/firefox:esr
passwd -R /mnt/gentoo -d root passwd -R /mnt/gentoo -d root
groupadd -R /mnt/gentoo -r kiosk
useradd -R /mnt/gentoo -r -m -d /home/kiosk -g kiosk kiosk
systemctl --root=/mnt/gentoo enable wpa_supplicant@wlan0 systemctl --root=/mnt/gentoo enable wpa_supplicant@wlan0

View File

@ -1 +1,3 @@
gui-wm/sway
net-wireless/wpa_supplicant net-wireless/wpa_supplicant
media-video/pipewire

View File

@ -45,12 +45,64 @@ CONFIG_IPV6=y
CONFIG_IPV6_SIT=m CONFIG_IPV6_SIT=m
CONFIG_IPV6_SIT_6RD=m CONFIG_IPV6_SIT_6RD=m
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_EDT_FT5X06=m
CONFIG_TOUCHSCREEN_RASPBERRYPI_FW=m
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m
CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_V2=m
# CONFIG_MEDIA_CEC_SUPPORT is not set # CONFIG_MEDIA_CEC_SUPPORT is not set
# CONFIG_MEDIA_SUPPORT is not set # CONFIG_MEDIA_SUPPORT is not set
# CONFIG_SOUND is not set CONFIG_DRM=m
# CONFIG_SND is not set CONFIG_DRM_KMS_HELPER=m
# CONFIG_SND_SOC is not set CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_DISPLAY_HELPER=m
CONFIG_DRM_GEM_SHMEM_HELPER=m
CONFIG_DRM_SCHED=m
CONFIG_DRM_PANEL_SIMPLE=m
CONFIG_DRM_PANEL_ILITEK_ILI9806E=m
CONFIG_DRM_PANEL_ILITEK_ILI9881C=m
CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=y
CONFIG_DRM_DISPLAY_CONNECTOR=m
CONFIG_DRM_TOSHIBA_TC358762=m
CONFIG_DRM_SIMPLE_BRIDGE=m
CONFIG_DRM_V3D=m
CONFIG_VC4=m
CONFIG_DRM_VC4_HDMI_CEC=y
CONFIG_DRM_RP1_DSI=m
CONFIG_DRM_RP1_DPI=m
CONFIG_DRM_RP1_VEC=m
CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=m
CONFIG_FB_BCM2708=y
CONFIG_FB_SIMPLE=y
CONFIG_FB_SSD1307=m
CONFIG_FB_RPISENSE=m
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_IOMEM_HELPERS=y
CONFIG_FB_BACKLIGHT=m
CONFIG_BACKLIGHT_CLASS_DEVICE=m
CONFIG_BACKLIGHT_PWM=m
CONFIG_BACKLIGHT_RPI=m
CONFIG_BACKLIGHT_LM3630A=m
CONFIG_BACKLIGHT_GPIO=m
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_BCM_VC_SM_CMA=m
CONFIG_SOUND=y
CONFIG_SND=m
# CONFIG_SND_PCM_TIMER is not set
# CONFIG_SND_SUPPORT_OLD_API is not set
# CONFIG_SND_PROC_FS is not set
# CONFIG_SND_CTL_FAST_LOOKUP is not set
# CONFIG_SND_DRIVERS is not set
# CONFIG_SND_PCI is not set
# CONFIG_SND_SPI is not set
# CONFIG_SND_USB is not set
CONFIG_SND_SOC=m
CONFIG_SND_BCM2835_SOC_I2S=m
CONFIG_AUDIT=y CONFIG_AUDIT=y
CONFIG_SECURITY=y CONFIG_SECURITY=y
@ -59,9 +111,11 @@ CONFIG_SECURITY_SELINUX=y
CONFIG_DEFAULT_SECURITY_SELINUX=y CONFIG_DEFAULT_SECURITY_SELINUX=y
# DEFAULT_SECURITY_DAC is not set # DEFAULT_SECURITY_DAC is not set
CONFIG_BPF_SYSCALL=y
CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE=y
CONFIG_MEMCG=y CONFIG_MEMCG=y
CONFIG_CGROUP_PIDS=y CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_BPF=y
CONFIG_BLK_CGROUP=y CONFIG_BLK_CGROUP=y
CONFIG_USB_DWC2=m CONFIG_USB_DWC2=m

8
overlay/etc/pam.d/kiosk Normal file
View File

@ -0,0 +1,8 @@
account required pam_localuser.so
session optional pam_loginuid.so
session required pam_env.so envfile=/etc/profile.env
session required pam_limits.so
session required pam_env.so
session required pam_unix.so
session required pam_systemd.so

View File

@ -0,0 +1,25 @@
[Unit]
After=systemd-user-sessions.service plymouth-quit-wait.service
Before=graphical.target
ConditionPathExists=/dev/tty1
Wants=dbus.socket systemd-logind.service
After=dbus.socket systemd-logind.service
Conflicts=getty@tty1.service
After=getty@tty1.service
Wants=time-sync.target
After=time-sync.target
[Service]
ExecStart=/usr/bin/sway -d
User=kiosk
Environment=WLR_LIBINPUT_NO_DEVICES=1
StandardInput=tty
StandardOutput=tty
StandardError=journal
TTYPath=/dev/tty1
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
PAMName=kiosk
UtmpMode=user
UtmpIdentifier=tty1

View File

@ -0,0 +1 @@
USE="${USE} -python -readline"

View File

@ -0,0 +1,4 @@
# Disable GObject introspection because it cannot be cross-compiled
# https://bugs.gentoo.org/850895
# https://bugs.gentoo.org/751325
USE="${USE} -introspection -vala"

View File

@ -1 +1,9 @@
INSTALL_MASK="${INSTALL_MASK} /usr/lib/systemd/systemd-nsresourced* /usr/lib/systemd/system/systemd-nsresourced.*" INSTALL_MASK="
${INSTALL_MASK}
/etc/ssh/ssh*_config.d/*systemd*
/usr/lib/systemd/ssh_config.d
/usr/lib/systemd/sshd_config.d
/usr/lib/systemd/system-generators/systemd-ssh-generator
/usr/lib/systemd/system/systemd-nsresourced.*
/usr/lib/systemd/systemd-nsresourced*
"

View File

@ -0,0 +1 @@
VIDEO_CARDS='v3d vc4'

View File

@ -0,0 +1 @@
USE="${USE} wayland"

View File

@ -0,0 +1,15 @@
media-libs/harfbuzz -cairo
media-libs/libvpx postproc
media-libs/mesa -llvm wayland
media-video/ffmpeg openssl -gnutls
# Must match USE flags of the www-client/firefox package on the
# offical Gentoo binhost
www-client/firefox X clang dbus gmp-autoupdate gnome-shell jumbo-build pulseaudio system-av1 system-harfbuzz system-icu system-jpeg system-libevent system-libvpx system-webp telemetry wayland LLVM_SLOT: 19 -17 -18
x11-libs/cairo X
x11-libs/gtk+ wayland
media-libs/libglvnd X
# Firefox requires a PulseAudio-compatible sound server; we use Pipewire
media-video/pipewire sound-server
media-libs/libcanberra udev alsa

View File

@ -0,0 +1,48 @@
--- a/Makefile.in 2024-12-13 12:17:08.339616211 -0600
+++ b/Makefile.in 2024-12-13 12:18:30.301517960 -0600
@@ -641,12 +641,6 @@
rsvg/src/test_utils/reference_utils.rs \
rsvg-bench/Cargo.toml \
rsvg-bench/src/main.rs \
- rsvg_convert/tests/internal_predicates/file.rs \
- rsvg_convert/tests/internal_predicates/mod.rs \
- rsvg_convert/tests/internal_predicates/pdf.rs \
- rsvg_convert/tests/internal_predicates/png.rs \
- rsvg_convert/tests/internal_predicates/svg.rs \
- rsvg_convert/tests/rsvg_convert.rs \
librsvg-c/tests/legacy_sizing.rs \
gdk-pixbuf-loader/Cargo.toml \
gdk-pixbuf-loader/src/lib.rs \
@@ -685,15 +679,6 @@
librsvgincdir = $(includedir)/librsvg-$(RSVG_API_VERSION)/librsvg
librsvginc_HEADERS = $(librsvg_public_headers)
-# Use SCRIPTS instead of PROGRAMS since we build it on our own
-bin_SCRIPTS = rsvg-convert$(EXEEXT)
-RSVG_CONVERT_BIN = $(CARGO_TARGET_DIR)/$(RUST_TARGET_SUBDIR)/rsvg-convert$(EXEEXT)
-RSVG_CONVERT_SRC = \
- rsvg_convert/Cargo.toml \
- rsvg_convert/build.rs \
- rsvg_convert/src/main.rs \
- $(NULL)
-
@HAVE_RST2MAN_TRUE@man1_MANS = rsvg-convert.1
dist_doc_DATA = \
README.md \
@@ -1643,16 +1628,6 @@
$(CARGO) --locked build $(CARGO_VERBOSE) $(CARGO_TARGET_ARGS) $(CARGO_RELEASE_ARGS) --package librsvg-c \
&& cd $(LIBRSVG_BUILD_DIR) && $(LINK) $< && cp $(RUST_LIB) .libs/librsvg_c_api.a
-$(RSVG_CONVERT_BIN): $(RSVG_CONVERT_SRC) | librsvg_c_api.la
- +cd $(top_srcdir) && \
- PKG_CONFIG_ALLOW_CROSS=1 \
- PKG_CONFIG='$(PKG_CONFIG)' \
- CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) \
- $(CARGO) --locked build $(CARGO_VERBOSE) $(CARGO_TARGET_ARGS) $(CARGO_RELEASE_ARGS) --package rsvg_convert
-
-rsvg-convert$(EXEEXT): $(RSVG_CONVERT_BIN)
- cd $(LIBRSVG_BUILD_DIR) && cp $(RSVG_CONVERT_BIN) rsvg-convert$(EXEEXT)
-
rsvg-convert.1: rsvg-convert.rst
@HAVE_RST2MAN_TRUE@ $(RST2MAN) $(top_srcdir)/rsvg-convert.rst rsvg-convert.1
@HAVE_RST2MAN_FALSE@ @echo "========================================"

View File

@ -1,8 +1,24 @@
#!/bin/sh #!/bin/sh
. "${CONFIGDIR:=${PWD}}"/config
if [ ! -f /var/db/repos/gentoo/metadata/timestamp ]; then if [ ! -f /var/db/repos/gentoo/metadata/timestamp ]; then
emerge-webrsync emerge-webrsync
fi fi
if [ "$(find /var/db/repos/gentoo/metadata -newermt '-24 hours' | wc -l)" -eq 0 ]; then if [ "$(find /var/db/repos/gentoo/metadata -newermt '-24 hours' | wc -l)" -eq 0 ]; then
emaint sync emaint sync
fi fi
mkdir -p /etc/portage/package.use
mkdir -p /etc/portage/make.conf
echo 'virtual/libudev systemd' >> /etc/portage/package.use/systemd
cp portage/package.use/firefox /etc/portage/package.use/
cp portage/make.conf/introspection.conf /etc/portage/make.conf/
cp portage/make.conf/wayland.conf /etc/portage/make.conf/
echo 'VIDEO_CARDS=""' > /etc/portage/make.conf/videocards.conf
xargs -r emerge -vbknuUj --rebuilt-binaries=y --color=y <<EOF
dev-libs/nss
EOF
[ -d /etc/portage/gnupg ] || getuto -v