ddvk/remarkable2-framebuffer

v0.0.3 crashes koreader on startup

snelg opened this issue · 11 comments

snelg commented

Only crashes if it's a fresh koreader installation, or more particularly if koreader/cache/fontinfo.dat does not yet exist.
See toltec-dev/toolchain#8

thank you, didn't see that issue before - that is a nice investigation!

snelg commented

didn't see that issue before

Yeah, guess I should have cross-posted in the first place :)

this might block stable merge of rm2fb until we figure it out or use old toolchain

Thanks for reporting @snelg! This does not seem to be linked to the toolchain or to recent changes in rm2fb though, since I managed to reproduce the crash using rm2fb 1.0.0-7 from Toltec stable.

  • reMarkable 2
  • rm2fb 1.0.0-7 from Toltec stable (commit cd27668)
  • KOReader 2020.12 from Toltec stable
Logs with existing /opt/koreader/cache/fontinfo.dat file
---------------------------------------------
                launching...
  _  _____  ____                _
 | |/ / _ \|  _ \ ___  __ _  __| | ___ _ __
 | ' / | | | |_) / _ \/ _` |/ _` |/ _ \ '__|
 | . \ |_| |  _ <  __/ (_| | (_| |  __/ |
 |_|\_\___/|_| \_\___|\__,_|\__,_|\___|_|

 It's a scroll... It's a codex... It's KOReader!

 [*] Current time: 03/03/21-13:13:29
 [*] Version: v2020.12

ffi.load: blitbuffer
ffi.load (assisted searchpath): ./libs/libblitbuffer.so
ffi.load: SDL2
ffi.load (warning): libSDL2.so: cannot open shared object file: No such file or directory
ffi.load: libSDL2-2.0.so
ffi.load (warning): libSDL2-2.0.so: cannot open shared object file: No such file or directory
ffi.load: libSDL2-2.0.so.0
ffi.load (warning): libSDL2-2.0.so.0: cannot open shared object file: No such file or directory
SDL2 not loaded:	./setupkoenv.lua:27: Not able to load dynamic library: libSDL2-2.0.so.0
03/03/21-13:13:29 INFO  deviceType:  reMarkable 2.0
[ko-input] Forked off fake event generator(pid:466).
03/03/21-13:13:29 INFO  initializing for device reMarkable 2
03/03/21-13:13:29 INFO  framebuffer resolution: {
    ["w"] = 1404,
    ["h"] = 1872,
}
ffi.load: libs/libmupdf.so
ffi.load: libs/libwrap-mupdf.so
ffi.load: libs/libfreetype.so.6
ffi.load: libs/libharfbuzz.so.0
03/03/21-13:13:30 INFO  opening file /opt/koreader/help/quickstart-en-v2020.12.html
03/03/21-13:13:30 INFO  Loading plugins from directory: plugins
ffi.load: sqlite3
ffi.load (assisted searchpath): ./libs/libsqlite3.so
03/03/21-13:13:30 INFO  Plugin  plugins/autofrontlight.koplugin/main.lua  has been disabled.
03/03/21-13:13:30 INFO  Plugin  plugins/keepalive.koplugin/main.lua  has been disabled.
03/03/21-13:13:30 INFO  Plugin  plugins/SSH.koplugin/main.lua  has been disabled.
03/03/21-13:13:30 INFO  Plugin  plugins/timesync.koplugin/main.lua  has been disabled.
ffi.load: z
ffi.load (assisted searchpath): ./libs/libz.so.1
03/03/21-13:13:30 INFO  Plugin  plugins/autostandby.koplugin/main.lua  has been disabled.
03/03/21-13:13:30 INFO  Plugin  plugins/hello.koplugin/main.lua  has been disabled.
03/03/21-13:13:30 INFO  RD loaded plugin autosuspend at plugins/autosuspend.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin autoturn at plugins/autoturn.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin backgroundrunner at plugins/backgroundrunner.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin batterystat at plugins/batterystat.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin calibre at plugins/calibre.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin coverbrowser at plugins/coverbrowser.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin coverimage at plugins/coverimage.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin docsettingtweak at plugins/docsettingtweak.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin evernote at plugins/evernote.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin gestures at plugins/gestures.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin goodreads at plugins/goodreads.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin kosync at plugins/kosync.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin movetoarchive at plugins/movetoarchive.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin newsdownloader at plugins/newsdownloader.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin perceptionexpander at plugins/perceptionexpander.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin profiles at plugins/profiles.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin qrclipboard at plugins/qrclipboard.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin readtimer at plugins/readtimer.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin send2ebook at plugins/send2ebook.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin statistics at plugins/statistics.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin systemstat at plugins/systemstat.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin terminal at plugins/terminal.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin texteditor at plugins/texteditor.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin wallabag at plugins/wallabag.koplugin
03/03/21-13:13:30 INFO  RD loaded plugin zsync at plugins/zsync.koplugin
03/03/21-13:13:30 INFO  ReaderStatistics: Initializing average time per page at 50% of the max value, i.e., 60
Logs with missing /opt/koreader/cache/fontinfo.dat file
---------------------------------------------
                launching...
  _  _____  ____                _
 | |/ / _ \|  _ \ ___  __ _  __| | ___ _ __
 | ' / | | | |_) / _ \/ _` |/ _` |/ _ \ '__|
 | . \ |_| |  _ <  __/ (_| | (_| |  __/ |
 |_|\_\___/|_| \_\___|\__,_|\__,_|\___|_|

 It's a scroll... It's a codex... It's KOReader!

 [*] Current time: 03/03/21-13:12:23
 [*] Version: v2020.12

ffi.load: blitbuffer
ffi.load (assisted searchpath): ./libs/libblitbuffer.so
ffi.load: SDL2
ffi.load (warning): libSDL2.so: cannot open shared object file: No such file or directory
ffi.load: libSDL2-2.0.so
ffi.load (warning): libSDL2-2.0.so: cannot open shared object file: No such file or directory
ffi.load: libSDL2-2.0.so.0
ffi.load (warning): libSDL2-2.0.so.0: cannot open shared object file: No such file or directory
SDL2 not loaded:	./setupkoenv.lua:27: Not able to load dynamic library: libSDL2-2.0.so.0
03/03/21-13:12:23 INFO  deviceType:  reMarkable 2.0
[ko-input] Forked off fake event generator(pid:455).
03/03/21-13:12:23 INFO  initializing for device reMarkable 2
03/03/21-13:12:23 INFO  framebuffer resolution: {
    ["w"] = 1404,
    ["h"] = 1872,
}
ffi.load: libs/libmupdf.so
ffi.load: libs/libwrap-mupdf.so
ffi.load: libs/libfreetype.so.6
ffi.load: libs/libharfbuzz.so.0
/opt/bin/rm2fb-client: line 3:   454 Segmentation fault      (core dumped) LD_PRELOAD=/opt/lib/librm2fb_client.so.1.0.0 $*

to understand: does it crash on the second run? is this something that is automatically handled since koreader.sh has a loop in it?

To produce the logs above I ran rm2fb-client ./reader.lua directly from the /opt/koreader directory. The first log file corresponds to a successful KOReader run, the second file corresponds to a crash. The koreader.sh wrapper seems to generate the /opt/koreader/cache/fontinfo.dat file when it’s missing (not sure how yet), so the app does not crash.

Setting LD_LIBRARY_PATH to ./libs: (as done by the koreader.sh wrapper) seems to fix it. So the following command does not crash, even if the fontinfo.dat file is missing:

$ LD_LIBRARY_PATH=./libs: rm2fb-client ./reader.lua

Comparing strace logs shows that, without the flag, both the system /usr/lib/libharfbuzz.so.0 library and then the local /opt/koreader/libs/libharfbuzz.so.0 library get loaded. With the flag, only the local one gets loaded.

It looks like I hit a bug that shadowed another one here. Running LD_LIBRARY_PATH=./libs: LD_PRELOAD="/path/to/librm2fb_client.so.1.0.0" ./reader.lua with the latest rm2fb release (v0.0.3 downloaded from this repo’s releases) does result in a crash, whereas it did not crash using the earlier rm2fb release. So there does seem to be a regression introduced in rm2fb. I’ll investigate the segfault.

Here’s my hypothesis: a change introduced in the toolchain cancels the effect of the LD_LIBRARY_PATH environment variable. Evidence:

  • Comparing strace between a run of reader.lua using the shim from Toltec stable and a run using the v0.0.3 shim shows that the former loads the system libharfbuzz.so and the latter loads the local one.
  • Using a local build of the v0.0.3 shim does not produce this behavior, so it seems to come from the toolchain.
Eeems commented

@NiLuJe pinging you, as you might have some insight.

c.f., my answers in toltec-dev/toolchain#8, which follow the same train of thought as @matteodelabre ;)