From 3abf89f24b11df025cb68c06ff8fba637a81c859 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Tue, 28 Oct 2025 23:25:09 -0600 Subject: [PATCH 01/88] Update toltecmk version to 0.4.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index c0321f1b8..73268e5ca 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ mypy-extensions==1.0.0 mypy==1.7.1 pylint==3.0.3 six==1.16.0 -toltecmk==0.3.7 +toltecmk==0.4.0 toml==0.10.2 types-python-dateutil==2.8.19.14 types-requests==2.31.0.2 From 26ed5da58e31a7e24e7f9dadbc969347f306cfca Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 00:00:38 -0600 Subject: [PATCH 02/88] Add 3.22, split out display packages, start adding rmpp/rmppm --- Makefile | 4 + docs/package.md | 29 ++-- package/Compatibility | 6 + package/display/package | 141 +++------------- package/rm2fb-timower/package | 151 ++++++++++++++++++ package/rm2fb-timower/rm2fb-client | 4 + package/rm2fb-timower/rm2fb-preload.conf | 3 + package/rm2fb-timower/rm2fb-preload.env | 9 ++ package/rm2fb-timower/rm2fb-server | 4 + package/rm2fb-timower/rm2fb.service | 16 ++ package/rm2fb/package | 126 +++++++++++++++ package/{display => rm2fb}/rm2fb-client | 0 package/{display => rm2fb}/rm2fb-preload.conf | 0 package/{display => rm2fb}/rm2fb-preload.env | 0 package/{display => rm2fb}/rm2fb.service | 0 package/toltec-base/package | 33 +++- package/toltec-bootstrap/toltecctl | 14 +- package/toltec-deletions/package | 49 +++++- 18 files changed, 447 insertions(+), 142 deletions(-) create mode 100644 package/rm2fb-timower/package create mode 100755 package/rm2fb-timower/rm2fb-client create mode 100644 package/rm2fb-timower/rm2fb-preload.conf create mode 100644 package/rm2fb-timower/rm2fb-preload.env create mode 100755 package/rm2fb-timower/rm2fb-server create mode 100644 package/rm2fb-timower/rm2fb.service create mode 100644 package/rm2fb/package rename package/{display => rm2fb}/rm2fb-client (100%) rename package/{display => rm2fb}/rm2fb-preload.conf (100%) rename package/{display => rm2fb}/rm2fb-preload.env (100%) rename package/{display => rm2fb}/rm2fb.service (100%) diff --git a/Makefile b/Makefile index 0ec4607ca..b45429653 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,10 @@ RECIPES_CLEAN=$(foreach app, $(RECIPES), $(app)-clean) ifeq ($(RUNNER_DEBUG), 1) FLAGS+= --verbose +else +ifeq ($(VERBOSE), 1) +FLAGS+= --verbose +endif endif define USAGE diff --git a/docs/package.md b/docs/package.md index 072da60b5..70a36b8a1 100644 --- a/docs/package.md +++ b/docs/package.md @@ -38,17 +38,24 @@ You can also declare custom variables to reduce repetition but make sure to pref The list of devices that are compatible with this package. The following values are accepted: -Name | Meaning -------------|------------------------------------------------------------------------- -`rmall` | Packages which work on all reMarkable devices without modification. -`rm1` | Packages requiring reMarkable 1-specific resources or compilation flags. -`rm2` | Packages requiring reMarkable 2-specific resources or compilation flags. -`rmallos2` | Packages which work on all reMarkable devices without modification, but only on the 2.x series of operating system. -`rm1os2` | Packages requiring reMarkable 1-specific resources or compilation flags, but only on the 2.x series of operating system. -`rm2os2` | Packages requiring reMarkable 2-specific resources or compilation flags, but only on the 2.x series of operating system. -`rmallos3` | Packages which work on all reMarkable devices without modification, but only on the 3.x series of operating system. -`rm1os3` | Packages requiring reMarkable 1-specific resources or compilation flags, but only on the 3.x series of operating system. -`rm2os3` | Packages requiring reMarkable 2-specific resources or compilation flags, but only on the 3.x series of operating system. +Name | Meaning +--------------|------------------------------------------------------------------------- +`rmall` | Packages which work on all reMarkable devices without modification. +`rm1` | Packages requiring reMarkable 1 specific resources or compilation flags. +`rm2` | Packages requiring reMarkable 2 specific resources or compilation flags. +`rmpp` | Packages requiring reMarkable Paper Pro specific resources or compilation flags. +`rmppm` | Packages requiring reMarkable Paper Pro Move specific resources or compilation flags. +`rmallos2` | Packages which work on all reMarkable devices without modification, but only on the 2.x series of operating system. +`rm1os2` | Packages requiring reMarkable 1 specific resources or compilation flags, but only on the 2.x series of operating system. +`rm2os2` | Packages requiring reMarkable 2 specific resources or compilation flags, but only on the 2.x series of operating system. +`rmallos3` | Packages which work on all reMarkable devices without modification, but only on 3.0 to 3.3.2 versions of the operating system. +`rm1os3` | Packages requiring reMarkable 1 specific resources or compilation flags, but only on 3.0 to 3.3.2 versions of the operating system. +`rm2os3` | Packages requiring reMarkable 2 specific resources or compilation flags, but only on 3.0 to 3.3.2 versions of the operating system. +`rmallos3v22` | Packages which work on all reMarkable devices without modification, but only on 3.22.0.64 or newer operating system versions. +`rm1os3v22` | Packages requiring reMarkable 1-specific resources or compilation flags, but only on 3.22.0.64 or newer operating system versions. +`rm2os3v22` | Packages requiring reMarkable 2-specific resources or compilation flags, but only on 3.22.0.64 or newer operating system versions. +`rmppos3v22` | Packages requiring reMarkable Paper Pro specific resources or compilation flags, but only on 3.22.0.64 or newer operating system versions. +`rmppmos3v22` | Packages requiring reMarkable Pape Pro Move specific resources or compilation flags, but only on 3.22.0.64 or newer operating system versions. For example, use `archs=(rm1)` for a package that only works on reMarkable 1, or `archs=(rm1 rm2)` for a package that works both on reMarkable 1 and reMarkable 2 but needs different dependencies or compilation flags for each of those. diff --git a/package/Compatibility b/package/Compatibility index cf3ac4c40..f331e8213 100644 --- a/package/Compatibility +++ b/package/Compatibility @@ -32,6 +32,7 @@ rm1=3.0.4.1305 rm1=3.2.2.1581 rm1=3.2.3.1595 rm1=3.3.2.1666 +rm1=3.22.0.64 rm2=2.6.1.71 rm2=2.6.2.75 @@ -68,3 +69,8 @@ rm2=3.0.4.1305 rm2=3.2.2.1581 rm2=3.2.3.1595 rm2=3.3.2.1666 +rm2=3.22.0.64 + +rmpp=3.22.0.64 + +rmppm=3.22.0.64 diff --git a/package/display/package b/package/display/package index d8f144a98..32bc9f717 100644 --- a/package/display/package +++ b/package/display/package @@ -1,126 +1,27 @@ #!/usr/bin/env bash -# Copyright (c) 2021 The Toltec Contributors +# Copyright (c) 2025 The Toltec Contributors # SPDX-License-Identifier: MIT - -archs=(rm1 rm2) -pkgnames=(display rm2fb-client) -timestamp=2023-08-27T02:39:10Z -maintainer="raisjn " +arch=( + rmallos2 + rmallos3 + rm1os3v22 + rm2os3v22 + rmppos3v22 + rmppmos3v22 +) +pkgnames=(display) +pkgdesc="Metapackage for allowing applications to display to the screen" +timestamp=2024-05-24T06:12:38Z +maintainer="Eeems " license=MIT -url="https://github.com/ddvk/remarkable2-framebuffer" -pkgver=1:0.0.33-4 -_release="${pkgver%-*}" -_release="v${_release#*:}" -_libver=1.0.1 +url="https://toltec-dev.org" +pkgver=2:0.0.1-1 section="devel" +installdepends_rmallos2=(rm2fb-server rm2fb-client) +installdepends_rmallos3=(rm2fb-server rm2fb-client) +installdepends_rm1os3v22=(rm2fb-server rm2fb-client) +installdepends_rm2os3v22=(rm2fb-server rm2fb-client) -image=qt:v3.2 -source=( - "https://github.com/ddvk/remarkable2-framebuffer/archive/$_release.zip" - rm2fb.service - rm2fb-client - rm2fb-preload.conf - rm2fb-preload.env -) -sha256sums=( - dd57f1ba31f08a28d801989e9a705bd93cc637cd8f4dffa160412119e69329ff - SKIP - SKIP - SKIP - SKIP -) - -build() { - if [[ $arch = rm1 ]]; then - # Create an empty client library for rM1 - pushd src/client - echo | "${CROSS_COMPILE}gcc" \ - -fPIC -fvisibility=hidden -shared \ - -o "librm2fb_client.so.$_libver" \ - -xc - - popd - else - qmake - make - fi -} - -display() { - pkgdesc="Interface to the reMarkable framebuffer" - installdepends=(xochitl "rm2fb-client=$pkgver") - conflicts=(rm2fb) - replaces=(rm2fb) - - package() { - if [[ $arch = rm2 ]]; then - libname="librm2fb_server.so.$_libver" - install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/src/server/"$libname" - ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*.*}" - ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*}" - install -D -m 644 -t "$pkgdir"/lib/systemd/system "$srcdir"/rm2fb.service - fi - } - - configure() { - if [[ $arch = rm2 ]]; then - systemctl daemon-reload - if systemctl enable rm2fb --now; then - # Restart xochitl if it's running - if is-active xochitl; then - # Reset the crash count so we don't trigger remarkable-fail - echo "0" > /tmp/crashnum - systemctl restart xochitl - fi - else - disable-unit rm2fb.service - echo "Failed to start rm2fb. Keeping it disabled for now." - echo "Please check the logs and open an issue:" - echo " https://github.com/toltec-dev/toltec/issues/new" - exit 1 - fi - fi - } - - preremove() { - if [[ $arch = rm2 ]]; then - disable-unit rm2fb.service - echo -n "make sure " - if ! is-enabled xochitl.service; then - echo "to re-enable xochitl with 'systemctl enable xochitl --now'" - echo -n "and " - fi - echo "to disable / uninstall any launchers like draft, oxide or remux before" - echo "rebooting your tablet to complete the uninstallation" - fi - } -} - -rm2fb-client() { - pkgdesc="Shim to make reMarkable 1 apps work on reMarkable 2" - installdepends=("display=$pkgver") - conflicts=(rm2fb) - replaces=(rm2fb) - - package() { - libname="librm2fb_client.so" - libnamever="$libname.$_libver" - install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/src/client/"$libnamever" - install -d "$pkgdir"/usr/lib - ln -s /opt/lib/"$libnamever" "$pkgdir"/usr/lib/"$libnamever" - ln -s /opt/lib/"$libnamever" "$pkgdir"/opt/lib/"$libname" - - for dest in opt/lib usr/lib; do - ln -s "$libnamever" "$pkgdir/$dest/${libnamever%.*.*}" - ln -s "$libnamever" "$pkgdir/$dest/${libnamever%.*}" - done - - install -D -m 755 -t "$pkgdir"/opt/bin "$srcdir"/rm2fb-client - - if [[ $arch = rm2 ]]; then - install -D -m 644 -t "$pkgdir"/opt/etc/xochitl.env.d "$srcdir"/rm2fb-preload.env - install -D -m 644 -t "$pkgdir"/etc/systemd/system/draft.service.d "$srcdir"/rm2fb-preload.conf - install -D -m 644 -t "$pkgdir"/etc/systemd/system/remux.service.d "$srcdir"/rm2fb-preload.conf - install -D -m 644 -t "$pkgdir"/etc/systemd/system/tarnish.service.d "$srcdir"/rm2fb-preload.conf - fi - } +package() { + true } diff --git a/package/rm2fb-timower/package b/package/rm2fb-timower/package new file mode 100644 index 000000000..0d94d0e3c --- /dev/null +++ b/package/rm2fb-timower/package @@ -0,0 +1,151 @@ +#!/usr/bin/env bash +# Copyright (c) 2025 The Toltec Contributors +# SPDX-License-Identifier: MIT + +archs=(rm1os3v22 rm2os3v22) +pkgnames=(rm2fb-server rm2fb-client) +timestamp=2025-10-02T19:05:58Z +maintainer="Eeems " +license=MIT +url="https://github.com/timower/rM2-stuff/tree/master/libs/rm2fb" +_tag=0.1.3 +_commit=b52e5a169c58e7fe67a5ad679317437edd881ddf +pkgver=2:${_tag}-1 +_libver=1.1.0 +section="devel" + +source=( + rm2fb-client + rm2fb-preload.conf + rm2fb-preload.env + rm2fb.service +) +sha256sums=( + SKIP + SKIP + SKIP + SKIP +) + +image=base:v3.1 + +prepare() { + cd "$srcdir" + mkdir -p rm2fb + cd rm2fb + git init + git lfs install + git remote add origin https://github.com/timower/rM2-stuff.git + git fetch --depth 1 origin ${_commit} --no-tags + git checkout ${_commit} + git lfs fetch + git lfs checkout +} + +build() { + if [[ $arch = rm1os3v22 ]]; then + # Create an empty client library for rM1 + mkdir -p install/opt/lib + pushd install/opt/lib + echo | "${CROSS_COMPILE}gcc" \ + -fPIC -fvisibility=hidden -shared \ + -o "librm2fb_client.so.$_libver" \ + -xc - + popd + else + mkdir build + mkdir install + pushd build + cmake -DCMAKE_TOOLCHAIN_FILE="/usr/share/cmake/$CHOST.cmake" \ + -DCMAKE_INSTALL_PREFIX="$srcdir/install" -DCMAKE_BUILD_TYPE=Release ../rm2fb + pushd libs/rm2fb + make + make install + popd + popd + mv install/opt/lib/librm2fb_server.so{,.$_libver} + fi + # Work around current post-processing not handling symlinks that are not currently valid + rm -f install/usr/lib/librm2fb_client.so.1 + rm -f build/librm2fb_client.so.1 +} + +rm2fb-server() { + pkgdesc="Interface to the reMarkable framebuffer" + installdepends=(xochitl "rm2fb-client=$pkgver") + conflicts=(rm2fb) + replaces=(rm2fb) + + package() { + if [[ $arch = rm2os3v22 ]]; then + libname="librm2fb_server.so.$_libver" + install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/install/opt/lib/"$libname" + ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*.*.*}" + ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*.*}" + ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*}" + install -D -m 644 -t "$pkgdir"/lib/systemd/system "$srcdir"/rm2fb.service + fi + } + + configure() { + if [[ $arch = rm2os3v22 ]]; then + systemctl daemon-reload + if systemctl enable rm2fb.service --now; then + # Restart xochitl if it's running + if is-active xochitl; then + # Reset the crash count so we don't trigger remarkable-fail + echo "0" > /tmp/crashnum + systemctl restart xochitl + fi + else + disable-unit rm2fb.service + echo "Failed to start rm2fb. Keeping it disabled for now." + echo "Please check the logs and open an issue:" + echo " https://github.com/toltec-dev/toltec/issues/new" + exit 1 + fi + fi + } + + preremove() { + if [[ $arch = rm2os3v22 ]]; then + disable-unit rm2fb.service + echo -n "make sure " + if ! is-enabled xochitl.service; then + echo "to re-enable xochitl with 'systemctl enable xochitl --now'" + echo -n "and " + fi + echo "to disable / uninstall any launchers like draft, oxide or remux before" + echo "rebooting your tablet to complete the uninstallation" + fi + } +} + +rm2fb-client() { + pkgdesc="Shim to make reMarkable 1 apps work on reMarkable 2" + installdepends=("rm2fb-server=$pkgver") + conflicts=(rm2fb) + replaces=(rm2fb) + + package() { + libname="librm2fb_client.so.$_libver" + install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/install/opt/lib/"$libname" + install -d "$pkgdir"/usr/lib + ln -s /opt/lib/"$libname" "$pkgdir"/usr/lib/"$libname" + + for dest in opt/lib usr/lib; do + ln -s "$libname" "$pkgdir/$dest/${libname%.*.*.*}" + ln -s "$libname" "$pkgdir/$dest/${libname%.*.*}" + ln -s "$libname" "$pkgdir/$dest/${libname%.*}" + done + + install -D -m 755 -t "$pkgdir"/opt/bin "$srcdir"/rm2fb-client + + if [[ $arch = rm2os3v22 ]]; then + install -D -m 644 -t "$pkgdir"/opt/etc/xochitl.env.d "$srcdir"/rm2fb-preload.env + install -D -m 644 -t "$pkgdir"/etc/systemd/system/draft.service.d "$srcdir"/rm2fb-preload.conf + install -D -m 644 -t "$pkgdir"/etc/systemd/system/remux.service.d "$srcdir"/rm2fb-preload.conf + install -D -m 644 -t "$pkgdir"/etc/systemd/system/tarnish.service.d "$srcdir"/rm2fb-preload.conf + fi + } +} diff --git a/package/rm2fb-timower/rm2fb-client b/package/rm2fb-timower/rm2fb-client new file mode 100755 index 000000000..1ce19b84c --- /dev/null +++ b/package/rm2fb-timower/rm2fb-client @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +# Copyright (c) 2025 The Toltec Contributors +# SPDX-License-Identifier: MIT +LD_PRELOAD=/opt/lib/librm2fb_client.so.1 RM2FB_ACTIVE=1 exec "$@" diff --git a/package/rm2fb-timower/rm2fb-preload.conf b/package/rm2fb-timower/rm2fb-preload.conf new file mode 100644 index 000000000..a2b02b315 --- /dev/null +++ b/package/rm2fb-timower/rm2fb-preload.conf @@ -0,0 +1,3 @@ +[Service] +Environment="LD_PRELOAD=/opt/lib/librm2fb_client.so.1" +Environment="RM2FB_ACTIVE=1" diff --git a/package/rm2fb-timower/rm2fb-preload.env b/package/rm2fb-timower/rm2fb-preload.env new file mode 100644 index 000000000..31ae503d8 --- /dev/null +++ b/package/rm2fb-timower/rm2fb-preload.env @@ -0,0 +1,9 @@ +# Copyright (c) 2025 The Toltec Contributors +# SPDX-License-Identifier: MIT +# Please do not modify files shipped by Toltec, or they risk being +# overwritten with updates. Instead create your own files in this directory. +if [[ -f /dev/shm/swtfb.01 ]]; then + export LD_PRELOAD="$LD_PRELOAD:/opt/lib/librm2fb_client.so.1" +else + echo "rm2fb server is not running: starting without rm2fb client" +fi diff --git a/package/rm2fb-timower/rm2fb-server b/package/rm2fb-timower/rm2fb-server new file mode 100755 index 000000000..65c994275 --- /dev/null +++ b/package/rm2fb-timower/rm2fb-server @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +# Copyright (c) 2025 The Toltec Contributors +# SPDX-License-Identifier: MIT +LD_PRELOAD=/opt/lib/librm2fb_server.so exec -a "rm2fb-server" /usr/bin/xochitl diff --git a/package/rm2fb-timower/rm2fb.service b/package/rm2fb-timower/rm2fb.service new file mode 100644 index 000000000..108c18d61 --- /dev/null +++ b/package/rm2fb-timower/rm2fb.service @@ -0,0 +1,16 @@ +[Unit] +Description=reMarkable 2 Framebuffer Server +StartLimitIntervalSec=600 +StartLimitBurst=4 +Before=xochitl.service launcher.service remarkable-reboot.service remarkable-shutdown.service +After=opt.mount +ConditionFileNotEmpty=/opt/lib/librm2fb_server.so + +[Service] +Restart=on-failure +RestartSec=5 +ExecStart=/opt/bin/rm2fb-server +Environment=HOME=/home/root + +[Install] +WantedBy=multi-user.target diff --git a/package/rm2fb/package b/package/rm2fb/package new file mode 100644 index 000000000..d4e926912 --- /dev/null +++ b/package/rm2fb/package @@ -0,0 +1,126 @@ +#!/usr/bin/env bash +# Copyright (c) 2025 The Toltec Contributors +# SPDX-License-Identifier: MIT + +archs=(rm1os2 rm2os2 rm1os3 rm2os3) +pkgnames=(rm2fb-server rm2fb-client) +timestamp=2023-08-27T02:39:10Z +maintainer="raisjn " +license=MIT +url="https://github.com/ddvk/remarkable2-framebuffer" +pkgver=1:0.0.33-5 +_release="${pkgver%-*}" +_release="v${_release#*:}" +_libver=1.0.1 +section="devel" + +image=qt:v3.2 +source=( + "https://github.com/ddvk/remarkable2-framebuffer/archive/$_release.zip" + rm2fb.service + rm2fb-client + rm2fb-preload.conf + rm2fb-preload.env +) +sha256sums=( + dd57f1ba31f08a28d801989e9a705bd93cc637cd8f4dffa160412119e69329ff + SKIP + SKIP + SKIP + SKIP +) + +build() { + if [[ $arch = rm1 ]]; then + # Create an empty client library for rM1 + pushd src/client + echo | "${CROSS_COMPILE}gcc" \ + -fPIC -fvisibility=hidden -shared \ + -o "librm2fb_client.so.$_libver" \ + -xc - + popd + else + qmake + make + fi +} + +rm2fb-server() { + pkgdesc="Interface to the reMarkable framebuffer" + installdepends=(xochitl "rm2fb-client=$pkgver") + conflicts=(rm2fb) + replaces=(rm2fb) + + package() { + if [[ $arch = rm2 ]]; then + libname="librm2fb_server.so.$_libver" + install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/src/server/"$libname" + ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*.*}" + ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*}" + install -D -m 644 -t "$pkgdir"/lib/systemd/system "$srcdir"/rm2fb.service + fi + } + + configure() { + if [[ $arch = rm2 ]]; then + systemctl daemon-reload + if systemctl enable rm2fb --now; then + # Restart xochitl if it's running + if is-active xochitl; then + # Reset the crash count so we don't trigger remarkable-fail + echo "0" > /tmp/crashnum + systemctl restart xochitl + fi + else + disable-unit rm2fb.service + echo "Failed to start rm2fb. Keeping it disabled for now." + echo "Please check the logs and open an issue:" + echo " https://github.com/toltec-dev/toltec/issues/new" + exit 1 + fi + fi + } + + preremove() { + if [[ $arch = rm2 ]]; then + disable-unit rm2fb.service + echo -n "make sure " + if ! is-enabled xochitl.service; then + echo "to re-enable xochitl with 'systemctl enable xochitl --now'" + echo -n "and " + fi + echo "to disable / uninstall any launchers like draft, oxide or remux before" + echo "rebooting your tablet to complete the uninstallation" + fi + } +} + +rm2fb-client() { + pkgdesc="Shim to make reMarkable 1 apps work on reMarkable 2" + installdepends=("rm2fb-server=$pkgver") + conflicts=(rm2fb) + replaces=(rm2fb) + + package() { + libname="librm2fb_client.so" + libnamever="$libname.$_libver" + install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/src/client/"$libnamever" + install -d "$pkgdir"/usr/lib + ln -s /opt/lib/"$libnamever" "$pkgdir"/usr/lib/"$libnamever" + ln -s /opt/lib/"$libnamever" "$pkgdir"/opt/lib/"$libname" + + for dest in opt/lib usr/lib; do + ln -s "$libnamever" "$pkgdir/$dest/${libnamever%.*.*}" + ln -s "$libnamever" "$pkgdir/$dest/${libnamever%.*}" + done + + install -D -m 755 -t "$pkgdir"/opt/bin "$srcdir"/rm2fb-client + + if [[ $arch = rm2 ]]; then + install -D -m 644 -t "$pkgdir"/opt/etc/xochitl.env.d "$srcdir"/rm2fb-preload.env + install -D -m 644 -t "$pkgdir"/etc/systemd/system/draft.service.d "$srcdir"/rm2fb-preload.conf + install -D -m 644 -t "$pkgdir"/etc/systemd/system/remux.service.d "$srcdir"/rm2fb-preload.conf + install -D -m 644 -t "$pkgdir"/etc/systemd/system/tarnish.service.d "$srcdir"/rm2fb-preload.conf + fi + } +} diff --git a/package/display/rm2fb-client b/package/rm2fb/rm2fb-client similarity index 100% rename from package/display/rm2fb-client rename to package/rm2fb/rm2fb-client diff --git a/package/display/rm2fb-preload.conf b/package/rm2fb/rm2fb-preload.conf similarity index 100% rename from package/display/rm2fb-preload.conf rename to package/rm2fb/rm2fb-preload.conf diff --git a/package/display/rm2fb-preload.env b/package/rm2fb/rm2fb-preload.env similarity index 100% rename from package/display/rm2fb-preload.env rename to package/rm2fb/rm2fb-preload.env diff --git a/package/display/rm2fb.service b/package/rm2fb/rm2fb.service similarity index 100% rename from package/display/rm2fb.service rename to package/rm2fb/rm2fb.service diff --git a/package/toltec-base/package b/package/toltec-base/package index 6e3d8be49..465218269 100644 --- a/package/toltec-base/package +++ b/package/toltec-base/package @@ -2,7 +2,24 @@ # Copyright (c) 2023 The Toltec Contributors # SPDX-License-Identifier: MIT -archs=(rmall rmallos2 rmallos3 rm1 rm1os2 rm1os3 rm2 rm2os2 rm2os3) +archs=( + rmall + rmallos2 + rmallos3 + rmallos3v22 + rm1 + rm1os2 + rm1os3 + rm1os3v22 + rm2 + rm2os2 + rm2os3 + rm2os3v22 + rmpp + rmppos3v22 + rmppm + rmppmos3v22 +) pkgnames=(toltec-base) pkgdesc="Metapackage defining the base set of packages in a Toltec install" url=https://toltec-dev.org/ @@ -33,11 +50,11 @@ configure() { echo "Disabling automatic update" disable-unit update-engine.service case "$arch" in - rmall | rmallos2 | rmallos3) + rmall | rmallos2 | rmallos3 | rmallos3v22) echo "Warning: rmall version of toltec-base should not be installed" echo "Please run opkg install --force-reinstall toltec-base" ;; - rm1 | rm1os2 | rm1os3) + rm1 | rm1os2 | rm1os3 | rm1os3v22) if ! is-masked sys-subsystem-net-devices-usb1.device; then systemctl mask sys-subsystem-net-devices-usb1.device fi @@ -45,7 +62,7 @@ configure() { systemctl mask busybox-ifplugd@usb1.service fi ;; - rm2 | rm2os2 | rm2os3) + rm2 | rm2os2 | rm2os3 | rm2os3v22) if is-masked sys-subsystem-net-devices-usb1.device; then systemctl unmask sys-subsystem-net-devices-usb1.device fi @@ -53,6 +70,14 @@ configure() { systemctl unmask busybox-ifplugd@usb1.service fi ;; + rmpp | rmppos3v22) + # TODO ensure root is rw + # TODO ensure etc overlay is unmounted + ;; + rmppm | rmppmos3v22) + # TODO ensure root is rw + # TODO ensure etc overlay is unmounted + ;; esac } diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index 96bcb873e..c62c730da 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -393,11 +393,11 @@ update-package-arch() { return 3 fi case "$arch" in - rmallos2 | rmallos3) + rmallos2 | rmallos3 | rmallos3v22) version="$(identify-support-version)" new_status="$(echo "$status" | replace-string "Architecture: ${arch}" "Architecture: rmall${version}")" ;; - rm1os2 | rm1os3 | rm2os2 | rm2os3) + rm1os2 | rm1os3 | rm1os3v22 | rm2os2 | rm2os3 | rm2os3v22) model="$(identify-model)" version="$(identify-support-version)" new_status="$(echo "$status" | replace-string "Architecture: ${arch}" "Architecture: ${model}${version}")" @@ -611,7 +611,8 @@ compare-versions() { # Output: One of the following strings # # os2 - 2.x OS version -# os3 - 3.x OS version +# os3 - 3.0 to 3.3.2 OS version +# os3v22 - 3.22 OS version # unknown identify-support-version() { local current_version @@ -621,8 +622,10 @@ identify-support-version() { echo "unknown" elif compare-versions "3.0" "$current_version"; then echo "os2" - elif compare-versions "4.0" "$current_version"; then + elif compare-versions "3.3.3" "$current_version"; then echo "os3" + elif compare-versions "4.0" "$current_version"; then + echo "os3v22" else echo "unknown" fi @@ -664,8 +667,7 @@ arch ${model} 250 src/gz toltec-${model} ${toltec_srv_root}/${branch}/${model} arch rmall${version} 260 src/gz toltec-rmall$version ${toltec_srv_root}/${branch}/rmall${version} -arch ${model}os2 270 -arch ${model}os3 270 +arch ${model}${version} 270 src/gz toltec-${model}${version} ${toltec_srv_root}/${branch}/${model}${version} CONF } diff --git a/package/toltec-deletions/package b/package/toltec-deletions/package index 4d78a343c..49dd1e5fe 100644 --- a/package/toltec-deletions/package +++ b/package/toltec-deletions/package @@ -2,7 +2,16 @@ # Copyright (c) 2023 The Toltec Contributors # SPDX-License-Identifier: MIT -archs=(rm1os2 rm1os3 rm2os2 rm2os3) +archs=( + rm1os2 + rm1os3 + rm1os3v22 + rm2os2 + rm2os3 + rm2os3v22 + rmppos3v22 + rmppmos3v22 +) pkgnames=(toltec-deletions) pkgdesc="Metapackage to handle package deletions between OS versions" url=https://toltec-dev.org/ @@ -32,6 +41,22 @@ replaces_rm1os3=( gocryptfs remarkable-stylus ) +conflicts_rm1os3v22=( + ddvk-hacks + fuse + wireguard + innernet-client + gocryptfs + remarkable-stylus +) +replaces_rm1os3v22=( + ddvk-hacks + fuse + wireguard + innernet-client + gocryptfs + remarkable-stylus +) conflicts_rm2os3=( ddvk-hacks fuse @@ -50,6 +75,28 @@ replaces_rm2os3=( remarkable-stylus open-remarkable-shutdown ) +conflicts_rm2os3v22=( + ddvk-hacks + fuse + wireguard + innernet-client + gocryptfs + remarkable-stylus + open-remarkable-shutdown +) +replaces_rm2os3v22=( + ddvk-hacks + fuse + wireguard + innernet-client + gocryptfs + remarkable-stylus + open-remarkable-shutdown +) +conflicts_rmppos3v22=() +replaces_rmppos3v22=() +conflicts_rmppmos3v22=() +replaces_rmppmos3v22=() source=() sha256sums=() From 795e9fd7b7239e4f3d0b7e1127bb578503c64db0 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 00:07:09 -0600 Subject: [PATCH 03/88] Use latest image, install git --- package/rm2fb-timower/package | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/package/rm2fb-timower/package b/package/rm2fb-timower/package index 0d94d0e3c..2c8f8c414 100644 --- a/package/rm2fb-timower/package +++ b/package/rm2fb-timower/package @@ -27,9 +27,12 @@ sha256sums=( SKIP ) -image=base:v3.1 +image=base:v4.0 prepare() { + export DEBIAN_FRONTEND=noninteractive \ + && apt-get update -y \ + && apt-get install -y --no-install-recommends git cd "$srcdir" mkdir -p rm2fb cd rm2fb From b851b95581e72e255bbde120ce7d2b5ce8c7c0b3 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 00:11:48 -0600 Subject: [PATCH 04/88] Install git-lfs --- package/rm2fb-timower/package | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package/rm2fb-timower/package b/package/rm2fb-timower/package index 2c8f8c414..c3fe5e2b9 100644 --- a/package/rm2fb-timower/package +++ b/package/rm2fb-timower/package @@ -32,7 +32,9 @@ image=base:v4.0 prepare() { export DEBIAN_FRONTEND=noninteractive \ && apt-get update -y \ - && apt-get install -y --no-install-recommends git + && apt-get install -y --no-install-recommends \ + git \ + git-lfs cd "$srcdir" mkdir -p rm2fb cd rm2fb From 6380eabd879408e252b1323ed0f9f31ec9fc7513 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 00:14:56 -0600 Subject: [PATCH 05/88] Add empty installdepends for display package base --- package/display/package | 1 + 1 file changed, 1 insertion(+) diff --git a/package/display/package b/package/display/package index 32bc9f717..ec268f788 100644 --- a/package/display/package +++ b/package/display/package @@ -17,6 +17,7 @@ license=MIT url="https://toltec-dev.org" pkgver=2:0.0.1-1 section="devel" +installdepends=() installdepends_rmallos2=(rm2fb-server rm2fb-client) installdepends_rmallos3=(rm2fb-server rm2fb-client) installdepends_rm1os3v22=(rm2fb-server rm2fb-client) From 8c06e1f54eb35238de48aa9aa77f35326aa548d0 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 00:19:08 -0600 Subject: [PATCH 06/88] Install xxd for rm2 build --- package/rm2fb-timower/package | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package/rm2fb-timower/package b/package/rm2fb-timower/package index c3fe5e2b9..d038e4875 100644 --- a/package/rm2fb-timower/package +++ b/package/rm2fb-timower/package @@ -29,6 +29,9 @@ sha256sums=( image=base:v4.0 +makedepends=() +makedepends_rm2os3v22=(build:xxd) + prepare() { export DEBIAN_FRONTEND=noninteractive \ && apt-get update -y \ From f383040abb5128e0c5300603b3a3a22fd90171fd Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 00:25:33 -0600 Subject: [PATCH 07/88] Use new install paths --- package/rm2fb-timower/package | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package/rm2fb-timower/package b/package/rm2fb-timower/package index d038e4875..3435f99eb 100644 --- a/package/rm2fb-timower/package +++ b/package/rm2fb-timower/package @@ -53,8 +53,8 @@ prepare() { build() { if [[ $arch = rm1os3v22 ]]; then # Create an empty client library for rM1 - mkdir -p install/opt/lib - pushd install/opt/lib + mkdir -p install/lib + pushd install/lib echo | "${CROSS_COMPILE}gcc" \ -fPIC -fvisibility=hidden -shared \ -o "librm2fb_client.so.$_libver" \ @@ -71,7 +71,7 @@ build() { make install popd popd - mv install/opt/lib/librm2fb_server.so{,.$_libver} + mv install/lib/librm2fb_server.so{,.$_libver} fi # Work around current post-processing not handling symlinks that are not currently valid rm -f install/usr/lib/librm2fb_client.so.1 @@ -87,7 +87,7 @@ rm2fb-server() { package() { if [[ $arch = rm2os3v22 ]]; then libname="librm2fb_server.so.$_libver" - install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/install/opt/lib/"$libname" + install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/install/lib/"$libname" ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*.*.*}" ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*.*}" ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*}" @@ -137,7 +137,7 @@ rm2fb-client() { package() { libname="librm2fb_client.so.$_libver" - install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/install/opt/lib/"$libname" + install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/install/lib/"$libname" install -d "$pkgdir"/usr/lib ln -s /opt/lib/"$libname" "$pkgdir"/usr/lib/"$libname" From 6a14d64bda1dd73bd7c8058fd46c3296a758b24d Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 09:59:36 -0600 Subject: [PATCH 08/88] Add missing items from install --- package/rm2fb-timower/package | 3 +++ package/rm2fb-timower/rm2fb-preload.env | 2 +- package/rm2fb-timower/rm2fb.service | 3 ++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/package/rm2fb-timower/package b/package/rm2fb-timower/package index 3435f99eb..1301c3510 100644 --- a/package/rm2fb-timower/package +++ b/package/rm2fb-timower/package @@ -92,6 +92,8 @@ rm2fb-server() { ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*.*}" ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*}" install -D -m 644 -t "$pkgdir"/lib/systemd/system "$srcdir"/rm2fb.service + install -D -m 644 -t "$pkgdir"/lib/systemd/system "$srcdir"/install/lib/systemd/system/rm2fb.socket + install -D -m 755 "$srcdir"/install/bin/rm2fb_server "$pkgdir"/opt/bin/rm2fb-server fi } @@ -138,6 +140,7 @@ rm2fb-client() { package() { libname="librm2fb_client.so.$_libver" install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/install/lib/"$libname" + install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/install/lib/"librm2fb_client_no_hook.so" install -d "$pkgdir"/usr/lib ln -s /opt/lib/"$libname" "$pkgdir"/usr/lib/"$libname" diff --git a/package/rm2fb-timower/rm2fb-preload.env b/package/rm2fb-timower/rm2fb-preload.env index 31ae503d8..56c6d09e7 100644 --- a/package/rm2fb-timower/rm2fb-preload.env +++ b/package/rm2fb-timower/rm2fb-preload.env @@ -3,7 +3,7 @@ # Please do not modify files shipped by Toltec, or they risk being # overwritten with updates. Instead create your own files in this directory. if [[ -f /dev/shm/swtfb.01 ]]; then - export LD_PRELOAD="$LD_PRELOAD:/opt/lib/librm2fb_client.so.1" + export LD_PRELOAD="$LD_PRELOAD:/opt/lib/librm2fb_client.so" else echo "rm2fb server is not running: starting without rm2fb client" fi diff --git a/package/rm2fb-timower/rm2fb.service b/package/rm2fb-timower/rm2fb.service index 108c18d61..9dd8e403d 100644 --- a/package/rm2fb-timower/rm2fb.service +++ b/package/rm2fb-timower/rm2fb.service @@ -4,7 +4,7 @@ StartLimitIntervalSec=600 StartLimitBurst=4 Before=xochitl.service launcher.service remarkable-reboot.service remarkable-shutdown.service After=opt.mount -ConditionFileNotEmpty=/opt/lib/librm2fb_server.so +ConditionFileNotEmpty=/opt/bin/rm2fb-server [Service] Restart=on-failure @@ -13,4 +13,5 @@ ExecStart=/opt/bin/rm2fb-server Environment=HOME=/home/root [Install] +Also=rm2fb.socket WantedBy=multi-user.target From 02ba38dba05014d1018995562c6624e7fd8366e4 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 10:12:10 -0600 Subject: [PATCH 09/88] Fix build --- package/rm2fb-timower/package | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/package/rm2fb-timower/package b/package/rm2fb-timower/package index 1301c3510..350163088 100644 --- a/package/rm2fb-timower/package +++ b/package/rm2fb-timower/package @@ -59,6 +59,10 @@ build() { -fPIC -fvisibility=hidden -shared \ -o "librm2fb_client.so.$_libver" \ -xc - + echo | "${CROSS_COMPILE}gcc" \ + -fPIC -fvisibility=hidden -shared \ + -o "librm2fb_client_no_hook.so" \ + -xc - popd else mkdir build @@ -71,7 +75,6 @@ build() { make install popd popd - mv install/lib/librm2fb_server.so{,.$_libver} fi # Work around current post-processing not handling symlinks that are not currently valid rm -f install/usr/lib/librm2fb_client.so.1 @@ -87,7 +90,7 @@ rm2fb-server() { package() { if [[ $arch = rm2os3v22 ]]; then libname="librm2fb_server.so.$_libver" - install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/install/lib/"$libname" + install -D -m 644 "$srcdir"/install/lib/librm2fb_server.so "$pkgdir"/opt/lib/"$libname" ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*.*.*}" ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*.*}" ln -s "$libname" "$pkgdir"/opt/lib/"${libname%.*}" From d14d1e8a336bc737af7ceb2973e73c3cd4cb4fd3 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 10:27:48 -0600 Subject: [PATCH 10/88] Fix display package --- package/display/package | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/display/package b/package/display/package index ec268f788..c7c9cc598 100644 --- a/package/display/package +++ b/package/display/package @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Copyright (c) 2025 The Toltec Contributors # SPDX-License-Identifier: MIT -arch=( +archs=( rmallos2 rmallos3 rm1os3v22 From c3e0abb6714020414a0a1b7a9209bd855babaf35 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 14:35:01 -0600 Subject: [PATCH 11/88] Start adding aarch support to install/reenable, update all packages --- package/appmarkable/package | 2 +- package/bandwhich/package | 7 +-- package/calculator/package | 3 +- package/chessmarkable/package | 3 +- package/doomarkable/package | 3 +- package/dotnet/package | 3 +- package/draft/package | 3 +- package/evtest/package | 5 +- package/fbink/package | 3 +- package/fingerterm/package | 3 +- package/folly/package | 3 +- package/fuseki/package | 3 +- package/gnugo/package | 3 +- package/kernelctl/package | 3 +- package/keyd/package | 13 +++-- package/keywriter/package | 3 +- package/koreader/package | 3 +- package/lf/package | 3 +- package/libdlib/package | 3 +- package/libvncserver/package | 3 +- package/micro/package | 1 + package/mmc-utils/package | 14 ++++-- package/move-logs-to-opt/package | 3 +- package/netevent/package | 5 +- package/netsurf/package | 3 +- package/oxide/package | 9 +++- package/plato/package | 3 +- package/puzzles/package | 3 +- package/quickjs/package | 1 + package/recrossable/package | 3 +- package/regenda/package | 5 +- package/remarkable-splash/package | 3 +- package/rempack/package | 1 + package/restream/package | 5 +- package/reterm/package | 8 +++- package/retris/package | 3 +- package/rmfakecloud-proxy/package | 3 +- package/rmfm/package | 3 +- package/rmkit/package | 26 +++++----- package/rmservewacominput/package | 5 +- package/rmstylusbutton/package | 4 +- package/signature-rm/package | 12 +++-- package/sill/package | 3 +- package/sudoku/package | 3 +- package/sysfs_preload/package | 3 +- package/tilem/package | 3 +- package/toltec-bootstrap/toltecctl | 55 +++++++++++++++++++++- package/vnsee/package | 3 +- package/webinterface-localhost/package | 3 +- package/webinterface-upload-button/package | 3 +- package/webinterface-wifi/package | 3 +- package/whiteboard-hypercard/package | 3 +- package/wikipedia/package | 3 +- package/yaft/package | 3 +- package/zerotier-one/package | 17 +++---- package/zoneinfo-utils/package | 7 +-- package/zshelf/package | 3 +- scripts/bootstrap/bootstrap | 16 +++++-- 58 files changed, 233 insertions(+), 96 deletions(-) diff --git a/package/appmarkable/package b/package/appmarkable/package index d2c31f358..3cc885d4d 100644 --- a/package/appmarkable/package +++ b/package/appmarkable/package @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT - +archs=(rm1 rm2) pkgnames=(appmarkable) pkgdesc="Front-end for apps that do not have a graphical user interface" url="https://github.com/LinusCDE/appmarkable" diff --git a/package/bandwhich/package b/package/bandwhich/package index c9c1243a7..ecce6bd6a 100644 --- a/package/bandwhich/package +++ b/package/bandwhich/package @@ -2,18 +2,19 @@ # Copyright (c) 2024 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(bandwhich) pkgdesc="CLI network utilization tool" url=https://github.com/imsnif/bandwhich -pkgver=0.22.2-1 +pkgver=0.23.1-1 timestamp=2024-01-27T19:33Z section="utils" maintainer="gbyl " license=MIT -image=rust:v3.1 +image=rust:v4.0 source=("https://github.com/imsnif/bandwhich/archive/refs/tags/v${pkgver%-*}.zip") -sha256sums=(5d1eaa1796ec3c16f349cb6b00bd9dba6d425e9323d63af648a41cd68c5d456b) +sha256sums=(92f33ddac849161d0d10aef23b027a531c6604f1b96078ed59f0baeed9f91ae5) build() { cargo build --release diff --git a/package/calculator/package b/package/calculator/package index d4344ca52..4a5132ed5 100644 --- a/package/calculator/package +++ b/package/calculator/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(calculator) pkgdesc="Touch-based calculator" url=https://github.com/reHackable/Calculator -pkgver=0.0.0-17 +pkgver=0.0.0-18 timestamp=2020-08-20T12:28Z section="math" maintainer="Mattéo Delabre " diff --git a/package/chessmarkable/package b/package/chessmarkable/package index 40f68a952..d0e69b98d 100644 --- a/package/chessmarkable/package +++ b/package/chessmarkable/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(chessmarkable) pkgdesc="Chess game" url=https://github.com/LinusCDE/chessmarkable -pkgver=0.8.1-1 +pkgver=0.8.1-2 timestamp=2025-09-11T12:04Z section="games" maintainer="Linus K. " diff --git a/package/doomarkable/package b/package/doomarkable/package index a5c9a3a70..20e1a729b 100644 --- a/package/doomarkable/package +++ b/package/doomarkable/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(doomarkable) pkgdesc="DOOM game" url=https://github.com/LinusCDE/doomarkable -pkgver=0.4.1-3 +pkgver=0.4.1-4 timestamp=2021-10-31T16:15Z section="games" maintainer="Linus K. " diff --git a/package/dotnet/package b/package/dotnet/package index 6a6d09303..b794be71f 100644 --- a/package/dotnet/package +++ b/package/dotnet/package @@ -2,6 +2,7 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=( dotnet-profile dotnet-host @@ -12,7 +13,7 @@ pkgnames=( aspnet-targeting-pack netstandard-targeting-pack ) -pkgver=3.1.20-1 +pkgver=3.1.20-2 timestamp=2020-12-27T18:48Z maintainer="Eeems " url=https://www.microsoft.com/net/core diff --git a/package/draft/package b/package/draft/package index 030f682ab..7c4469d26 100644 --- a/package/draft/package +++ b/package/draft/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(draft) pkgdesc="Launcher which wraps around the standard interface" url=https://github.com/dixonary/draft-reMarkable -pkgver=0.2.0-26 +pkgver=0.2.0-27 timestamp=2020-07-20T10:23Z section="launchers" maintainer="Mattéo Delabre " diff --git a/package/evtest/package b/package/evtest/package index 6d458bb69..0fccba1d3 100644 --- a/package/evtest/package +++ b/package/evtest/package @@ -2,6 +2,7 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2 rmpp rmppm) pkgnames=(evtest) pkgdesc="Kernel evdev device information and monitor" url=https://gitlab.freedesktop.org/libevdev/evtest @@ -12,12 +13,12 @@ maintainer="Linus K. " license=GPL-2.0-only makedepends=(build:automake) -image=base:v3.2 +image=base:v4.0 source=("https://gitlab.freedesktop.org/libevdev/evtest/-/archive/evtest-${pkgver%-*}/evtest-evtest-${pkgver%-*}.zip") sha256sums=(62f7e34c5bab91b5015de5b056d79051c677c5bd5702facb2885f8e4ba0df84c) build() { - export CC=arm-linux-gnueabihf-gcc + export CC="${CROSS_COMPILE}gcc" ./autogen.sh --host armv7 ./configure --host armv7 make diff --git a/package/fbink/package b/package/fbink/package index 30ce47133..8f55780c0 100644 --- a/package/fbink/package +++ b/package/fbink/package @@ -2,9 +2,10 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(fbink fbdepth fbink-doom) url=https://github.com/NiLuJe/FBInk -pkgver=1.25.0-2 +pkgver=1.25.0-3 timestamp=2022-12-05T02:50:38Z maintainer="Mattéo Delabre " license=GPL-3.0 diff --git a/package/fingerterm/package b/package/fingerterm/package index 312956b0f..ed08c6ba3 100644 --- a/package/fingerterm/package +++ b/package/fingerterm/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(fingerterm) pkgdesc="Terminal emulator with an on-screen touch keyboard" url=https://github.com/dixonary/fingerterm-reMarkable -pkgver=1.3.5-16 +pkgver=1.3.5-17 timestamp=2020-10-27T12:02Z section="admin" maintainer="Mattéo Delabre " diff --git a/package/folly/package b/package/folly/package index fad24c3a2..873cbf0b0 100644 --- a/package/folly/package +++ b/package/folly/package @@ -2,10 +2,11 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(folly) pkgdesc="Z-machine interpreter for interactive fiction" url="https://github.com/bkirwi/folly" -pkgver=0.0.1-5 +pkgver=0.0.1-6 timestamp=2022-04-18T17:50:16Z section=games maintainer="Ben Kirwin " diff --git a/package/fuseki/package b/package/fuseki/package index 13e00517d..e13da56b7 100644 --- a/package/fuseki/package +++ b/package/fuseki/package @@ -2,10 +2,11 @@ # Copyright (c) 2025 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(fuseki) pkgdesc="Go frontend using GnuGo" url="https://github.com/palfrey/fuseki" -pkgver=0.1.0-1 +pkgver=0.1.0-2 timestamp=2025-08-25T16:56+0100 section=games maintainer="Tom Parker-Shemilt " diff --git a/package/gnugo/package b/package/gnugo/package index 7c5f335f6..76f0f1422 100644 --- a/package/gnugo/package +++ b/package/gnugo/package @@ -2,10 +2,11 @@ # Copyright (c) 2025 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(gnugo) pkgdesc="Program that plays the game of Go" url="https://www.gnu.org/software/gnugo/" -pkgver=3.8.0-1 +pkgver=3.8.0-2 timestamp=2025-08-25T16:56+0100 section=games maintainer="Tom Parker-Shemilt " diff --git a/package/kernelctl/package b/package/kernelctl/package index 31acac595..16e48770e 100644 --- a/package/kernelctl/package +++ b/package/kernelctl/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(kernelctl) pkgdesc="Manage aftermarket kernels" url=https://toltec-dev.org/ -pkgver=0.2-1 +pkgver=0.2-2 timestamp=2022-11-12T00:00Z section="utils" maintainer="Salvatore Stella " diff --git a/package/keyd/package b/package/keyd/package index ce9523a42..55de2733b 100644 --- a/package/keyd/package +++ b/package/keyd/package @@ -2,17 +2,24 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT -archs=(rmallos3) +archs=( + rm1os3 + rm1os3v22 + rm2os3 + rm2os3v22 + rmppos3v22 + rmppmos3v22 +) pkgnames=(keyd) pkgdesc="A key remapping daemon for linux" url="https://github.com/rvaiya/keyd" -pkgver=2.4.3-1 +pkgver=2.4.3-2 timestamp=2023-05-16T10:11Z section=utils maintainer="Kai " license=MIT -image=base:v3.1 +image=base:v4.0 source=( https://github.com/rvaiya/keyd/archive/refs/tags/v2.4.3.zip default.conf diff --git a/package/keywriter/package b/package/keywriter/package index 28d3c9ede..049a97c73 100644 --- a/package/keywriter/package +++ b/package/keywriter/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(keywriter) pkgdesc="Markdown-enabled free writing app" url=https://github.com/dps/remarkable-keywriter -pkgver=0.2~20-gddc9e73-3 +pkgver=0.2~20-gddc9e73-4 timestamp=2022-02-09T07:05:03Z section="writing" maintainer="Mattéo Delabre " diff --git a/package/koreader/package b/package/koreader/package index e4c5ed9f9..d7bb32465 100644 --- a/package/koreader/package +++ b/package/koreader/package @@ -2,10 +2,11 @@ # Copyright (c) 2024 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(koreader) pkgdesc="Ebook reader supporting PDF, DjVu, EPUB, FB2 and many more formats" url=https://github.com/koreader/koreader -pkgver=2025.08-1 +pkgver=2025.08-2 timestamp=2025-08-16T20:20:24Z section="readers" maintainer="raisjn " diff --git a/package/lf/package b/package/lf/package index 73e360741..0c34baf90 100644 --- a/package/lf/package +++ b/package/lf/package @@ -2,10 +2,11 @@ # Copyright (c) 2024 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(lf) pkgdesc="Terminal file manager" url=https://github.com/gokcehan/lf -pkgver=r32-1 +pkgver=r32-2 timestamp=2024-03-31T20:04Z section="utils" maintainer="gbyl " diff --git a/package/libdlib/package b/package/libdlib/package index 532e4a1bf..6a134b35a 100644 --- a/package/libdlib/package +++ b/package/libdlib/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(libdlib libdlib-dev) pkgdesc="Toolkit for making machine learning and data analysis applications in C++" url=http://dlib.net -pkgver=19.21-3 +pkgver=19.21-4 timestamp=2020-08-08T19:41:07Z section="devel" maintainer="Mattéo Delabre " diff --git a/package/libvncserver/package b/package/libvncserver/package index ce0efd572..a9d5fda8d 100644 --- a/package/libvncserver/package +++ b/package/libvncserver/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(libvncserver libvncclient libvncserver-dev) pkgdesc="C libraries for implementing VNC servers or clients" url=https://libvnc.github.io -pkgver=0.9.13-3 +pkgver=0.9.13-4 timestamp=2020-06-13T19:19:11Z section="devel" maintainer="Mattéo Delabre " diff --git a/package/micro/package b/package/micro/package index e1651a49a..fd6c182fe 100644 --- a/package/micro/package +++ b/package/micro/package @@ -2,6 +2,7 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(micro) pkgdesc="Modern and intuitive terminal-based text editor" url=https://micro-editor.github.io/ diff --git a/package/mmc-utils/package b/package/mmc-utils/package index 8c57dc85f..84711b6fa 100644 --- a/package/mmc-utils/package +++ b/package/mmc-utils/package @@ -2,11 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT -archs=(rmall) +archs=(rm1 rm2 rmpp rmppm) pkgnames=(mmc-utils) pkgdesc="A tool for monitoring the eMMC protocol" url=https://git.kernel.org/pub/scm/utils/mmc/mmc-utils.git/ -pkgver=1.0-2 +pkgver=1.0-3 timestamp=2021-08-12T19:41:07Z section="devel" maintainer="Alistair Francis " @@ -22,6 +22,10 @@ sha256sums=( _commit=7769a4d7abe339ce273c13a203394a79a11fcff9 prepare() { + export DEBIAN_FRONTEND=noninteractive \ + && apt-get update -y \ + && apt-get install -y --no-install-recommends \ + git cd "$srcdir" mkdir mmc-utils cd mmc-utils @@ -33,9 +37,9 @@ prepare() { build() { # Use our toolchain - export AR=arm-linux-gnueabihf-ar - export CC=arm-linux-gnueabihf-gcc - export STRIP=arm-linux-gnueabihf-strip + export AR="${CROSS_COMPILE}ar" + export CC="${CROSS_COMPILE}gcc" + export STRIP="${CROSS_COMPILE}strip" make -C "$srcdir"/mmc-utils -j4 } diff --git a/package/move-logs-to-opt/package b/package/move-logs-to-opt/package index 99e131bb6..a02723025 100644 --- a/package/move-logs-to-opt/package +++ b/package/move-logs-to-opt/package @@ -2,10 +2,11 @@ # Copyright (c) 2023 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(move-logs-to-opt) pkgdesc="Move log files to /opt to save space on the root partition" url=https://github.com/toltec-dev/toltec -pkgver=0.0.1-1 +pkgver=0.0.1-2 timestamp=2024-01-07T23:55Z section="utils" maintainer="Eeems " diff --git a/package/netevent/package b/package/netevent/package index 14937a260..4c695d70c 100644 --- a/package/netevent/package +++ b/package/netevent/package @@ -2,16 +2,17 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2 rmpp rmppm) pkgnames=(netevent) pkgdesc="Input-Event device cloning utility" url="https://github.com/Blub/netevent" -pkgver=2.2.2-2 +pkgver=2.2.2-3 timestamp=2023-04-29T14:21:02Z section=utils maintainer="Salvatore Stella " license=GPL-2.0-only -image=base:v3.2 +image=base:v4.0 source=( "https://github.com/Blub/netevent/archive/refs/tags/${pkgver%-*}.tar.gz" ) diff --git a/package/netsurf/package b/package/netsurf/package index f6d5b411b..6c286870d 100644 --- a/package/netsurf/package +++ b/package/netsurf/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(netsurf) pkgdesc="Lightweight web browser" url=https://github.com/alex0809/netsurf-reMarkable -pkgver=0.4.0-4 +pkgver=0.4.0-5 timestamp=2024-09-04T21:14+00:00 maintainer="Alex Friesenhahn " archs=(rmall) diff --git a/package/oxide/package b/package/oxide/package index 3d1a071d2..13f8cee0a 100644 --- a/package/oxide/package +++ b/package/oxide/package @@ -2,10 +2,15 @@ # Copyright (c) 2024 The Toltec Contributors # SPDX-License-Identifier: MIT -archs=(rm1 rm2) +archs=( + rm1os2 + rm1os3 + rm2os2 + rm2os3 +) pkgnames=(oxide oxide-extra oxide-utils inject_evdev liboxide liboxide-dev libsentry) _oxidever=2.8.4 -pkgver=$_oxidever-3 +pkgver=$_oxidever-5 _sentryver=0.7.6 timestamp=2024-06-26T22:31:46Z maintainer="Eeems " diff --git a/package/plato/package b/package/plato/package index a71462528..bc1b81a28 100644 --- a/package/plato/package +++ b/package/plato/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(plato) pkgdesc="Document reader" url=https://github.com/LinusCDE/plato -pkgver=0.9.44-1 +pkgver=0.9.44-2 timestamp=2025-09-16T17:58Z section="readers" maintainer="Linus K. " diff --git a/package/puzzles/package b/package/puzzles/package index 11e95cde3..10b76a0cc 100644 --- a/package/puzzles/package +++ b/package/puzzles/package @@ -2,11 +2,12 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(puzzles) timestamp=2021-03-04T14:03-08:00 maintainer="Mattéo Delabre " _ver=0.2.4 -pkgver=${_ver}-5 +pkgver=${_ver}-6 license=MIT pkgdesc="Simon Tatham's Puzzle Package" url="https://github.com/mrichards42/remarkable_puzzles" diff --git a/package/quickjs/package b/package/quickjs/package index ef41e2092..b503d5c24 100644 --- a/package/quickjs/package +++ b/package/quickjs/package @@ -2,6 +2,7 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2 rmpp rmppm) pkgnames=(quickjs) pkgdesc="A small and embeddable Javascript engine" url=https://bellard.org/quickjs/ diff --git a/package/recrossable/package b/package/recrossable/package index b584d783d..ddd461256 100644 --- a/package/recrossable/package +++ b/package/recrossable/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(recrossable) pkgdesc="Solve crossword puzzles" url=https://github.com/sandsmark/recrossable -pkgver=0.0.0-9 +pkgver=0.0.0-10 timestamp=2021-01-15T12:58:22Z section="games" maintainer="Mattéo Delabre " diff --git a/package/regenda/package b/package/regenda/package index 1f2b48c9b..5acb20750 100644 --- a/package/regenda/package +++ b/package/regenda/package @@ -2,10 +2,11 @@ # Copyright (c) 2023 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(regenda) pkgdesc="Caldav agenda app" url=https://github.com/tenJirka/reGenda -pkgver=0.0.2-2 +pkgver=0.0.2-3 timestamp=2023-09-06T06:45Z section="utils" maintainer="tenJirka " @@ -15,7 +16,7 @@ installdepends=(python3 python3-lxml python3-pytz python3-yaml python3-requests flags=(patch_rm2fb) source=(https://github.com/tenJirka/reGenda/archive/refs/tags/0.0.2.zip) sha256sums=(4f51de514945f9cfc6a1852181baab4bb0f4daadb222e8ddb05929f17e2044d9) -image=python +image=python:v3.2 build() { python3 -m venv venv diff --git a/package/remarkable-splash/package b/package/remarkable-splash/package index 553788394..d1cd8bdc1 100644 --- a/package/remarkable-splash/package +++ b/package/remarkable-splash/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(remarkable-splash) pkgdesc="Show splashscreens + remarkable-shutdown replacement that does not clear the screen" url=https://github.com/ddvk/remarkable-splash -pkgver=1.0-6 +pkgver=1.0-7 timestamp=2019-12-31T10:07Z section="utils" maintainer="Eeems " diff --git a/package/rempack/package b/package/rempack/package index 60cf3091c..173f5e409 100644 --- a/package/rempack/package +++ b/package/rempack/package @@ -2,6 +2,7 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(rempack) pkgdesc="A user friendly package manager frontend for opkg" archs=(rmall) diff --git a/package/restream/package b/package/restream/package index 93f3e5569..7f83d7f1f 100644 --- a/package/restream/package +++ b/package/restream/package @@ -2,16 +2,17 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2 rmpp rmppm) pkgnames=(restream) pkgdesc="Binary framebuffer capture tool for the reStream script" url=https://github.com/rien/reStream -pkgver=1.2.0-2 +pkgver=1.2.0-3 timestamp=2021-11-04T19:09:14Z section="screensharing" maintainer="Dan Shick " license=MIT -image=rust:v3.2 +image=rust:v4.0 source=("https://github.com/rien/reStream/archive/refs/tags/${pkgver%-*}.tar.gz") sha256sums=(4166142b15e1e7363dac302aa92aad5b44e0514cab233abecb51414952c1d5a1) diff --git a/package/reterm/package b/package/reterm/package index f8dee0995..641648778 100644 --- a/package/reterm/package +++ b/package/reterm/package @@ -1,10 +1,16 @@ #!/usr/bin/env bash # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=( + rm1os2 + rm1os3 + rm2os2 + rm2os3 +) pkgnames=(reterm) pkgdesc="Landscape terminal support for the Remarkable 2 + type cover" section="admin" -pkgver="20230628.1927-2" +pkgver="20230628.1927-3" timestamp="2023-06-28T19:28:06Z" maintainer="Eeems " url="https://github.com/i-am-shodan/ReTerm" diff --git a/package/retris/package b/package/retris/package index 1e05ecb05..df554d62d 100644 --- a/package/retris/package +++ b/package/retris/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(retris) pkgdesc="Tetris game" url=https://github.com/LinusCDE/retris -pkgver=0.6.4-1 +pkgver=0.6.4-2 timestamp=2021-01-30T02:41Z section="games" maintainer="Linus K. " diff --git a/package/rmfakecloud-proxy/package b/package/rmfakecloud-proxy/package index 99322188e..71168117e 100644 --- a/package/rmfakecloud-proxy/package +++ b/package/rmfakecloud-proxy/package @@ -2,12 +2,13 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(rmfakecloud-proxy) pkgdesc="Connect Xochitl to a rmfakecloud server" _url=https://github.com/ddvk/rmfakecloud-proxy url="$_url" _upver=0.0.3 -pkgver="$_upver-6" +pkgver="$_upver-7" timestamp=2022-02-26T22:59Z section="utils" maintainer="Mattéo Delabre " diff --git a/package/rmfm/package b/package/rmfm/package index 81c25a3ad..f4fccc680 100644 --- a/package/rmfm/package +++ b/package/rmfm/package @@ -2,10 +2,11 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(rmfm) pkgdesc="Bare-bones file manager using Node.js and sas" url="https://forgejo.sny.sh/sun/rmFM" -pkgver=1.5.1-1 +pkgver=1.5.1-2 timestamp=2023-12-06T08:51:41+01:00 section=utils maintainer="Sunny " diff --git a/package/rmkit/package b/package/rmkit/package index abcd970a4..71e9095d8 100644 --- a/package/rmkit/package +++ b/package/rmkit/package @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT - +archs=(rm1 rm2) pkgnames=(bufshot dumbskull genie harmony iago lamp mines nao remux rpncalc simple wordlet) timestamp=2024-01-11T20:03:10Z maintainer="raisjn " @@ -31,7 +31,7 @@ build() { bufshot() { pkgdesc="program for saving the framebuffer as a png" url="https://github.com/rmkit-dev/rmkit/tree/master/src/bufshot" - pkgver=0.1.2-4 + pkgver=0.1.2-5 section="utils" package() { @@ -42,7 +42,7 @@ bufshot() { dumbskull() { pkgdesc="Dungeon Crawl themed Solitaire" url="https://rmkit.dev/apps/dumbskull" - pkgver=0.0.1-5 + pkgver=0.0.1-6 section="games" package() { @@ -54,7 +54,7 @@ dumbskull() { genie() { pkgdesc="Gesture engine that connects commands to gestures" url="https://rmkit.dev/apps/genie" - pkgver=0.1.7-3 + pkgver=0.1.7-4 section="utils" package() { @@ -80,7 +80,7 @@ genie() { harmony() { pkgdesc="Procedural sketching app" url="https://rmkit.dev/apps/harmony" - pkgver=0.2.3-3 + pkgver=0.2.3-4 section="drawing" package() { @@ -97,7 +97,7 @@ harmony() { iago() { pkgdesc="overlay for drawing shapes via stroke injection" url="https://rmkit.dev/apps/iago" - pkgver=0.1.2-3 + pkgver=0.1.2-4 section="utils" installdepends+=("lamp") @@ -109,7 +109,7 @@ iago() { lamp() { pkgdesc="config based stroke injection utility" url="https://rmkit.dev/apps/lamp" - pkgver=0.1.1-4 + pkgver=0.1.1-5 section="utils" package() { @@ -120,7 +120,7 @@ lamp() { mines() { pkgdesc="Mine detection game" url="https://rmkit.dev/apps/minesweeper" - pkgver=0.1.4-5 + pkgver=0.1.4-6 section="games" package() { @@ -133,7 +133,7 @@ mines() { nao() { pkgdesc="Nao Package Manager: opkg UI built with SAS" url="https://rmkit.dev/apps/nao" - pkgver=0.1.2-5 + pkgver=0.1.2-6 section="admin" installdepends+=(simple) @@ -147,7 +147,7 @@ nao() { remux() { pkgdesc="Launcher that supports multi-tasking applications" url="https://rmkit.dev/apps/remux" - pkgver=0.3.0-7 + pkgver=0.3.0-8 section="launchers" installdepends=(procps-ng-ps) @@ -184,7 +184,7 @@ remux() { rpncalc() { pkgdesc="RPN Calculator" url="https://rmkit.dev/apps/rpncalc" - pkgver=0.0.3-5 + pkgver=0.0.3-6 section="math" package() { @@ -197,7 +197,7 @@ rpncalc() { simple() { pkgdesc="Simple app script for writing scripted applications" url="https://rmkit.dev/apps/sas" - pkgver=0.2.1-3 + pkgver=0.2.1-4 section="devel" package() { @@ -208,7 +208,7 @@ simple() { wordlet() { pkgdesc="Wordle clone" url="https://rmkit.dev/apps/wordlet" - pkgver=0.0.2-5 + pkgver=0.0.2-6 section="games" package() { diff --git a/package/rmservewacominput/package b/package/rmservewacominput/package index c740ccf66..174f91aba 100644 --- a/package/rmservewacominput/package +++ b/package/rmservewacominput/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(rmservewacominput) pkgdesc="Serve pen input on port 33333" url=https://github.com/LinusCDE/rmWacomToMouse -pkgver=0.3.0-3 +pkgver=0.3.0-4 timestamp=2021-03-10T18:36Z section="utils" maintainer="Linus K. " @@ -26,7 +27,7 @@ sha256sums=( build() { cd c_implementation - CC=arm-linux-gnueabihf-gcc make + CC=${CROSS_COMPILE}gcc make } package() { diff --git a/package/rmstylusbutton/package b/package/rmstylusbutton/package index 24847793f..1eb9d666a 100644 --- a/package/rmstylusbutton/package +++ b/package/rmstylusbutton/package @@ -5,7 +5,7 @@ archs=(rm2) pkgnames=(rmstylusbutton) _pkgver=3.0 -pkgver=$_pkgver-1 +pkgver=$_pkgver-2 pkgdesc="Use a stylus button with the reMarkable 2" timestamp=2024-03-04T04:30:52Z maintainer="Moritz " @@ -26,7 +26,7 @@ sha256sums=( ) build() { - export CC=arm-linux-gnueabihf-gcc + export CC=${CROSS_COMPILE}gcc make } diff --git a/package/signature-rm/package b/package/signature-rm/package index d826d244c..1762185f5 100644 --- a/package/signature-rm/package +++ b/package/signature-rm/package @@ -2,18 +2,24 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT -archs=(rmallos2 rmallos3) +archs=( + rm1os2 + rm1os3 + rm2os2 + rm2os3 +) pkgnames=("signature-rm") pkgdesc="Remove the signature from the bottom of emails" url="https://github.com/rM-self-serve/signature-rM" -pkgver=1.0.2-3 +pkgver=1.0.2-4 timestamp=2023-12-06T11:43:00Z section="utils" maintainer="rM-self-serve <122753594+rM-self-serve@users.noreply.github.com>" license=MIT image=rust:v3.1 conflicts=(webinterface-onboot) -conflicts_rmallos2=(ddvk-hacks) +conflicts_rm1os2=(ddvk-hacks) +conflicts_rm2os2=(ddvk-hacks) source=( "$url"/archive/b5561af4eb6a0f5aa6e98e1a1279066f0c4bd9b7.zip diff --git a/package/sill/package b/package/sill/package index f34ee5fe2..1011a7e1d 100644 --- a/package/sill/package +++ b/package/sill/package @@ -2,10 +2,11 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(sill) pkgdesc="Gesture-based text editor (and shell) for the reMarkable tablet" url=https://github.com/bkirwi/sill -pkgver=0.1.1-1 +pkgver=0.1.1-2 section="writing" timestamp=2023-08-12T00:00Z maintainer="Kai " diff --git a/package/sudoku/package b/package/sudoku/package index 24e7c8957..9f27d21e1 100644 --- a/package/sudoku/package +++ b/package/sudoku/package @@ -2,10 +2,11 @@ # Copyright (c) 2024 HookedBehemoth # SPDX-License-Identifier: GPL-3.0-only +archs=(rm1 rm2) pkgnames=(sudoku) pkgdesc="Sudoku for Remarkable" url="https://github.com/HookedBehemoth/remarkable-sudoku" -pkgver=0.1.2-1 +pkgver=0.1.2-2 timestamp=2023-02-04T22:49Z section="games" maintainer="Luis S. " diff --git a/package/sysfs_preload/package b/package/sysfs_preload/package index 35950ef02..97c260736 100644 --- a/package/sysfs_preload/package +++ b/package/sysfs_preload/package @@ -2,10 +2,11 @@ # Copyright (c) 2023 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(sysfs_preload) pkgdesc="A simple preload that forces any calls to /sys/power/state to use systemd instead." url="https://github.com/Eeems-Org/sysfs_preload" -pkgver=1.0.3-1 +pkgver=1.0.3-2 timestamp=2024-10-11T04:33:10Z section=utils maintainer="Eeems " diff --git a/package/tilem/package b/package/tilem/package index adca938fe..6e8d6a14b 100644 --- a/package/tilem/package +++ b/package/tilem/package @@ -2,11 +2,12 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(tilem) pkgdesc="TI-84+ calculator emulator" url=https://github.com/timower/rM2-stuff/tree/master/apps/tilem _tag=0.1.2 -pkgver=${_tag}-1 +pkgver=${_tag}-2 timestamp=2024-05-29T17:05:56Z maintainer="Mattéo Delabre " license=GPL-3.0 diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index c62c730da..7c95f259f 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -96,17 +96,52 @@ identify-model() { "reMarkable 2.0") echo "rm2" ;; + "reMarkable Ferrari") + echo "rmpp" + ;; + "reMarkable Chiappa") + echo "rmppm" + ;; *) echo "unknown" ;; esac } +# Get the human readable name for the device +# +# Output: The human readable device name +get-model-human-readable-name() { + local device + device="$(identify-model)" + case $device in + "rm1") + echo "reMarkable 1" + ;; + "rm2") + echo "reMarkable 2" + ;; + "rmpp") + echo "reMarkable Paper Pro" + ;; + "rmppm") + echo "reMarkable Paper Pro Move" + ;; + *) + echo "Unknown" + ;; + esac +} + # Find the current OS release version # # Output: Current version in the X.Y.Z.P format get-release-version() { - awk -F= '/RELEASE_VERSION/{print $2}' /usr/share/remarkable/update.conf + if [ -f /usr/share/remarkable/update.conf ]; then + awk -F= '/RELEASE_VERSION/{print $2}' /usr/share/remarkable/update.conf + elif [ -f /etc/os-release ]; then + awk -F= '/IMG_VERSION=".+"/{print $2}' /etc/os-release | cut -d'"' -f2 + fi } # Check to see if the version is supported and error if it isn't supported @@ -208,6 +243,7 @@ Description=Bind mount $1 over $2 DefaultDependencies=no Conflicts=umount.target Before=local-fs.target umount.target +After=home.mount [Mount] What=$1 Where=$2 @@ -674,6 +710,15 @@ CONF # Re-enable Toltec install after system update reenable() { + # Make sure root partition and /etc are editable, and that changes will persist + if ! [ -w / ]; then + log INFO "Remounting / as rw" + mount -o remount,rw / + fi + if mountpoint -q /etc && grep ' /etc ' /proc/mounts | grep -q overlay; then + log INFO "Unmounting overlay on /etc" + umount -R /etc + fi log INFO "Mounting /opt" add-bind-mount "$toltec_src" "$toltec_dest" switch-branch "$(get-branch)" @@ -844,6 +889,12 @@ status() { ;; esac echo -e "\e[0m" + if ! [ -w / ]; then + echo -e " \e[33mWarning:\e[0m / is ro" + fi + if mountpoint -q /etc && grep ' /etc ' /proc/mounts | grep -q overlay; then + echo -e " \e[33mWarning:\e[0m /etc is overlay" + fi echo -ne "Supported: \033[1m" local rc rc=0 @@ -864,7 +915,7 @@ status() { echo -e "\033[1m\e[33mUnknown\e[0m" fi echo -n "Model: " - identify-model + get-model-human-readable-name echo -n "OS: " get-release-version } diff --git a/package/vnsee/package b/package/vnsee/package index 3030054f1..0ee114a68 100644 --- a/package/vnsee/package +++ b/package/vnsee/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(vnsee) pkgdesc="VNC client allowing you to use the device as a second screen" url=https://github.com/matteodelabre/vnsee -pkgver=0.4.1-3 +pkgver=0.4.1-4 timestamp=2021-08-29T13:45:26Z section="screensharing" maintainer="Mattéo Delabre " diff --git a/package/webinterface-localhost/package b/package/webinterface-localhost/package index da657551a..8b73c516c 100644 --- a/package/webinterface-localhost/package +++ b/package/webinterface-localhost/package @@ -2,11 +2,12 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) _pkgname="webinterface-localhost" pkgnames=("$_pkgname") pkgdesc="View the web interface if running, on localhost. Useful for tailscale." url=https://toltec-dev.org/ -pkgver=0.0.0-1 +pkgver=0.0.0-2 timestamp=2024-03-11T13:03:16Z section="utils" maintainer="rM-self-serve <122753594+rM-self-serve@users.noreply.github.com>" diff --git a/package/webinterface-upload-button/package b/package/webinterface-upload-button/package index bcd8d982b..ccd666839 100644 --- a/package/webinterface-upload-button/package +++ b/package/webinterface-upload-button/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=("webinterface-upload-button") pkgdesc="A simple upload button for the web interface" url="https://github.com/rM-self-serve/webinterface-upload-button" -pkgver=1.1.1-3 +pkgver=1.1.1-4 timestamp=2023-12-16T15:35:49Z section="utils" maintainer="rM-self-serve <122753594+rM-self-serve@users.noreply.github.com>" diff --git a/package/webinterface-wifi/package b/package/webinterface-wifi/package index 655beab42..8ed621b68 100644 --- a/package/webinterface-wifi/package +++ b/package/webinterface-wifi/package @@ -2,11 +2,12 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) _pkgname="webinterface-wifi" pkgnames=("$_pkgname") pkgdesc="View the web interface if running, over wifi" url="https://github.com/rM-self-serve/$_pkgname" -pkgver=2.0.0-2 +pkgver=2.0.0-3 timestamp=2023-11-26T00:02:11Z section="utils" maintainer="rM-self-serve <122753594+rM-self-serve@users.noreply.github.com>" diff --git a/package/whiteboard-hypercard/package b/package/whiteboard-hypercard/package index 9cb9a468b..2252a9c20 100644 --- a/package/whiteboard-hypercard/package +++ b/package/whiteboard-hypercard/package @@ -2,10 +2,11 @@ # Copyright (c) 2024 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(whiteboard-hypercard) pkgdesc="Real-time collaboration, drawing or whiteboarding" url=https://github.com/fenollp/reMarkable-tools -pkgver=0.5.0-1 +pkgver=0.5.0-2 timestamp=2024-09-12T19:00:22Z section="drawing" maintainer="Pierre Fenoll " diff --git a/package/wikipedia/package b/package/wikipedia/package index b11686a6b..33a5c9f58 100644 --- a/package/wikipedia/package +++ b/package/wikipedia/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(wikipedia) pkgdesc="The free encyclopedia" url=https://github.com/dps/remarkable-wikipedia -pkgver=0.1.0-5 +pkgver=0.1.0-6 timestamp=2021-03-11T04:50Z section="readers" maintainer="David Singleton " diff --git a/package/yaft/package b/package/yaft/package index 5a635896a..228fc9711 100644 --- a/package/yaft/package +++ b/package/yaft/package @@ -2,11 +2,12 @@ # Copyright (c) 2022 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(yaft) pkgdesc="Yet another framebuffer terminal" url=https://github.com/timower/rM2-stuff/tree/master/apps/yaft _tag=0.1.2 -pkgver=${_tag}-1 +pkgver=${_tag}-2 timestamp=2024-05-29T17:05:56Z maintainer="Mattéo Delabre " license=GPL-3.0 diff --git a/package/zerotier-one/package b/package/zerotier-one/package index f0a3530f9..6ac9d22b2 100644 --- a/package/zerotier-one/package +++ b/package/zerotier-one/package @@ -2,15 +2,16 @@ # Copyright (c) 2023 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(zerotier zerotier-one zerotier-one-doc zerotier-selftest) url=https://github.com/zerotier/ZeroTierOne _upver=1.14.2 -pkgver=${_upver}-1 +pkgver=${_upver}-2 timestamp=2024-10-29T16:17:48Z maintainer="Eeems " license=BUSL-1.1 section="utils" -image=base:v3.0 +image=base:v3.2 source=("https://github.com/zerotier/ZeroTierOne/archive/refs/tags/${_upver}.zip") sha256sums=(529dd6d246f51ca7cb0b14794ba68560c0134409f94fcc61a3ee7f5c173c301f) @@ -34,12 +35,12 @@ build() { # Disable SSO as the rust build is broken in rust:v3.0 due to issues with dependencies export ZT_SSO_SUPPORTED=0 export ZT_EMBEDDED=1 - export CC=arm-linux-gnueabihf-gcc - export CXX=arm-linux-gnueabihf-g++ - export AR=arm-linux-gnueabihf-ar - export STRIP=arm-linux-gnueabihf-strip - make - make selftest + export CC="${CROSS_COMPILE}gcc" + export CXX="${CROSS_COMPILE}g++" + export AR="${CROSS_COMPILE}ar" + export STRIP="${CROSS_COMPILE}strip" + make -j$(nproc) + make -j$(nproc) selftest } zerotier() { diff --git a/package/zoneinfo-utils/package b/package/zoneinfo-utils/package index 8caab1ce8..a3fad8650 100644 --- a/package/zoneinfo-utils/package +++ b/package/zoneinfo-utils/package @@ -4,11 +4,12 @@ # Inspired by https://github.com/archlinux/svntogit-packages/blob/packages/tzdata/trunk/PKGBUILD +archs=(rm1 rm2 rmpp rmppm) pkgnames=(zoneinfo-utils) pkgdesc="Utilities for interacting with zoneinfo files" url=https://www.iana.org/time-zones _tzver=2023c -pkgver="$_tzver"-1 +pkgver="$_tzver"-2 timestamp=2023-03-28T00:00Z section=utils maintainer="Eeems " @@ -17,7 +18,7 @@ installdepends=(zoneinfo-core) makedepends=(build:gawk) flags=(nostrip) -image=base:v3.0 +image=base:v4.0 source=( "https://www.iana.org/time-zones/repository/releases/tzcode${_tzver}.tar.gz" "https://www.iana.org/time-zones/repository/releases/tzdata${_tzver}.tar.gz" @@ -42,7 +43,7 @@ build() { popd > /dev/null rm -r .x86 - make VERSION="$_tzver" CC=arm-linux-gnueabihf-cc + make VERSION="$_tzver" CC=${CROSS_COMPILE}cc "${CROSS_COMPILE}strip" --strip-all zic zdump } diff --git a/package/zshelf/package b/package/zshelf/package index 473626868..86743b63b 100644 --- a/package/zshelf/package +++ b/package/zshelf/package @@ -2,10 +2,11 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2) pkgnames=(zshelf) pkgdesc="Z-Library browser and downloader" url=https://github.com/khanhas/zshelf -pkgver=0.3.1-5 +pkgver=0.3.1-6 section=utils timestamp=2021-02-20T01:45Z maintainer="khanhas " diff --git a/scripts/bootstrap/bootstrap b/scripts/bootstrap/bootstrap index 9586b887d..61508e6dd 100755 --- a/scripts/bootstrap/bootstrap +++ b/scripts/bootstrap/bootstrap @@ -25,9 +25,9 @@ case "$(uname -m)" in "armv7l") arch="armv7sf-k3.2" ;; - #"aarch64) - # arch="aarch64-k3.10" - # ;; + "aarch64") + arch="aarch64-k3.10" + ;; *) echo "Unsupported device architecture" exit 1 @@ -196,6 +196,16 @@ main() { # Remove those binaries in any case when the script exits trap cleanup EXIT + # Make sure root partition and /etc are editable, and that changes will persist + if ! [ -w / ]; then + log "Remounting / as rw" + mount -o remount,rw / + fi + if mountpoint -q /etc && grep ' /etc ' /proc/mounts | grep -q overlay; then + log "Unmounting overlay on /etc" + umount -R /etc + fi + # Download and install the latest toltec-bootstrap package (without # its dependencies) to use toltecctl definitions local pkg_basename From 021ba2338b615ac248b183750717991efce38d15 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 14:44:55 -0600 Subject: [PATCH 12/88] Fix git based builds --- package/fbink/package | 4 ++++ package/fuse/package | 6 +++++- package/reterm/package | 4 ++++ package/tilem/package | 4 ++++ package/wireguard/package | 6 +++++- package/yaft/package | 4 ++++ 6 files changed, 26 insertions(+), 2 deletions(-) diff --git a/package/fbink/package b/package/fbink/package index 8f55780c0..e7170c02d 100644 --- a/package/fbink/package +++ b/package/fbink/package @@ -15,6 +15,10 @@ flags=(patch_rm2fb) image=base:v3.2 prepare() { + export DEBIAN_FRONTEND=noninteractive \ + && apt-get update -y \ + && apt-get install -y --no-install-recommends \ + git git clone --depth=1 --recurse-submodules --branch v${pkgver%-*} https://github.com/NiLuJe/FBInk.git "$srcdir"/FBInk } diff --git a/package/fuse/package b/package/fuse/package index a2b3204e4..be593edc5 100755 --- a/package/fuse/package +++ b/package/fuse/package @@ -6,7 +6,7 @@ archs=(rm1os2 rm2os2) pkgnames=(fuse) pkgdesc="FUSE (Filesystem in Userspace) Kernel Module" url=https://github.com/libfuse/libfuse -pkgver=1.0.0-6 +pkgver=1.0.0-7 timestamp=2021-04-06T22:16Z section=kernel maintainer="plan5 <30434574+plan5@users.noreply.github.com>" @@ -23,6 +23,10 @@ _kernelrev=1774e2a6a091fdc081324e966d3db0aa9df75c0b _defconfig=arch/arm/configs/zero-gravitas_defconfig prepare() { + export DEBIAN_FRONTEND=noninteractive \ + && apt-get update -y \ + && apt-get install -y --no-install-recommends \ + git cd "$srcdir" mkdir pkg git init linux diff --git a/package/reterm/package b/package/reterm/package index 641648778..4161fa223 100644 --- a/package/reterm/package +++ b/package/reterm/package @@ -22,6 +22,10 @@ image=dotnet6:latest makedepends=(build:gawk build:git) prepare() { + export DEBIAN_FRONTEND=noninteractive \ + && apt-get update -y \ + && apt-get install -y --no-install-recommends \ + git cd "$srcdir" git config --global --add safe.directory /src git init diff --git a/package/tilem/package b/package/tilem/package index 6e8d6a14b..ebb06a098 100644 --- a/package/tilem/package +++ b/package/tilem/package @@ -20,6 +20,10 @@ source=() sha256sums=() prepare() { + export DEBIAN_FRONTEND=noninteractive \ + && apt-get update -y \ + && apt-get install -y --no-install-recommends \ + git cd "$srcdir" mkdir -p tilem cd tilem diff --git a/package/wireguard/package b/package/wireguard/package index 80c511938..6b282ea81 100755 --- a/package/wireguard/package +++ b/package/wireguard/package @@ -5,7 +5,7 @@ archs=(rm1os2 rm2os2) pkgnames=(wireguard) pkgdesc="Fast, modern, secure VPN tunnel" url=https://www.wireguard.com -pkgver=1.0.20220627-1 +pkgver=1.0.20220627-2 timestamp=2021-02-19T14:08Z section=kernel maintainer="Jonah Weissman " @@ -35,6 +35,10 @@ sha256sums=( ) build() { + export DEBIAN_FRONTEND=noninteractive \ + && apt-get update -y \ + && apt-get install -y --no-install-recommends \ + git mkdir pkg git init linux for i in $(seq 0 1); do diff --git a/package/yaft/package b/package/yaft/package index 228fc9711..7a10d6fd5 100644 --- a/package/yaft/package +++ b/package/yaft/package @@ -20,6 +20,10 @@ source=() sha256sums=() prepare() { + export DEBIAN_FRONTEND=noninteractive \ + && apt-get update -y \ + && apt-get install -y --no-install-recommends \ + git cd "$srcdir" mkdir -p yaft cd yaft From 1ba69252e9d55383d2a77f7a1bdaa47087bbd25a Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 17:27:25 -0600 Subject: [PATCH 13/88] Update toltecmk and use new preparedepends --- package/fbink/package | 5 +---- package/fuse/package | 5 +---- package/mmc-utils/package | 5 +---- package/reterm/package | 5 +---- package/rm2fb-timower/package | 6 +----- package/tilem/package | 5 +---- package/wireguard/package | 5 +---- package/yaft/package | 5 +---- requirements.txt | 2 +- 9 files changed, 9 insertions(+), 34 deletions(-) diff --git a/package/fbink/package b/package/fbink/package index e7170c02d..c0c4dfa9f 100644 --- a/package/fbink/package +++ b/package/fbink/package @@ -11,14 +11,11 @@ maintainer="Mattéo Delabre " license=GPL-3.0 installdepends=(display) flags=(patch_rm2fb) +preparedepends=(build:git) image=base:v3.2 prepare() { - export DEBIAN_FRONTEND=noninteractive \ - && apt-get update -y \ - && apt-get install -y --no-install-recommends \ - git git clone --depth=1 --recurse-submodules --branch v${pkgver%-*} https://github.com/NiLuJe/FBInk.git "$srcdir"/FBInk } diff --git a/package/fuse/package b/package/fuse/package index be593edc5..6e82e4178 100755 --- a/package/fuse/package +++ b/package/fuse/package @@ -12,6 +12,7 @@ section=kernel maintainer="plan5 <30434574+plan5@users.noreply.github.com>" license=GPL-2.0-only makedepends=(build:bc build:lzop build:git) +preparedepends=(build:git) flags=(nostrip) image=base:v3.2 @@ -23,10 +24,6 @@ _kernelrev=1774e2a6a091fdc081324e966d3db0aa9df75c0b _defconfig=arch/arm/configs/zero-gravitas_defconfig prepare() { - export DEBIAN_FRONTEND=noninteractive \ - && apt-get update -y \ - && apt-get install -y --no-install-recommends \ - git cd "$srcdir" mkdir pkg git init linux diff --git a/package/mmc-utils/package b/package/mmc-utils/package index 84711b6fa..da07a3854 100644 --- a/package/mmc-utils/package +++ b/package/mmc-utils/package @@ -13,6 +13,7 @@ maintainer="Alistair Francis " license=GPL-2.0-only image=base:v3.2 +preparedepends=(build:git) source=( 0001-Makefile-Remove-Werror.patch ) @@ -22,10 +23,6 @@ sha256sums=( _commit=7769a4d7abe339ce273c13a203394a79a11fcff9 prepare() { - export DEBIAN_FRONTEND=noninteractive \ - && apt-get update -y \ - && apt-get install -y --no-install-recommends \ - git cd "$srcdir" mkdir mmc-utils cd mmc-utils diff --git a/package/reterm/package b/package/reterm/package index 4161fa223..d51ddea4d 100644 --- a/package/reterm/package +++ b/package/reterm/package @@ -20,12 +20,9 @@ source=(https://github.com/i-am-shodan/ReTerm/archive/refs/tags/release_20230628 sha256sums=(3a6db39cfb83606c4ac5153fe2ac0319ab5c8322c73172178534c047a15c635b) image=dotnet6:latest makedepends=(build:gawk build:git) +preparedepends=(build:git) prepare() { - export DEBIAN_FRONTEND=noninteractive \ - && apt-get update -y \ - && apt-get install -y --no-install-recommends \ - git cd "$srcdir" git config --global --add safe.directory /src git init diff --git a/package/rm2fb-timower/package b/package/rm2fb-timower/package index 350163088..695b58e9c 100644 --- a/package/rm2fb-timower/package +++ b/package/rm2fb-timower/package @@ -31,13 +31,9 @@ image=base:v4.0 makedepends=() makedepends_rm2os3v22=(build:xxd) +preparedepends=(build:git build:git-lfs) prepare() { - export DEBIAN_FRONTEND=noninteractive \ - && apt-get update -y \ - && apt-get install -y --no-install-recommends \ - git \ - git-lfs cd "$srcdir" mkdir -p rm2fb cd rm2fb diff --git a/package/tilem/package b/package/tilem/package index ebb06a098..65d7c69f2 100644 --- a/package/tilem/package +++ b/package/tilem/package @@ -14,16 +14,13 @@ license=GPL-3.0 section="utils" image=base:v3.1 installdepends=(display) +preparedepends=(build:git) flags=(nostrip) source=() sha256sums=() prepare() { - export DEBIAN_FRONTEND=noninteractive \ - && apt-get update -y \ - && apt-get install -y --no-install-recommends \ - git cd "$srcdir" mkdir -p tilem cd tilem diff --git a/package/wireguard/package b/package/wireguard/package index 6b282ea81..4ec35662e 100755 --- a/package/wireguard/package +++ b/package/wireguard/package @@ -11,6 +11,7 @@ section=kernel maintainer="Jonah Weissman " license=GPL-2.0-only makedepends=(build:bc build:lzop build:git build:flex build:bison build:libssl-dev) +preparedepends=(build:git) flags=(nostrip) installdepends=(wireguard-tools) @@ -35,10 +36,6 @@ sha256sums=( ) build() { - export DEBIAN_FRONTEND=noninteractive \ - && apt-get update -y \ - && apt-get install -y --no-install-recommends \ - git mkdir pkg git init linux for i in $(seq 0 1); do diff --git a/package/yaft/package b/package/yaft/package index 7a10d6fd5..8a40efbaa 100644 --- a/package/yaft/package +++ b/package/yaft/package @@ -14,16 +14,13 @@ license=GPL-3.0 section="admin" image=base:v3.1 installdepends=(display terminfo) +preparedepends=(build:git) flags=(nostrip) source=() sha256sums=() prepare() { - export DEBIAN_FRONTEND=noninteractive \ - && apt-get update -y \ - && apt-get install -y --no-install-recommends \ - git cd "$srcdir" mkdir -p yaft cd yaft diff --git a/requirements.txt b/requirements.txt index 73268e5ca..5a6262a8a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ mypy-extensions==1.0.0 mypy==1.7.1 pylint==3.0.3 six==1.16.0 -toltecmk==0.4.0 +toltecmk==0.5.0 toml==0.10.2 types-python-dateutil==2.8.19.14 types-requests==2.31.0.2 From 33618da04b9cbb2d6628b52f8a7830fba93b96a3 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 19:28:57 -0600 Subject: [PATCH 14/88] Log disk usage before each recipe build --- package/tilem/package | 2 +- scripts/repo_build.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/package/tilem/package b/package/tilem/package index 65d7c69f2..aac5c476d 100644 --- a/package/tilem/package +++ b/package/tilem/package @@ -14,7 +14,7 @@ license=GPL-3.0 section="utils" image=base:v3.1 installdepends=(display) -preparedepends=(build:git) +preparedepends=(build:git build:git-lfs) flags=(nostrip) source=() diff --git a/scripts/repo_build.py b/scripts/repo_build.py index f1787def2..960197b34 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -11,6 +11,7 @@ List, Optional, ) +from shutil import disk_usage from build import paths from build.repo import Repo, PackageStatus from toltec.recipe import Package # type: ignore @@ -90,6 +91,8 @@ for pkg_name in recipe_bundle[arch].packages ] logger.info("Building %s", name) + logger.info(disk_usage(builder.work_dir)) + logger.info(disk_usage(builder.dist_dir)) builder.make(recipe_bundle, build_matrix, False) make_index(paths.REPO_DIR) From c1293e4cd2e782d8bdaefd04f90fcec54144f24b Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 19:45:27 -0600 Subject: [PATCH 15/88] Missing preparedepends in linux-stracciatella, output disk usage after builds --- package/linux-stracciatella/package | 3 ++- scripts/repo_build.py | 30 ++++++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/package/linux-stracciatella/package b/package/linux-stracciatella/package index 994842c50..ea264ae23 100644 --- a/package/linux-stracciatella/package +++ b/package/linux-stracciatella/package @@ -6,7 +6,7 @@ archs=(rm1 rm2) pkgnames=(linux-stracciatella) pkgdesc="RemarkableAS's vanilla kernel with a few extra flakes" url=https://github.com/Etn40ff/linux-remarkable -pkgver=5.4.70.4-1 +pkgver=5.4.70.4-2 timestamp=2023-12-28T22:42:42Z section="kernel" maintainer="Salvatore Stella " @@ -25,6 +25,7 @@ sha256sums=( 362d412693c8fe82de00283435818d5c5def7f15e2433a07a9fe99d0518f63c0 ) noextract=("wireguard-linux-compat-$_wireguard_version.tar.xz") +preparedepends=(build:libarchive-tools) prepare() { # Jury-rig the wireguard module into sources and enable it diff --git a/scripts/repo_build.py b/scripts/repo_build.py index 960197b34..a3ec92d2b 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -20,6 +20,17 @@ from toltec.repo import make_index # type: ignore from toltec.util import argparse_add_verbose, LOGGING_FORMAT # type: ignore + +def sizeof_fmt(num: float, suffix: str = "B") -> str: + """Output human readable string for size in bytes""" + for unit in ("", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"): + if abs(num) < 1024.0: + return f"{num:3.1f}{unit}{suffix}" + + num /= 1024.0 + return f"{num:.1f}Yi{suffix}" + + logger = logging.getLogger(__name__) parser = argparse.ArgumentParser(description=__doc__) @@ -91,9 +102,22 @@ for pkg_name in recipe_bundle[arch].packages ] logger.info("Building %s", name) - logger.info(disk_usage(builder.work_dir)) - logger.info(disk_usage(builder.dist_dir)) - builder.make(recipe_bundle, build_matrix, False) + try: + builder.make(recipe_bundle, build_matrix, False) + + finally: + usage = disk_usage(paths.WORK_DIR) + logger.info( + "work_dir: %s/%s", + sizeof_fmt(usage.used), + sizeof_fmt(usage.total), + ) + usage = disk_usage(paths.REPO_DIR) + logger.info( + "repo_dir: %s/%s", + sizeof_fmt(usage.used), + sizeof_fmt(usage.total), + ) make_index(paths.REPO_DIR) From fda197eb604bf728760cc25ab6df83cca3c77652 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 19:56:08 -0600 Subject: [PATCH 16/88] Allow building linux-* with more than 8 threads if there are extra cores --- package/linux-mainline/package | 6 ++++-- package/linux-stracciatella/package | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/package/linux-mainline/package b/package/linux-mainline/package index 5939125aa..b9af11766 100644 --- a/package/linux-mainline/package +++ b/package/linux-mainline/package @@ -6,7 +6,7 @@ archs=(rm2) pkgnames=(linux-mainline) pkgdesc="reMarkable 2 kernel based on the mainline kernel" url=https://www.kernel.org -pkgver=6.3.0-3 +pkgver=6.3.0-4 timestamp=2023-08-23T21:50:09Z section=kernel maintainer="Alistair Francis " @@ -28,7 +28,9 @@ sha256sums=( build() { cp remarkable_defconfig arch/arm/configs/ ARCH=arm make remarkable_defconfig - ARCH=arm PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/ PKG_CONFIG_SYSROOT_DIR="" make -j8 + local threads + threads="$(echo "8\n$(nproc)" | sort -n | tail -n-1)" + ARCH=arm PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/ PKG_CONFIG_SYSROOT_DIR="" make -j$threads } package() { diff --git a/package/linux-stracciatella/package b/package/linux-stracciatella/package index ea264ae23..fa32bfdac 100644 --- a/package/linux-stracciatella/package +++ b/package/linux-stracciatella/package @@ -45,7 +45,9 @@ build() { elif [[ $arch = rm2 ]]; then ARCH=arm make zero-sugar_defconfig fi - ARCH=arm make -j8 + local threads + threads="$(echo "8\n$(nproc)" | sort -n | tail -n-1)" + ARCH=arm make -j$threads } package() { From 8d2268794c762d4d5aa0033734e6a65f36c5a007 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 20:04:52 -0600 Subject: [PATCH 17/88] Don't deliver rmpp/rmppm restream --- package/linux-mainline/package | 2 +- package/linux-stracciatella/package | 2 +- package/restream/package | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package/linux-mainline/package b/package/linux-mainline/package index b9af11766..968d0aa71 100644 --- a/package/linux-mainline/package +++ b/package/linux-mainline/package @@ -30,7 +30,7 @@ build() { ARCH=arm make remarkable_defconfig local threads threads="$(echo "8\n$(nproc)" | sort -n | tail -n-1)" - ARCH=arm PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/ PKG_CONFIG_SYSROOT_DIR="" make -j$threads + ARCH=arm PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/ PKG_CONFIG_SYSROOT_DIR="" make -j${threads:-8} } package() { diff --git a/package/linux-stracciatella/package b/package/linux-stracciatella/package index fa32bfdac..abd9d74ac 100644 --- a/package/linux-stracciatella/package +++ b/package/linux-stracciatella/package @@ -47,7 +47,7 @@ build() { fi local threads threads="$(echo "8\n$(nproc)" | sort -n | tail -n-1)" - ARCH=arm make -j$threads + ARCH=arm make -j${threads:-8} } package() { diff --git a/package/restream/package b/package/restream/package index 7f83d7f1f..12355ba74 100644 --- a/package/restream/package +++ b/package/restream/package @@ -2,7 +2,7 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT -archs=(rm1 rm2 rmpp rmppm) +archs=(rm1 rm2) pkgnames=(restream) pkgdesc="Binary framebuffer capture tool for the reStream script" url=https://github.com/rien/reStream @@ -12,7 +12,7 @@ section="screensharing" maintainer="Dan Shick " license=MIT -image=rust:v4.0 +image=rust:v3.2 source=("https://github.com/rien/reStream/archive/refs/tags/${pkgver%-*}.tar.gz") sha256sums=(4166142b15e1e7363dac302aa92aad5b44e0514cab233abecb51414952c1d5a1) From f22a5eed4537fd63c9aaeee3738b1cd90986d030 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 20:06:27 -0600 Subject: [PATCH 18/88] Fix rerunning make repo-local --- scripts/repo_build.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/repo_build.py b/scripts/repo_build.py index a3ec92d2b..40f4c15b7 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -11,7 +11,7 @@ List, Optional, ) -from shutil import disk_usage +from shutil import disk_usage, rmtree from build import paths from build.repo import Repo, PackageStatus from toltec.recipe import Package # type: ignore @@ -90,6 +90,7 @@ def sizeof_fmt(num: float, suffix: str = "B") -> str: with Builder( os.path.join(paths.WORK_DIR, name), paths.REPO_DIR ) as builder: + rmtree(builder.work_dir, ignore_errors=True) recipe_bundle = parse_recipe(os.path.join(paths.RECIPE_DIR, name)) build_matrix: Optional[Dict[str, Optional[List[Package]]]] = None old_build_matrix = missing[name] From 530c9914b872711d93d5c53727cd221c779c69d1 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 20:31:58 -0600 Subject: [PATCH 19/88] Free up space between builds --- .github/workflows/pr.yml | 10 ++++++-- .github/workflows/stable.yml | 6 +++-- .github/workflows/testing.yml | 6 +++-- Makefile | 3 +++ scripts/package_build.py | 44 +++++++++++++++++++++++++++++------ scripts/repo_build.py | 20 +++++++++++----- 6 files changed, 70 insertions(+), 19 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index c8b71ee37..e8af1b68b 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -23,7 +23,10 @@ jobs: - name: Setup Toltec dependencies uses: ./.github/actions/setup - name: Build packages - run: FLAGS='--remote-repo https://toltec-dev.org/${{ github.base_ref }}' make repo-new + run: make repo-new + env: + FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} + CLEANUP: 1 - name: Save the build output uses: actions/upload-artifact@v4 with: @@ -31,7 +34,10 @@ jobs: path: build/repo - name: Build packages for experimental if: ${{ contains(github.event.pull_request.labels.*.name, 'experimental') }} - run: make repo FLAGS='--remote-repo https://toltec-dev.org/${{ github.base_ref }}' + run: make repo + env: + FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} + CLEANUP: 1 - name: Sync packages with the remote repository if: ${{ contains(github.event.pull_request.labels.*.name, 'experimental') }} uses: ./.github/actions/sync-repository diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index cae93c130..468c7d1c7 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -13,8 +13,10 @@ jobs: - name: Setup Toltec dependencies uses: ./.github/actions/setup - name: Build packages - run: | - make repo FLAGS='--remote-repo ${{ secrets.REMOTE_HTTP }}/stable' + run: make repo + env: + FLAGS: --remote-repo ${{ secrets.REMOTE_HTTP }}/stable + CLEANUP: 1 - name: Sync packages with the remote repository uses: ./.github/actions/sync-repository with: diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 57d0d9a8d..0b007b56a 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -13,8 +13,10 @@ jobs: - name: Setup Toltec dependencies uses: ./.github/actions/setup - name: Build packages - run: | - make repo FLAGS='--remote-repo ${{ secrets.REMOTE_HTTP }}/testing' + run: make repo + env: + FLAGS: --remote-repo ${{ secrets.REMOTE_HTTP }}/testing + CLEANUP: 1 - name: Sync packages with the remote repository uses: ./.github/actions/sync-repository with: diff --git a/Makefile b/Makefile index b45429653..499932820 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,9 @@ ifeq ($(VERBOSE), 1) FLAGS+= --verbose endif endif +ifeq ($(CLEANUP), 1) +FLAGS+= --cleanup +endif define USAGE Building packages: diff --git a/scripts/package_build.py b/scripts/package_build.py index 8f70f891f..927ee19a6 100755 --- a/scripts/package_build.py +++ b/scripts/package_build.py @@ -12,6 +12,8 @@ List, Optional, ) +from shutil import disk_usage, rmtree +from repo_build import sizeof_fmt from build import paths from build.repo import Repo from toltec import parse_recipe # type: ignore @@ -20,15 +22,17 @@ from toltec.repo import make_index # type: ignore from toltec.util import argparse_add_verbose, LOGGING_FORMAT # type: ignore +logger = logging.getLogger(__name__) + parser = argparse.ArgumentParser(description=__doc__) -parser.add_argument( +_ = parser.add_argument( "recipe_name", metavar="RECIPENAME", help="name of the recipe to build", ) -parser.add_argument( +_ = parser.add_argument( "-a", "--arch-name", metavar="ARCHNAME", @@ -37,7 +41,7 @@ be repeated)""", ) -parser.add_argument( +_ = parser.add_argument( "packages_names", nargs="*", metavar="PACKAGENAME", @@ -45,6 +49,11 @@ ) argparse_add_verbose(parser) +_ = parser.add_argument( + "--cleanup", + action="store_true", + help="Remove the work folder after finishing building the recipe", +) args = parser.parse_args() logging.basicConfig(format=LOGGING_FORMAT, level=args.verbose) @@ -52,9 +61,7 @@ builder = Builder(paths.WORK_DIR, paths.REPO_DIR) arch_packages: Optional[Dict[str, Optional[List[Package]]]] = None -with Builder( - os.path.join(paths.WORK_DIR, args.recipe_name), paths.REPO_DIR -) as builder: +with Builder(os.path.join(paths.WORK_DIR, args.recipe_name), paths.REPO_DIR) as builder: recipe_bundle = parse_recipe(f"package/{args.recipe_name}") build_matrix: Optional[Dict[str, Optional[List[Package]]]] = None if args.arch_name or args.packages_names: @@ -67,7 +74,30 @@ else: build_matrix[arch] = None - if not builder.make(recipe_bundle, build_matrix, False): + rmtree(builder.work_dir, ignore_errors=True) + try: + success: bool = builder.make(recipe_bundle, build_matrix, False) + + finally: + usage = disk_usage(paths.WORK_DIR) + logger.info( + "work_dir: %s/%s", + sizeof_fmt(usage.used), + sizeof_fmt(usage.total), + ) + usage = disk_usage(paths.REPO_DIR) + logger.info( + "repo_dir: %s/%s", + sizeof_fmt(usage.used), + sizeof_fmt(usage.total), + ) + + if args.cleanup: + rmtree(builder.work_dir, ignore_errors=True) + for recipe in recipe_bundle: + builder.docker.images.remove(builder.IMAGE_PREFIX + recipe.image) + + if not success: sys.exit(1) make_index(paths.REPO_DIR) diff --git a/scripts/repo_build.py b/scripts/repo_build.py index 40f4c15b7..8ab9a7bfa 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -35,7 +35,7 @@ def sizeof_fmt(num: float, suffix: str = "B") -> str: parser = argparse.ArgumentParser(description=__doc__) -parser.add_argument( +_ = parser.add_argument( "-d", "--diff", action="store_true", @@ -43,10 +43,15 @@ def sizeof_fmt(num: float, suffix: str = "B") -> str: ) argparse_add_verbose(parser) +_ = parser.add_argument( + "--cleanup", + action="store_true", + help="Remove the work folder after finishing building the recipe", +) group = parser.add_mutually_exclusive_group() -group.add_argument( +_ = group.add_argument( "-l", "--local", action="store_true", @@ -55,7 +60,7 @@ def sizeof_fmt(num: float, suffix: str = "B") -> str: disable this behavior""", ) -group.add_argument( +_ = group.add_argument( "-r", "--remote-repo", default="https://toltec-dev.org/testing", @@ -87,9 +92,7 @@ def sizeof_fmt(num: float, suffix: str = "B") -> str: # recipe we are actually building. name = os.path.basename(next(iter(generic_recipe.values())).path) if missing[name]: - with Builder( - os.path.join(paths.WORK_DIR, name), paths.REPO_DIR - ) as builder: + with Builder(os.path.join(paths.WORK_DIR, name), paths.REPO_DIR) as builder: rmtree(builder.work_dir, ignore_errors=True) recipe_bundle = parse_recipe(os.path.join(paths.RECIPE_DIR, name)) build_matrix: Optional[Dict[str, Optional[List[Package]]]] = None @@ -120,6 +123,11 @@ def sizeof_fmt(num: float, suffix: str = "B") -> str: sizeof_fmt(usage.total), ) + if args.cleanup: + rmtree(builder.work_dir, ignore_errors=True) + for recipe in recipe_bundle: + builder.docker.images.remove(builder.IMAGE_PREFIX + recipe.image) + make_index(paths.REPO_DIR) if args.diff: From 5f2770516654efb5d7f006da1750b32b78db7f11 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 20:46:50 -0600 Subject: [PATCH 20/88] Consolidate --- scripts/package_build.py | 133 ++++++++++----------- scripts/repo_build.py | 245 ++++++++++++++++++++++----------------- 2 files changed, 197 insertions(+), 181 deletions(-) diff --git a/scripts/package_build.py b/scripts/package_build.py index 927ee19a6..744575260 100755 --- a/scripts/package_build.py +++ b/scripts/package_build.py @@ -12,10 +12,9 @@ List, Optional, ) -from shutil import disk_usage, rmtree -from repo_build import sizeof_fmt +from shutil import rmtree +from repo_build import print_disk_usage, cleanup, argparse_add_cleanup from build import paths -from build.repo import Repo from toltec import parse_recipe # type: ignore from toltec.builder import Builder # type: ignore from toltec.recipe import Package # type: ignore @@ -24,80 +23,70 @@ logger = logging.getLogger(__name__) -parser = argparse.ArgumentParser(description=__doc__) -_ = parser.add_argument( - "recipe_name", - metavar="RECIPENAME", - help="name of the recipe to build", -) +def main() -> None: + """Build a package""" + parser = argparse.ArgumentParser(description=__doc__) -_ = parser.add_argument( - "-a", - "--arch-name", - metavar="ARCHNAME", - action="append", - help="""only build for the given architecture (can - be repeated)""", -) + _ = parser.add_argument( + "recipe_name", + metavar="RECIPENAME", + help="name of the recipe to build", + ) -_ = parser.add_argument( - "packages_names", - nargs="*", - metavar="PACKAGENAME", - help="list of packages to build (default: all packages from the recipe)", -) + _ = parser.add_argument( + "-a", + "--arch-name", + metavar="ARCHNAME", + action="append", + help="""only build for the given architecture (can + be repeated)""", + ) -argparse_add_verbose(parser) -_ = parser.add_argument( - "--cleanup", - action="store_true", - help="Remove the work folder after finishing building the recipe", -) + _ = parser.add_argument( + "packages_names", + nargs="*", + metavar="PACKAGENAME", + help="list of packages to build (default: all packages from the recipe)", + ) + + argparse_add_verbose(parser) + argparse_add_cleanup(parser) + args = parser.parse_args() + logging.basicConfig(format=LOGGING_FORMAT, level=args.verbose) + builder = Builder(paths.WORK_DIR, paths.REPO_DIR) + + with Builder( + os.path.join(paths.WORK_DIR, args.recipe_name), paths.REPO_DIR + ) as builder: + recipe_bundle = parse_recipe(f"package/{args.recipe_name}") + build_matrix: Optional[Dict[str, Optional[List[Package]]]] = None + if args.arch_name or args.packages_names: + build_matrix = {} + for arch, recipes in recipe_bundle.items(): + if args.package_name: + build_matrix[arch] = [ + recipes.packages[pkg_name] + for pkg_name in args.package_name + ] + else: + build_matrix[arch] = None -args = parser.parse_args() -logging.basicConfig(format=LOGGING_FORMAT, level=args.verbose) -repo = Repo(paths.RECIPE_DIR, paths.REPO_DIR) -builder = Builder(paths.WORK_DIR, paths.REPO_DIR) -arch_packages: Optional[Dict[str, Optional[List[Package]]]] = None - -with Builder(os.path.join(paths.WORK_DIR, args.recipe_name), paths.REPO_DIR) as builder: - recipe_bundle = parse_recipe(f"package/{args.recipe_name}") - build_matrix: Optional[Dict[str, Optional[List[Package]]]] = None - if args.arch_name or args.packages_names: - build_matrix = {} - for arch, recipes in recipe_bundle.items(): - if args.package_name: - build_matrix[arch] = [ - recipes.packages[pkg_name] for pkg_name in args.package_name - ] - else: - build_matrix[arch] = None - - rmtree(builder.work_dir, ignore_errors=True) - try: - success: bool = builder.make(recipe_bundle, build_matrix, False) - - finally: - usage = disk_usage(paths.WORK_DIR) - logger.info( - "work_dir: %s/%s", - sizeof_fmt(usage.used), - sizeof_fmt(usage.total), - ) - usage = disk_usage(paths.REPO_DIR) - logger.info( - "repo_dir: %s/%s", - sizeof_fmt(usage.used), - sizeof_fmt(usage.total), - ) - - if args.cleanup: rmtree(builder.work_dir, ignore_errors=True) - for recipe in recipe_bundle: - builder.docker.images.remove(builder.IMAGE_PREFIX + recipe.image) + try: + success: bool = builder.make(recipe_bundle, build_matrix, False) + + finally: + print_disk_usage() + + if args.cleanup: + cleanup(builder, recipe_bundle) + + if not success: + sys.exit(1) + + make_index(paths.REPO_DIR) - if not success: - sys.exit(1) - make_index(paths.REPO_DIR) +if __name__ == "__main__": + main() diff --git a/scripts/repo_build.py b/scripts/repo_build.py index 8ab9a7bfa..3a588aee6 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -14,12 +14,14 @@ from shutil import disk_usage, rmtree from build import paths from build.repo import Repo, PackageStatus -from toltec.recipe import Package # type: ignore +from toltec.recipe import Package, RecipeBundle # type: ignore from toltec import parse_recipe # type: ignore from toltec.builder import Builder # type: ignore from toltec.repo import make_index # type: ignore from toltec.util import argparse_add_verbose, LOGGING_FORMAT # type: ignore +logger = logging.getLogger(__name__) + def sizeof_fmt(num: float, suffix: str = "B") -> str: """Output human readable string for size in bytes""" @@ -31,113 +33,138 @@ def sizeof_fmt(num: float, suffix: str = "B") -> str: return f"{num:.1f}Yi{suffix}" -logger = logging.getLogger(__name__) - -parser = argparse.ArgumentParser(description=__doc__) - -_ = parser.add_argument( - "-d", - "--diff", - action="store_true", - help="only keep new packages that do not exist on the remote repository", -) - -argparse_add_verbose(parser) -_ = parser.add_argument( - "--cleanup", - action="store_true", - help="Remove the work folder after finishing building the recipe", -) - -group = parser.add_mutually_exclusive_group() - -_ = group.add_argument( - "-l", - "--local", - action="store_true", - help="""by default, packages missing from the local repository are not - rebuilt if they already exist on the remote repository — pass this flag to - disable this behavior""", -) - -_ = group.add_argument( - "-r", - "--remote-repo", - default="https://toltec-dev.org/testing", - metavar="URL", - help="""root of a remote repository used to know which packages - are already built (default: %(default)s)""", -) - -args = parser.parse_args() -remote = args.remote_repo if not args.local else None -logging.basicConfig(format=LOGGING_FORMAT, level=args.verbose) - -repo = Repo(paths.RECIPE_DIR, paths.REPO_DIR) -results = repo.fetch_packages(remote) - -os.makedirs(paths.REPO_DIR, exist_ok=True) -make_index(paths.REPO_DIR) - -fetched = results[PackageStatus.Fetched] -missing = results[PackageStatus.Missing] -ordered_missing = repo.order_dependencies( - [repo.generic_recipes[name] for name in missing] -) - -for generic_recipe in ordered_missing: - # Will need to rework toltec_old.repo into something inline and actually easy to work - # with Currently generic_recipe is a Dict[str, Recipe] where the index is the arch. Every - # single entry will have the same path, so we can use that for the name of the generic - # recipe we are actually building. - name = os.path.basename(next(iter(generic_recipe.values())).path) - if missing[name]: - with Builder(os.path.join(paths.WORK_DIR, name), paths.REPO_DIR) as builder: - rmtree(builder.work_dir, ignore_errors=True) - recipe_bundle = parse_recipe(os.path.join(paths.RECIPE_DIR, name)) - build_matrix: Optional[Dict[str, Optional[List[Package]]]] = None - old_build_matrix = missing[name] - if old_build_matrix: - build_matrix = {} - - for arch, recipes in old_build_matrix.items(): - build_matrix[arch] = [ - recipe_bundle[arch].packages[pkg_name] - for pkg_name in recipe_bundle[arch].packages - ] - logger.info("Building %s", name) - try: - builder.make(recipe_bundle, build_matrix, False) - - finally: - usage = disk_usage(paths.WORK_DIR) - logger.info( - "work_dir: %s/%s", - sizeof_fmt(usage.used), - sizeof_fmt(usage.total), +def cleanup(builder: Builder, recipe_bundle: RecipeBundle) -> None: + """Perform cleanup to reduce space usage""" + rmtree(builder.work_dir, ignore_errors=True) + for recipe in recipe_bundle.values(): + builder.docker.images.remove(builder.IMAGE_PREFIX + recipe.image) + + +def print_disk_usage() -> None: + """Print the current disk usage for important paths""" + usage = disk_usage(paths.WORK_DIR) + logger.info( + "work_dir: %s/%s", + sizeof_fmt(usage.used), + sizeof_fmt(usage.total), + ) + usage = disk_usage(paths.REPO_DIR) + logger.info( + "repo_dir: %s/%s", + sizeof_fmt(usage.used), + sizeof_fmt(usage.total), + ) + + +def argparse_add_cleanup(parser: argparse.ArgumentParser) -> None: + """Add the cleanup argument""" + _ = parser.add_argument( + "--cleanup", + action="store_true", + help="Remove the work folder after finishing building the recipe", + ) + + +def main() -> None: # pylint: disable=R0914 + """Build the repo""" + + parser = argparse.ArgumentParser(description=__doc__) + + _ = parser.add_argument( + "-d", + "--diff", + action="store_true", + help="only keep new packages that do not exist on the remote repository", + ) + + argparse_add_verbose(parser) + argparse_add_cleanup(parser) + + group = parser.add_mutually_exclusive_group() + + _ = group.add_argument( + "-l", + "--local", + action="store_true", + help="""by default, packages missing from the local repository are not + rebuilt if they already exist on the remote repository — pass this flag to + disable this behavior""", + ) + + _ = group.add_argument( + "-r", + "--remote-repo", + default="https://toltec-dev.org/testing", + metavar="URL", + help="""root of a remote repository used to know which packages + are already built (default: %(default)s)""", + ) + args = parser.parse_args() + remote = args.remote_repo if not args.local else None + logging.basicConfig(format=LOGGING_FORMAT, level=args.verbose) + + repo = Repo(paths.RECIPE_DIR, paths.REPO_DIR) + results = repo.fetch_packages(remote) + + os.makedirs(paths.REPO_DIR, exist_ok=True) + make_index(paths.REPO_DIR) + + fetched = results[PackageStatus.Fetched] + missing = results[PackageStatus.Missing] + ordered_missing = repo.order_dependencies( + [repo.generic_recipes[name] for name in missing] + ) + + for generic_recipe in ordered_missing: + # Will need to rework toltec_old.repo into something inline and actually easy to work + # with Currently generic_recipe is a Dict[str, Recipe] where the index is the arch. Every + # single entry will have the same path, so we can use that for the name of the generic + # recipe we are actually building. + name = os.path.basename(next(iter(generic_recipe.values())).path) + if missing[name]: + with Builder( + os.path.join(paths.WORK_DIR, name), paths.REPO_DIR + ) as builder: + rmtree(builder.work_dir, ignore_errors=True) + recipe_bundle = parse_recipe( + os.path.join(paths.RECIPE_DIR, name) ) - usage = disk_usage(paths.REPO_DIR) - logger.info( - "repo_dir: %s/%s", - sizeof_fmt(usage.used), - sizeof_fmt(usage.total), + build_matrix: Optional[Dict[str, Optional[List[Package]]]] = ( + None ) - - if args.cleanup: - rmtree(builder.work_dir, ignore_errors=True) - for recipe in recipe_bundle: - builder.docker.images.remove(builder.IMAGE_PREFIX + recipe.image) - - make_index(paths.REPO_DIR) - -if args.diff: - for name in fetched: - for packages in fetched[name].values(): - for package in packages: - filename = package.filename() - local_path = os.path.join(repo.repo_dir, filename) - os.remove(local_path) - -make_index(paths.REPO_DIR) -repo.make_listing() -repo.make_compatibility() + old_build_matrix = missing[name] + if old_build_matrix: + build_matrix = {} + + for arch in old_build_matrix.keys(): + build_matrix[arch] = [ + recipe_bundle[arch].packages[pkg_name] + for pkg_name in recipe_bundle[arch].packages + ] + logger.info("Building %s", name) + try: + builder.make(recipe_bundle, build_matrix, False) + + finally: + print_disk_usage() + + if args.cleanup: + cleanup(builder, recipe_bundle) + + make_index(paths.REPO_DIR) + + if args.diff: + for name in fetched: + for packages in fetched[name].values(): + for package in packages: + filename = package.filename() + local_path = os.path.join(repo.repo_dir, filename) + os.remove(local_path) + + make_index(paths.REPO_DIR) + repo.make_listing() + repo.make_compatibility() + + +if __name__ == "__main__": + main() From 211e4caa2e55fa50196b9b236de71be6e63994c7 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 20:47:14 -0600 Subject: [PATCH 21/88] Update toltecmk --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 5a6262a8a..820092ed2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ mypy-extensions==1.0.0 mypy==1.7.1 pylint==3.0.3 six==1.16.0 -toltecmk==0.5.0 +toltecmk==0.5.1 toml==0.10.2 types-python-dateutil==2.8.19.14 types-requests==2.31.0.2 From 9fecfc367f9f1caca573ac3be9cdd11e4c08a569 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 21:10:08 -0600 Subject: [PATCH 22/88] Only remove image once --- scripts/repo_build.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/repo_build.py b/scripts/repo_build.py index 3a588aee6..d29735d6b 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -36,8 +36,8 @@ def sizeof_fmt(num: float, suffix: str = "B") -> str: def cleanup(builder: Builder, recipe_bundle: RecipeBundle) -> None: """Perform cleanup to reduce space usage""" rmtree(builder.work_dir, ignore_errors=True) - for recipe in recipe_bundle.values(): - builder.docker.images.remove(builder.IMAGE_PREFIX + recipe.image) + for image in set([x.image for x in recipe_bundle.values()]): + builder.docker.images.remove(builder.IMAGE_PREFIX + image) def print_disk_usage() -> None: From 84b9c69ddf5fcdb0929ae936e0a74c4dce7b06b6 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 21:14:57 -0600 Subject: [PATCH 23/88] Fix lint --- scripts/repo_build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/repo_build.py b/scripts/repo_build.py index d29735d6b..6c570a42b 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -36,7 +36,7 @@ def sizeof_fmt(num: float, suffix: str = "B") -> str: def cleanup(builder: Builder, recipe_bundle: RecipeBundle) -> None: """Perform cleanup to reduce space usage""" rmtree(builder.work_dir, ignore_errors=True) - for image in set([x.image for x in recipe_bundle.values()]): + for image in {x.image for x in recipe_bundle.values()}: builder.docker.images.remove(builder.IMAGE_PREFIX + image) From 9608e8dc1594fd8aa2363385cb0ad23c31df7f19 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 21:20:59 -0600 Subject: [PATCH 24/88] Upgrade toltecmk --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 820092ed2..e8d97c79d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ mypy-extensions==1.0.0 mypy==1.7.1 pylint==3.0.3 six==1.16.0 -toltecmk==0.5.1 +toltecmk==0.5.2 toml==0.10.2 types-python-dateutil==2.8.19.14 types-requests==2.31.0.2 From cc9a3c398a0f65a931876fd4e4ce6acbe1f68a7e Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 21:34:29 -0600 Subject: [PATCH 25/88] Fix selecting thread count --- package/linux-mainline/package | 2 +- package/linux-stracciatella/package | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package/linux-mainline/package b/package/linux-mainline/package index 968d0aa71..54357ebef 100644 --- a/package/linux-mainline/package +++ b/package/linux-mainline/package @@ -29,7 +29,7 @@ build() { cp remarkable_defconfig arch/arm/configs/ ARCH=arm make remarkable_defconfig local threads - threads="$(echo "8\n$(nproc)" | sort -n | tail -n-1)" + threads="$(echo -e "8\n$(nproc)" | sort -n | tail -n1)" ARCH=arm PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/ PKG_CONFIG_SYSROOT_DIR="" make -j${threads:-8} } diff --git a/package/linux-stracciatella/package b/package/linux-stracciatella/package index abd9d74ac..0825475f7 100644 --- a/package/linux-stracciatella/package +++ b/package/linux-stracciatella/package @@ -46,7 +46,7 @@ build() { ARCH=arm make zero-sugar_defconfig fi local threads - threads="$(echo "8\n$(nproc)" | sort -n | tail -n-1)" + threads="$(echo -e "8\n$(nproc)" | sort -n | tail -n1)" ARCH=arm make -j${threads:-8} } From 38c1f1fdd018108e46e1e26382a7c8b7ee20442a Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 22:08:45 -0600 Subject: [PATCH 26/88] Don't try to prune when image is empty --- scripts/repo_build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/repo_build.py b/scripts/repo_build.py index 6c570a42b..2e39e5408 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -36,7 +36,7 @@ def sizeof_fmt(num: float, suffix: str = "B") -> str: def cleanup(builder: Builder, recipe_bundle: RecipeBundle) -> None: """Perform cleanup to reduce space usage""" rmtree(builder.work_dir, ignore_errors=True) - for image in {x.image for x in recipe_bundle.values()}: + for image in {x.image for x in recipe_bundle.values() if x.image}: builder.docker.images.remove(builder.IMAGE_PREFIX + image) From c732eaf45b2a91893c86611f2797b40d8c8048aa Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 23:03:24 -0600 Subject: [PATCH 27/88] Bump toltecmk --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index e8d97c79d..88ab8e9c3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ mypy-extensions==1.0.0 mypy==1.7.1 pylint==3.0.3 six==1.16.0 -toltecmk==0.5.2 +toltecmk==0.5.3 toml==0.10.2 types-python-dateutil==2.8.19.14 types-requests==2.31.0.2 From 2ea11a870f97d276d545746e57b55ca55fb549d4 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 23:06:42 -0600 Subject: [PATCH 28/88] Fix regenda build, will need to test on device --- package/regenda/package | 2 -- 1 file changed, 2 deletions(-) diff --git a/package/regenda/package b/package/regenda/package index 5acb20750..62ba37f9f 100644 --- a/package/regenda/package +++ b/package/regenda/package @@ -39,8 +39,6 @@ package() { cp -r "$srcdir"/python_modules/icalendar* "$pkgdir"/opt/usr/lib/reGenda/ cp -r "$srcdir"/python_modules/rm_pySAS* "$pkgdir"/opt/usr/lib/reGenda/ cp -r "$srcdir"/python_modules/recurring_ical_events* "$pkgdir"/opt/usr/lib/reGenda/ - cp -r "$srcdir"/python_modules/tzlocal* "$pkgdir"/opt/usr/lib/reGenda/ - cp -r "$srcdir"/python_modules/vobject* "$pkgdir"/opt/usr/lib/reGenda/ cp -r "$srcdir"/python_modules/x_wr_timezone* "$pkgdir"/opt/usr/lib/reGenda/ } From 72974da8dcd29a38bade43eec8a171df76486e33 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Wed, 29 Oct 2025 23:21:36 -0600 Subject: [PATCH 29/88] Fix sudoku and netsurf --- package/netsurf/package | 5 ++--- package/sudoku/package | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package/netsurf/package b/package/netsurf/package index 6c286870d..563b32df2 100644 --- a/package/netsurf/package +++ b/package/netsurf/package @@ -9,7 +9,6 @@ url=https://github.com/alex0809/netsurf-reMarkable pkgver=0.4.0-5 timestamp=2024-09-04T21:14+00:00 maintainer="Alex Friesenhahn " -archs=(rmall) license=GPL-2.0-or-later section="readers" makedepends=( @@ -53,8 +52,8 @@ prepare() { build() { ln -s /usr/bin/which /bin - scripts/install_dependencies.sh - TARGET_WORKSPACE=$(pwd)/build scripts/build.sh + MAKEFLAGS="-j$(nproc)" scripts/install_dependencies.sh + MAKEFLAGS="-j$(nproc)" TARGET_WORKSPACE=$(pwd)/build scripts/build.sh } package() { diff --git a/package/sudoku/package b/package/sudoku/package index 9f27d21e1..f391902d4 100644 --- a/package/sudoku/package +++ b/package/sudoku/package @@ -14,7 +14,7 @@ license=GPL-3.0-only installdepends=(display) flags=(patch_rm2fb) -image=rust:v3.1 +image=rust:v3.2 source=("https://github.com/HookedBehemoth/remarkable-sudoku/archive/refs/tags/v${pkgver%-*}.tar.gz") sha256sums=(08a801a6ffc3f328fc92c8aebadbcc7a123b1abebf5cbe276d5f9f52058ee864) From a09d6e585930c0500b45077e9aaef6c24b5f3e1d Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 00:12:00 -0600 Subject: [PATCH 30/88] Fix various packages --- package/keywriter/package | 1 + package/yaft/package | 2 +- package/zoneinfo-utils/package | 7 +++++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/package/keywriter/package b/package/keywriter/package index 049a97c73..3ad83f3d7 100644 --- a/package/keywriter/package +++ b/package/keywriter/package @@ -27,6 +27,7 @@ sha256sums=( 3c594d8219b17acd140b7011b44ebc69ab9d68910da827494f8c9cc2f5b12ecf SKIP ) +preparedepends=(build:libarchive-tools) prepare() { bsdtar -x \ diff --git a/package/yaft/package b/package/yaft/package index 8a40efbaa..044f9d73d 100644 --- a/package/yaft/package +++ b/package/yaft/package @@ -14,7 +14,7 @@ license=GPL-3.0 section="admin" image=base:v3.1 installdepends=(display terminfo) -preparedepends=(build:git) +preparedepends=(build:git build:git-lfs) flags=(nostrip) source=() diff --git a/package/zoneinfo-utils/package b/package/zoneinfo-utils/package index a3fad8650..9796330f1 100644 --- a/package/zoneinfo-utils/package +++ b/package/zoneinfo-utils/package @@ -59,13 +59,16 @@ package() { popd > /dev/null mv "${pkgdir}"/usr/{lib,share/man} "${pkgdir}"/opt/usr - mv "${pkgdir}"/usr/{s,}bin "${pkgdir}"/opt + mv "${pkgdir}"/usr/bin "${pkgdir}"/opt install -D -m 644 -t "$pkgdir"/opt/share/zoneinfo "$srcdir"/iso3166.tab install -D -m 644 -t "$pkgdir"/opt/share/zoneinfo "$srcdir"/zone1970.tab # cleanup - rm -rf "${pkgdir:?}"/{etc,usr} + rm "${pkgdir}"/etc/localtime + rmdir "${pkgdir}"/etc + rm -rf "${pkgdir}"/usr/share + rmdir "${pkgdir}"/usr } configure() { From 930f0f74dc8c8bcff4bb6c5ebc6dba4b4edb0b36 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 00:19:45 -0600 Subject: [PATCH 31/88] Speed up oxide build --- package/oxide/package | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package/oxide/package b/package/oxide/package index 13f8cee0a..9fb48ce9a 100644 --- a/package/oxide/package +++ b/package/oxide/package @@ -34,7 +34,9 @@ build() { | xargs -r -0 sed -i 's/linux-oe-g++/linux-arm-remarkable-g++/g' find . -name "*.pri" -type f -print0 \ | xargs -r -0 sed -i 's/linux-oe-g++/linux-arm-remarkable-g++/g' - CMAKE_TOOLCHAIN_FILE="/usr/share/cmake/$CHOST.cmake" make FEATURES=sentry release + local threads + threads="$(echo -e "8\n$(nproc)" | sort -n | tail -n1)" + CMAKE_TOOLCHAIN_FILE="/usr/share/cmake/$CHOST.cmake" make FEATURES=sentry release -j${threads:-8} } oxide() { From aa336d89616fa1e7238c2d4f8262e636d04e7717 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 00:24:05 -0600 Subject: [PATCH 32/88] Fix vnsee build --- package/vnsee/package | 1 + 1 file changed, 1 insertion(+) diff --git a/package/vnsee/package b/package/vnsee/package index 0ee114a68..c3174462f 100644 --- a/package/vnsee/package +++ b/package/vnsee/package @@ -35,6 +35,7 @@ sha256sums=( noextract=( "$_boost_pp_ver.zip" ) +preparedepends=(build:libarchive-tools) prepare() { patch -d "$srcdir" -p1 < "$srcdir"/vnsee-gui-set-path.patch From f8b0aa64292772cb5a70ab07eb8cf94574e3e0ad Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 00:26:48 -0600 Subject: [PATCH 33/88] Speed up rmkit build --- package/rmkit/package | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package/rmkit/package b/package/rmkit/package index 71e9095d8..0a188d68c 100644 --- a/package/rmkit/package +++ b/package/rmkit/package @@ -25,7 +25,9 @@ sha256sums=( build() { pip3 install okp - ARCH="rm" make + local threads + threads="$(echo -e "8\n$(nproc)" | sort -n | tail -n1)" + ARCH="rm" make -j${threads:-8} } bufshot() { From 178d995835309b113248330f1297db2e4172ae3e Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 00:37:43 -0600 Subject: [PATCH 34/88] Fix doomarkable build --- package/doomarkable/package | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/doomarkable/package b/package/doomarkable/package index 20e1a729b..e6c0d05f1 100644 --- a/package/doomarkable/package +++ b/package/doomarkable/package @@ -14,7 +14,7 @@ license=MIT installdepends=(display) flags=(patch_rm2fb) -image=rust:v3.2 +image=rust:v3.1 source=(https://github.com/LinusCDE/doomarkable/archive/7d10769d625fbe733768e39cf5006cde341d2fef.zip) sha256sums=(df86cc87d2dde7993f47f809faaab8568abe4dd2987e5ab4e00e337caef03706) From 8808557cab75764ca9cf9d7f29950cbae8999bca Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 00:38:28 -0600 Subject: [PATCH 35/88] Fix evtest build --- package/evtest/package | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/package/evtest/package b/package/evtest/package index 0fccba1d3..138f46a80 100644 --- a/package/evtest/package +++ b/package/evtest/package @@ -18,9 +18,22 @@ source=("https://gitlab.freedesktop.org/libevdev/evtest/-/archive/evtest-${pkgve sha256sums=(62f7e34c5bab91b5015de5b056d79051c677c5bd5702facb2885f8e4ba0df84c) build() { + local host + case $arch in + rm1 | rm2) + host=armv7 + ;; + rmpp | rmppm) + host=aarch64 + ;; + *) + echo "Unhandled arch: $arch" + exit 1 + ;; + esac export CC="${CROSS_COMPILE}gcc" - ./autogen.sh --host armv7 - ./configure --host armv7 + ./autogen.sh --host $host + ./configure --host $host make } From 5ff295df3dc6519a8dd9c6656e58b78758eee878 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 14:08:25 -0600 Subject: [PATCH 36/88] Split out package builds into one job per dependency chain --- .github/workflows/pr.yml | 24 ++++++- Makefile | 4 ++ scripts/build/repo.py | 125 ++++++++++++++++++++++++++++++++---- scripts/dependency_chain.py | 45 +++++++++++++ scripts/repo_build.py | 45 +++++++------ 5 files changed, 208 insertions(+), 35 deletions(-) create mode 100755 scripts/dependency_chain.py diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index e8af1b68b..a64f1f262 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -13,10 +13,29 @@ jobs: run: make format - name: Check for erroneous constructs run: make lint + dependencies: + name: Generate dependency chains + runs-on: ubuntu-24.04 + steps: + - name: Checkout the Git repository + uses: actions/checkout@v4 + - name: Setup Toltec dependencies + uses: ./.github/actions/setup + - name: Get package list + id: recipes-matrix + run: | + echo 'JSON_CONTENT<> $GITHUB_OUTPUT + make dependency-chain >> $GITHUB_OUTPUT + echo 'EOF' >> $GITHUB_OUTPUT + env: + FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} pr: - name: Check that it builds without error + name: Build ${{ matrix.recipes }} runs-on: ubuntu-24.04 - needs: lint + needs: [lint, dependencies] + strategy: + matrix: ${{ fromJson(needs.dependencies.outputs.recipes-matrix) }} + fail-fast: false steps: - name: Checkout the Git repository uses: actions/checkout@v4 @@ -27,6 +46,7 @@ jobs: env: FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} CLEANUP: 1 + RECIPES: ${{ matrix.recipes }} - name: Save the build output uses: actions/upload-artifact@v4 with: diff --git a/Makefile b/Makefile index 499932820..3551906d9 100644 --- a/Makefile +++ b/Makefile @@ -69,6 +69,10 @@ repo-local: .venv/bin/activate . .venv/bin/activate; \ ./scripts/repo_build.py --local $(FLAGS) +dependency-chain: .venv/bin/activate + @. .venv/bin/activate; \ + ./scripts/dependency_chain.py $(FLAGS) + repo-new: .venv/bin/activate . .venv/bin/activate; \ ./scripts/repo_build.py --diff $(FLAGS) diff --git a/scripts/build/repo.py b/scripts/build/repo.py index d8dac134d..b16af39e2 100644 --- a/scripts/build/repo.py +++ b/scripts/build/repo.py @@ -3,6 +3,7 @@ """ Build the package repository. """ + import logging import os import pathlib @@ -11,12 +12,8 @@ from datetime import datetime from enum import auto from enum import Enum -from typing import ( - Dict, - Iterable, - List, - Optional, -) +from typing import Iterable +from collections import defaultdict, deque import requests from jinja2 import ( @@ -54,7 +51,7 @@ class PackageStatus(Enum): # pylint: enable=invalid-name -GroupedPackages = Dict[PackageStatus, Dict[str, Dict[str, List[Package]]]] +GroupedPackages = dict[PackageStatus, dict[str, dict[str, list[Package]]]] class Repo: @@ -67,9 +64,9 @@ def __init__(self, recipe_dir: str, repo_dir: str) -> None: :param recipe_dir: directory where recipe definitions are stored :param repo_dir: directory where built packages are stored """ - self.recipe_dir = recipe_dir - self.repo_dir = repo_dir - self.generic_recipes = {} + self.recipe_dir: str = recipe_dir + self.repo_dir: str = repo_dir + self.generic_recipes: dict[str, dict[str, Recipe]] = {} for name in os.listdir(self.recipe_dir): path = pathlib.Path(self.recipe_dir) / name @@ -82,7 +79,7 @@ def __init__(self, recipe_dir: str, repo_dir: str) -> None: os.path.join(self.recipe_dir, name) ) - def fetch_packages(self, remote: Optional[str]) -> GroupedPackages: + def fetch_packages(self, remote: str | None) -> GroupedPackages: """ Fetch locally missing packages from a remote server and report which packages are missing from the remote and need to be built locally. @@ -135,7 +132,7 @@ def fetch_packages(self, remote: Optional[str]) -> GroupedPackages: return results - def fetch_package(self, package: Package, remote: Optional[str]) -> PackageStatus: + def fetch_package(self, package: Package, remote: str | None) -> PackageStatus: """ Check if a package exists locally and fetch it otherwise. @@ -178,7 +175,7 @@ def fetch_package(self, package: Package, remote: Optional[str]) -> PackageStatu def order_dependencies( self, - generic_recipes: List[Dict[str, Recipe]], + generic_recipes: list[dict[str, Recipe]], ) -> Iterable[dict[str, Recipe]]: """ Order a list of recipes so that all recipes that a recipe needs @@ -250,3 +247,105 @@ def make_compatibility(self) -> None: compat_source = os.path.join(self.recipe_dir, "Compatibility") compat_dest = self.repo_dir shutil.copy2(compat_source, compat_dest) + + def dependency_chains( # pylint:disable=R0914, R0912 + self, + recipes: list[str], + ) -> list[list[str]]: + """ + Generate dependency chains where each chain contains recipes in build order. + Recipes that share dependencies are grouped into the same chain. + """ + + # Build graph: recipe_name -> set of recipes that depend on it (reverse dependencies) + reverse_graph: dict[str, set[str]] = defaultdict(set) + # Forward graph: recipe_name -> set of host dependencies it needs + forward_graph: dict[str, set[str]] = defaultdict(set) + # Indegree for topological sorting within components + indegree: dict[str, int] = defaultdict(int) + + # Build the graphs + for name in recipes: + recipe = self.generic_recipes[name] + host_deps: set[str] = { + dep.package + for dep in {d for a in recipe.values() for d in a.makedepends} + if dep.kind == DependencyKind.HOST and dep.package in recipes + } + forward_graph[name] = host_deps + for dep in host_deps: + reverse_graph[dep].add(name) + indegree[name] += 1 + + # Initialize indegree for recipes with no dependencies + if name not in indegree: + indegree[name] = 0 + + # Perform DFS to find connected components (undirected sense) + visited: set[str] = set() + components: list[list[str]] = [] + + def dfs(node: str, component: list[str]) -> None: + if node in visited: + return + + visited.add(node) + component.append(node) + # Visit dependents (reverse edges) + for dependent in reverse_graph[node]: + dfs(dependent, component) + + # Visit dependencies (forward edges) + for dependency in forward_graph[node]: + dfs(dependency, component) + + # Find all connected components + for name in recipes: + if name not in visited: + component: list[str] = [] + dfs(name, component) + components.append(component) + + # For each component, perform topological sort + result_chains: list[list[str]] = [] + + for component in components: + if not component: + continue + + # Build subgraph for this component + local_indegree = {name: 0 for name in component} + local_queue: deque[str] = deque() + local_order: list[str] = [] + + # Recompute indegree within component + for name in component: + for dep in forward_graph[name]: + if dep in component: + local_indegree[name] += 1 + + # Initialize queue with nodes of indegree 0 in this component + for name in component: + if local_indegree[name] == 0: + local_queue.append(name) + + # Kahn's algorithm + while local_queue: + current = local_queue.popleft() + local_order.append(current) + + # Reduce indegree of neighbors + for dependent in reverse_graph[current]: + if dependent in component: + local_indegree[dependent] -= 1 + if local_indegree[dependent] == 0: + local_queue.append(dependent) + + # Check for cycles (should not happen in valid build graph, but be safe) + if len(local_order) != len(component): + # Cycle detected - for robustness, fall back to any order + local_order = component[:] + + result_chains.append(local_order) + + return result_chains diff --git a/scripts/dependency_chain.py b/scripts/dependency_chain.py new file mode 100755 index 000000000..daa353615 --- /dev/null +++ b/scripts/dependency_chain.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# Copyright (c) 2021 The Toltec Contributors +# SPDX-License-Identifier: MIT +"""Build all packages and create a package index.""" + +import argparse +import logging +import json +from repo_build import parse_args_and_fetch_packages, argparse_add_cleanup +from build.repo import PackageStatus + +logger = logging.getLogger(__name__) + + +def main() -> None: # pylint: disable=R0914 + """Build the repo""" + + parser = argparse.ArgumentParser(description=__doc__) + + _ = parser.add_argument( + "-v", + "--verbose", + action="store_const", + const=logging.DEBUG, + default=logging.ERROR, + help="show debugging information", + ) + argparse_add_cleanup(parser) + _, repo, results = parse_args_and_fetch_packages(parser) + + missing = list(results[PackageStatus.Missing].keys()) + + print( + json.dumps( + [ + {"recipes": " ".join(names)} + for names in repo.dependency_chains(missing) + ], + indent=2, + ) + ) + + +if __name__ == "__main__": + main() diff --git a/scripts/repo_build.py b/scripts/repo_build.py index 2e39e5408..3be8f947b 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -13,7 +13,7 @@ ) from shutil import disk_usage, rmtree from build import paths -from build.repo import Repo, PackageStatus +from build.repo import GroupedPackages, Repo, PackageStatus from toltec.recipe import Package, RecipeBundle # type: ignore from toltec import parse_recipe # type: ignore from toltec.builder import Builder # type: ignore @@ -57,7 +57,7 @@ def print_disk_usage() -> None: def argparse_add_cleanup(parser: argparse.ArgumentParser) -> None: - """Add the cleanup argument""" + """Add --cleanup flag""" _ = parser.add_argument( "--cleanup", action="store_true", @@ -65,23 +65,11 @@ def argparse_add_cleanup(parser: argparse.ArgumentParser) -> None: ) -def main() -> None: # pylint: disable=R0914 - """Build the repo""" - - parser = argparse.ArgumentParser(description=__doc__) - - _ = parser.add_argument( - "-d", - "--diff", - action="store_true", - help="only keep new packages that do not exist on the remote repository", - ) - - argparse_add_verbose(parser) - argparse_add_cleanup(parser) - +def parse_args_and_fetch_packages( + parser: argparse.ArgumentParser, +) -> tuple[argparse.Namespace, Repo, GroupedPackages]: + """Handle local/remote arguments, fetch packages, and return args, repo, and results""" group = parser.add_mutually_exclusive_group() - _ = group.add_argument( "-l", "--local", @@ -90,7 +78,6 @@ def main() -> None: # pylint: disable=R0914 rebuilt if they already exist on the remote repository — pass this flag to disable this behavior""", ) - _ = group.add_argument( "-r", "--remote-repo", @@ -102,9 +89,27 @@ def main() -> None: # pylint: disable=R0914 args = parser.parse_args() remote = args.remote_repo if not args.local else None logging.basicConfig(format=LOGGING_FORMAT, level=args.verbose) - repo = Repo(paths.RECIPE_DIR, paths.REPO_DIR) results = repo.fetch_packages(remote) + return args, repo, results + + +def main() -> None: # pylint: disable=R0914 + """Build the repo""" + + parser = argparse.ArgumentParser(description=__doc__) + + _ = parser.add_argument( + "-d", + "--diff", + action="store_true", + help="only keep new packages that do not exist on the remote repository", + ) + + argparse_add_verbose(parser) + argparse_add_cleanup(parser) + + args, repo, results = parse_args_and_fetch_packages(parser) os.makedirs(paths.REPO_DIR, exist_ok=True) make_index(paths.REPO_DIR) From f71dcaf39b0ed67403acf2e642af298d11a2282e Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 14:15:40 -0600 Subject: [PATCH 37/88] Debug output --- .github/workflows/pr.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index a64f1f262..837cdff4e 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -21,12 +21,13 @@ jobs: uses: actions/checkout@v4 - name: Setup Toltec dependencies uses: ./.github/actions/setup - - name: Get package list + - name: Get recipe lists id: recipes-matrix run: | echo 'JSON_CONTENT<> $GITHUB_OUTPUT make dependency-chain >> $GITHUB_OUTPUT echo 'EOF' >> $GITHUB_OUTPUT + cat $GITHUB_OUTPUT env: FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} pr: From 8aa9b330dcc4e4c4703c930e5cd2fab26330ec0e Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 14:21:15 -0600 Subject: [PATCH 38/88] Cache repo status, fix dependencies outputs --- .github/workflows/pr.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 837cdff4e..b0455dffe 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -16,18 +16,24 @@ jobs: dependencies: name: Generate dependency chains runs-on: ubuntu-24.04 + outputs: + recipes-matrix: ${{ steps.recipes-matrix.outputs.JSON_CONTENT }} steps: - name: Checkout the Git repository uses: actions/checkout@v4 - name: Setup Toltec dependencies uses: ./.github/actions/setup + - name: Cache repo + uses: actions/cache@v4 + with: + path: build/repo + key: ${{ github.base_ref }}-${{ hashFiles('package/*/package') }} - name: Get recipe lists id: recipes-matrix run: | echo 'JSON_CONTENT<> $GITHUB_OUTPUT make dependency-chain >> $GITHUB_OUTPUT echo 'EOF' >> $GITHUB_OUTPUT - cat $GITHUB_OUTPUT env: FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} pr: @@ -42,6 +48,11 @@ jobs: uses: actions/checkout@v4 - name: Setup Toltec dependencies uses: ./.github/actions/setup + - name: Cache repo + uses: actions/cache@v4 + with: + path: build/repo + key: ${{ github.base_ref }}-${{ hashFiles('package/*/package') }} - name: Build packages run: make repo-new env: From 50ecdee368a744ffcf6438cfe3e4122059758c9f Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 14:30:26 -0600 Subject: [PATCH 39/88] Setup venv before getting output --- .github/workflows/pr.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index b0455dffe..ed4e25741 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -31,6 +31,7 @@ jobs: - name: Get recipe lists id: recipes-matrix run: | + make .venv/bin/activate echo 'JSON_CONTENT<> $GITHUB_OUTPUT make dependency-chain >> $GITHUB_OUTPUT echo 'EOF' >> $GITHUB_OUTPUT From b87217707d2995e3ed9229c97d371f57c979616a Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 14:33:12 -0600 Subject: [PATCH 40/88] Fix format --- .github/workflows/pr.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index ed4e25741..bd33f8c7e 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -33,7 +33,9 @@ jobs: run: | make .venv/bin/activate echo 'JSON_CONTENT<> $GITHUB_OUTPUT + echo '{"include":' >> $GITHUB_OUTPUT make dependency-chain >> $GITHUB_OUTPUT + echo "}" >> $GITHUB_OUTPUT echo 'EOF' >> $GITHUB_OUTPUT env: FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} From f4eab7c25bf3d08376d2ef435cc1d62dd003d318 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 14:38:37 -0600 Subject: [PATCH 41/88] Filter repo build based on missing packages --- Makefile | 2 ++ scripts/repo_build.py | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3551906d9..bf9d5bee8 100644 --- a/Makefile +++ b/Makefile @@ -141,6 +141,8 @@ clean: help \ repo \ repo-local \ + dependency-chain \ + repo-new \ repo-check \ $(RECIPES) \ $(RECIPES_PUSH) \ diff --git a/scripts/repo_build.py b/scripts/repo_build.py index 3be8f947b..8ab184500 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -94,7 +94,7 @@ def parse_args_and_fetch_packages( return args, repo, results -def main() -> None: # pylint: disable=R0914 +def main() -> None: # pylint: disable=R0914,R0912 """Build the repo""" parser = argparse.ArgumentParser(description=__doc__) @@ -116,6 +116,12 @@ def main() -> None: # pylint: disable=R0914 fetched = results[PackageStatus.Fetched] missing = results[PackageStatus.Missing] + if os.environ.get("PACKAGES", None): + env_packages = os.environ["PACKAGES"].split(" ") + for name in missing.keys(): + if name not in env_packages: + del missing[name] + ordered_missing = repo.order_dependencies( [repo.generic_recipes[name] for name in missing] ) From bd1fce295c059c60e7380b3080ba61aafc07e0e2 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 14:53:06 -0600 Subject: [PATCH 42/88] Move package filter to fetch_packages --- scripts/build/repo.py | 7 ++++++- scripts/repo_build.py | 13 ++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/scripts/build/repo.py b/scripts/build/repo.py index b16af39e2..7aa6f8d3a 100644 --- a/scripts/build/repo.py +++ b/scripts/build/repo.py @@ -79,7 +79,9 @@ def __init__(self, recipe_dir: str, repo_dir: str) -> None: os.path.join(self.recipe_dir, name) ) - def fetch_packages(self, remote: str | None) -> GroupedPackages: + def fetch_packages( + self, remote: str | None, recipe_filter: list[str] | None = None + ) -> GroupedPackages: """ Fetch locally missing packages from a remote server and report which packages are missing from the remote and need to be built locally. @@ -98,6 +100,9 @@ def fetch_packages(self, remote: str | None) -> GroupedPackages: } for name, generic_recipe in self.generic_recipes.items(): + if recipe_filter is not None and name not in recipe_filter: + continue + fetched_generic = {} missing_generic = {} diff --git a/scripts/repo_build.py b/scripts/repo_build.py index 8ab184500..a62ab3065 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -90,7 +90,12 @@ def parse_args_and_fetch_packages( remote = args.remote_repo if not args.local else None logging.basicConfig(format=LOGGING_FORMAT, level=args.verbose) repo = Repo(paths.RECIPE_DIR, paths.REPO_DIR) - results = repo.fetch_packages(remote) + env_packages: str | None | list[str] = os.environ.get("PACKAGES", None) + if env_packages is not None: + assert isinstance(env_packages, str) + env_packages = env_packages.split(" ") + + results = repo.fetch_packages(remote, recipe_filter=env_packages) return args, repo, results @@ -116,12 +121,6 @@ def main() -> None: # pylint: disable=R0914,R0912 fetched = results[PackageStatus.Fetched] missing = results[PackageStatus.Missing] - if os.environ.get("PACKAGES", None): - env_packages = os.environ["PACKAGES"].split(" ") - for name in missing.keys(): - if name not in env_packages: - del missing[name] - ordered_missing = repo.order_dependencies( [repo.generic_recipes[name] for name in missing] ) From 9b3f9d840bc6a048d179973b6dad76fb24463459 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 15:05:03 -0600 Subject: [PATCH 43/88] Recipes, not packages --- scripts/repo_build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/repo_build.py b/scripts/repo_build.py index a62ab3065..f2e6acda1 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -90,7 +90,7 @@ def parse_args_and_fetch_packages( remote = args.remote_repo if not args.local else None logging.basicConfig(format=LOGGING_FORMAT, level=args.verbose) repo = Repo(paths.RECIPE_DIR, paths.REPO_DIR) - env_packages: str | None | list[str] = os.environ.get("PACKAGES", None) + env_packages: str | None | list[str] = os.environ.get("RECIPES", None) if env_packages is not None: assert isinstance(env_packages, str) env_packages = env_packages.split(" ") From dc11d99b215fb09009a1bdb3f5f1cc04e3db8bae Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 15:12:58 -0600 Subject: [PATCH 44/88] Use better env name --- .github/workflows/pr.yml | 2 +- scripts/repo_build.py | 15 +++++---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index bd33f8c7e..e768e4795 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -61,7 +61,7 @@ jobs: env: FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} CLEANUP: 1 - RECIPES: ${{ matrix.recipes }} + RECIPE_FILTER: ${{ matrix.recipes }} - name: Save the build output uses: actions/upload-artifact@v4 with: diff --git a/scripts/repo_build.py b/scripts/repo_build.py index f2e6acda1..90f4cadcd 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -90,11 +90,12 @@ def parse_args_and_fetch_packages( remote = args.remote_repo if not args.local else None logging.basicConfig(format=LOGGING_FORMAT, level=args.verbose) repo = Repo(paths.RECIPE_DIR, paths.REPO_DIR) - env_packages: str | None | list[str] = os.environ.get("RECIPES", None) + env_packages: str | None | list[str] = os.environ.get("RECIPE_FILTER", None) if env_packages is not None: assert isinstance(env_packages, str) env_packages = env_packages.split(" ") + print("RECIPE_FILTER", env_packages) results = repo.fetch_packages(remote, recipe_filter=env_packages) return args, repo, results @@ -132,16 +133,10 @@ def main() -> None: # pylint: disable=R0914,R0912 # recipe we are actually building. name = os.path.basename(next(iter(generic_recipe.values())).path) if missing[name]: - with Builder( - os.path.join(paths.WORK_DIR, name), paths.REPO_DIR - ) as builder: + with Builder(os.path.join(paths.WORK_DIR, name), paths.REPO_DIR) as builder: rmtree(builder.work_dir, ignore_errors=True) - recipe_bundle = parse_recipe( - os.path.join(paths.RECIPE_DIR, name) - ) - build_matrix: Optional[Dict[str, Optional[List[Package]]]] = ( - None - ) + recipe_bundle = parse_recipe(os.path.join(paths.RECIPE_DIR, name)) + build_matrix: Optional[Dict[str, Optional[List[Package]]]] = None old_build_matrix = missing[name] if old_build_matrix: build_matrix = {} From 4dc6195bca6c9f4c392486cf75cf7c85a68e778e Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 15:21:32 -0600 Subject: [PATCH 45/88] switch to --filter and move experimental sync to new job --- .github/workflows/pr.yml | 30 ++++++++++++++++++++++++------ scripts/repo_build.py | 29 ++++++++++++++++++++--------- 2 files changed, 44 insertions(+), 15 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index e768e4795..7f180ecb1 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -59,22 +59,40 @@ jobs: - name: Build packages run: make repo-new env: - FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} + FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} --filter "${{ matrix.recipes }}" CLEANUP: 1 - RECIPE_FILTER: ${{ matrix.recipes }} - - name: Save the build output + - name: Upload all ipk uses: actions/upload-artifact@v4 with: - name: repo + name: recipes-${{ matrix.recipes }} + path: build/repo/**/*.ipk + experimental: + name: Generate dependency chains + runs-on: ubuntu-24.04 + needs: [pr] + if: ${{ contains(github.event.pull_request.labels.*.name, 'experimental') }} + steps: + - name: Checkout the Git repository + uses: actions/checkout@v4 + - name: Setup Toltec dependencies + uses: ./.github/actions/setup + - name: Cache repo + uses: actions/cache@v4 + with: + path: build/repo + key: ${{ github.base_ref }}-${{ hashFiles('package/*/package') }} + - name: Download all packages + uses: actions/download-artifact@v5 + with: path: build/repo + pattern: recipes-* + merge-multiple: true - name: Build packages for experimental - if: ${{ contains(github.event.pull_request.labels.*.name, 'experimental') }} run: make repo env: FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} CLEANUP: 1 - name: Sync packages with the remote repository - if: ${{ contains(github.event.pull_request.labels.*.name, 'experimental') }} uses: ./.github/actions/sync-repository with: local-path: build/repo/ diff --git a/scripts/repo_build.py b/scripts/repo_build.py index 90f4cadcd..59a66cfce 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -69,6 +69,12 @@ def parse_args_and_fetch_packages( parser: argparse.ArgumentParser, ) -> tuple[argparse.Namespace, Repo, GroupedPackages]: """Handle local/remote arguments, fetch packages, and return args, repo, and results""" + _ = parser.add_argument( + "--filter", + default=None, + metavar="RECIPE...", + help="List of recipe names to limit build to", + ) group = parser.add_mutually_exclusive_group() _ = group.add_argument( "-l", @@ -90,13 +96,12 @@ def parse_args_and_fetch_packages( remote = args.remote_repo if not args.local else None logging.basicConfig(format=LOGGING_FORMAT, level=args.verbose) repo = Repo(paths.RECIPE_DIR, paths.REPO_DIR) - env_packages: str | None | list[str] = os.environ.get("RECIPE_FILTER", None) - if env_packages is not None: - assert isinstance(env_packages, str) - env_packages = env_packages.split(" ") + recipe_filter: str | None | list[str] = args.filter + if recipe_filter is not None: + assert isinstance(recipe_filter, str) + recipe_filter = recipe_filter.split(" ") - print("RECIPE_FILTER", env_packages) - results = repo.fetch_packages(remote, recipe_filter=env_packages) + results = repo.fetch_packages(remote, recipe_filter=recipe_filter) return args, repo, results @@ -133,10 +138,16 @@ def main() -> None: # pylint: disable=R0914,R0912 # recipe we are actually building. name = os.path.basename(next(iter(generic_recipe.values())).path) if missing[name]: - with Builder(os.path.join(paths.WORK_DIR, name), paths.REPO_DIR) as builder: + with Builder( + os.path.join(paths.WORK_DIR, name), paths.REPO_DIR + ) as builder: rmtree(builder.work_dir, ignore_errors=True) - recipe_bundle = parse_recipe(os.path.join(paths.RECIPE_DIR, name)) - build_matrix: Optional[Dict[str, Optional[List[Package]]]] = None + recipe_bundle = parse_recipe( + os.path.join(paths.RECIPE_DIR, name) + ) + build_matrix: Optional[Dict[str, Optional[List[Package]]]] = ( + None + ) old_build_matrix = missing[name] if old_build_matrix: build_matrix = {} From dd5900edc1ea3f4c0138f06429ffe064a4ab1d46 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 15:54:10 -0600 Subject: [PATCH 46/88] Make dependency chain use package name, not recipe name --- scripts/build/repo.py | 106 +++++++++++++++++++----------------- scripts/dependency_chain.py | 1 - 2 files changed, 55 insertions(+), 52 deletions(-) diff --git a/scripts/build/repo.py b/scripts/build/repo.py index 7aa6f8d3a..aacfed0b6 100644 --- a/scripts/build/repo.py +++ b/scripts/build/repo.py @@ -251,7 +251,7 @@ def make_compatibility(self) -> None: logger.info("Generating compatibility info") compat_source = os.path.join(self.recipe_dir, "Compatibility") compat_dest = self.repo_dir - shutil.copy2(compat_source, compat_dest) + _ = shutil.copy2(compat_source, compat_dest) def dependency_chains( # pylint:disable=R0914, R0912 self, @@ -259,98 +259,102 @@ def dependency_chains( # pylint:disable=R0914, R0912 ) -> list[list[str]]: """ Generate dependency chains where each chain contains recipes in build order. - Recipes that share dependencies are grouped into the same chain. + Recipes that share dependencies (via provided packages) are grouped into the same chain. """ - # Build graph: recipe_name -> set of recipes that depend on it (reverse dependencies) - reverse_graph: dict[str, set[str]] = defaultdict(set) - # Forward graph: recipe_name -> set of host dependencies it needs - forward_graph: dict[str, set[str]] = defaultdict(set) - # Indegree for topological sorting within components + # === Step 1: Build package -> recipe mapping (what provides what) === + package_to_recipe: dict[str, str] = {} + for name in recipes: + recipe = self.generic_recipes[name] + for arch_recipe in recipe.values(): + for pkg in arch_recipe.packages.keys(): + if pkg in package_to_recipe: + # Conflict? Multiple recipes provide same package? Rare, but warn? + pass # Or raise/log + package_to_recipe[pkg] = name + + # === Step 2: Build graphs === + reverse_graph: dict[str, set[str]] = defaultdict(set) # dep -> [dependents] + forward_graph: dict[str, set[str]] = defaultdict(set) # recipe -> [recipe deps] indegree: dict[str, int] = defaultdict(int) - # Build the graphs for name in recipes: recipe = self.generic_recipes[name] - host_deps: set[str] = { + host_dep_packages: set[str] = { dep.package - for dep in {d for a in recipe.values() for d in a.makedepends} - if dep.kind == DependencyKind.HOST and dep.package in recipes + for arch_recipe in recipe.values() + for dep in arch_recipe.makedepends + if dep.kind == DependencyKind.HOST } - forward_graph[name] = host_deps - for dep in host_deps: - reverse_graph[dep].add(name) + + recipe_deps: set[str] = set() + for pkg in host_dep_packages: + if pkg in package_to_recipe: + dep_recipe = package_to_recipe[pkg] + if dep_recipe in recipes: + recipe_deps.add(dep_recipe) + + forward_graph[name] = recipe_deps + for dep_recipe in recipe_deps: + reverse_graph[dep_recipe].add(name) indegree[name] += 1 - # Initialize indegree for recipes with no dependencies if name not in indegree: indegree[name] = 0 - # Perform DFS to find connected components (undirected sense) + # === Step 3: Find connected components via DFS (undirected graph) === visited: set[str] = set() components: list[list[str]] = [] def dfs(node: str, component: list[str]) -> None: if node in visited: return - visited.add(node) component.append(node) - # Visit dependents (reverse edges) - for dependent in reverse_graph[node]: - dfs(dependent, component) - # Visit dependencies (forward edges) - for dependency in forward_graph[node]: - dfs(dependency, component) + for neighbor in reverse_graph[node]: + dfs(neighbor, component) + for neighbor in forward_graph[node]: + dfs(neighbor, component) - # Find all connected components for name in recipes: if name not in visited: component: list[str] = [] dfs(name, component) components.append(component) - # For each component, perform topological sort + # === Step 4: Topological sort per component === result_chains: list[list[str]] = [] for component in components: if not component: continue - # Build subgraph for this component - local_indegree = {name: 0 for name in component} - local_queue: deque[str] = deque() - local_order: list[str] = [] - - # Recompute indegree within component - for name in component: - for dep in forward_graph[name]: + # Subgraph indegree + local_indegree = {node: 0 for node in component} + for node in component: + for dep in forward_graph[node]: if dep in component: - local_indegree[name] += 1 - - # Initialize queue with nodes of indegree 0 in this component - for name in component: - if local_indegree[name] == 0: - local_queue.append(name) + local_indegree[node] += 1 - # Kahn's algorithm - while local_queue: - current = local_queue.popleft() - local_order.append(current) + queue: deque[str] = deque( + [node for node in component if local_indegree[node] == 0] + ) + order: list[str] = [] - # Reduce indegree of neighbors - for dependent in reverse_graph[current]: + while queue: + curr = queue.popleft() + order.append(curr) + for dependent in reverse_graph[curr]: if dependent in component: local_indegree[dependent] -= 1 if local_indegree[dependent] == 0: - local_queue.append(dependent) + queue.append(dependent) - # Check for cycles (should not happen in valid build graph, but be safe) - if len(local_order) != len(component): - # Cycle detected - for robustness, fall back to any order - local_order = component[:] + if len(order) != len(component): + # Cycle fallback + order = component[:] - result_chains.append(local_order) + result_chains.append(order) return result_chains diff --git a/scripts/dependency_chain.py b/scripts/dependency_chain.py index daa353615..690b6122d 100755 --- a/scripts/dependency_chain.py +++ b/scripts/dependency_chain.py @@ -27,7 +27,6 @@ def main() -> None: # pylint: disable=R0914 ) argparse_add_cleanup(parser) _, repo, results = parse_args_and_fetch_packages(parser) - missing = list(results[PackageStatus.Missing].keys()) print( From 8edd0f29e556ec4bb6b6a9d1898c19a6a921f7ef Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 16:30:49 -0600 Subject: [PATCH 47/88] Cleanup, use github mirror for wireguard --- package/linux-stracciatella/package | 6 ++- package/wireguard/package | 6 ++- scripts/build/repo.py | 64 ++++++++++++++--------------- 3 files changed, 40 insertions(+), 36 deletions(-) diff --git a/package/linux-stracciatella/package b/package/linux-stracciatella/package index 0825475f7..a1f4a7b45 100644 --- a/package/linux-stracciatella/package +++ b/package/linux-stracciatella/package @@ -18,11 +18,13 @@ image=base:v3.1 _wireguard_version=1.0.20220627 source=( "https://github.com/Etn40ff/linux-remarkable/archive/refs/tags/${pkgver%-*}.tar.gz" - "https://git.zx2c4.com/wireguard-linux-compat/snapshot/wireguard-linux-compat-$_wireguard_version.tar.xz" + # "https://git.zx2c4.com/wireguard-linux-compat/snapshot/wireguard-linux-compat-$_wireguard_version.tar.xz" + "https://github.com/WireGuard/wireguard-linux-compat/archive/refs/tags/v$_wireguard_version.tar.gz" ) sha256sums=( 29fd9d7adcb243b841d3577088dd2aec6106eaaa3bc51440411f49ea50658c01 - 362d412693c8fe82de00283435818d5c5def7f15e2433a07a9fe99d0518f63c0 + # 362d412693c8fe82de00283435818d5c5def7f15e2433a07a9fe99d0518f63c0 + 7bd8ea9407804faad721a66affab1c9e5f190151420b807a8259bd24db9836d0 ) noextract=("wireguard-linux-compat-$_wireguard_version.tar.xz") preparedepends=(build:libarchive-tools) diff --git a/package/wireguard/package b/package/wireguard/package index 4ec35662e..6bdde263f 100755 --- a/package/wireguard/package +++ b/package/wireguard/package @@ -27,11 +27,13 @@ _defconfigs=( image=base:v3.2 source=( - "https://git.zx2c4.com/wireguard-linux-compat/snapshot/wireguard-linux-compat-${pkgver%-*}.tar.xz" + # "https://git.zx2c4.com/wireguard-linux-compat/snapshot/wireguard-linux-compat-${pkgver%-*}.tar.xz" + "https://github.com/WireGuard/wireguard-linux-compat/archive/refs/tags/v${pkgver%-*}.tar.gz" fix-multiple-yylloc-definitions.patch ) sha256sums=( - 362d412693c8fe82de00283435818d5c5def7f15e2433a07a9fe99d0518f63c0 + # 362d412693c8fe82de00283435818d5c5def7f15e2433a07a9fe99d0518f63c0 + 7bd8ea9407804faad721a66affab1c9e5f190151420b807a8259bd24db9836d0 SKIP ) diff --git a/scripts/build/repo.py b/scripts/build/repo.py index aacfed0b6..c5fabe5df 100644 --- a/scripts/build/repo.py +++ b/scripts/build/repo.py @@ -253,29 +253,26 @@ def make_compatibility(self) -> None: compat_dest = self.repo_dir _ = shutil.copy2(compat_source, compat_dest) - def dependency_chains( # pylint:disable=R0914, R0912 + def dependency_chains( # pylint:disable=R0914, R0912, R0915 self, recipes: list[str], ) -> list[list[str]]: """ Generate dependency chains where each chain contains recipes in build order. - Recipes that share dependencies (via provided packages) are grouped into the same chain. + Recipes that share dependencies are grouped into the same chain. """ - - # === Step 1: Build package -> recipe mapping (what provides what) === package_to_recipe: dict[str, str] = {} - for name in recipes: - recipe = self.generic_recipes[name] + for recipe_name in recipes: + recipe = self.generic_recipes[recipe_name] for arch_recipe in recipe.values(): - for pkg in arch_recipe.packages.keys(): - if pkg in package_to_recipe: - # Conflict? Multiple recipes provide same package? Rare, but warn? - pass # Or raise/log - package_to_recipe[pkg] = name - - # === Step 2: Build graphs === - reverse_graph: dict[str, set[str]] = defaultdict(set) # dep -> [dependents] - forward_graph: dict[str, set[str]] = defaultdict(set) # recipe -> [recipe deps] + for package_name in arch_recipe.packages.keys(): + if package_name in package_to_recipe: + logger.warning("Duplicate %s package found", package_name) + + package_to_recipe[package_name] = recipe_name + + reverse_graph: dict[str, set[str]] = defaultdict(set) + forward_graph: dict[str, set[str]] = defaultdict(set) indegree: dict[str, int] = defaultdict(int) for name in recipes: @@ -288,11 +285,13 @@ def dependency_chains( # pylint:disable=R0914, R0912 } recipe_deps: set[str] = set() - for pkg in host_dep_packages: - if pkg in package_to_recipe: - dep_recipe = package_to_recipe[pkg] - if dep_recipe in recipes: - recipe_deps.add(dep_recipe) + for package_name in host_dep_packages: + if package_name not in package_to_recipe: + continue + + dep_recipe = package_to_recipe[package_name] + if dep_recipe in recipes: + recipe_deps.add(dep_recipe) forward_graph[name] = recipe_deps for dep_recipe in recipe_deps: @@ -302,7 +301,6 @@ def dependency_chains( # pylint:disable=R0914, R0912 if name not in indegree: indegree[name] = 0 - # === Step 3: Find connected components via DFS (undirected graph) === visited: set[str] = set() components: list[list[str]] = [] @@ -314,23 +312,24 @@ def dfs(node: str, component: list[str]) -> None: for neighbor in reverse_graph[node]: dfs(neighbor, component) + for neighbor in forward_graph[node]: dfs(neighbor, component) for name in recipes: - if name not in visited: - component: list[str] = [] - dfs(name, component) - components.append(component) + if name in visited: + continue + + component: list[str] = [] + dfs(name, component) + components.append(component) - # === Step 4: Topological sort per component === result_chains: list[list[str]] = [] for component in components: if not component: continue - # Subgraph indegree local_indegree = {node: 0 for node in component} for node in component: for dep in forward_graph[node]: @@ -346,13 +345,14 @@ def dfs(node: str, component: list[str]) -> None: curr = queue.popleft() order.append(curr) for dependent in reverse_graph[curr]: - if dependent in component: - local_indegree[dependent] -= 1 - if local_indegree[dependent] == 0: - queue.append(dependent) + if dependent not in component: + continue + + local_indegree[dependent] -= 1 + if local_indegree[dependent] == 0: + queue.append(dependent) if len(order) != len(component): - # Cycle fallback order = component[:] result_chains.append(order) From 46560e35f1791a1daaba7264a5bd9aae8b1cca03 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 16:52:02 -0600 Subject: [PATCH 48/88] Update dotnet, add rmpp/m support to dotnet --- package/dotnet/package | 51 +++++++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/package/dotnet/package b/package/dotnet/package index b794be71f..19669aec0 100644 --- a/package/dotnet/package +++ b/package/dotnet/package @@ -2,7 +2,7 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT -archs=(rm1 rm2) +archs=(rm1 rm2 rmpp rmppm) pkgnames=( dotnet-profile dotnet-host @@ -13,19 +13,43 @@ pkgnames=( aspnet-targeting-pack netstandard-targeting-pack ) -pkgver=3.1.20-2 -timestamp=2020-12-27T18:48Z +pkgver=3.1.32-1 +timestamp=2022-12-13T00:00Z maintainer="Eeems " url=https://www.microsoft.com/net/core section="devel" license=MIT -source=( - https://download.visualstudio.microsoft.com/download/pr/cefd43b6-16ac-4435-bcc6-594ebb0441cf/7d064f0f61c4174f620eafe97484e6cb/dotnet-sdk-3.1.414-linux-arm.tar.gz +source_rm1=( + https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-arm.tar.gz dotnet-profile.sh ) -sha256sums=( - dd9cf827b9af32a975f5c62c59221568782768d7ff5fc1622111f13c1dbe9339 +sha256sums_rm1=( + ec2305f43fe64a258a32cce29e77a40ddc503c95df01c9e8673af9ee5a23674e + SKIP +) +source_rm2=( + https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-arm.tar.gz + dotnet-profile.sh +) +sha256sums_rm2=( + ec2305f43fe64a258a32cce29e77a40ddc503c95df01c9e8673af9ee5a23674e + SKIP +) +source_rmpp=( + https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-arm64.tar.gz + dotnet-profile.sh +) +sha256sums_rmpp=( + 7e396017a3e32b0209406c73ead9f4c03d3f521768fcd548d02a0ff5c3d45593 + SKIP +) +source_rmppm=( + https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-arm64.tar.gz + dotnet-profile.sh +) +sha256sums_rmppm=( + 7e396017a3e32b0209406c73ead9f4c03d3f521768fcd548d02a0ff5c3d45593 SKIP ) @@ -92,7 +116,18 @@ dotnet-targeting-pack() { package() { install -dm 755 "$pkgdir"/opt/usr/share/{dotnet,dotnet/packs,licenses} - cp -dr --no-preserve='ownership' "$srcdir"/packs/Microsoft.NETCore.App.{Host.linux-arm,Ref} "$pkgdir"/opt/usr/share/dotnet/packs/ + case $arch in + rm1 | rm2) + cp -dr --no-preserve='ownership' "$srcdir"/packs/Microsoft.NETCore.App.{Host.linux-arm,Ref} "$pkgdir"/opt/usr/share/dotnet/packs/ + ;; + rmpp | rmppm) + cp -dr --no-preserve='ownership' "$srcdir"/packs/Microsoft.NETCore.App.{Host.linux-arm64,Ref} "$pkgdir"/opt/usr/share/dotnet/packs/ + ;; + *) + echo "Unhandled architecture: $arc" + exit 1 + ;; + esac ln -s dotnet-host-bin "$pkgdir"/opt/usr/share/licenses/dotnet-targeting-pack-bin } } From fea4a33fa4474a6ce61ec72ffdda4e34528654a2 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 16:55:47 -0600 Subject: [PATCH 49/88] Fix linux-stracciatella --- package/linux-stracciatella/package | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package/linux-stracciatella/package b/package/linux-stracciatella/package index a1f4a7b45..61726a365 100644 --- a/package/linux-stracciatella/package +++ b/package/linux-stracciatella/package @@ -26,14 +26,14 @@ sha256sums=( # 362d412693c8fe82de00283435818d5c5def7f15e2433a07a9fe99d0518f63c0 7bd8ea9407804faad721a66affab1c9e5f190151420b807a8259bd24db9836d0 ) -noextract=("wireguard-linux-compat-$_wireguard_version.tar.xz") +noextract=("v$_wireguard_version.tar.gz") preparedepends=(build:libarchive-tools) prepare() { # Jury-rig the wireguard module into sources and enable it mkdir "$srcdir/net/wireguard" bsdtar --strip-components 2 -xJ -C "$srcdir/net/wireguard" \ - -f "$srcdir/wireguard-linux-compat-$_wireguard_version.tar.xz" \ + -f "$srcdir/v$_wireguard_version.tar.gz" \ "wireguard-linux-compat-$_wireguard_version/src" sed -i "/^obj-\\\$(CONFIG_NETFILTER).*+=/a obj-\$(CONFIG_WIREGUARD) += wireguard/" "$srcdir/net/Makefile" sed -i "/^if INET\$/a source \"net/wireguard/Kconfig\"" "$srcdir/net/Kconfig" From 36e96d0dfdd618547b1651b49a2a3140aa4678f1 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 17:43:25 -0600 Subject: [PATCH 50/88] Split recipe parsing in testing/stable deployments as well --- .github/workflows/pr.yml | 14 +++---- .github/workflows/stable.yml | 71 +++++++++++++++++++++++++++++++++-- .github/workflows/testing.yml | 71 +++++++++++++++++++++++++++++++++-- 3 files changed, 143 insertions(+), 13 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 7f180ecb1..574ad1692 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -38,8 +38,8 @@ jobs: echo "}" >> $GITHUB_OUTPUT echo 'EOF' >> $GITHUB_OUTPUT env: - FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} - pr: + FLAGS: --remote-repo ${{ secrets.REMOTE_HTTP }}//${{ github.base_ref }} + build: name: Build ${{ matrix.recipes }} runs-on: ubuntu-24.04 needs: [lint, dependencies] @@ -59,17 +59,17 @@ jobs: - name: Build packages run: make repo-new env: - FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} --filter "${{ matrix.recipes }}" + FLAGS: --remote-repo ${{ secrets.REMOTE_HTTP }}//${{ github.base_ref }} --filter "${{ matrix.recipes }}" CLEANUP: 1 - name: Upload all ipk uses: actions/upload-artifact@v4 with: name: recipes-${{ matrix.recipes }} path: build/repo/**/*.ipk - experimental: - name: Generate dependency chains + deploy: + name: Deploy experimental branch runs-on: ubuntu-24.04 - needs: [pr] + needs: [build] if: ${{ contains(github.event.pull_request.labels.*.name, 'experimental') }} steps: - name: Checkout the Git repository @@ -90,7 +90,7 @@ jobs: - name: Build packages for experimental run: make repo env: - FLAGS: --remote-repo https://toltec-dev.org/${{ github.base_ref }} + FLAGS: --remote-repo ${{ secrets.REMOTE_HTTP }}//${{ github.base_ref }} CLEANUP: 1 - name: Sync packages with the remote repository uses: ./.github/actions/sync-repository diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index 468c7d1c7..d8242c57f 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -4,18 +4,83 @@ on: branches: - stable jobs: - stable: - name: Build and publish the stable channel + dependencies: + name: Generate dependency chains runs-on: ubuntu-24.04 + outputs: + recipes-matrix: ${{ steps.recipes-matrix.outputs.JSON_CONTENT }} steps: - name: Checkout the Git repository uses: actions/checkout@v4 - name: Setup Toltec dependencies uses: ./.github/actions/setup + - name: Cache repo + uses: actions/cache@v4 + with: + path: build/repo + key: stable-${{ hashFiles('package/*/package') }} + - name: Get recipe lists + id: recipes-matrix + run: | + make .venv/bin/activate + echo 'JSON_CONTENT<> $GITHUB_OUTPUT + echo '{"include":' >> $GITHUB_OUTPUT + make dependency-chain >> $GITHUB_OUTPUT + echo "}" >> $GITHUB_OUTPUT + echo 'EOF' >> $GITHUB_OUTPUT + env: + FLAGS: --remote-repo ${{ secrets.REMOTE_HTTP }}/stable + build: + name: Build ${{ matrix.recipes }} + runs-on: ubuntu-24.04 + needs: [dependencies] + strategy: + matrix: ${{ fromJson(needs.dependencies.outputs.recipes-matrix) }} + fail-fast: false + steps: + - name: Checkout the Git repository + uses: actions/checkout@v4 + - name: Setup Toltec dependencies + uses: ./.github/actions/setup + - name: Cache repo + uses: actions/cache@v4 + with: + path: build/repo + key: stable-${{ hashFiles('package/*/package') }} - name: Build packages + run: make repo-new + env: + FLAGS: --remote-repo ${{ secrets.REMOTE_HTTP }}/stable --filter "${{ matrix.recipes }}" + CLEANUP: 1 + - name: Upload all ipk + uses: actions/upload-artifact@v4 + with: + name: recipes-${{ matrix.recipes }} + path: build/repo/**/*.ipk + deploy: + name: Deploy stable branch + runs-on: ubuntu-24.04 + needs: [build] + steps: + - name: Checkout the Git repository + uses: actions/checkout@v4 + - name: Setup Toltec dependencies + uses: ./.github/actions/setup + - name: Cache repo + uses: actions/cache@v4 + with: + path: build/repo + key: stable-${{ hashFiles('package/*/package') }} + - name: Download all packages + uses: actions/download-artifact@v5 + with: + path: build/repo + pattern: recipes-* + merge-multiple: true + - name: Build packages for stable run: make repo env: - FLAGS: --remote-repo ${{ secrets.REMOTE_HTTP }}/stable + FLAGS: --remote-repo ${{ secrets.REMOTE_HTTP }}//stable CLEANUP: 1 - name: Sync packages with the remote repository uses: ./.github/actions/sync-repository diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 0b007b56a..0929b88fc 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -4,18 +4,83 @@ on: branches: - testing jobs: - testing: - name: Build and publish the testing channel + dependencies: + name: Generate dependency chains runs-on: ubuntu-24.04 + outputs: + recipes-matrix: ${{ steps.recipes-matrix.outputs.JSON_CONTENT }} steps: - name: Checkout the Git repository uses: actions/checkout@v4 - name: Setup Toltec dependencies uses: ./.github/actions/setup + - name: Cache repo + uses: actions/cache@v4 + with: + path: build/repo + key: testing-${{ hashFiles('package/*/package') }} + - name: Get recipe lists + id: recipes-matrix + run: | + make .venv/bin/activate + echo 'JSON_CONTENT<> $GITHUB_OUTPUT + echo '{"include":' >> $GITHUB_OUTPUT + make dependency-chain >> $GITHUB_OUTPUT + echo "}" >> $GITHUB_OUTPUT + echo 'EOF' >> $GITHUB_OUTPUT + env: + FLAGS: --remote-repo ${{ secrets.REMOTE_HTTP }}//testing + build: + name: Build ${{ matrix.recipes }} + runs-on: ubuntu-24.04 + needs: [dependencies] + strategy: + matrix: ${{ fromJson(needs.dependencies.outputs.recipes-matrix) }} + fail-fast: false + steps: + - name: Checkout the Git repository + uses: actions/checkout@v4 + - name: Setup Toltec dependencies + uses: ./.github/actions/setup + - name: Cache repo + uses: actions/cache@v4 + with: + path: build/repo + key: testing-${{ hashFiles('package/*/package') }} - name: Build packages + run: make repo-new + env: + FLAGS: --remote-repo ${{ secrets.REMOTE_HTTP }}//testing --filter "${{ matrix.recipes }}" + CLEANUP: 1 + - name: Upload all ipk + uses: actions/upload-artifact@v4 + with: + name: recipes-${{ matrix.recipes }} + path: build/repo/**/*.ipk + deploy: + name: Deploy testing branch + runs-on: ubuntu-24.04 + needs: [build] + steps: + - name: Checkout the Git repository + uses: actions/checkout@v4 + - name: Setup Toltec dependencies + uses: ./.github/actions/setup + - name: Cache repo + uses: actions/cache@v4 + with: + path: build/repo + key: testing-${{ hashFiles('package/*/package') }} + - name: Download all packages + uses: actions/download-artifact@v5 + with: + path: build/repo + pattern: recipes-* + merge-multiple: true + - name: Build packages for testing run: make repo env: - FLAGS: --remote-repo ${{ secrets.REMOTE_HTTP }}/testing + FLAGS: --remote-repo ${{ secrets.REMOTE_HTTP }}//testing CLEANUP: 1 - name: Sync packages with the remote repository uses: ./.github/actions/sync-repository From a961d061f329b2c83536fa03a170a1bde707520c Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 17:52:38 -0600 Subject: [PATCH 51/88] Fix mount generation for rmpp/m --- package/toltec-bootstrap/toltecctl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index 7c95f259f..a6c5cf386 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -243,6 +243,7 @@ Description=Bind mount $1 over $2 DefaultDependencies=no Conflicts=umount.target Before=local-fs.target umount.target +BindsTo=home.mount After=home.mount [Mount] What=$1 @@ -250,7 +251,7 @@ Where=$2 Type=none Options=bind [Install] -WantedBy=local-fs.target +WantedBy=multi-user.target UNIT systemctl daemon-reload From 7b5c12532b7588b4465d19a30b9847a08870982d Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 19:20:02 -0600 Subject: [PATCH 52/88] Attempt to speed up netsurf build --- Makefile | 2 +- package/netsurf/package | 92 +++++++++++++++++++++++++++++++-- package/netsurf/ssl-links.patch | 23 --------- 3 files changed, 88 insertions(+), 29 deletions(-) delete mode 100644 package/netsurf/ssl-links.patch diff --git a/Makefile b/Makefile index bf9d5bee8..cbeb35282 100644 --- a/Makefile +++ b/Makefile @@ -122,7 +122,7 @@ format-fix: .venv/bin/activate black --line-length 80 scripts lint: .venv/bin/activate - @echo "==> Linting Bash scripts" +# @echo "==> Linting Bash scripts" # shellcheck $$(shfmt -f .) -P SCRIPTDIR @echo "==> Typechecking Python files" . .venv/bin/activate; \ diff --git a/package/netsurf/package b/package/netsurf/package index 563b32df2..67fa8d095 100644 --- a/package/netsurf/package +++ b/package/netsurf/package @@ -37,23 +37,105 @@ flags=(patch_rm2fb) source=( https://github.com/alex0809/netsurf-reMarkable/archive/11ba4e18c65c687693c03d58da329e90662282e8.zip + https://gitlab.freedesktop.org/freetype/freetype/-/archive/VER-2-10-4/freetype-VER-2-10-4.tar.gz netsurf.draft - ssl-links.patch ) sha256sums=( 18813be8d3492bdfc6d498ee62e32c691a329b64388970c04ca4ce8b3e656241 + 4d47fca95debf8eebde5d27e93181f05b4758701ab5ce3e7b3c54b937e8f0962 SKIP - SKIP +) +noextract=( + libiconv-1.16.tar.gz + freetype-VER-2-10-4.tar.gz + 2.0.90 ) prepare() { - patch -d "$srcdir" -p1 < "$srcdir"/ssl-links.patch + set -e + ( + # toltecmk times out when trying to download this, but manual curl works fine + if [ -f ../libiconv-1.16.tar.gz ] && ! echo "e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04 ../libiconv-1.16.tar.gz" | sha256sum -c; then + rm ../libiconv-1.16.tar.gz + fi + if ! [ -f ../libiconv-1.16.tar.gz ]; then + curl https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz -o ../libiconv-1.16.tar.gz + fi + echo "e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04 ../libiconv-1.16.tar.gz" | sha256sum -c + mkdir libiconv + cd libiconv + tar --strip-components=1 -xf ../libiconv-1.16.tar.gz + ) & + + ( + if [ -f ../libjpeg-turbo.tar.gz ] && ! echo "6a965adb02ad898b2ae48214244618fe342baea79db97157fdc70d8844ac6f09 ../libjpeg-turbo.tar.gz" | sha256sum -c; then + rm ../libjpeg-turbo.tar.gz + fi + if ! [ -f libjpeg-turbo.tar.gz ]; then + curl https://codeload.github.com/libjpeg-turbo/libjpeg-turbo/tar.gz/refs/tags/2.0.90 -o ../libjpeg-turbo.tar.gz + fi + mkdir libjpeg-turbo + cd libjpeg-turbo + tar --strip-components=1 -xf ../libjpeg-turbo.tar.gz + ) & + + ( + mkdir freetype + cd freetype + tar --strip-components=1 -xf ../freetype-VER-2-10-4.tar.gz + ) & + wait $(jobs -p) } build() { + set -e ln -s /usr/bin/which /bin - MAKEFLAGS="-j$(nproc)" scripts/install_dependencies.sh - MAKEFLAGS="-j$(nproc)" TARGET_WORKSPACE=$(pwd)/build scripts/build.sh + export MAKEFLAGS="-j$(nproc)" + export DEBIAN_FRONTEND=noninteractive + + ( + # Build libiconv 1.16 + cd libiconv + ./configure \ + --prefix="$SYSROOT/usr" \ + --host="$CHOST" \ + --enable-static \ + --disable-shared + make + make install + ) & + ( + # Build FreeType 2.10.4 + cd freetype + bash autogen.sh + ./configure \ + --without-zlib \ + --without-png \ + --enable-static=yes \ + --enable-shared=no \ + --without-bzip2 \ + --host=arm-linux-gnueabihf \ + --host="$CHOST" \ + --disable-freetype-config + make + DESTDIR="$SYSROOT" make install + ) & + + ( + # Build libjpeg-turbo 2.0.90 + cd libjpeg-turbo + cmake \ + -DCMAKE_SYSROOT="$SYSROOT" \ + -DCMAKE_TOOLCHAIN_FILE="/usr/share/cmake/$CHOST.cmake" \ + -DCMAKE_INSTALL_LIBDIR="$SYSROOT/lib" \ + -DCMAKE_INSTALL_INCLUDEDIR="$SYSROOT/usr/include" \ + -DENABLE_SHARED=FALSE + make + make install + ) & + + wait $(jobs -p) + TARGET_WORKSPACE=$(pwd)/build scripts/build.sh } package() { diff --git a/package/netsurf/ssl-links.patch b/package/netsurf/ssl-links.patch deleted file mode 100644 index b2d6dc819..000000000 --- a/package/netsurf/ssl-links.patch +++ /dev/null @@ -1,23 +0,0 @@ -# From https://github.com/alex0809/netsurf-reMarkable/pull/39 -From 97d45f3e8fd7320ef3ffbd94c7e796d4e076acfe Mon Sep 17 00:00:00 2001 -From: Leonid Belyaev -Date: Mon, 17 Feb 2025 19:21:51 -0500 -Subject: [PATCH] curl follows links for openssl - ---- - scripts/install_dependencies.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/scripts/install_dependencies.sh b/scripts/install_dependencies.sh -index be1adc699..ae771b639 100755 ---- a/scripts/install_dependencies.sh -+++ b/scripts/install_dependencies.sh -@@ -22,7 +22,7 @@ export DEBIAN_FRONTEND=noninteractive \ - export DEBIAN_FRONTEND=noninteractive \ - && mkdir openssl \ - && cd openssl \ -- && curl https://www.openssl.org/source/openssl-1.1.1k.tar.gz -o openssl.tar.gz \ -+ && curl -L https://www.openssl.org/source/openssl-1.1.1k.tar.gz -o openssl.tar.gz \ - && echo "892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5 openssl.tar.gz" > sha256sums \ - && sha256sum -c sha256sums \ - && tar --strip-components=1 -xf openssl.tar.gz \ From 551992956e9e32fb505a4d88108552aa28930e17 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 20:11:14 -0600 Subject: [PATCH 53/88] Fix netsurf build, don't remove src on build --- package/netsurf/package | 23 ++++++++++++----------- scripts/repo_build.py | 1 - 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package/netsurf/package b/package/netsurf/package index 67fa8d095..e29504cd8 100644 --- a/package/netsurf/package +++ b/package/netsurf/package @@ -55,32 +55,33 @@ prepare() { set -e ( # toltecmk times out when trying to download this, but manual curl works fine - if [ -f ../libiconv-1.16.tar.gz ] && ! echo "e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04 ../libiconv-1.16.tar.gz" | sha256sum -c; then - rm ../libiconv-1.16.tar.gz + if [ -f libiconv-1.16.tar.gz ] && ! echo "e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04 libiconv-1.16.tar.gz" | sha256sum -c; then + rm libiconv-1.16.tar.gz fi - if ! [ -f ../libiconv-1.16.tar.gz ]; then - curl https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz -o ../libiconv-1.16.tar.gz + if ! [ -f libiconv-1.16.tar.gz ]; then + curl https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz -o libiconv-1.16.tar.gz fi - echo "e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04 ../libiconv-1.16.tar.gz" | sha256sum -c - mkdir libiconv + echo "e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04 libiconv-1.16.tar.gz" | sha256sum -c + mkdir -p libiconv cd libiconv tar --strip-components=1 -xf ../libiconv-1.16.tar.gz ) & ( - if [ -f ../libjpeg-turbo.tar.gz ] && ! echo "6a965adb02ad898b2ae48214244618fe342baea79db97157fdc70d8844ac6f09 ../libjpeg-turbo.tar.gz" | sha256sum -c; then - rm ../libjpeg-turbo.tar.gz + if [ -f libjpeg-turbo.tar.gz ] && ! echo "6a965adb02ad898b2ae48214244618fe342baea79db97157fdc70d8844ac6f09 libjpeg-turbo.tar.gz" | sha256sum -c; then + rm libjpeg-turbo.tar.gz fi if ! [ -f libjpeg-turbo.tar.gz ]; then - curl https://codeload.github.com/libjpeg-turbo/libjpeg-turbo/tar.gz/refs/tags/2.0.90 -o ../libjpeg-turbo.tar.gz + curl https://codeload.github.com/libjpeg-turbo/libjpeg-turbo/tar.gz/refs/tags/2.0.90 -o libjpeg-turbo.tar.gz fi - mkdir libjpeg-turbo + echo "6a965adb02ad898b2ae48214244618fe342baea79db97157fdc70d8844ac6f09 libjpeg-turbo.tar.gz" | sha256sum -c + mkdir -p libjpeg-turbo cd libjpeg-turbo tar --strip-components=1 -xf ../libjpeg-turbo.tar.gz ) & ( - mkdir freetype + mkdir -p freetype cd freetype tar --strip-components=1 -xf ../freetype-VER-2-10-4.tar.gz ) & diff --git a/scripts/repo_build.py b/scripts/repo_build.py index 59a66cfce..0f2ff81be 100755 --- a/scripts/repo_build.py +++ b/scripts/repo_build.py @@ -141,7 +141,6 @@ def main() -> None: # pylint: disable=R0914,R0912 with Builder( os.path.join(paths.WORK_DIR, name), paths.REPO_DIR ) as builder: - rmtree(builder.work_dir, ignore_errors=True) recipe_bundle = parse_recipe( os.path.join(paths.RECIPE_DIR, name) ) From b79165b4415fdb798f9189bdf71c293c748973fc Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 21:36:43 -0600 Subject: [PATCH 54/88] Fix bandwhich --- package/bandwhich/package | 21 ++++++++++++++++++--- requirements.txt | 2 +- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/package/bandwhich/package b/package/bandwhich/package index ecce6bd6a..5c193583c 100644 --- a/package/bandwhich/package +++ b/package/bandwhich/package @@ -2,7 +2,7 @@ # Copyright (c) 2024 The Toltec Contributors # SPDX-License-Identifier: MIT -archs=(rm1 rm2) +archs=(rm1 rm2 rmpp rmppm) pkgnames=(bandwhich) pkgdesc="CLI network utilization tool" url=https://github.com/imsnif/bandwhich @@ -12,7 +12,9 @@ section="utils" maintainer="gbyl " license=MIT -image=rust:v4.0 +image=rust:v3.2 +image_rmpp=rust:v4.0 +image_rmppm=rust:v4.0 source=("https://github.com/imsnif/bandwhich/archive/refs/tags/v${pkgver%-*}.zip") sha256sums=(92f33ddac849161d0d10aef23b027a531c6604f1b96078ed59f0baeed9f91ae5) @@ -21,5 +23,18 @@ build() { } package() { - install -D -m 755 "$srcdir"/target/armv7-unknown-linux-gnueabihf/release/bandwhich "$pkgdir"/opt/bin/bandwhich + local target + case $arch in + rm1 | rm2) + target=armv7-unknown-linux-gnueabihf + ;; + rmpp | rmppm) + target=aarch64-unknown-linux-gnu + ;; + *) + echo "Unhandled arch: $arch" + exit 1 + ;; + esac + install -D -m 755 "$srcdir"/target/"$target"/release/bandwhich "$pkgdir"/opt/bin/bandwhich } diff --git a/requirements.txt b/requirements.txt index 88ab8e9c3..838b2e4c6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ mypy-extensions==1.0.0 mypy==1.7.1 pylint==3.0.3 six==1.16.0 -toltecmk==0.5.3 +toltecmk==0.5.4 toml==0.10.2 types-python-dateutil==2.8.19.14 types-requests==2.31.0.2 From 49ab006269d37927b6dfedbb2431842e4ba9e3b7 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 22:05:35 -0600 Subject: [PATCH 55/88] Upgrade quickjs, add aarch64 micro, upgrade tilem, bump missed versions --- package/appmarkable/package | 2 +- package/micro/package | 10 ++++++++-- package/quickjs/package | 17 ++++++++++------- package/rempack/package | 2 +- package/tilem/package | 4 ++-- 5 files changed, 22 insertions(+), 13 deletions(-) diff --git a/package/appmarkable/package b/package/appmarkable/package index 3cc885d4d..99077ad21 100644 --- a/package/appmarkable/package +++ b/package/appmarkable/package @@ -5,7 +5,7 @@ archs=(rm1 rm2) pkgnames=(appmarkable) pkgdesc="Front-end for apps that do not have a graphical user interface" url="https://github.com/LinusCDE/appmarkable" -pkgver=0.1.3-1 +pkgver=0.1.3-2 timestamp=2024-06-01T21:00Z section="devel" maintainer="Linus K. " diff --git a/package/micro/package b/package/micro/package index fd6c182fe..c6f918f7f 100644 --- a/package/micro/package +++ b/package/micro/package @@ -2,11 +2,11 @@ # Copyright (c) 2020 The Toltec Contributors # SPDX-License-Identifier: MIT -archs=(rm1 rm2) +archs=(rm1 rm2 rmpp rmppm) pkgnames=(micro) pkgdesc="Modern and intuitive terminal-based text editor" url=https://micro-editor.github.io/ -pkgver=2.0.14-1 +pkgver=2.0.14-2 timestamp=2024-08-27T18:13:07Z section="utils" maintainer="Eeems " @@ -15,6 +15,12 @@ license=MIT source=("https://github.com/zyedidia/micro/releases/download/v2.0.14/micro-2.0.14-linux-arm.tar.gz") sha256sums=(9f490d88bd30a548af99a905f50244dc6c80f3c7a3c6f98faeb5b0a7329f7dea) +source_rmpp=("https://github.com/zyedidia/micro/releases/download/v2.0.14/micro-2.0.14-linux-arm64.tar.gz") +sha256sums_rmpp=(2e01b3ea62cdea3e62eb3ee99f6bffe84de06f689cf479173c4e7221b6613d06) + +source_rmppm=("https://github.com/zyedidia/micro/releases/download/v2.0.14/micro-2.0.14-linux-arm64.tar.gz") +sha256sums_rmppm=(2e01b3ea62cdea3e62eb3ee99f6bffe84de06f689cf479173c4e7221b6613d06) + package() { install -Dm644 "$srcdir"/LICENSE "$pkgdir/opt/usr/share/licenses/$pkgname/LICENSE" install -Dm644 "$srcdir"/LICENSE-THIRD-PARTY "$pkgdir/opt/usr/share/licenses/$pkgname/LICENSE-THIRD-PARTY" diff --git a/package/quickjs/package b/package/quickjs/package index b503d5c24..0b5f04ca8 100644 --- a/package/quickjs/package +++ b/package/quickjs/package @@ -6,26 +6,29 @@ archs=(rm1 rm2 rmpp rmppm) pkgnames=(quickjs) pkgdesc="A small and embeddable Javascript engine" url=https://bellard.org/quickjs/ -pkgver=2024.01.13-1 +pkgver=2025-09-13-2 section="devel" -timestamp=2024-01-13T00:00Z +timestamp=2025-09-13T00:00Z maintainer="khanhas " license=MIT -image=base:v3.1 +image=base:v3.2 +image_rmpp=base:v4.0 +image_rmppm=base:v4.0 + source=( - https://bellard.org/quickjs/quickjs-2024-01-13.tar.xz + https://bellard.org/quickjs/quickjs-2025-09-13-2.tar.xz ) sha256sums=( - 3c4bf8f895bfa54beb486c8d1218112771ecfc5ac3be1036851ef41568212e03 + 996c6b5018fc955ad4d06426d0e9cb713685a00c825aa5c0418bd53f7df8b0b4 ) build() { - make CROSS_PREFIX="$CROSS_COMPILE" qjs qjscalc + make CROSS_PREFIX="$CROSS_COMPILE" qjs qjsc } package() { install -d "$pkgdir"/opt/bin install -D -m 755 -t "$pkgdir"/opt/bin/ "$srcdir"/qjs - ln -s qjs "$pkgdir"/opt/bin/qjscalc + install -D -m 755 -t "$pkgdir"/opt/bin/ "$srcdir"/qjsc } diff --git a/package/rempack/package b/package/rempack/package index 173f5e409..9e96aefc0 100644 --- a/package/rempack/package +++ b/package/rempack/package @@ -7,7 +7,7 @@ pkgnames=(rempack) pkgdesc="A user friendly package manager frontend for opkg" archs=(rmall) url="https://github.com/rexxar-tc/rempack" -pkgver=1.1.4 +pkgver=1.1.4-1 timestamp=2025-03-09T21:13:27 section=admin maintainer="Brant Martin " diff --git a/package/tilem/package b/package/tilem/package index aac5c476d..5fc8dfaf7 100644 --- a/package/tilem/package +++ b/package/tilem/package @@ -6,8 +6,8 @@ archs=(rm1 rm2) pkgnames=(tilem) pkgdesc="TI-84+ calculator emulator" url=https://github.com/timower/rM2-stuff/tree/master/apps/tilem -_tag=0.1.2 -pkgver=${_tag}-2 +_tag=0.1.3 +pkgver=${_tag}-1 timestamp=2024-05-29T17:05:56Z maintainer="Mattéo Delabre " license=GPL-3.0 From f525f7c3e837bc0f04d41304ed5b7d38eb7eadd8 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Thu, 30 Oct 2025 22:19:20 -0600 Subject: [PATCH 56/88] Add rmpp/m to lf --- package/lf/package | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/package/lf/package b/package/lf/package index 0c34baf90..0bc5473ac 100644 --- a/package/lf/package +++ b/package/lf/package @@ -2,7 +2,7 @@ # Copyright (c) 2024 The Toltec Contributors # SPDX-License-Identifier: MIT -archs=(rm1 rm2) +archs=(rm1 rm2 rmpp rmppm) pkgnames=(lf) pkgdesc="Terminal file manager" url=https://github.com/gokcehan/lf @@ -13,12 +13,26 @@ maintainer="gbyl " license=MIT installdepends=(libncurses-dev) -image=golang:v3.1 +image=golang:v3.2 +image_rmpp=golang:v4.0 +image_rmppm=golang:v4.0 + source=("https://github.com/gokcehan/lf/archive/refs/tags/${pkgver%-*}.zip") sha256sums=(571ee17d8181d77a3b8bcd7aaaff0bde062c1851d93e9d324dfe15948136891a) build() { - export GOARCH=arm + case $arch in + rm1 | rm2) + export GOARCH=arm + ;; + rmpp | rmppm) + export GOARCH=arm64 + ;; + *) + echo "Unhandled arch: $arch" + exit 1 + ;; + esac go build } From 89e43fb7fe53356d0dc6a7c2672d6a024262e9bc Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 14:45:51 -0600 Subject: [PATCH 57/88] Fix netevent and mmc-utils --- package/mmc-utils/package | 8 ++++++-- package/netevent/package | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/package/mmc-utils/package b/package/mmc-utils/package index da07a3854..2c3f380e5 100644 --- a/package/mmc-utils/package +++ b/package/mmc-utils/package @@ -13,6 +13,8 @@ maintainer="Alistair Francis " license=GPL-2.0-only image=base:v3.2 +image_rmpp=base:v4.0 +image_rmppm=base:v4.0 preparedepends=(build:git) source=( 0001-Makefile-Remove-Werror.patch @@ -38,9 +40,11 @@ build() { export CC="${CROSS_COMPILE}gcc" export STRIP="${CROSS_COMPILE}strip" - make -C "$srcdir"/mmc-utils -j4 + cd "$srcdir"/mmc-utils + make -j4 + DESTDIR="$srcdir"/install make install } package() { - DESTDIR="$pkgdir" make -C "$srcdir"/mmc-utils install + cp -a "$srcdir"/install "$pkgdir" } diff --git a/package/netevent/package b/package/netevent/package index 4c695d70c..73c4c9fea 100644 --- a/package/netevent/package +++ b/package/netevent/package @@ -12,7 +12,9 @@ section=utils maintainer="Salvatore Stella " license=GPL-2.0-only -image=base:v4.0 +image=base:v3.2 +image_rmpp=base:v4.0 +image_rmppm=base:v4.0 source=( "https://github.com/Blub/netevent/archive/refs/tags/${pkgver%-*}.tar.gz" ) From 15b8906262f843bdb02d0fed2141fe31afc847fd Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 15:53:48 -0600 Subject: [PATCH 58/88] Fix mmc-utils install location and add mmc-utils-doc --- package/mmc-utils/package | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/package/mmc-utils/package b/package/mmc-utils/package index 2c3f380e5..7acd9cac6 100644 --- a/package/mmc-utils/package +++ b/package/mmc-utils/package @@ -3,12 +3,12 @@ # SPDX-License-Identifier: MIT archs=(rm1 rm2 rmpp rmppm) -pkgnames=(mmc-utils) +pkgnames=(mmc-utils mmc-utils-doc) pkgdesc="A tool for monitoring the eMMC protocol" url=https://git.kernel.org/pub/scm/utils/mmc/mmc-utils.git/ pkgver=1.0-3 timestamp=2021-08-12T19:41:07Z -section="devel" +section="utils" maintainer="Alistair Francis " license=GPL-2.0-only @@ -42,9 +42,18 @@ build() { cd "$srcdir"/mmc-utils make -j4 - DESTDIR="$srcdir"/install make install } -package() { - cp -a "$srcdir"/install "$pkgdir" +mmc-utils() { + package() { + install -D -m 755 -t "$pkgdir"/opt/bin "$srcdir"/mmc-utils/mmc + } +} + +mmc-utils-doc() { + installdepends=(man-db) + pkgdesc="Man files for mmc-utils" + package() { + install -D -m 644 <(gzip -c "$srcdir"/mmc-utils/man/mmc.1) "$pkgdir"/opt/share/man/man1/mmc1.gz + } } From 067435356d3f841e34bee9d11ba78045eae12a18 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 16:26:03 -0600 Subject: [PATCH 59/88] Fix filepath --- package/mmc-utils/package | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/mmc-utils/package b/package/mmc-utils/package index 7acd9cac6..c1062cab4 100644 --- a/package/mmc-utils/package +++ b/package/mmc-utils/package @@ -54,6 +54,6 @@ mmc-utils-doc() { installdepends=(man-db) pkgdesc="Man files for mmc-utils" package() { - install -D -m 644 <(gzip -c "$srcdir"/mmc-utils/man/mmc.1) "$pkgdir"/opt/share/man/man1/mmc1.gz + install -D -m 644 <(gzip -c "$srcdir"/mmc-utils/man/mmc.1) "$pkgdir"/opt/share/man/man1/mmc.1.gz } } From 27479bc27c1bd7f6252097aead7d82d464501f45 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 17:28:48 -0600 Subject: [PATCH 60/88] More aarch64 support --- package/toltec-bootstrap/toltecctl | 33 +++++++++++++++++++++++++++--- scripts/bootstrap/bootstrap | 33 ++++++++++++++++++++++-------- 2 files changed, 54 insertions(+), 12 deletions(-) diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index a6c5cf386..59f278e66 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -776,7 +776,20 @@ install-standalone-opkg() { else wget="wget" fi - local opkg_remote=https://bin.entware.net/armv7sf-k3.2/installer/opkg + local arch + case "$(uname -m)" in + "armv7l") + arch=armv7sf-k3.2 + ;; + "aarch64") + arch=aarch64-k3.10 + ;; + *) + echo "ERROR: Unsupported device architecture" + exit 1 + ;; + esac + local opkg_remote=https://bin.entware.net/$arch/installer/opkg if ! "$wget" --no-verbose "$opkg_remote" --output-document "$opkg_path"; then log ERROR "Unable to fetch standalone opkg, make sure you have a stable Wi-Fi connection" @@ -793,9 +806,23 @@ install-standalone-opkg() { # Install a local wget binary which supports TLS (the original one # installed on the reMarkable does not) in the PATH install-standalone-wget() { + local wget_remote + local wget_checksum local wget_path="${toltec_share}/wget" - local wget_remote=http://toltec-dev.org/thirdparty/bin/wget-v1.21.1-2 - local wget_checksum=3130886a020a56b7471ed60f3742db26acdced4b27fed5be22f9892b77589bc5 + case "$(uname -m)" in + "armv7l") + wget_remote=http://toltec-dev.org/thirdparty/bin/wget-v1.21.1-3 + wget_checksum=3130886a020a56b7471ed60f3742db26acdced4b27fed5be22f9892b77589bc5 + ;; + "aarch64") + wget_remote=http://toltec-dev.org/thirdparty/bin/wget-aarch64-v1.21.1-3 + wget_checksum=5480e42cd48bafa5d9a4276fa1359c9c6d79ceed3ea0eb8e4a06c0e61fa34cf0 + ;; + *) + echo "ERROR: Unsupported device architecture" + exit 1 + ;; + esac if [ -f "$wget_path" ] && ! [[ -e $wget_path ]] || ! sha256sum -c <(echo "$wget_checksum $wget_path") > /dev/null 2>&1; then rm "$wget_path" diff --git a/scripts/bootstrap/bootstrap b/scripts/bootstrap/bootstrap index 61508e6dd..13cf47e62 100755 --- a/scripts/bootstrap/bootstrap +++ b/scripts/bootstrap/bootstrap @@ -120,8 +120,23 @@ check-installed() { # Install a local wget binary which supports TLS (the original one # installed on the reMarkable does not) in the PATH wget-bootstrap() { - local wget_remote=http://toltec-dev.org/thirdparty/bin/wget-v1.21.1-2 - local wget_checksum=3130886a020a56b7471ed60f3742db26acdced4b27fed5be22f9892b77589bc5 + local wget_remote + local wget_checksum + + case "$(uname -m)" in + "armv7l") + wget_remote=http://toltec-dev.org/thirdparty/bin/wget-v1.21.1-3 + wget_checksum=3130886a020a56b7471ed60f3742db26acdced4b27fed5be22f9892b77589bc5 + ;; + "aarch64") + wget_remote=http://toltec-dev.org/thirdparty/bin/wget-aarch64-v1.21.1-3 + wget_checksum=5480e42cd48bafa5d9a4276fa1359c9c6d79ceed3ea0eb8e4a06c0e61fa34cf0 + ;; + *) + echo "ERROR: Unsupported device architecture" + exit 1 + ;; + esac if [[ ! -x $wget_path ]]; then if [[ -e $wget_path ]]; then @@ -189,13 +204,6 @@ main() { # (otherwise it could get wiped out by the error-cleanup hook below) check-installed - # Fetch temporary wget and opkg binaries used for bootstrapping - wget-bootstrap - opkg-bootstrap - - # Remove those binaries in any case when the script exits - trap cleanup EXIT - # Make sure root partition and /etc are editable, and that changes will persist if ! [ -w / ]; then log "Remounting / as rw" @@ -206,6 +214,13 @@ main() { umount -R /etc fi + # Fetch temporary wget and opkg binaries used for bootstrapping + wget-bootstrap + opkg-bootstrap + + # Remove those binaries in any case when the script exits + trap cleanup EXIT + # Download and install the latest toltec-bootstrap package (without # its dependencies) to use toltecctl definitions local pkg_basename From ac5750910052c0f31d55462594530731a05dc2a6 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 18:02:44 -0600 Subject: [PATCH 61/88] Bump toltec-bootstrap version --- package/toltec-bootstrap/package | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package/toltec-bootstrap/package b/package/toltec-bootstrap/package index 8d89d3b98..f9ef3fb0e 100644 --- a/package/toltec-bootstrap/package +++ b/package/toltec-bootstrap/package @@ -5,8 +5,8 @@ pkgnames=(toltec-bootstrap) pkgdesc="Manage your Toltec install" url=https://toltec-dev.org/ -pkgver=0.4.5-2 -timestamp=2025-07-26T00:54Z +pkgver=0.5.0-1 +timestamp=2025-10-31T00:00Z section="utils" maintainer="Eeems " license=MIT From 1498392cefc5d8fcad1d894661d1d3cd75abf340 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 19:12:00 -0600 Subject: [PATCH 62/88] Fix version check --- package/toltec-bootstrap/toltecctl | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index 59f278e66..98edaa7f0 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -631,6 +631,17 @@ get-branch() { awk "$awk_get_branch" "$opkg_conf_dir/15-toltec.conf" | head -n1 || true } +# Convert a version string into a number that can be sorted +# +# Arguments: +# +# $1 - Version number +# +# Output: Sortable version number +function version { + echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }' +} + # Compare two version numbers # # Arguments: @@ -638,9 +649,9 @@ get-branch() { # $1 - Version number to compare # $2 - Version number to compare # -# Output: True if the first number is larger than the second +# Output: True if the first number is larger or equal to than the second compare-versions() { - [ "$(echo -e "${1}\n${2}" | sort | head -n1)" != "$1" ] + [ "$(version $1)" -ge "$(version $2)" ] } # Identify which toltec version this should be limited to From 064a0a151eb1f13f47b01e8cd05ff7a2448af463 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 19:49:52 -0600 Subject: [PATCH 63/88] Select correct arch for rmpp/m --- package/toltec-bootstrap/toltecctl | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index 98edaa7f0..a994b9749 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -596,6 +596,22 @@ CONF # Create the Opkg configuration file for fetching Entware packages create-entware-conf() { + local arch + local repo + case "$(uname -m)" in + "armv7l") + arch="armv7-3.2" + repo="armv7sf-k3.2" + ;; + "aarch64") + arch="aarch64-3.10" + repo="aarch64-k3.10" + ;; + *) + echo "Unsupported device architecture" + exit 1 + ;; + esac mkdir -p "$opkg_conf_dir" cat > "$opkg_conf_dir"/10-entware.conf << CONF # Entware repository configuration @@ -605,8 +621,8 @@ create-entware-conf() { # then run \`toltecctl generate-opkg-conf\` to regenerate '$opkg_conf' arch all 100 -arch armv7-3.2 160 -src/gz entware https://bin.entware.net/armv7sf-k3.2 +arch $arch 160 +src/gz entware https://bin.entware.net/$repo CONF } From 150d090bfe8c8848dd5ab4378e47bbf374966b3b Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 22:14:10 -0600 Subject: [PATCH 64/88] Fix #900 --- package/toltec-bootstrap/package | 2 +- scripts/bootstrap/bootstrap | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/package/toltec-bootstrap/package b/package/toltec-bootstrap/package index f9ef3fb0e..29dcd46c6 100644 --- a/package/toltec-bootstrap/package +++ b/package/toltec-bootstrap/package @@ -56,7 +56,7 @@ configure() { fi switch-branch "$(get-branch)" - echo "Your Opkg configuration has been upgraded" + echo "Your opkg configuration has been upgraded" if generate-opkg-conf; then echo echo "! The upgrade is not finished! Please run \`opkg update\`" diff --git a/scripts/bootstrap/bootstrap b/scripts/bootstrap/bootstrap index 13cf47e62..c3800e64f 100755 --- a/scripts/bootstrap/bootstrap +++ b/scripts/bootstrap/bootstrap @@ -173,7 +173,7 @@ wget-bootstrap() { # Install a temporary Opkg binary in PATH to be able to install # bootstrapping packages opkg-bootstrap() { - log "Bootstrapping Opkg" + log "Bootstrapping opkg" mkdir -p /opt/tmp if [[ ! -x $opkg_path ]]; then @@ -245,6 +245,9 @@ main() { exit 1 fi fi + if [[ "$1" == "--force" ]]; then + shift + fi log "Installing Toltec and Entware" From 0c84f1e3cb5e21a5250e99db71614efa8fe5c1bd Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 22:48:05 -0600 Subject: [PATCH 65/88] Fix reboot, mmc comes on rmpp and rmppm --- package/mmc-utils/package | 4 +--- package/toltec-bootstrap/toltecctl | 3 ++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package/mmc-utils/package b/package/mmc-utils/package index c1062cab4..ce3e2e900 100644 --- a/package/mmc-utils/package +++ b/package/mmc-utils/package @@ -2,7 +2,7 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT -archs=(rm1 rm2 rmpp rmppm) +archs=(rm1 rm2) pkgnames=(mmc-utils mmc-utils-doc) pkgdesc="A tool for monitoring the eMMC protocol" url=https://git.kernel.org/pub/scm/utils/mmc/mmc-utils.git/ @@ -13,8 +13,6 @@ maintainer="Alistair Francis " license=GPL-2.0-only image=base:v3.2 -image_rmpp=base:v4.0 -image_rmppm=base:v4.0 preparedepends=(build:git) source=( 0001-Makefile-Remove-Werror.patch diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index a994b9749..4af09ff82 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -242,14 +242,15 @@ add-bind-mount() { Description=Bind mount $1 over $2 DefaultDependencies=no Conflicts=umount.target -Before=local-fs.target umount.target BindsTo=home.mount After=home.mount + [Mount] What=$1 Where=$2 Type=none Options=bind + [Install] WantedBy=multi-user.target UNIT From 2ca89d5f23cc400534116634f21c7050639731f4 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 23:04:47 -0600 Subject: [PATCH 66/88] Port rmfakecloud-proxy to rmpp/m --- package/rmfakecloud-proxy/package | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/package/rmfakecloud-proxy/package b/package/rmfakecloud-proxy/package index 71168117e..dfa1ce9b3 100644 --- a/package/rmfakecloud-proxy/package +++ b/package/rmfakecloud-proxy/package @@ -2,27 +2,29 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT -archs=(rm1 rm2) +archs=(rm1 rm2 rmpp rmppm) pkgnames=(rmfakecloud-proxy) pkgdesc="Connect Xochitl to a rmfakecloud server" _url=https://github.com/ddvk/rmfakecloud-proxy url="$_url" -_upver=0.0.3 -pkgver="$_upver-7" -timestamp=2022-02-26T22:59Z +_upver=0.0.8 +pkgver="$_upver-1" +timestamp=2025-08-20T15:50:55Z section="utils" maintainer="Mattéo Delabre " license=MIT installdepends=(procps-ng-pgrep findutils) image=golang:v3.2 +image_rmpp=golang:v4.0 +image_rmppm=golang:v4.0 source=( "https://github.com/ddvk/rmfakecloud-proxy/archive/v$_upver.zip" rmfakecloudctl rmfakecloud-proxy.service ) sha256sums=( - eaa3fdcce250e23f368a4c9ddcfb99ff178decf31b2a7f84501dfc6fdb2e6d8f + 81778d159a5d2d5e2f6d585c159e21f84ccc3b8dacdd5cda785aa47aa9b7658d SKIP SKIP ) @@ -33,8 +35,18 @@ build() { package main const Version = "rmfakecloud-proxy ${_upver%-*} ($GOOS-$GOARCH) $GOVERSION\n$_url" GO - - GOARCH=arm GOARM=7 go build -ldflags="-w -s" -o dist/rmfakecloud-proxy + case $arch in + rm1 | rm2) + GOARCH=arm GOARM=7 go build -ldflags="-w -s" -o dist/rmfakecloud-proxy + ;; + rmpp | rmppm) + GOARCH=arm64 go build -ldflags="-w -s" -o dist/rmfakecloud-proxy + ;; + *) + echo "Unhandled arch: $arch" + exit 1 + ;; + esac } package() { From c7502b8827597902551eff6746d92c32cfd2ddba Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 23:08:25 -0600 Subject: [PATCH 67/88] Fix rmpp/m micro package --- package/micro/package | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/package/micro/package b/package/micro/package index c6f918f7f..34125b6ea 100644 --- a/package/micro/package +++ b/package/micro/package @@ -12,8 +12,11 @@ section="utils" maintainer="Eeems " license=MIT -source=("https://github.com/zyedidia/micro/releases/download/v2.0.14/micro-2.0.14-linux-arm.tar.gz") -sha256sums=(9f490d88bd30a548af99a905f50244dc6c80f3c7a3c6f98faeb5b0a7329f7dea) +source_rm1=("https://github.com/zyedidia/micro/releases/download/v2.0.14/micro-2.0.14-linux-arm.tar.gz") +sha256sums_rm1=(9f490d88bd30a548af99a905f50244dc6c80f3c7a3c6f98faeb5b0a7329f7dea) + +source_rm2=("https://github.com/zyedidia/micro/releases/download/v2.0.14/micro-2.0.14-linux-arm.tar.gz") +sha256sums_rm2=(9f490d88bd30a548af99a905f50244dc6c80f3c7a3c6f98faeb5b0a7329f7dea) source_rmpp=("https://github.com/zyedidia/micro/releases/download/v2.0.14/micro-2.0.14-linux-arm64.tar.gz") sha256sums_rmpp=(2e01b3ea62cdea3e62eb3ee99f6bffe84de06f689cf479173c4e7221b6613d06) From 72cc7f98d6370bb40555ddf896204528ac87b186 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 23:14:44 -0600 Subject: [PATCH 68/88] Have launcherctl depend on xochitl so there is always a launcher config installed --- package/launcherctl/package | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package/launcherctl/package b/package/launcherctl/package index 3b217bf3e..60b02b75d 100644 --- a/package/launcherctl/package +++ b/package/launcherctl/package @@ -5,12 +5,14 @@ pkgnames=(launcherctl) pkgdesc="Manage your installed launcher" url=https://toltec-dev.org/ -pkgver=0.0.1-3 +pkgver=0.0.1-4 timestamp=2023-12-18T03:32Z section="launchers" maintainer="Eeems " license=MIT +installdepends=(xochitl) + source=( launcherctl ) From 28c225656e650ebbea3eb0963ba2f1efea2b7edf Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 23:27:55 -0600 Subject: [PATCH 69/88] Split xochitl package between devices --- package/xochitl/package | 91 +++++++++++++++++++++++++---------------- 1 file changed, 55 insertions(+), 36 deletions(-) diff --git a/package/xochitl/package b/package/xochitl/package index ba890d642..af7a9fa4c 100644 --- a/package/xochitl/package +++ b/package/xochitl/package @@ -2,6 +2,7 @@ # Copyright (c) 2021 The Toltec Contributors # SPDX-License-Identifier: MIT +archs=(rm1 rm2 rmpp rmppm) pkgnames=(xochitl) pkgdesc="Read documents and take notes" url=https://remarkable.com @@ -55,45 +56,63 @@ package() { install -D -m 644 -t "$pkgdir"/opt/usr/share/applications "$srcdir"/xochitl.oxide install -D -T -m 755 "$srcdir"/launcherctl-xochitl "$pkgdir"/opt/share/launcherctl/"$pkgname" - install -D -m 644 -t "$pkgdir"/etc/systemd/system/xochitl.service.d \ - "$srcdir"/toltec-wrapper.conf - install -D -m 644 -t "$pkgdir"/etc/systemd/system/remarkable-shutdown.service.d \ - "$srcdir"/toltec-after-launcher.conf - install -D -m 644 -t "$pkgdir"/etc/systemd/system/remarkable-reboot.service.d \ - "$srcdir"/toltec-after-launcher.conf - install -D -m 644 -t "$pkgdir"/etc/systemd/system \ - "$srcdir"/manual-sync@.service + case $arch in + rm1 | rm2) + install -D -m 644 -t "$pkgdir"/etc/systemd/system/xochitl.service.d \ + "$srcdir"/toltec-wrapper.conf + install -D -m 644 -t "$pkgdir"/etc/systemd/system/remarkable-shutdown.service.d \ + "$srcdir"/toltec-after-launcher.conf + install -D -m 644 -t "$pkgdir"/etc/systemd/system/remarkable-reboot.service.d \ + "$srcdir"/toltec-after-launcher.conf + install -D -m 644 -t "$pkgdir"/etc/systemd/system \ + "$srcdir"/manual-sync@.service + ;; + rmpp | rmppm) ;; + *) + echo "Unhandled arch: $arch" + exit 1 + ;; + esac } configure() { - systemctl daemon-reload - - # sync.service and rm-sync.service interfere with launchers - # we use manual-sync@.service instead - if [ -f /usr/bin/sync ] && ! is-masked sync.service; then - systemctl mask sync.service - fi - - if [ -f /usr/bin/rm-sync ] && ! is-masked rm-sync.service; then - systemctl mask rm-sync.service - fi - - # manual-sync.service has been changed to manual-sync@.service - # Make sure to disable and stop the old version - disable-unit manual-sync.service - - if [ -f /usr/bin/rm-sync ] && ! is-active manual-sync@rm-sync.service; then - systemctl enable --now manual-sync@rm-sync.service - elif [ -f /usr/bin/sync ] && ! is-active manual-sync@sync.service; then - systemctl enable --now manual-sync@sync.service - fi - - if is-enabled xochitl.service && ! is-enabled launcher.service; then - # This package changes xochitl.service to alias it to launcher.service - # when enabled. If xochitl was previously enabled, force the creation - # of this alias by re-enabling the service - systemctl enable xochitl.service 2> /dev/null - fi + case $arch in + rm1 | rm2) + systemctl daemon-reload + + # sync.service and rm-sync.service interfere with launchers + # we use manual-sync@.service instead + if [ -f /usr/bin/sync ] && ! is-masked sync.service; then + systemctl mask sync.service + fi + + if [ -f /usr/bin/rm-sync ] && ! is-masked rm-sync.service; then + systemctl mask rm-sync.service + fi + + # manual-sync.service has been changed to manual-sync@.service + # Make sure to disable and stop the old version + disable-unit manual-sync.service + + if [ -f /usr/bin/rm-sync ] && ! is-active manual-sync@rm-sync.service; then + systemctl enable --now manual-sync@rm-sync.service + elif [ -f /usr/bin/sync ] && ! is-active manual-sync@sync.service; then + systemctl enable --now manual-sync@sync.service + fi + + if is-enabled xochitl.service && ! is-enabled launcher.service; then + # This package changes xochitl.service to alias it to launcher.service + # when enabled. If xochitl was previously enabled, force the creation + # of this alias by re-enabling the service + systemctl enable xochitl.service 2> /dev/null + fi + ;; + rmpp | rmppm) ;; + *) + echo "Unhandled arch: $arch" + exit 1 + ;; + esac } preremove() { From 921a14939c3b64e9ca1e018cfc105f27d968a471 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Fri, 31 Oct 2025 23:30:19 -0600 Subject: [PATCH 70/88] Fix manual-sync logic hole --- package/xochitl/package | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/package/xochitl/package b/package/xochitl/package index af7a9fa4c..054b2a0ba 100644 --- a/package/xochitl/package +++ b/package/xochitl/package @@ -94,10 +94,14 @@ configure() { # Make sure to disable and stop the old version disable-unit manual-sync.service - if [ -f /usr/bin/rm-sync ] && ! is-active manual-sync@rm-sync.service; then - systemctl enable --now manual-sync@rm-sync.service - elif [ -f /usr/bin/sync ] && ! is-active manual-sync@sync.service; then - systemctl enable --now manual-sync@sync.service + if [ -f /usr/bin/rm-sync ]; then + if ! is-active manual-sync@rm-sync.service; then + systemctl enable --now manual-sync@rm-sync.service + fi + elif [ -f /usr/bin/sync ]; then + if ! is-active manual-sync@sync.service; then + systemctl enable --now manual-sync@sync.service + fi fi if is-enabled xochitl.service && ! is-enabled launcher.service; then From d27048b25ae2a1c27ff2d680a2c0f87e336ce679 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sat, 1 Nov 2025 00:11:13 -0600 Subject: [PATCH 71/88] Handle rw and overlay --- package/toltec-base/package | 90 +++++++++++++++++++++++++++++++------ package/xochitl/package | 40 ++++++++++------- 2 files changed, 102 insertions(+), 28 deletions(-) diff --git a/package/toltec-base/package b/package/toltec-base/package index 465218269..3cabe6528 100644 --- a/package/toltec-base/package +++ b/package/toltec-base/package @@ -71,24 +71,88 @@ configure() { fi ;; rmpp | rmppos3v22) - # TODO ensure root is rw - # TODO ensure etc overlay is unmounted + if is-active etc-dropbear.mount; then + systemctl stop etc-dropbear.mount + fi + disable-unit var-volatile-etc.service + sed -i -E 's|(/dev/root\s+/\s+auto\s+)ro(\s+)|\1rw\2|' /etc/fstab + systemctl start etc-dropbear.mount + mount -o remount,rw / ;; rmppm | rmppmos3v22) - # TODO ensure root is rw - # TODO ensure etc overlay is unmounted + if is-active etc-dropbear.mount; then + systemctl stop etc-dropbear.mount + fi + disable-unit var-volatile-etc.service + sed -i -E 's|(/dev/root\s+/\s+auto\s+)ro(\s+)|\1rw\2|' /etc/fstab + systemctl start etc-dropbear.mount + mount -o remount,rw / ;; esac } postremove() { - if is-masked sys-subsystem-net-devices-usb1.device; then - systemctl unmask sys-subsystem-net-devices-usb1.device - fi - if is-masked busybox-ifplugd@usb1.service; then - systemctl unmask busybox-ifplugd@usb1.service - fi - if ! is-enabled update-engine.service; then - systemctl enable update-engine - fi + case "$arch" in + rmall | rmallos2 | rmallos3 | rmallos3v22) + if is-masked sys-subsystem-net-devices-usb1.device; then + systemctl unmask sys-subsystem-net-devices-usb1.device + fi + if is-masked busybox-ifplugd@usb1.service; then + systemctl unmask busybox-ifplugd@usb1.service + fi + if ! is-enabled update-engine.service; then + systemctl enable update-engine + fi + ;; + rm1 | rm1os2 | rm1os3 | rm1os3v22) + if is-masked sys-subsystem-net-devices-usb1.device; then + systemctl unmask sys-subsystem-net-devices-usb1.device + fi + if is-masked busybox-ifplugd@usb1.service; then + systemctl unmask busybox-ifplugd@usb1.service + fi + if ! is-enabled update-engine.service; then + systemctl enable update-engine + fi + ;; + rm2 | rm2os2 | rm2os3 | rm2os3v22) + if is-masked sys-subsystem-net-devices-usb1.device; then + systemctl unmask sys-subsystem-net-devices-usb1.device + fi + if is-masked busybox-ifplugd@usb1.service; then + systemctl unmask busybox-ifplugd@usb1.service + fi + if ! is-enabled update-engine.service; then + systemctl enable update-engine + fi + ;; + rmpp | rmppos3v22) + if ! is-enabled var-volatile-etc.service; then + systemctl enable var-volatile-etc.service 2> /dev/null + fi + sed -i -E 's|(/dev/root\s+/\s+auto\s+)rw(\s+)|\1ro\2|' /etc/fstab + if is-active etc-dropbear.mount; then + systemctl stop etc-dropbear.mount + fi + if ! is-active systemctl enable var-volatile-etc.service; then + systemctl start var-volatile-etc.service + fi + systemctl start etc-dropbear.mount + mount -o remount,ro / + ;; + rmppm | rmppmos3v22) + if ! is-enabled var-volatile-etc.service; then + systemctl enable var-volatile-etc.service 2> /dev/null + fi + sed -i -E 's|(/dev/root\s+/\s+auto\s+)rw(\s+)|\1ro\2|' /etc/fstab + if is-active etc-dropbear.mount; then + systemctl stop etc-dropbear.mount + fi + if ! is-active systemctl enable var-volatile-etc.service; then + systemctl start var-volatile-etc.service + fi + systemctl start etc-dropbear.mount + mount -o remount,ro / + ;; + esac } diff --git a/package/xochitl/package b/package/xochitl/package index 054b2a0ba..de81c4235 100644 --- a/package/xochitl/package +++ b/package/xochitl/package @@ -125,19 +125,29 @@ preremove() { } postremove() { - systemctl daemon-reload - - if [ -f /usr/bin/sync ] && is-masked sync.service; then - systemctl unmask sync.service - fi - if [ -f /usr/bin/rm-sync ] && is-masked rm-sync.service; then - systemctl unmask rm-sync.service - fi - - if is-enabled xochitl.service && is-enabled launcher.service; then - # If xochitl is currently the active launcher, make sure the - # launcher.service alias is removed - systemctl disable xochitl.service 2> /dev/null - systemctl enable xochitl.service 2> /dev/null - fi + case $arch in + rm1 | rm2) + systemctl daemon-reload + + if [ -f /usr/bin/sync ] && is-masked sync.service; then + systemctl unmask sync.service + fi + if [ -f /usr/bin/rm-sync ] && is-masked rm-sync.service; then + systemctl unmask rm-sync.service + fi + + if is-enabled xochitl.service && is-enabled launcher.service; then + # If xochitl is currently the active launcher, make sure the + # launcher.service alias is removed + systemctl disable xochitl.service 2> /dev/null + systemctl enable xochitl.service 2> /dev/null + fi + ;; + rmpp | rmppm) ;; + *) + echo "Unhandled arch: $arch" + exit 1 + ;; + esac + } From 62a66092b9a7b2570613f7976a4c8dc6ed3d1b85 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sat, 1 Nov 2025 00:52:44 -0600 Subject: [PATCH 72/88] Add more hosts to rmfakecloudctl --- package/rmfakecloud-proxy/rmfakecloudctl | 28 +++++++++++++++++++----- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/package/rmfakecloud-proxy/rmfakecloudctl b/package/rmfakecloud-proxy/rmfakecloudctl index c530f3589..0419194ef 100644 --- a/package/rmfakecloud-proxy/rmfakecloudctl +++ b/package/rmfakecloud-proxy/rmfakecloudctl @@ -249,10 +249,14 @@ subjectKeyIdentifier = hash subjectAltName=@san [ san ] DNS.1 = *.appspot.com -DNS.2 = my.remarkable.com -DNS.3 = internal.cloud.remarkable.com -DNS.4 = ping.remarkable.com -DNS.5 = *.remarkable.com +DNS.2 = *.remarkable.com +DNS.3 = *.cloud.remarkable.com +DNS.4 = *.cloud.remarkable.engineering +DNS.5 = *.rmfakecloud.localhost +DNS.6 = *.internal.cloud.remarkable.com +DNS.7 = *.tectonic.remarkable.com +DNS.8 = *.ping.remarkable.com +DNS.9 = *.internal.tctn.cloud.remarkable.com CSR openssl req -new -config "$csr" \ @@ -290,8 +294,14 @@ $proxy_listen hwr-production-dot-remarkable-production.appspot.com $proxy_listen service-manager-production-dot-remarkable-production.appspot.com $proxy_listen local.appspot.com $proxy_listen my.remarkable.com -$proxy_listen internal.cloud.remarkable.com $proxy_listen ping.remarkable.com +$proxy_listen internal.cloud.remarkable.com +$proxy_listen eu.tectonic.remarkable.com +$proxy_listen backtrace-proxy.cloud.remarkable.engineering +$proxy_listen dev.ping.remarkable.com +$proxy_listen dev.tectonic.remarkable.com +$proxy_listen dev.internal.cloud.remarkable.com +$proxy_listen eu.internal.tctn.cloud.remarkable.com EOF } @@ -301,8 +311,14 @@ uninstall-hosts() { sed -i '/ service-manager-production-dot-remarkable-production.appspot.com$/d' "$hosts_path" sed -i '/ local.appspot.com$/d' "$hosts_path" sed -i '/ my.remarkable.com$/d' "$hosts_path" - sed -i '/ internal.cloud.remarkable.com$/d' "$hosts_path" sed -i '/ ping.remarkable.com$/d' "$hosts_path" + sed -i '/ internal.cloud.remarkable.com$/d' "$hosts_path" + sed -i '/ eu.tectonic.remarkable.com$/d' "$hosts_path" + sed -i '/ backtrace-proxy.cloud.remarkable.engineering$/d' "$hosts_path" + sed -i '/ dev.ping.remarkable.com$/d' "$hosts_path" + sed -i '/ dev.tectonic.remarkable.com$/d' "$hosts_path" + sed -i '/ dev.internal.cloud.remarkable.com$/d' "$hosts_path" + sed -i '/ eu.internal.tctn.cloud.remarkable.com$/d' "$hosts_path" } # Try to make a full install of rmfakecloud-proxy From 62247d82ddd645fe0e972e9aecaabdcc82452fcc Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sat, 1 Nov 2025 00:59:08 -0600 Subject: [PATCH 73/88] Add new host --- package/rmfakecloud-proxy/rmfakecloudctl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package/rmfakecloud-proxy/rmfakecloudctl b/package/rmfakecloud-proxy/rmfakecloudctl index 0419194ef..ed27a7c09 100644 --- a/package/rmfakecloud-proxy/rmfakecloudctl +++ b/package/rmfakecloud-proxy/rmfakecloudctl @@ -302,6 +302,7 @@ $proxy_listen dev.ping.remarkable.com $proxy_listen dev.tectonic.remarkable.com $proxy_listen dev.internal.cloud.remarkable.com $proxy_listen eu.internal.tctn.cloud.remarkable.com +$proxy_listen webapp-prod.cloud.remarkable.engineering EOF } @@ -319,6 +320,7 @@ uninstall-hosts() { sed -i '/ dev.tectonic.remarkable.com$/d' "$hosts_path" sed -i '/ dev.internal.cloud.remarkable.com$/d' "$hosts_path" sed -i '/ eu.internal.tctn.cloud.remarkable.com$/d' "$hosts_path" + sed -i '/ webapp-prod.cloud.remarkable.engineering$/d' "$hosts_path" } # Try to make a full install of rmfakecloud-proxy From a2e721b41572e2780ef0c33a6baf838d0b35c567 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sat, 1 Nov 2025 14:12:51 -0600 Subject: [PATCH 74/88] Make toltecctl status output in one go, better launcherctl output --- package/launcherctl/launcherctl | 4 ++++ package/toltec-bootstrap/toltecctl | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/package/launcherctl/launcherctl b/package/launcherctl/launcherctl index ff87e6a0f..ed23d9c0b 100755 --- a/package/launcherctl/launcherctl +++ b/package/launcherctl/launcherctl @@ -41,6 +41,10 @@ enabled_launchers() { query() { launcher="$1" shift + if ! [ -f "${data_dir}/${launcher}" ]; then + echo "Launcher ${launcher} does not exist" + return 1 + fi "${data_dir}/${launcher}" "$@" } check_enabled_launchers() { diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index 4af09ff82..bb6eb8484 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -914,7 +914,6 @@ uninstall() { # no - opt.mount is not enabled, or does not exist install-state() { local unit_name - local enabled unit_name="$(systemd-escape --path "$toltec_dest").mount" if ! systemctl --quiet is-enabled "$unit_name" 2> /dev/null; then echo "no" @@ -927,11 +926,16 @@ install-state() { # Output toltec installation status status() { + # Get information that takes some time + local install_state + install_state="$(install-state)" + local version_status=0 + check-version "$(get-branch)" &> /dev/null || version_status=$? + + # Output status echo -ne "Enabled: \033[1m" - local enabled=false - case "$(install-state)" in + case "${install_state}" in yes) - enabled=true echo -ne "\e[32mYes" ;; no) @@ -952,12 +956,9 @@ status() { echo -e " \e[33mWarning:\e[0m /etc is overlay" fi echo -ne "Supported: \033[1m" - local rc - rc=0 - check-version "$(get-branch)" &> /dev/null || rc=$? - if [ $rc -eq 0 ]; then + if [ $version_status -eq 0 ]; then echo -ne "\e[32mYes" - elif [ $rc -eq 2 ] || [ $rc -eq 3 ]; then + elif [ $version_status -eq 2 ] || [ $version_status -eq 3 ]; then echo -ne "\e[33mUnknown" else echo -ne "\e[31mNo" From 44f3e3fbc4fd19eeb6c7b709fce80877048e19a7 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sat, 1 Nov 2025 14:47:29 -0600 Subject: [PATCH 75/88] Add more status information if available --- package/toltec-bootstrap/toltecctl | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index bb6eb8484..ad4e4bb9c 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -931,6 +931,16 @@ status() { install_state="$(install-state)" local version_status=0 check-version "$(get-branch)" &> /dev/null || version_status=$? + local extra="" + if command -v launcherctl > /dev/null; then + extra="$extra\n$(launcherctl status)\n" + fi + if command -v rmfakecloudctl > /dev/null; then + extra="$extra\nrmfakecloud $(rmfakecloudctl status | grep -v Run)\n" + fi + if command -v rcctl > /dev/null; then + extra="$extra\nEntware Services:\n$(rcctl status)\n" + fi # Output status echo -ne "Enabled: \033[1m" @@ -975,6 +985,7 @@ status() { get-model-human-readable-name echo -n "OS: " get-release-version + echo -en "$extra" } help() { From 54d506ba9140fec0e4a5410e822008c641561d8d Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sat, 1 Nov 2025 15:03:01 -0600 Subject: [PATCH 76/88] Hide entware services if there are none --- package/toltec-bootstrap/toltecctl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index ad4e4bb9c..28bad22e8 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -939,7 +939,11 @@ status() { extra="$extra\nrmfakecloud $(rmfakecloudctl status | grep -v Run)\n" fi if command -v rcctl > /dev/null; then - extra="$extra\nEntware Services:\n$(rcctl status)\n" + local status + status=$(rcctl status) + if [[ "$status" != "" ]]; then + extra="$extra\nEntware Services:\n$status\n" + fi fi # Output status From 5147efdf41680b00a71de9ae15ad8d2290ce0f3e Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sat, 1 Nov 2025 15:55:01 -0600 Subject: [PATCH 77/88] Update toltecmk --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 838b2e4c6..946fd7b1a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ mypy-extensions==1.0.0 mypy==1.7.1 pylint==3.0.3 six==1.16.0 -toltecmk==0.5.4 +toltecmk==0.5.5 toml==0.10.2 types-python-dateutil==2.8.19.14 types-requests==2.31.0.2 From f653bc5babc3fe6123a0d86cd11d9ac87fd1e8a1 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sat, 1 Nov 2025 16:13:07 -0600 Subject: [PATCH 78/88] Only go back to rw and overlay when uninstalling --- package/toltec-base/package | 36 ++++++++++++++++++------------ package/toltec-bootstrap/toltecctl | 4 ++++ 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/package/toltec-base/package b/package/toltec-base/package index 3cabe6528..78d8e1bb7 100644 --- a/package/toltec-base/package +++ b/package/toltec-base/package @@ -92,6 +92,10 @@ configure() { } postremove() { + local uninstalling=0 + if [ -f /tmp/toltec-uninstalling ]; then + uninstalling=1 + fi case "$arch" in rmall | rmallos2 | rmallos3 | rmallos3v22) if is-masked sys-subsystem-net-devices-usb1.device; then @@ -131,28 +135,32 @@ postremove() { systemctl enable var-volatile-etc.service 2> /dev/null fi sed -i -E 's|(/dev/root\s+/\s+auto\s+)rw(\s+)|\1ro\2|' /etc/fstab - if is-active etc-dropbear.mount; then - systemctl stop etc-dropbear.mount + if [ $uninstalling -eq 1 ]; then + if is-active etc-dropbear.mount; then + systemctl stop etc-dropbear.mount + fi + if ! is-active var-volatile-etc.service; then + systemctl start var-volatile-etc.service + fi + systemctl start etc-dropbear.mount + mount -o remount,ro / fi - if ! is-active systemctl enable var-volatile-etc.service; then - systemctl start var-volatile-etc.service - fi - systemctl start etc-dropbear.mount - mount -o remount,ro / ;; rmppm | rmppmos3v22) if ! is-enabled var-volatile-etc.service; then systemctl enable var-volatile-etc.service 2> /dev/null fi sed -i -E 's|(/dev/root\s+/\s+auto\s+)rw(\s+)|\1ro\2|' /etc/fstab - if is-active etc-dropbear.mount; then - systemctl stop etc-dropbear.mount + if [ $uninstalling -eq 1 ]; then + if is-active etc-dropbear.mount; then + systemctl stop etc-dropbear.mount + fi + if ! is-active var-volatile-etc.service; then + systemctl start var-volatile-etc.service + fi + systemctl start etc-dropbear.mount + mount -o remount,ro / fi - if ! is-active systemctl enable var-volatile-etc.service; then - systemctl start var-volatile-etc.service - fi - systemctl start etc-dropbear.mount - mount -o remount,ro / ;; esac } diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index 28bad22e8..a422b53dc 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -883,11 +883,15 @@ uninstall() { return 1 fi + touch /tmp/toltec-uninstalling + # Remove installed packages in reverse dependency order list-installed-ordered | while read -r pkgname; do "$opkg_path" remove --force-removal-of-essential-packages --force-depends --force-remove "$pkgname" done + rm /tmp/toltec-uninstalling + systemctl daemon-reload rm -f "$opkg_path" From afdc7509355a5586c1e1cdf0b3b39a1b1ad73424 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sat, 1 Nov 2025 16:34:51 -0600 Subject: [PATCH 79/88] Add toltecctl info command --- package/toltec-bootstrap/toltecctl | 68 +++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index a422b53dc..b73603bd3 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -1004,7 +1004,20 @@ Manage your Toltec install. Available commands: generate-opkg-conf Rebuild the Opkg configuration file. switch-branch [BRANCH] Change the current branch to BRANCH. reenable Re-enable Toltec after a system update. - uninstall Permanently remove Toltec." + uninstall Permanently remove Toltec. + info Get information about the device." +} + +help-info() { + echo "Usage: $(basename "$0") info COMMAND +Get information about your device. Available commands: + + help Display this message and exit. + branch Get the current toltec branch + enabled Get the status of the toltec install. + model Get the model of the device + os Get the installed OS version on the device. + supported Get the supported state of this OS." } if [[ $0 = "${BASH_SOURCE[0]}" ]]; then @@ -1152,6 +1165,59 @@ MSG help ;; + info) + if [[ $# -eq 0 ]]; then + help-info + exit 1 + fi + subaction="$1" + shift + + case "$subaction" in + help | --help) + help-info + ;; + + enabled) + install-state + ;; + + supported) + version_status=0 + check-version "$(get-branch)" &> /dev/null || version_status=$? + if [ $version_status -eq 0 ]; then + echo yes + elif [ $version_status -eq 2 ] || [ $version_status -eq 3 ]; then + echo unknown + else + echo no + fi + ;; + + branch) + if [ -f "$opkg_conf" ]; then + get-branch + else + echo "unknown" + fi + ;; + + os) + get-release-version + ;; + + model) + identify-model + ;; + + *) + log ERROR "Invalid command '$action $subaction'\n" + help-info + exit 1 + ;; + esac + ;; + *) log ERROR "Invalid command '$action'\n" help From ddf31dabb135ddb14819bb6f4b4fbbab3e5de94c Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sat, 1 Nov 2025 17:41:43 -0600 Subject: [PATCH 80/88] Fix rmpp/m uninstall --- package/toltec-base/package | 24 ------------------------ package/toltec-bootstrap/toltecctl | 17 +++++++++++++---- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/package/toltec-base/package b/package/toltec-base/package index 78d8e1bb7..94bfd7ccf 100644 --- a/package/toltec-base/package +++ b/package/toltec-base/package @@ -92,10 +92,6 @@ configure() { } postremove() { - local uninstalling=0 - if [ -f /tmp/toltec-uninstalling ]; then - uninstalling=1 - fi case "$arch" in rmall | rmallos2 | rmallos3 | rmallos3v22) if is-masked sys-subsystem-net-devices-usb1.device; then @@ -135,32 +131,12 @@ postremove() { systemctl enable var-volatile-etc.service 2> /dev/null fi sed -i -E 's|(/dev/root\s+/\s+auto\s+)rw(\s+)|\1ro\2|' /etc/fstab - if [ $uninstalling -eq 1 ]; then - if is-active etc-dropbear.mount; then - systemctl stop etc-dropbear.mount - fi - if ! is-active var-volatile-etc.service; then - systemctl start var-volatile-etc.service - fi - systemctl start etc-dropbear.mount - mount -o remount,ro / - fi ;; rmppm | rmppmos3v22) if ! is-enabled var-volatile-etc.service; then systemctl enable var-volatile-etc.service 2> /dev/null fi sed -i -E 's|(/dev/root\s+/\s+auto\s+)rw(\s+)|\1ro\2|' /etc/fstab - if [ $uninstalling -eq 1 ]; then - if is-active etc-dropbear.mount; then - systemctl stop etc-dropbear.mount - fi - if ! is-active var-volatile-etc.service; then - systemctl start var-volatile-etc.service - fi - systemctl start etc-dropbear.mount - mount -o remount,ro / - fi ;; esac } diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index b73603bd3..4da839625 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -883,15 +883,11 @@ uninstall() { return 1 fi - touch /tmp/toltec-uninstalling - # Remove installed packages in reverse dependency order list-installed-ordered | while read -r pkgname; do "$opkg_path" remove --force-removal-of-essential-packages --force-depends --force-remove "$pkgname" done - rm /tmp/toltec-uninstalling - systemctl daemon-reload rm -f "$opkg_path" @@ -907,6 +903,19 @@ uninstall() { # Re-enable xochitl if needed systemctl enable xochitl + + case $(identify-model) in + rmpp | rmppm) + if is-active etc-dropbear.mount; then + systemctl stop etc-dropbear.mount + fi + if ! is-active var-volatile-etc.service; then + systemctl start var-volatile-etc.service + fi + systemctl start etc-dropbear.mount + mount -o remount,ro / + ;; + esac } # The current toltec install state From 02fc4c6549d4aefeb163c28ce1058b5cfa30603e Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sat, 1 Nov 2025 18:30:05 -0600 Subject: [PATCH 81/88] Fix uninstall --- package/launcherctl/package | 2 +- package/toltec-bootstrap/toltecctl | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package/launcherctl/package b/package/launcherctl/package index 60b02b75d..e5c10cc2c 100644 --- a/package/launcherctl/package +++ b/package/launcherctl/package @@ -11,7 +11,7 @@ section="launchers" maintainer="Eeems " license=MIT -installdepends=(xochitl) +installdepends=(xochitl findutils) source=( launcherctl diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index 4da839625..7932d98ad 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -906,10 +906,10 @@ uninstall() { case $(identify-model) in rmpp | rmppm) - if is-active etc-dropbear.mount; then + if systemctl --quiet is-active etc-dropbear.mount 2> /dev/null; then systemctl stop etc-dropbear.mount fi - if ! is-active var-volatile-etc.service; then + if ! systemctl --quiet is-active var-volatile-etc.service 2> /dev/null; then systemctl start var-volatile-etc.service fi systemctl start etc-dropbear.mount From 4e071ea7b83756b313413b50a588bc95a68472fb Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sat, 1 Nov 2025 19:22:48 -0600 Subject: [PATCH 82/88] Fix entware-rc uninstall --- package/entware-rc/package | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package/entware-rc/package b/package/entware-rc/package index 40b8432f4..cf417da48 100644 --- a/package/entware-rc/package +++ b/package/entware-rc/package @@ -6,12 +6,12 @@ archs=(rmall) pkgnames=(entware-rc) pkgdesc="Manage entware installed services" url=https://toltec-dev.org/ -pkgver=0.1-1 +pkgver=0.1-2 timestamp=2024-05-22T22:59:03Z section="utils" maintainer="Eeems " license=MIT -installdepends=() +installdepends=(findutils) source=( entware-rc@.service From 44aa966d52a41d5aea698aa91cdcbaecc5f9ea9b Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sun, 2 Nov 2025 16:00:38 -0700 Subject: [PATCH 83/88] Fix version compare on 3.3.2.1666, fix keyd configure --- package/keyd/package | 6 ++-- package/toltec-bootstrap/toltecctl | 6 ++-- package/toltec-deletions/package | 54 +++++++++--------------------- 3 files changed, 23 insertions(+), 43 deletions(-) diff --git a/package/keyd/package b/package/keyd/package index 55de2733b..9395a4606 100644 --- a/package/keyd/package +++ b/package/keyd/package @@ -43,7 +43,7 @@ package() { } configure() { - addgroup keyd + grep -qw ^keyd /etc/group || addgroup keyd systemctl daemon-reload if is-active keyd; then systemctl restart keyd @@ -58,7 +58,9 @@ configure() { preremove() { disable-unit keyd - delgroup keyd + if grep -qw ^keyd /etc/group; then + delgroup keyd + fi } postremove() { diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index 7932d98ad..a0daca1f2 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -656,7 +656,7 @@ get-branch() { # # Output: Sortable version number function version { - echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }' + echo "$@" | awk -F. '{ printf("%d%04d%04d%04d\n", $1,$2,$3,$4); }' } # Compare two version numbers @@ -709,11 +709,11 @@ switch-branch() { model="$(identify-model)" version="$(identify-support-version)" - if [[ $model = "unknown" ]]; then + if [[ $model == "unknown" ]]; then log ERROR "You’re running an unsupported or unrecognised device" exit 1 fi - if [[ $version = "unknown" ]]; then + if [[ $version == "unknown" ]]; then log ERROR "You're running an unsupported or unrecognised OS version" exit 1 fi diff --git a/package/toltec-deletions/package b/package/toltec-deletions/package index 49dd1e5fe..307ebd82c 100644 --- a/package/toltec-deletions/package +++ b/package/toltec-deletions/package @@ -21,18 +21,13 @@ section="utils" maintainer="Eeems " license=MIT installdepends=(toltec-bootstrap) -conflicts_rm1os2=() + replaces_rm1os2=() -conflicts_rm2os2=() +conflicts_rm1os2=("${replaces_rm1os2[@]}") + replaces_rm2os2=() -conflicts_rm1os3=( - ddvk-hacks - fuse - wireguard - innernet-client - gocryptfs - remarkable-stylus -) +conflicts_rm2os2=("${replaces_rm2os2[@]}") + replaces_rm1os3=( ddvk-hacks fuse @@ -41,14 +36,8 @@ replaces_rm1os3=( gocryptfs remarkable-stylus ) -conflicts_rm1os3v22=( - ddvk-hacks - fuse - wireguard - innernet-client - gocryptfs - remarkable-stylus -) +conflicts_rm1os3=("${replaces_rm1os3[@]}") + replaces_rm1os3v22=( ddvk-hacks fuse @@ -57,15 +46,8 @@ replaces_rm1os3v22=( gocryptfs remarkable-stylus ) -conflicts_rm2os3=( - ddvk-hacks - fuse - wireguard - innernet-client - gocryptfs - remarkable-stylus - open-remarkable-shutdown -) +conflicts_rm1os3v22=("${replaces_rm1os3v22[@]}") + replaces_rm2os3=( ddvk-hacks fuse @@ -75,15 +57,8 @@ replaces_rm2os3=( remarkable-stylus open-remarkable-shutdown ) -conflicts_rm2os3v22=( - ddvk-hacks - fuse - wireguard - innernet-client - gocryptfs - remarkable-stylus - open-remarkable-shutdown -) +conflicts_rm2os3=("${replaces_rm2os3[@]}") + replaces_rm2os3v22=( ddvk-hacks fuse @@ -93,10 +68,13 @@ replaces_rm2os3v22=( remarkable-stylus open-remarkable-shutdown ) -conflicts_rmppos3v22=() +conflicts_rm2os3v22=("${replaces_rm2os3v22[@]}") + replaces_rmppos3v22=() -conflicts_rmppmos3v22=() +conflicts_rmppos3v22=("${replaces_rmppos3v22[@]}") + replaces_rmppmos3v22=() +conflicts_rmppmos3v22=("${replaces_rmppmos3v22[@]}") source=() sha256sums=() From 0b82057af5364cbecf6b684aca0f920c4fcdad02 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sun, 2 Nov 2025 16:18:30 -0700 Subject: [PATCH 84/88] Flush out toltec-bbase and toltec-deletions --- package/toltec-base/package | 51 +++++++++++++++++++++++++++----- package/toltec-deletions/package | 37 +++++++++++++---------- 2 files changed, 66 insertions(+), 22 deletions(-) diff --git a/package/toltec-base/package b/package/toltec-base/package index 94bfd7ccf..0776ba356 100644 --- a/package/toltec-base/package +++ b/package/toltec-base/package @@ -23,16 +23,53 @@ archs=( pkgnames=(toltec-base) pkgdesc="Metapackage defining the base set of packages in a Toltec install" url=https://toltec-dev.org/ -pkgver=1.4-2 -timestamp=2023-12-27T08:30Z +pkgver=1.5-1 +timestamp=2025-11-02T00:00Z section="utils" maintainer="Eeems " license=MIT -installdepends=(toltec-bootstrap toltec-deletions toltec-completion launcherctl wget-ssl ca-certificates entware-rc) -installdepends_rm1os2=(open-remarkable-shutdown) -installdepends_rm1os3=(open-remarkable-shutdown) -installdepends_rm2os2=(rm2-suspend-fix) -installdepends_rm2os3=(rm2-suspend-fix) + +installdepends=( + toltec-bootstrap + toltec-deletions + toltec-completion + launcherctl + wget-ssl + ca-certificates + entware-rc +) + +installdepends_rm1=(open-remarkable-shutdown) +installdepends_rm1os2=( + "${installdepends_rm1[@]}" +) +installdepends_rm1os3=( + "${installdepends_rm1[@]}" +) +installdepends_rm1os3v22=( + "${installdepends_rm1[@]}" +) + +installdepends_rm2=(rm2-suspend-fix) +installdepends_rm2os2=( + "${installdepends_rm2[@]}" +) +installdepends_rm2os3=( + "${installdepends_rm2[@]}" +) +installdepends_rm2os3v22=( + "${installdepends_rm2[@]}" +) + +installdepends_rmpp=() +installdepends_rmppos3v22=( + "${installdepends_rmpp[@]}" +) + +installdepends_rmppm=() +installdepends_rmppmos3v22=( + "${installdepends_rmppm[@]}" +) source=(opt-usr-bin.sh) sha256sums=(SKIP) diff --git a/package/toltec-deletions/package b/package/toltec-deletions/package index 307ebd82c..5b7cb36ed 100644 --- a/package/toltec-deletions/package +++ b/package/toltec-deletions/package @@ -15,8 +15,8 @@ archs=( pkgnames=(toltec-deletions) pkgdesc="Metapackage to handle package deletions between OS versions" url=https://toltec-dev.org/ -pkgver=0.1-9 -timestamp=2023-12-03T04:51:58Z +pkgver=0.2-1 +timestamp=2025-11-02T00:00Z section="utils" maintainer="Eeems " license=MIT @@ -39,12 +39,16 @@ replaces_rm1os3=( conflicts_rm1os3=("${replaces_rm1os3[@]}") replaces_rm1os3v22=( - ddvk-hacks - fuse - wireguard - innernet-client - gocryptfs - remarkable-stylus + "${replaces_rm1os3[@]}" + oxide + oxide-extra + oxide-utils + inject_evdev + liboxide + liboxide-dev + libsentry + reterm + signature-rm ) conflicts_rm1os3v22=("${replaces_rm1os3v22[@]}") @@ -60,13 +64,16 @@ replaces_rm2os3=( conflicts_rm2os3=("${replaces_rm2os3[@]}") replaces_rm2os3v22=( - ddvk-hacks - fuse - wireguard - innernet-client - gocryptfs - remarkable-stylus - open-remarkable-shutdown + "${replaces_rm2os3[@]}" + oxide + oxide-extra + oxide-utils + inject_evdev + liboxide + liboxide-dev + libsentry + reterm + signature-rm ) conflicts_rm2os3v22=("${replaces_rm2os3v22[@]}") From fbb5a58183775713e90072452fbcd37d8dbd550a Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Sun, 2 Nov 2025 18:04:08 -0700 Subject: [PATCH 85/88] Fix keyd on os3 --- package/keyd/package | 7 ++++++- package/toltec-base/package | 32 ++++++++------------------------ package/toltec-bootstrap/package | 5 ++++- package/toltec-deletions/package | 3 ++- 4 files changed, 20 insertions(+), 27 deletions(-) diff --git a/package/keyd/package b/package/keyd/package index 9395a4606..e843998c9 100644 --- a/package/keyd/package +++ b/package/keyd/package @@ -19,7 +19,6 @@ section=utils maintainer="Kai " license=MIT -image=base:v4.0 source=( https://github.com/rvaiya/keyd/archive/refs/tags/v2.4.3.zip default.conf @@ -29,6 +28,12 @@ sha256sums=( SKIP ) +image=base:v3.3 +rm1os3v22=base:v4.0 +image_rm2os3v22=$rm1os3v22 +image_rmppos3v22=$rm1os3v22 +image_rmppmos3v22=$image_rmppos3v22 + build() { make PREFIX=/opt CONFIG_DIR=/opt/etc/keyd "CC=${CROSS_COMPILE}cc" sed -i 's|ExecStart=/usr/bin/keyd|ExecStart=/opt/bin/keyd|' keyd.service diff --git a/package/toltec-base/package b/package/toltec-base/package index 0776ba356..623a5f281 100644 --- a/package/toltec-base/package +++ b/package/toltec-base/package @@ -40,36 +40,20 @@ installdepends=( ) installdepends_rm1=(open-remarkable-shutdown) -installdepends_rm1os2=( - "${installdepends_rm1[@]}" -) -installdepends_rm1os3=( - "${installdepends_rm1[@]}" -) -installdepends_rm1os3v22=( - "${installdepends_rm1[@]}" -) +installdepends_rm1os2=("${installdepends_rm1[@]}") +installdepends_rm1os3=("${installdepends_rm1[@]}") +installdepends_rm1os3v22=("${installdepends_rm1[@]}") installdepends_rm2=(rm2-suspend-fix) -installdepends_rm2os2=( - "${installdepends_rm2[@]}" -) -installdepends_rm2os3=( - "${installdepends_rm2[@]}" -) -installdepends_rm2os3v22=( - "${installdepends_rm2[@]}" -) +installdepends_rm2os2=("${installdepends_rm2[@]}") +installdepends_rm2os3=("${installdepends_rm2[@]}") +installdepends_rm2os3v22=("${installdepends_rm2[@]}") installdepends_rmpp=() -installdepends_rmppos3v22=( - "${installdepends_rmpp[@]}" -) +installdepends_rmppos3v22=("${installdepends_rmpp[@]}") installdepends_rmppm=() -installdepends_rmppmos3v22=( - "${installdepends_rmppm[@]}" -) +installdepends_rmppmos3v22=("${installdepends_rmppm[@]}") source=(opt-usr-bin.sh) sha256sums=(SKIP) diff --git a/package/toltec-bootstrap/package b/package/toltec-bootstrap/package index 29dcd46c6..ca93702e4 100644 --- a/package/toltec-bootstrap/package +++ b/package/toltec-bootstrap/package @@ -16,7 +16,10 @@ license=MIT # below as a transitional dependency to ensure that it gets installed for # existing users (see toltec-dev/toltec#532 for context). This dependency # should be removed once the package has reached enough users -installdepends=(coreutils-tsort toltec-base) +installdepends=( + coreutils-tsort + toltec-base +) source=( toltecctl diff --git a/package/toltec-deletions/package b/package/toltec-deletions/package index 5b7cb36ed..012b5d602 100644 --- a/package/toltec-deletions/package +++ b/package/toltec-deletions/package @@ -88,7 +88,8 @@ sha256sums=() package() { # This should be fully reinstalled on reenable - # So add a file to root + # So add a file to root. Do not use the normal /opt/share/toltec/reenable.d, + # As this needs to be a reinstall instead of a re-configure mkdir -p "$pkgdir"/usr/share/toltec/reenable.d touch "$pkgdir"/usr/share/toltec/reenable.d/toltec-deletions } From 1e00e297e36bd7288c7cb5d85498a2165cb35517 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Tue, 4 Nov 2025 16:33:33 -0700 Subject: [PATCH 86/88] Add back shellcheck, and fix lint --- Makefile | 4 ++-- package/.shellcheckrc | 3 +++ package/debian-chroot/package | 3 +++ package/fuseki/package | 2 +- package/linux-mainline/package | 2 +- package/linux-stracciatella/package | 2 +- package/netsurf/package | 7 ++++--- package/oxide/package | 2 +- package/rempack/package | 4 ++-- package/rm2fb-timower/package | 2 +- package/rmkit/package | 2 +- package/toltec-base/opt-usr-bin.sh | 2 +- package/toltec-bootstrap/toltecctl | 2 +- package/xochitl/xochitl | 4 ++-- package/zerotier-one/package | 4 ++-- package/zoneinfo-utils/package | 4 ++-- 16 files changed, 28 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index cbeb35282..c359b7a1a 100644 --- a/Makefile +++ b/Makefile @@ -122,8 +122,8 @@ format-fix: .venv/bin/activate black --line-length 80 scripts lint: .venv/bin/activate -# @echo "==> Linting Bash scripts" -# shellcheck $$(shfmt -f .) -P SCRIPTDIR + @echo "==> Linting Bash scripts" + shellcheck $$(shfmt -f .) -P SCRIPTDIR @echo "==> Typechecking Python files" . .venv/bin/activate; \ MYPYPATH=scripts mypy --disallow-untyped-defs scripts diff --git a/package/.shellcheckrc b/package/.shellcheckrc index d0c08d3fd..1df568964 100644 --- a/package/.shellcheckrc +++ b/package/.shellcheckrc @@ -13,3 +13,6 @@ disable=SC2034 # Do not warn about undeclared variables since recipes may use build variables # such as `srcdir` or `pkgdir` disable=SC2154 + +# Do not warn about unused functions, such as package() or build() +disable=SC2329 diff --git a/package/debian-chroot/package b/package/debian-chroot/package index 41f422ace..9adf4e073 100644 --- a/package/debian-chroot/package +++ b/package/debian-chroot/package @@ -38,6 +38,7 @@ debian-chroot() { mkdir -p "$pkgdir"/opt/etc/ ln -s /home/root/.config/debian-chroot.conf \ "$pkgdir"/opt/etc/debian-chroot.conf + # shellcheck disable=SC1091 source "$srcdir"/debian-chroot.conf mkdir -p "$pkgdir"/opt/lib/ ln -s "$chroot_path" "$pkgdir"/opt/lib/debian-chroot @@ -47,6 +48,7 @@ debian-chroot() { debian-chroot true } preremove() { + # shellcheck disable=SC1091 source /home/root/.config/debian-chroot.conf if lsof "$chroot_path" 2> /dev/null | grep "$chroot_path"; then echo "Error: debian-chroot has running processes" @@ -58,6 +60,7 @@ debian-chroot() { cp /home/root/.config/debian-chroot.conf /tmp/_debian-chroot.conf } postremove() { + # shellcheck disable=SC1091 source /tmp/_debian-chroot.conf rm -rf "$chroot_path" rm /tmp/_debian-chroot.conf diff --git a/package/fuseki/package b/package/fuseki/package index e13da56b7..429807499 100644 --- a/package/fuseki/package +++ b/package/fuseki/package @@ -13,7 +13,7 @@ maintainer="Tom Parker-Shemilt " license=AGPL-3.0-or-later image=rust:v3.3 source=( - https://github.com/palfrey/fuseki/archive/refs/tags/${pkgver%-*}.zip + "https://github.com/palfrey/fuseki/archive/refs/tags/${pkgver%-*}.zip" fuseki-runner.draft fuseki-runner ) diff --git a/package/linux-mainline/package b/package/linux-mainline/package index 54357ebef..1c8053280 100644 --- a/package/linux-mainline/package +++ b/package/linux-mainline/package @@ -30,7 +30,7 @@ build() { ARCH=arm make remarkable_defconfig local threads threads="$(echo -e "8\n$(nproc)" | sort -n | tail -n1)" - ARCH=arm PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/ PKG_CONFIG_SYSROOT_DIR="" make -j${threads:-8} + ARCH=arm PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/ PKG_CONFIG_SYSROOT_DIR="" make -j"${threads:-8}" } package() { diff --git a/package/linux-stracciatella/package b/package/linux-stracciatella/package index 61726a365..fc7facb23 100644 --- a/package/linux-stracciatella/package +++ b/package/linux-stracciatella/package @@ -49,7 +49,7 @@ build() { fi local threads threads="$(echo -e "8\n$(nproc)" | sort -n | tail -n1)" - ARCH=arm make -j${threads:-8} + ARCH=arm make -j"${threads:-8}" } package() { diff --git a/package/netsurf/package b/package/netsurf/package index e29504cd8..8ec94c846 100644 --- a/package/netsurf/package +++ b/package/netsurf/package @@ -85,13 +85,14 @@ prepare() { cd freetype tar --strip-components=1 -xf ../freetype-VER-2-10-4.tar.gz ) & - wait $(jobs -p) + wait "$(jobs -p)" } build() { set -e ln -s /usr/bin/which /bin - export MAKEFLAGS="-j$(nproc)" + MAKEFLAGS="-j$(nproc)" + export MAKEFLAGS export DEBIAN_FRONTEND=noninteractive ( @@ -135,7 +136,7 @@ build() { make install ) & - wait $(jobs -p) + wait "$(jobs -p)" TARGET_WORKSPACE=$(pwd)/build scripts/build.sh } diff --git a/package/oxide/package b/package/oxide/package index 9fb48ce9a..5c1d64eb8 100644 --- a/package/oxide/package +++ b/package/oxide/package @@ -36,7 +36,7 @@ build() { | xargs -r -0 sed -i 's/linux-oe-g++/linux-arm-remarkable-g++/g' local threads threads="$(echo -e "8\n$(nproc)" | sort -n | tail -n1)" - CMAKE_TOOLCHAIN_FILE="/usr/share/cmake/$CHOST.cmake" make FEATURES=sentry release -j${threads:-8} + CMAKE_TOOLCHAIN_FILE="/usr/share/cmake/$CHOST.cmake" make FEATURES=sentry release -j"${threads:-8}" } oxide() { diff --git a/package/rempack/package b/package/rempack/package index 9e96aefc0..74d7de314 100644 --- a/package/rempack/package +++ b/package/rempack/package @@ -9,7 +9,7 @@ archs=(rmall) url="https://github.com/rexxar-tc/rempack" pkgver=1.1.4-1 timestamp=2025-03-09T21:13:27 -section=admin +section="admin" maintainer="Brant Martin " license=MIT image=base:v3.1 @@ -25,7 +25,7 @@ sha256sums=( SKIP ) build() { - cd $srcdir + cd "$srcdir" mkdir output cmake -S . -B output --preset "Release Native" cmake --build output --target rempack diff --git a/package/rm2fb-timower/package b/package/rm2fb-timower/package index 695b58e9c..4f07a711e 100644 --- a/package/rm2fb-timower/package +++ b/package/rm2fb-timower/package @@ -139,7 +139,7 @@ rm2fb-client() { package() { libname="librm2fb_client.so.$_libver" install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/install/lib/"$libname" - install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/install/lib/"librm2fb_client_no_hook.so" + install -D -m 644 -t "$pkgdir"/opt/lib "$srcdir"/install/lib/librm2fb_client_no_hook.so install -d "$pkgdir"/usr/lib ln -s /opt/lib/"$libname" "$pkgdir"/usr/lib/"$libname" diff --git a/package/rmkit/package b/package/rmkit/package index 0a188d68c..d412d2d3b 100644 --- a/package/rmkit/package +++ b/package/rmkit/package @@ -27,7 +27,7 @@ build() { pip3 install okp local threads threads="$(echo -e "8\n$(nproc)" | sort -n | tail -n1)" - ARCH="rm" make -j${threads:-8} + ARCH="rm" make -j"${threads:-8}" } bufshot() { diff --git a/package/toltec-base/opt-usr-bin.sh b/package/toltec-base/opt-usr-bin.sh index 9ff6643dc..150f4ad13 100644 --- a/package/toltec-base/opt-usr-bin.sh +++ b/package/toltec-base/opt-usr-bin.sh @@ -1,3 +1,3 @@ #!/bin/sh -export PATH=/opt/usr/bin:$PATH +export PATH="/opt/usr/bin:$PATH" diff --git a/package/toltec-bootstrap/toltecctl b/package/toltec-bootstrap/toltecctl index a0daca1f2..957e6d290 100644 --- a/package/toltec-bootstrap/toltecctl +++ b/package/toltec-bootstrap/toltecctl @@ -668,7 +668,7 @@ function version { # # Output: True if the first number is larger or equal to than the second compare-versions() { - [ "$(version $1)" -ge "$(version $2)" ] + [ "$(version "$1")" -ge "$(version "$2")" ] } # Identify which toltec version this should be limited to diff --git a/package/xochitl/xochitl b/package/xochitl/xochitl index 4a2eb95f2..8aa44f77c 100644 --- a/package/xochitl/xochitl +++ b/package/xochitl/xochitl @@ -13,11 +13,11 @@ done # If for some reason, sync.service is no longer masked, re-mask it # The package install should have handled this, but something may # have changed it. -if [[ "x$(systemctl is-enabled sync.service)" != "xmasked" ]]; then +if [[ "$(systemctl is-enabled sync.service)" != "masked" ]]; then systemctl mask sync.service fi -if [[ "x$(systemctl is-enabled rm-sync.service)" != "xmasked" ]]; then +if [[ "$(systemctl is-enabled rm-sync.service)" != "masked" ]]; then systemctl mask rm-sync.service fi diff --git a/package/zerotier-one/package b/package/zerotier-one/package index 6ac9d22b2..a1fb65c61 100644 --- a/package/zerotier-one/package +++ b/package/zerotier-one/package @@ -39,8 +39,8 @@ build() { export CXX="${CROSS_COMPILE}g++" export AR="${CROSS_COMPILE}ar" export STRIP="${CROSS_COMPILE}strip" - make -j$(nproc) - make -j$(nproc) selftest + make -j"$(nproc)" + make -j"$(nproc)" selftest } zerotier() { diff --git a/package/zoneinfo-utils/package b/package/zoneinfo-utils/package index 9796330f1..a67fc4a75 100644 --- a/package/zoneinfo-utils/package +++ b/package/zoneinfo-utils/package @@ -43,7 +43,7 @@ build() { popd > /dev/null rm -r .x86 - make VERSION="$_tzver" CC=${CROSS_COMPILE}cc + make VERSION="$_tzver" CC="${CROSS_COMPILE}cc" "${CROSS_COMPILE}strip" --strip-all zic zdump } @@ -67,7 +67,7 @@ package() { # cleanup rm "${pkgdir}"/etc/localtime rmdir "${pkgdir}"/etc - rm -rf "${pkgdir}"/usr/share + rm -rf "${pkgdir:?}"/usr/share rmdir "${pkgdir}"/usr } From c9c970878473a3b5fa7476344526c01c7d456f2c Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Tue, 4 Nov 2025 16:39:02 -0700 Subject: [PATCH 87/88] Ignore chroot errors --- package/debian-chroot/package | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package/debian-chroot/package b/package/debian-chroot/package index 9adf4e073..2821231ee 100644 --- a/package/debian-chroot/package +++ b/package/debian-chroot/package @@ -38,7 +38,7 @@ debian-chroot() { mkdir -p "$pkgdir"/opt/etc/ ln -s /home/root/.config/debian-chroot.conf \ "$pkgdir"/opt/etc/debian-chroot.conf - # shellcheck disable=SC1091 + # shellcheck disable=SC1091,SC1090 source "$srcdir"/debian-chroot.conf mkdir -p "$pkgdir"/opt/lib/ ln -s "$chroot_path" "$pkgdir"/opt/lib/debian-chroot @@ -48,7 +48,7 @@ debian-chroot() { debian-chroot true } preremove() { - # shellcheck disable=SC1091 + # shellcheck disable=SC1091,SC1090 source /home/root/.config/debian-chroot.conf if lsof "$chroot_path" 2> /dev/null | grep "$chroot_path"; then echo "Error: debian-chroot has running processes" @@ -60,7 +60,7 @@ debian-chroot() { cp /home/root/.config/debian-chroot.conf /tmp/_debian-chroot.conf } postremove() { - # shellcheck disable=SC1091 + # shellcheck disable=SC1091,SC1090 source /tmp/_debian-chroot.conf rm -rf "$chroot_path" rm /tmp/_debian-chroot.conf From a6a2f807ea6419aacb5d23153a6cb74c70c4bbb0 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Tue, 4 Nov 2025 17:09:06 -0700 Subject: [PATCH 88/88] Fix netsurf build --- package/netsurf/package | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/package/netsurf/package b/package/netsurf/package index 8ec94c846..79228aa60 100644 --- a/package/netsurf/package +++ b/package/netsurf/package @@ -85,7 +85,9 @@ prepare() { cd freetype tar --strip-components=1 -xf ../freetype-VER-2-10-4.tar.gz ) & - wait "$(jobs -p)" + + # shellcheck disable=SC2046 + wait $(jobs -p) } build() { @@ -136,7 +138,8 @@ build() { make install ) & - wait "$(jobs -p)" + # shellcheck disable=SC2046 + wait $(jobs -p) TARGET_WORKSPACE=$(pwd)/build scripts/build.sh }