wow can't wait to try my hand at animating!
~% apk add synfig
ERROR: unable to select packages:
synfig (no such package):
required by: world[synfig]
~% apk search synfig
~% apk search opentoonz
~% apk search pencil2d
~%
...
tried compiling synfig, took several whole hours
i'd much rather use a precompiled version
not doing this whole debate again
+ works on alpine
+ sandboxing
+ can share runtimes and libraries between apps
> can be more space-efficient than appimage
- different runtimes
- (oftentimes unnecessary) duplication of entire base systems
i like the concept and universality is certainly nice
but i dont use a whole lot of apps so i wont enjoy as much space-efficiency
im happy with just 1 package manager thanks
nice little self-contained app bundles
could theoretically work on any platform...
except that most appimages are built against glibc (for now)
~% ./appimagetool-x86_64.AppImage
/bin/ash: ./appimagetool-x86_64.AppImage: not found
gcompat helps somewhat but it's still lacking
Error relocating /tmp/.mount_appimaJOmaIc/usr/lib//libgio-2.0.so.0: __res_nquery: symbol not found
Error relocating /tmp/.mount_appimaJOmaIc/usr/lib//libgio-2.0.so.0: __dn_expand: symbol not found
of course the better thing to do here would be to add those functions to gcompat
but
~% ./FireAlpaca-2.11.15-x86_64.AppImage
Error relocating /tmp/.mount_FireAlenlKkD/usr/bin/../lib/libQt6Core.so.6: renameat2: symbol not found
Error relocating /tmp/.mount_FireAlenlKkD/usr/bin/../lib/libsystemd.so.0: __ppoll_chk: symbol not found
Error relocating /tmp/.mount_FireAlenlKkD/usr/bin/../lib/libsystemd.so.0: __openat64_2: symbol not found
Error relocating /tmp/.mount_FireAlenlKkD/usr/bin/../lib/libsystemd.so.0: parse_printf_format: symbol not found
Error relocating /tmp/.mount_FireAlenlKkD/usr/bin/../lib/libkrb5.so.3: __res_nsearch: symbol not found
stuff like parse_printf_format isn't trivial to implement
also im lazy and just wanna draw things already
alpine-pkg-glibc is nice and all but glibc doesn't play well with musl libraries (who could've guessed!)
~% ./FireAlpaca-2.11.15-x86_64.AppImage
./FireAlpaca-2.11.15-x86_64.AppImage: /usr/lib/libstdc++.so.6: no version information available (required by ./FireAlpaca-2.11.15-x86_64.AppImage)`
...
./FireAlpaca-2.11.15-x86_64.AppImage: /usr/lib/libstdc++.so.6: no version information available (required by /tmp/.mount_FireAliPfa4A/usr/bin/../lib/libicuuc.so.56)
./FireAlpaca-2.11.15-x86_64.AppImage: Relink `/usr/lib/libpng16.so.16' with `/usr/glibc-compat/lib/libm.so.6' for IFUNC symbol `floor'
Segmentation fault
the no version information available
is harmless but the relinking isn't
using patchelf
:
~% cp /usr/lib/libpng16.so.16 .
~% patchelf libpng16.so.16 --add-needed /usr/glibc-compat/lib/libm.so.6
~% LD_PRELOAD='libpng16.so.16' ./FireAlpaca-2.11.15-x86_64.AppImage
...
qt.qpa.plugin: Could not find the Qt platform plugin "wayland" in ""
The X11 connection broke: I/O error (code 1)
XIO: fatal IO error 62 (Timer expired) on X server ":0"
after 407 requests (407 known processed) with 2 events remaining.
different error now! yay!
couldn't figure out how to fix this so im giving up
needs root, anyway we've got...
distrobox > docker > proot > unshare
im not masochistic enough to make my own unshare shellscript so proot it will be
(bubblewrap looks cool but im lazy to change the wrapper script)
so anyways
~% touch /HEHE
touch: /HEHE: Permission denied
~% ls /
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
~% ls alp/
~% ls alp.work/
bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
~% alproot ./alp
alp:~% touch /HEHE
alp:~% ls /
bin boot dev etc HEHE home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
alp:~% exit
~% ls alp.work/
bin dev etc HEHE home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
~% ls /
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
dunno how to explain a userspace rootfs so hopefully this suffices
basically it union mounts / readonly on the rootfs so i can use my cursor theme
but it binds a clean home directory to prevent my configs from getting in the way
and everything is contained in the rootfs for ease of disposal
yes this isn't actually about appimages
a few months back i got pissed about minecraft 1.20 not working with musl so i set up a void rootfs
don't really remember how i set that up but apparently alpine packages xbps?
void is cool but i like apk more so
wolfi is basically appimage containers from source
important point: Designed to support glibc
you can see where this is going
wolfi uses apk so the bootstrapping process is the same as alpine's, just make /etc/apk/repositories point to wolfi's package repo
DISCLAIMER: DO NOT COPYPASTE THESE COMMANDS THEY ARE PROBABLY UNSAFE
# set up wolfi rootfs
mkdir wolfi
cd wolfi/
mkdir -p etc/apk
echo 'https://packages.wolfi.dev/os' > etc/apk/repositories
apk add --root . --no-script --initdb --allow-untrusted wolfi-base # or add wolfi keys to etc/apk/keys/
mkdir ."$HOME"
proot -R . apk fix # to run post-install scripts
# copy the appimage in
cp ../FireAlpaca-2.11.15-x86_64.AppImage ."$HOME"
# proot in
proot -R . -b ."$HOME":"$HOME" -b /usr/share/fonts -w "$HOME"
and now we're in the proot!
if you like you can prepend a PS1="(basename "PWD"):$PS1" so it's easier to tell if you're in the chroot (remember to edit /etc/profile so it doesn't set PS1)
wolfi:~% ./FireAlpaca-2.11.15-x86_64.AppImage
dlopen(): error loading libfuse.so.2
AppImages require FUSE to run.
You might still be able to extract the contents of this AppImage
if you run it with the --appimage-extract option.
See https://github.com/AppImage/AppImageKit/wiki/FUSE
for more information
unfortunately wolfi doesn't seem to package fuse-2 so we'll have to extract the appimage
wolfi:~% ./FireAlpaca-2.11.15-x86_64.AppImage --appimage-extract
...
wolfi:~% ./squashfs-root/AppRun
./squashfs-root/AppRun: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
let's quickly add that...
wolfi:~% apk add libstdc++
wolfi:~% ./squashfs-root/AppRun
./squashfs-root/AppRun: error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory
...
after a bit of back and forth (shoutout to apk search so:$LIB
)
wolfi:~% apk add libstdc++ mesa-gl libnss fontconfig alsa-lib mesa-egl libcom_err libgpg-error mesa llvm16
wolfi:~% ./squashfs-root/AppRun
qt.qpa.plugin: Could not find the Qt platform plugin "wayland" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: xcb.
Aborted
quickly unset QT_QPA_PLATFORM...
wolfi:~% ./squashfs-root/AppRun
...
Trace/breakpoint trap
[10420:10420:0100/000000.148665:ERROR:zygote_linux.cc(661)] write: Broken pipe (32)
flashes for a moment and then dies. hm.
disable the web engine sandbox...
wolfi:~% export QTWEBENGINE_DISABLE_SANDBOX=1
and it works!
great, there's ads
i think that's what's using the web engine, will see if i can disable it
just use krita.
if you really need to run glibc apps, check out distrobox.
made with <3 and /.gen.sh