Install with apk
apk resolves dependencies, checks signatures, upgrades and removes. Do the base image steps first, including section 5 (the variables and the /usr/local link).
1. A temporary apk, once
apk is a package too. Unpack it by hand once, then let it install itself properly. apk-tools needs zlib, zstd, openssl and ca-certificates. Each is in the half of the release that its name's first letter belongs to.
qnx# mkdir -p /data/boot/root && cd /data/boot
qnx# curl -fsSL -o INDEX $GH_RELEASES/packages-8.0-$ARCH/INDEX # names 0-9, a-l
qnx# curl -fsSL -o INDEX-m-z $GH_RELEASES/packages-8.0-$ARCH-m-z/INDEX # names m-z
qnx# for PKG in zlib zstd openssl ca-certificates apk-tools; do
case $PKG in [0-9a-l]*) SHARD= ;; *) SHARD=-m-z ;; esac
PKG_FILE=$(grep -m1 "^$PKG|" INDEX$SHARD | cut -d'|' -f4)
PKG_SHA256=$(grep -m1 "^$PKG|" INDEX$SHARD | cut -d'|' -f5)
curl -fsSLO $GH_RELEASES/packages-8.0-$ARCH$SHARD/$PKG_FILE
[ "$(openssl dgst -sha256 $PKG_FILE | sed 's/.*= *//')" = "$PKG_SHA256" ] && echo "ok $PKG_FILE" || echo "BAD $PKG_FILE"
gzip -dc $PKG_FILE | (cd /data/boot/root && tar -xf -)
done
qnx# ls /data/boot/root/usr/local/bin/apkEvery line must say ok.
2. Repositories, signing key, apk
qnx# mkdir -p /data/oss/etc/apk/keys
qnx# echo "$GH_RELEASES/apk-8.0-$ARCH/APKINDEX.tar.gz" > /data/oss/etc/apk/repositories
qnx# echo "$GH_RELEASES/apk-8.0-$ARCH-m-z/APKINDEX.tar.gz" >> /data/oss/etc/apk/repositories
qnx# echo "$GH_RELEASES/tests-8.0-$ARCH/APKINDEX.tar.gz" >> /data/oss/etc/apk/repositories
qnx# echo "$GH_RELEASES/tests-8.0-$ARCH-m-z/APKINDEX.tar.gz" >> /data/oss/etc/apk/repositories
qnx# curl -fsSL -o /data/oss/etc/apk/keys/openqnx-oss-20261029.rsa.pub \
https://raw.githubusercontent.com/openqnx/oss/main/keys/openqnx-oss-20261029.rsa.pub
qnx# BOOT_APK=/data/boot/root/usr/local
qnx# LD_LIBRARY_PATH=$BOOT_APK/lib:/data/oss/qnx-runtime/lib $BOOT_APK/bin/apk --root /data/oss --force-no-chroot --initdb add apk-tools ca-certificates
qnx# cd /; rm -rf /data/boot3. Using apk (at every login, after the base settings)
qnx# alias apk='/usr/local/bin/apk --root /data/oss --force-no-chroot' qnx# export SSL_CERT_FILE=/usr/local/ssl/cert.pem # now the one from the ca-certificates package qnx# apk update
--force-no-chroot lets package triggers run (for example glib compiling GSettings schemas on install).
4. Particular packages only
qnx# apk search -v curl # names and versions qnx# apk add curl # with its dependencies qnx# apk add curl=<version> # one version (apk search -v, or the package site) qnx# apk add curl-dev # headers, pkg-config, static libraries qnx# apk info -L curl # the files it installed qnx# apk del curl # remove (and dependencies nothing else needs) qnx# curl --version
Older revisions bring matching dependencies. For example, apk add nodejs=24.14.1-r0 comes with ada 3.4.4, and the newest revision comes with ada 4.0.0. A package's page on the package site lists the dependency versions each revision works with.
5. Every package at once
Make the image with the large /data (Base QEMU images, section 2) first.
qnx# mkdir -p /data/oss/dl && cd /data/oss/dl
qnx# curl -fsSL $GH_RELEASES/packages-8.0-$ARCH/INDEX $GH_RELEASES/packages-8.0-$ARCH-m-z/INDEX \
| grep -v '^#' | cut -d'|' -f1 | sort -u \
| grep -vxE 'sdl2-compat(-dev)?' > all-names.txt # sdl2-compat cannot be installed with sdl2
qnx# wc -l all-names.txt
qnx# apk update
qnx# apk add $(cat all-names.txt) # takes long, aarch64 especially
qnx# apk info | wc -lIf it is interrupted, run the same apk add again. Remove everything: apk del $(cat all-names.txt).
6. Run a package's test
qnx# apk add qnx-test-curl qnx-port-tests qnx# QNX_PORT_TESTS_VERBOSE=1 /usr/local/bin/qnx-port-tests/run-on-target.sh test_curl
Every check says ok, and the run ends with PASS test_curl and passed: 1 failed: 0. The package site shows the same test's recorded log for comparison.
7. Graphical programs (image with --graphics=yes)
qnx# apk add oss-desktop # labwc, swaybg, the Xfce panel, terminal, file manager qnx# nohup oss-desktop > /tmp/oss-desktop.out 2>&1 & qnx# export XDG_RUNTIME_DIR=/tmp/xdg-runtime-0 WAYLAND_DISPLAY=wayland-0 qnx# apk add geany && geany & # a GTK program on the desktop qnx# apk add qdirstat && QT_QPA_PLATFORM=qnx qdirstat & # Qt draws on QNX Screen directly qnx# apk add mame && mame & # SDL2 programs use QNX Screen
Screenshots of what this looks like: docs/screenshots.