Intrigued by the idea to have my initscript start a graphical
application to report to and interact with the user I investigated
further:
While the author of cage is rather optimistic about a static cage-build:
https://github.com/cage-kiosk/cage/issues/190
Others who tried are not so much:
https://github.com/cage-kiosk/cage/issues/256
So I thought I give it a shot myselfe. Since I'm new to all of this I
thought I start with an easy first challange:
Setup the latest pi-os WITHOUT graphical subsystem
https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2024-10-28/2024-10-22-raspios-bookworm-armhf-lite.img.xz
on an rpi3 B+ and run cage with an hellogio binary.
The pi setup went smooth and to my supprise:
```
$ apt-cache search cage
cage - Kiosk compositor for Wayland
...
```
there is a cage build in the software repository. So all that's left is
to build hellogio.
Following https://gioui.org/doc/install/linux I ran successfully
```
sudo apt install gcc pkg-config libwayland-dev libx11-dev \
libx11-xcb-dev libxkbcommon-x11-dev libgles2-mesa-dev \
libegl1-mesa-dev libffi-dev libxcursor-dev libvulkan-dev
```
and grabed
`wget https://git.sr.ht/~eliasnaur/gio-example/tree/main/item/hello/hello.go`
Using the go build from the `pi os` repository led to:
```
~/go/src/hellogio $ go build .
# gioui.org/io/pointer
../../pkg/mod/gioui.org@v0.7.1/io/pointer/pointer.go:230:8: undefined:
min
../../pkg/mod/gioui.org@v0.7.1/io/pointer/pointer.go:231:8: undefined:
max
note: module requires Go 1.21
```
So I switching to the latest go build
```
~/go/src/hellogio $ go version
go version go1.23.2 linux/arm
```
and the following happened; any ideas?
```
~/go/src/hellogio $ go build .
# example.com/rpi3/hellogio
/usr/local/go/pkg/tool/linux_arm/link: running gcc failed: exit status 1
/usr/bin/gcc -marm -o $WORK/b001/exe/a.out -Wl,--export-dynamic-symbol=_cgo_panic -Wl,--export-dynamic-symbol=_cgo_topofstack -Wl,--export-dynamic-symbol=crosscall2 -Wl,--export-dynamic-symbol=gio_onDataDeviceDrop -Wl,--export-dynamic-symbol=gio_onDataDeviceEnter -Wl,--export-dynamic-symbol=gio_onDataDeviceLeave -Wl,--export-dynamic-symbol=gio_onDataDeviceMotion -Wl,--export-dynamic-symbol=gio_onDataDeviceOffer -Wl,--export-dynamic-symbol=gio_onDataDeviceSelection -Wl,--export-dynamic-symbol=gio_onDataOfferAction -Wl,--export-dynamic-symbol=gio_onDataOfferOffer -Wl,--export-dynamic-symbol=gio_onDataOfferSourceActions -Wl,--export-dynamic-symbol=gio_onDataSourceAction -Wl,--export-dynamic-symbol=gio_onDataSourceCancelled -Wl,--export-dynamic-symbol=gio_onDataSourceDNDDropPerformed -Wl,--export-dynamic-symbol=gio_onDataSourceDNDFinished -Wl,--export-dynamic-symbol=gio_onDataSourceSend -Wl,--export-dynamic-symbol=gio_onDataSourceTarget -Wl,--export-dynamic-symbol=gio_onFrameDone -Wl,--e
xport-dynamic-symbol=gio_onKeyboardEnter -Wl,--export-dynamic-symbol=gio_onKeyboardKey -Wl,--export-dynamic-symbol=gio_onKeyboardKeymap -Wl,--export-dynamic-symbol=gio_onKeyboardLeave -Wl,--export-dynamic-symbol=gio_onKeyboardModifiers -Wl,--export-dynamic-symbol=gio_onKeyboardRepeatInfo -Wl,--export-dynamic-symbol=gio_onOutputDone -Wl,--export-dynamic-symbol=gio_onOutputGeometry -Wl,--export-dynamic-symbol=gio_onOutputMode -Wl,--export-dynamic-symbol=gio_onOutputScale -Wl,--export-dynamic-symbol=gio_onPointerAxis -Wl,--export-dynamic-symbol=gio_onPointerAxisDiscrete -Wl,--export-dynamic-symbol=gio_onPointerAxisSource -Wl,--export-dynamic-symbol=gio_onPointerAxisStop -Wl,--export-dynamic-symbol=gio_onPointerButton -Wl,--export-dynamic-symbol=gio_onPointerEnter -Wl,--export-dynamic-symbol=gio_onPointerFrame -Wl,--export-dynamic-symbol=gio_onPointerLeave -Wl,--export-dynamic-symbol=gio_onPointerMotion -Wl,--export-dynamic-symbol=gio_onRegistryGlobal -Wl,--export-dynamic-symbol=gio_onR
egistryGlobalRemove -Wl,--export-dynamic-symbol=gio_onSeatCapabilities -Wl,--export-dynamic-symbol=gio_onSeatName -Wl,--export-dynamic-symbol=gio_onSurfaceEnter -Wl,--export-dynamic-symbol=gio_onSurfaceLeave -Wl,--export-dynamic-symbol=gio_onTextInputCommitString -Wl,--export-dynamic-symbol=gio_onTextInputDeleteSurroundingText -Wl,--export-dynamic-symbol=gio_onTextInputDone -Wl,--export-dynamic-symbol=gio_onTextInputEnter -Wl,--export-dynamic-symbol=gio_onTextInputLeave -Wl,--export-dynamic-symbol=gio_onTextInputPreeditString -Wl,--export-dynamic-symbol=gio_onToplevelClose -Wl,--export-dynamic-symbol=gio_onToplevelConfigure -Wl,--export-dynamic-symbol=gio_onToplevelDecorationConfigure -Wl,--export-dynamic-symbol=gio_onTouchCancel -Wl,--export-dynamic-symbol=gio_onTouchDown -Wl,--export-dynamic-symbol=gio_onTouchFrame -Wl,--export-dynamic-symbol=gio_onTouchMotion -Wl,--export-dynamic-symbol=gio_onTouchUp -Wl,--export-dynamic-symbol=gio_onXdgSurfaceConfigure -Wl,--compress-debug-secti
ons=zlib /tmp/go-link-775134620/go.o /tmp/go-link-775134620/000000.o /tmp/go-link-775134620/000001.o /tmp/go-link-775134620/000002.o /tmp/go-link-775134620/000003.o /tmp/go-link-775134620/000004.o /tmp/go-link-775134620/000005.o /tmp/go-link-775134620/000006.o /tmp/go-link-775134620/000007.o /tmp/go-link-775134620/000008.o /tmp/go-link-775134620/000009.o /tmp/go-link-775134620/000010.o /tmp/go-link-775134620/000011.o /tmp/go-link-775134620/000012.o /tmp/go-link-775134620/000013.o /tmp/go-link-775134620/000014.o /tmp/go-link-775134620/000015.o /tmp/go-link-775134620/000016.o /tmp/go-link-775134620/000017.o /tmp/go-link-775134620/000018.o /tmp/go-link-775134620/000019.o /tmp/go-link-775134620/000020.o /tmp/go-link-775134620/000021.o /tmp/go-link-775134620/000022.o /tmp/go-link-775134620/000023.o /tmp/go-link-775134620/000024.o /tmp/go-link-775134620/000025.o /tmp/go-link-775134620/000026.o /tmp/go-link-775134620/000027.o /tmp/go-link-775134620/000028.o /tmp/go-link-775134620/000029.o
/tmp/go-link-775134620/000030.o /tmp/go-link-775134620/000031.o /tmp/go-link-775134620/000032.o /tmp/go-link-775134620/000033.o /tmp/go-link-775134620/000034.o /tmp/go-link-775134620/000035.o /tmp/go-link-775134620/000036.o /tmp/go-link-775134620/000037.o /tmp/go-link-775134620/000038.o /tmp/go-link-775134620/000039.o /tmp/go-link-775134620/000040.o /tmp/go-link-775134620/000041.o /tmp/go-link-775134620/000042.o /tmp/go-link-775134620/000043.o /tmp/go-link-775134620/000044.o /tmp/go-link-775134620/000045.o /tmp/go-link-775134620/000046.o /tmp/go-link-775134620/000047.o /tmp/go-link-775134620/000048.o /tmp/go-link-775134620/000049.o /tmp/go-link-775134620/000050.o /tmp/go-link-775134620/000051.o /tmp/go-link-775134620/000052.o /tmp/go-link-775134620/000053.o /tmp/go-link-775134620/000054.o /tmp/go-link-775134620/000055.o /tmp/go-link-775134620/000056.o /tmp/go-link-775134620/000057.o /tmp/go-link-775134620/000058.o -O2 -g -lEGL -lwayland-egl -lwayland-client -lwayland-cursor -lxkbcom
mon-x11 -lxkbcommon -lX11-xcb -lX11 -lxcb -lXcursor -lXfixes -O2 -g -lEGL -O2 -g -ldl -lwayland-client -O2 -g -lpthread -O2 -g -lxkbcommon -O2 -g -O2 -g -lm -lm -lm -lm -lm -lm -lm -O2 -g -O2 -g -ldl -no-pie
/usr/bin/ld: error: $WORK/b001/exe/a.out uses VFP register arguments, /tmp/go-link-775134620/000047.o does not
/usr/bin/ld: failed to merge target specific data of file /tmp/go-link-775134620/000047.o
/usr/bin/ld: error: $WORK/b001/exe/a.out uses VFP register arguments, /tmp/go-link-775134620/000048.o does not
/usr/bin/ld: failed to merge target specific data of file /tmp/go-link-775134620/000048.o
/usr/bin/ld: error: $WORK/b001/exe/a.out uses VFP register arguments, /tmp/go-link-775134620/000049.o does not
/usr/bin/ld: failed to merge target specific data of file /tmp/go-link-775134620/000049.o
/usr/bin/ld: error: $WORK/b001/exe/a.out uses VFP register arguments, /tmp/go-link-775134620/000050.o does not
/usr/bin/ld: failed to merge target specific data of file /tmp/go-link-775134620/000050.o
/usr/bin/ld: error: $WORK/b001/exe/a.out uses VFP register arguments, /tmp/go-link-775134620/000051.o does not
/usr/bin/ld: failed to merge target specific data of file /tmp/go-link-775134620/000051.o
/usr/bin/ld: error: $WORK/b001/exe/a.out uses VFP register arguments, /tmp/go-link-775134620/000052.o does not
/usr/bin/ld: failed to merge target specific data of file /tmp/go-link-775134620/000052.o
/usr/bin/ld: error: $WORK/b001/exe/a.out uses VFP register arguments, /tmp/go-link-775134620/000053.o does not
/usr/bin/ld: failed to merge target specific data of file /tmp/go-link-775134620/000053.o
collect2: error: ld returned 1 exit status
```