Compare commits

..

13 Commits

Author SHA1 Message Date
3520dc0148 fixup! fixup! wip: vc4 gpu support
All checks were successful
dustin/photoframe2/pipeline/pr-main This commit looks good
2024-12-31 13:11:34 -06:00
06838ab0a4 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:10:57 -06:00
9c8a2172af fixup! fixup! wip: vc4 gpu support 2024-12-31 12:57:04 -06:00
04284f672e fixup! wip: vc4 gpu support
All checks were successful
dustin/photoframe2/pipeline/pr-main This commit looks good
2024-12-31 12:44:21 -06:00
745dfa78e8 portage: Install-mask systemd-ssh-generator
All checks were successful
dustin/photoframe2/pipeline/pr-main This commit looks good
This is pointless.
2024-12-31 11:25:42 -06:00
08f6c0d404 wip: systemd bpf firewall 2024-12-31 11:25:38 -06:00
c5e9a9d1dc wip: vc4 gpu support 2024-12-31 11:25:24 -06:00
5006ed685c Update Aimee OS 2024-12-31 07:10:11 -06:00
5b598a8ace wip: Install Sway WM 2024-12-31 07:10:11 -06:00
11a83a9dab ci: archive build logs on failure
All checks were successful
dustin/photoframe2/pipeline/pr-main This commit looks good
2024-12-31 07:10:11 -06:00
c93bceeb56 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.
2024-12-31 07:10:11 -06:00
faccf8200f 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.
2024-12-31 06:56:13 -06:00
b908733257 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
2024-12-31 06:43:45 -06:00
17 changed files with 186 additions and 6 deletions

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

View File

@@ -14,4 +14,5 @@ dtoverlay=miniuart-bt
dtparam i2c_arm=on dtparam i2c_arm=on
device_tree=bcm2711-rpi-4-b.dtb dtoverlay=vc4-kms-v3d
dtoverlay=vc4-kms-dsi-ili9881-7inch

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 -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,36 @@ 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_DRM=y
CONFIG_DRM_PANEL_SIMPLE=m
CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=y
CONFIG_DRM_TOSHIBA_TC358762=m
CONFIG_V3D=m
CONFIG_VC4=m
CONFIG_DRM_SIMPLEDRM=y
CONFIG_BACKLIGHT_CLASS_DEVICE=m
CONFIG_BACKLIGHT_RPI=m
# CONFIG_SOUND is not set CONFIG_SOUND=m
# CONFIG_SND is not set CONFIG_SND=m
# CONFIG_SND_SOC is not set # 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 +83,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

View File

@@ -0,0 +1,28 @@
[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]
TemporaryFileSystem=/home
ExecStartPre=!/bin/install -o kiosk -g kiosk -d -m u=rwx,go= /home/kiosk
ExecStart=/usr/bin/sway
User=kiosk
Environment=WLR_RENDERER_ALLOW_SOFTWARE=1
Environment=WLR_LIBINPUT_NO_DEVICES=1
StandardInput=tty
StandardOutput=tty
StandardError=journal
TTYPath=/dev/tty1
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
PAMName=system-login
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