Skip to content

Commit d3df6cb

Browse files
Eeemsmatteodelabre
andauthored
Add support for limiting packages to OS versions (#759)
- Port 3.11 and c-string fixes from toltecmk - Add rmallos2, rmallos3, rm1os2, rm1os3, rm2os2, and rm2os3 archs for limiting packages to only supporting those versions - Update documentation - Update known issues packages to only be for 2.x - Make toltec-base generate a package for each arch to make sure that the folders always get created - Added experimental toltec branch for testing purposes. You need to add the experimental tag to a PR, and it will start applying changes to the experimental branch. - Fix various issues with the install and reenable process - Update toltecctl output to use the same logging as bootstrap --------- Co-authored-by: Mattéo Delabre <[email protected]> Co-authored-by: Mattéo Delabre <[email protected]>
1 parent 2cad2a2 commit d3df6cb

File tree

26 files changed

+896
-216
lines changed

26 files changed

+896
-216
lines changed

.github/actions/setup/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ runs:
7070
- name: Setup Python
7171
uses: actions/setup-python@v4
7272
with:
73-
python-version: '3.10'
73+
python-version: '3.11'
7474
- name: Cache Python environment
7575
uses: actions/cache@v3
7676
id: cache-python

.github/actions/sync-repository/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ runs:
2828
echo '${{ inputs.ssh-key }}' > private/id_rsa
2929
echo '${{ inputs.ssh-known-hosts }}' > private/known_hosts
3030
chmod 600 private/*
31-
rsync --archive --verbose --compress --delete \
31+
rsync --archive --verbose --compress --delete --hard-links \
3232
-e "ssh -p ${{ inputs.ssh-port }} -i private/id_rsa -o UserKnownHostsFile=private/known_hosts" \
3333
'${{ inputs.local-path }}' \
3434
'${{ inputs.remote-path }}'

.github/workflows/pr.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,15 @@ jobs:
3030
with:
3131
name: repo
3232
path: build/repo
33+
- name: Build packages for experimental
34+
if: ${{ contains(github.event.pull_request.labels.*.name, 'experimental') }}
35+
run: make repo FLAGS='--remote-repo https://toltec-dev.org/${{ github.base_ref }}'
36+
- name: Sync packages with the remote repository
37+
if: ${{ contains(github.event.pull_request.labels.*.name, 'experimental') }}
38+
uses: ./.github/actions/sync-repository
39+
with:
40+
local-path: build/repo/
41+
ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}
42+
ssh-known-hosts: ${{ secrets.SSH_KNOWN_HOSTS }}
43+
ssh-port: ${{ secrets.SSH_PORT }}
44+
remote-path: ${{ secrets.REMOTE_SSH }}:/srv/toltec/experimental

docs/package.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,17 @@ You can also declare custom variables to reduce repetition but make sure to pref
3838
The list of devices that are compatible with this package.
3939
The following values are accepted:
4040

41-
Name | Meaning
42-
--------|-------------------------------------------------------------------------
43-
`rmall` | Packages which work on all reMarkable devices without modification.
44-
`rm1` | Packages requiring reMarkable 1-specific resources or compilation flags.
45-
`rm2` | Packages requiring reMarkable 2-specific resources or compilation flags.
41+
Name | Meaning
42+
------------|-------------------------------------------------------------------------
43+
`rmall` | Packages which work on all reMarkable devices without modification.
44+
`rm1` | Packages requiring reMarkable 1-specific resources or compilation flags.
45+
`rm2` | Packages requiring reMarkable 2-specific resources or compilation flags.
46+
`rmallos2` | Packages which work on all reMarkable devices without modification, but only on the 2.x series of operating system.
47+
`rm1os2` | Packages requiring reMarkable 1-specific resources or compilation flags, but only on the 2.x series of operating system.
48+
`rm2os2` | Packages requiring reMarkable 2-specific resources or compilation flags, but only on the 2.x series of operating system.
49+
`rmallos3` | Packages which work on all reMarkable devices without modification, but only on the 3.x series of operating system.
50+
`rm1os3` | Packages requiring reMarkable 1-specific resources or compilation flags, but only on the 3.x series of operating system.
51+
`rm2os3` | Packages requiring reMarkable 2-specific resources or compilation flags, but only on the 3.x series of operating system.
4652

4753
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.
4854

package/Compatibility

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
rm1=2.6.1.71
2+
rm1=2.6.2.75
3+
rm1=2.7.0.9
4+
rm1=2.7.0.30
5+
rm1=2.7.0.36
6+
rm1=2.7.0.44
7+
rm1=2.7.0.51
8+
rm1=2.8.0.81
9+
rm1=2.8.0.86
10+
rm1=2.8.0.98
11+
rm1=2.9.0.153
12+
rm1=2.9.0.204
13+
rm1=2.9.0.210
14+
rm1=2.9.1.217
15+
rm1=2.9.1.236
16+
rm1=2.10.2.356
17+
rm1=2.10.3.379
18+
rm1=2.11.0.442
19+
rm1=2.12.1.527
20+
rm1=2.12.2.573
21+
rm1=2.12.3.606
22+
rm1=2.13.0.758
23+
rm1=2.14.0.861
24+
rm1=2.14.1.866
25+
rm1=2.14.3.958
26+
rm1=2.14.3.977
27+
rm1=2.14.3.1005
28+
rm1=2.14.3.1047
29+
rm1=2.15.0.1067
30+
rm1=2.15.1.1189
31+
rm1=3.0.4.1305
32+
rm1=3.2.2.1581
33+
rm1=3.2.3.1595
34+
rm1=3.3.2.1666
35+
36+
rm2=2.6.1.71
37+
rm2=2.6.2.75
38+
rm2=2.7.0.9
39+
rm2=2.7.0.30
40+
rm2=2.7.0.36
41+
rm2=2.7.0.44
42+
rm2=2.7.0.51
43+
rm2=2.7.1.53
44+
rm2=2.8.0.81
45+
rm2=2.8.0.86
46+
rm2=2.8.0.98
47+
rm2=2.9.0.153
48+
rm2=2.9.0.204
49+
rm2=2.9.0.210
50+
rm2=2.9.1.217
51+
rm2=2.9.1.236
52+
rm2=2.10.2.356
53+
rm2=2.10.3.379
54+
rm2=2.11.0.442
55+
rm2=2.12.1.527
56+
rm2=2.12.2.573
57+
rm2=2.12.3.606
58+
rm2=2.13.0.758
59+
rm2=2.14.0.861
60+
rm2=2.14.1.866
61+
rm2=2.14.3.958
62+
rm2=2.14.3.977
63+
rm2=2.14.3.1005
64+
rm2=2.14.3.1047
65+
rm2=2.15.0.1067
66+
rm2=2.15.1.1189
67+
rm2=3.0.4.1305
68+
rm2=3.2.2.1581
69+
rm2=3.2.3.1595
70+
rm2=3.3.2.1666

package/ddvk-hacks/package

Lines changed: 65 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
# Copyright (c) 2021 The Toltec Contributors
33
# SPDX-License-Identifier: MIT
44

5-
archs=(rm1 rm2)
5+
archs=(rm1os2 rm2os2)
66
pkgnames=(ddvk-hacks)
77
pkgdesc="Enhance Xochitl with additional features"
88
url=https://github.com/ddvk/remarkable-hacks
9-
pkgver=39.01-2
9+
pkgver=39.01-4
1010
timestamp=2022-11-09T18:31:51Z
1111
section="readers"
1212
maintainer="Mattéo Delabre <[email protected]>"
@@ -20,55 +20,58 @@ sha256sums=(d3b1413bb9219804581afab598e7f5308233e7467d64e8084e67aae7346beaba)
2020
_patches_dir="/opt/share/ddvk-hacks"
2121
_xochitl_path="/usr/bin/xochitl"
2222
_work_dir="/home/root/.local/share/ddvk-hacks"
23+
_info_path="$_work_dir/xochitl.info"
2324
_backup_path="$_work_dir/xochitl.backup"
2425
_old_backup_path="$_backup_path.old"
2526
_patched_path="$_work_dir/xochitl.patched"
2627

2728
package() {
28-
if [[ $arch = rm1 ]]; then
29-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/26171_rm1/patch_19.1.02
30-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/26275_rm1/patch_20.1.03
31-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/27051_rm1/patch_21.1.04
32-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/28098_rm1/patch_23.1.02
33-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/291236_rm1/patch_24.1.02
34-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2100324_rm1/patch_25.1.03
35-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2102356_rm1/patch_27.1.03
36-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2103379_rm1/patch_28.1.02
37-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2110442_rm1/patch_29.1.02
38-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2121527_rm1/patch_30.1.08
39-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2122573_rm1/patch_31.1.01
40-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2123606_rm1/patch_32.1.03
41-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2140861_rm1/patch_34.1.01
42-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2141866_rm1/patch_35.1.01
43-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2143977_rm1/patch_36.1.01
44-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/21431047_rm1/patch_37.1.01
45-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/21501067_rm1/patch_38.1.03
46-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/21511189_rm1/patch_39.1.01
47-
elif [[ $arch = rm2 ]]; then
48-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/26171_rm2/patch_19.2.02
49-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/26275_rm2/patch_20.2.03
50-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/27051_rm2/patch_21.2.05
51-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/27153_rm2/patch_22.2.01
52-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/28098_rm2/patch_23.2.02
53-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/291217_rm2/patch_24.2.04
54-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2100324_rm2/patch_25.2.01
55-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2101332_rm2/patch_26.2.02
56-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2102356_rm2/patch_27.2.05
57-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2103379_rm2/patch_28.2.02
58-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2110442_rm2/patch_29.2.02
59-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2121527_rm2/patch_30.2.07
60-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2122573_rm2/patch_31.2.01
61-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2123606_rm2/patch_32.2.02
62-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2130758_rm2/patch_33.2.01
63-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2140861_rm2/patch_34.2.01
64-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2141866_rm2/patch_35.2.01
65-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/2143977_rm2/patch_36.2.01
66-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/21431047_rm2/patch_37.2.01
67-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/21501067_rm2/patch_38.2.03
68-
install -D -m 644 -t "$pkgdir$_patches_dir" "$srcdir"/patches/21511189_rm2/patch_39.2.01
29+
mkdir -p "$pkgdir"/opt/share/toltec/reenable.d
30+
touch "$pkgdir"/opt/share/toltec/reenable.d/"$pkgname"
31+
if [[ $arch = rm1os2 ]]; then
32+
patches_dir="${pkgdir}${_patches_dir}"
33+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/26171_rm1/patch_19.1.02
34+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/26275_rm1/patch_20.1.03
35+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/27051_rm1/patch_21.1.04
36+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/28098_rm1/patch_23.1.02
37+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/291236_rm1/patch_24.1.02
38+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2100324_rm1/patch_25.1.03
39+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2102356_rm1/patch_27.1.03
40+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2103379_rm1/patch_28.1.02
41+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2110442_rm1/patch_29.1.02
42+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2121527_rm1/patch_30.1.08
43+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2122573_rm1/patch_31.1.01
44+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2123606_rm1/patch_32.1.03
45+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2140861_rm1/patch_34.1.01
46+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2141866_rm1/patch_35.1.01
47+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2143977_rm1/patch_36.1.01
48+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/21431047_rm1/patch_37.1.01
49+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/21501067_rm1/patch_38.1.03
50+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/21511189_rm1/patch_39.1.01
51+
elif [[ $arch = rm2os2 ]]; then
52+
patches_dir="${pkgdir}${_patches_dir}"
53+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/26171_rm2/patch_19.2.02
54+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/26275_rm2/patch_20.2.03
55+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/27051_rm2/patch_21.2.05
56+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/27153_rm2/patch_22.2.01
57+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/28098_rm2/patch_23.2.02
58+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/291217_rm2/patch_24.2.04
59+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2100324_rm2/patch_25.2.01
60+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2101332_rm2/patch_26.2.02
61+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2102356_rm2/patch_27.2.05
62+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2103379_rm2/patch_28.2.02
63+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2110442_rm2/patch_29.2.02
64+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2121527_rm2/patch_30.2.07
65+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2122573_rm2/patch_31.2.01
66+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2123606_rm2/patch_32.2.02
67+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2130758_rm2/patch_33.2.01
68+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2140861_rm2/patch_34.2.01
69+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2141866_rm2/patch_35.2.01
70+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/2143977_rm2/patch_36.2.01
71+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/21431047_rm2/patch_37.2.01
72+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/21501067_rm2/patch_38.2.03
73+
install -D -m 644 -t "$patches_dir" "$srcdir"/patches/21511189_rm2/patch_39.2.01
6974
fi
70-
touch "$srcdir"/emptyfile
71-
install -D -m 666 -t "$pkgdir"/usr/share/toltec/reenable.d/ddvk-hacks "$srcdir"/emptyfile
7275
}
7376

7477
configure() {
@@ -78,7 +81,7 @@ configure() {
7881
local device
7982
local original_hash
8083
local xochitl_version
81-
if [[ $arch = rm1 ]]; then
84+
if [[ $arch = rm1os2 ]]; then
8285
device="reMarkable 1"
8386
case "$build_date" in
8487
"20221026103859")
@@ -179,7 +182,7 @@ configure() {
179182
exit 1
180183
;;
181184
esac
182-
elif [[ $arch = rm2 ]]; then
185+
elif [[ $arch = rm2os2 ]]; then
183186
device="reMarkable 2"
184187
case "$build_date" in
185188
"20221026104022")
@@ -328,11 +331,25 @@ configure() {
328331
cp "$_patched_path" "$_xochitl_path"
329332
rm -rf /home/root/.cache/remarkable/xochitl/qmlcache/*
330333

334+
# shellcheck source=../toltec-bootstrap/toltecctl
335+
source /home/root/.local/bin/toltecctl
336+
get-release-version > "$_info_path"
337+
331338
echo "Please restart Xochitl to use the patches"
332339
echo
333340
}
334341

335342
_restore() {
343+
# shellcheck source=../toltec-bootstrap/toltecctl
344+
source /home/root/.local/bin/toltecctl
345+
346+
if ! [ -f "$_info_path" ] \
347+
|| [[ "$(get-release-version)" != "$(cat "$_info_path")" ]] \
348+
|| compare-versions "$(get-release-version)" "3.0"; then
349+
echo "Skipping restore, as you are on a newer OS version"
350+
return
351+
fi
352+
336353
echo
337354
echo "Restoring the original Xochitl binary"
338355

@@ -342,6 +359,7 @@ _restore() {
342359
else
343360
cp "$_backup_path" "$_xochitl_path"
344361
rm -rf /home/root/.cache/remarkable/xochitl/qmlcache/*
362+
rm "$_info_path"
345363
fi
346364

347365
echo

package/fuse/package

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
# Copyright (c) 2020 The Toltec Contributors
33
# SPDX-License-Identifier: MIT
44

5-
archs=(rm1 rm2)
5+
archs=(rm1os2 rm2os2)
66
pkgnames=(fuse)
77
pkgdesc="FUSE (Filesystem in Userspace) Kernel Module"
88
url=https://github.com/libfuse/libfuse
9-
pkgver=1.0.0-4
9+
pkgver=1.0.0-5
1010
timestamp=2021-04-06T22:16Z
1111
section=kernel
1212
maintainer="plan5 <[email protected]>"
@@ -51,14 +51,14 @@ build() {
5151
}
5252

5353
package() {
54-
if [[ $arch = rm1 ]]; then
54+
if [[ $arch = rm1os2 ]]; then
5555
mkdir -p "$pkgdir/lib/modules"
5656
cp -r "$srcdir/pkg"/* "$pkgdir/lib/modules"
5757
fi
5858
}
5959

6060
configure() {
61-
if [[ $arch = rm1 ]]; then
61+
if [[ $arch = rm1os2 ]]; then
6262
# Regenerate /lib/modules/[ver]/modules.devname to request the
6363
# creation of /dev/fuse used for on-demand loading of fuse
6464
depmod -a
@@ -72,7 +72,7 @@ configure() {
7272
}
7373

7474
postremove() {
75-
if [[ $arch = rm1 ]]; then
75+
if [[ $arch = rm1os2 ]]; then
7676
echo 'Fuse (Kernel Module) has been removed.'
7777
echo 'The kernel module will remain loaded until you reboot, or you can attempt'
7878
echo 'to manually remove it by running "modprobe -r fuse".'
@@ -81,7 +81,7 @@ postremove() {
8181
}
8282

8383
postupgrade() {
84-
if [[ $arch = rm1 ]]; then
84+
if [[ $arch = rm1os2 ]]; then
8585
echo 'Fuse (Kernel Module) has been upgraded.'
8686
echo 'The old kernel module will remain loaded until you reboot, or you can'
8787
echo 'attempt to manually remove it by running "modprobe -r fuse".'

package/kernelctl/package

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
pkgnames=(kernelctl)
66
pkgdesc="Manage aftermarket kernels"
77
url=https://toltec-dev.org/
8-
pkgver=0.1-6
8+
pkgver=0.1-7
99
timestamp=2022-11-12T00:00Z
1010
section="utils"
1111
maintainer="Salvatore Stella <[email protected]>"
@@ -19,10 +19,10 @@ sha256sums=(
1919
)
2020

2121
package() {
22-
touch "$srcdir"/emptyfile
2322
install -D -m 744 -t "$pkgdir"/opt/bin "$srcdir"/kernelctl
2423
install -d "$pkgdir"/opt/usr/share/kernelctl
25-
install -D -m 666 -t "$pkgdir"/usr/share/toltec/reenable.d/kernelctl "$srcdir"/emptyfile
24+
mkdir -p "$pkgdir"/opt/share/toltec/reenable.d
25+
touch "$pkgdir"/opt/share/toltec/reenable.d/"$pkgname"
2626
}
2727

2828
configure() {

0 commit comments

Comments
 (0)