Properties2
| Type | Project |
| Note created | May 20, 2026 |
After a month away from reading I found my Kobo Libra Colour booted into stock Nickel with a NickelMenu “Generator error”:
kfmon: error checking ‘/tmp/kfmon-ipc.ctl’: stat: No such file or directory (src/generator_c.c:93)
Background firmware update during idle had wiped KFMon’s hook out of /etc/init.d/on-animator.sh, so the daemon never started → no IPC socket → NickelMenu couldn’t enumerate KFMon launchers → KOReader unreachable. Fixed the immediate problem, then hardened so this can’t sneak back.
Hotfix
KFMon ships an OCP-KFMon-*.zip whose .kobo/KoboRoot.tgz is what restores the init hook. Latest is v1.4.6-179-ge000d65 (same version that was already installed — only the rootfs-side install was lost).
# Copy the package's KoboRoot.tgz into .kobo/, eject, let Nickel run "Updating..."
cp KoboRoot.tgz /Volumes/KOBOeReader/.kobo/Requires battery >25% or Nickel refuses the install.
Backups (before any other change)
Full snapshot at ~/Backups/Kobo/2026-05-20-pre-koreader-first/:
| Layer | What | How |
|---|---|---|
| FAT mirror | books, KOReader settings, statistics DB, sidecars, patches, KoboReader.sqlite | rsync over USBMS |
| FAT tarball | same as above, single file | tar -czf |
| Rootfs | /etc/init.d/on-animator.sh (patched), /usr/local/kfmon/, /etc/hosts, /etc/wpa_supplicant/ | tar piped over SSH |
| Stock firmware | kobo-update-4.45.23684.zip from pgaskin’s mirror | direct download |
DB sanity check via sqlite3 confirmed page_stat, book, content, Bookmark tables intact and queryable.
Hardening
Anti-fragility against the failure mode that started this. Two pieces:
/etc/hosts OTA block
Redirects firmware-update endpoints to localhost. Active block:
127.0.0.1 redirect.kobobooks.com
127.0.0.1 ereaderfiles.kobo.com
Backup of the pristine /etc/hosts lives at /etc/hosts.bak. Toggleable via NickelMenu (below).
NickelMenu hardening entries
Config file .adds/nm/hardening:
menu_item :main :Block OTA firmware updates :cmd_output :2000 :/bin/sh /mnt/onboard/.adds/scripts/block-ota.sh
menu_item :main :Allow OTA (restore hosts) :cmd_output :2000 :/bin/sh /mnt/onboard/.adds/scripts/unblock-ota.sh
menu_item :main :OTA block status :cmd_output :2000 :/bin/sh /mnt/onboard/.adds/scripts/ota-status.sh
menu_item :main :Reinstall KFMon (then reboot):cmd_output :5000 :/bin/sh /mnt/onboard/.adds/scripts/reinstall-kfmon.sh
Scripts live in .adds/scripts/. The “Reinstall KFMon” entry copies a staged KoboRoot.tgz from .adds/kfmon-recovery/ into .kobo/ and reboots — one-tap recovery for the original failure mode.
KOReader UX upgrades
- ProjectTitle (v2026.03-v3.7) — replaces the bundled CoverBrowser with a polished cover-grid home + “currently reading” hero widget. Requires disabling the built-in Cover Browser plugin first; ProjectTitle registers under the same
coverbrowserslot. - OPDS Plus — community OPDS browser with cover thumbnails and caching. Point it at Calibre’s content server / Standard Ebooks / Gutenberg.
Both installed via tar piped over SSH (no rsync on the device).
Why not go full Nickel-less
Researched it. Blocked by mt8113t-specific issues:
- Standby is broken on this SoC outside Nickel: 2–3 %/hr drain — kernel rejects
/sys/power/statewrites from KOReader (koreader#13986). - Touch input lags above ~3 taps/sec (#12867).
- No documented unbrick path for MediaTek Kobos (the older NXP iMX
uuuworkflow doesn’t apply). - No reports of
g_etherUSB networking working on this hardware.
Net: keep Nickel as the boot environment, use NickelMenu/KFMon to jump straight into KOReader. Effectively one tap from boot.
Recovery cheat-sheet
| Failure | Recovery |
|---|---|
| Future firmware update wipes KFMon again | Tap “Reinstall KFMon” in NickelMenu |
| OTA block needs to come off | Tap “Allow OTA” in NickelMenu (restores from /etc/hosts.bak) |
| Lost book / borked KOReader settings | rsync from ~/Backups/Kobo/2026-05-20-pre-koreader-first/KOBOeReader/ |
| Nickel corrupted / won’t boot | Copy stock-firmware/kobo-update-4.45.23684.zip contents into .kobo/ over USB |
| Hard brick | No known recovery path on mt8113t — warranty channel only |
Related
- Showing Session Pages in the KOReader Status Bar — the user patch I installed earlier; survived this whole operation intact
- Kobo Libra Color Screen Mirroring — earlier project on the same device