Files
hassio-addons/calibre_web/CHANGELOG.md
Alexandre 8142df0596 fix(calibre-web): make kepubify executable so Kobo sync can be enabled (#3041)
* fix(calibre-web): make kepubify executable so Kobo sync can be enabled

The LinuxServer base image installs kepubify with `curl -o /usr/bin/kepubify`
and never marks it executable, so the file ships as mode 0644. Calibre-web's
resolve_binary_path() only accepts a binary that passes os.access(X_OK), so
enabling Kobo sync failed with "Kepubify binary not found" even when the path
was set to /usr/bin by hand. Verified against the published layer of
lscr.io/linuxserver/calibre-web:arm64v8-latest, whose tar header for
usr/bin/kepubify reads `-rw-r--r-- 0/0 3670016`.

Set mode 0755 on it at build time, unguarded: if a future base image stops
shipping the binary, the build should fail rather than ship a broken add-on.

Calibre-web separately only autodetects kepubify under /opt/kepubify, never
/usr/bin, so the setting was stored empty on the first start and never
retried. Fill it in with /usr/bin from the cont-init script that already
applies conditional settings to app.db, and only while it is still empty, so
a path the user set by hand is never overwritten.

Fixes https://github.com/alexbelgium/hassio-addons/issues/3040

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(calibre-web): publish kepubify under a name calibre-web accepts

The first attempt was incomplete. It read binary_helper.py at calibre-web
master, which accepts a bare "kepubify"; the shipped 0.6.27 tag does not:

    SUPPORTED_KEPUBIFY_BINARIES = ("kepubify-linux-64bit", "kepubify-linux-32bit")

So there are two independent defects, and the chmod only fixed one. The base
image installs the converter with `curl -o /usr/bin/kepubify`, which leaves it
mode 0644 *and* names it something calibre-web will not look for.

A symlink alone does not fix it either: os.access() follows the symlink and
tests the target, and the target has no execute bit for anyone, root included.
Verified against the exact 0.6.27 resolution logic, on a scratch tree:

    symlink only          -> ''             (still broken)
    chmod only            -> ''             (still broken)
    chmod 0755 + symlink  -> '/opt/kepubify'

Put the symlink in /opt/kepubify, which is where calibre-web's own
autodetect_kepubify_binary() already looks, rather than in /usr/bin where only
our own database write would find it. init_config() re-runs that detection on
every start while the column is NULL, so calibre-web now configures the path
itself and a fresh install needs no second restart.

That in turn shrinks the cont-init statement: instead of hardcoding a path it
resets an empty value to NULL, which un-sticks calibre-web's own detection for
installs that already persisted "". A path set by hand is not empty and is
left alone.

Mode measured on the published add-on image, all 28 layers scanned:
ghcr.io/alexbelgium/calibre_web-aarch64:0.6.27.3 carries usr/bin/kepubify at
mode 0o644 in the base layer and nowhere else.

Reported by @andMaximus in https://github.com/alexbelgium/hassio-addons/issues/3040

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(calibre-web): keep /usr/bin resolving for the manual workaround

CodeRabbit spotted that an install already storing "/usr/bin" stays broken:
that value is not empty, so the cont-init statement leaves it alone, and with
the symlink only in /opt/kepubify it no longer resolves under 0.6.27.

The case is real and narrow. A failed save never persists the value --
_configuration_result() calls config.load() on the error path, discarding it --
so the only way to hold "/usr/bin" is a save that succeeded, which requires
having first applied the workaround published in the issue thread:

    ln -sf /usr/bin/kepubify /usr/bin/kepubify-linux-64bit

Anyone who did that, and anyone copying that comment, would have been broken
again by this PR.

Fixed with one more symlink rather than CodeRabbit's suggested migration of
"/usr/bin" back to NULL, because that would overwrite a path the user set by
hand. Making their setting keep working is better than resetting it. Verified
against the 0.6.27 resolution logic:

    symlink in /opt only   stored '/usr/bin' -> ''
    plus /usr/bin symlink  stored '/usr/bin' -> '/usr/bin/kepubify-linux-64bit'
                           autodetect        -> '/opt/kepubify'

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 13:26:53 +02:00

12 KiB

0.6.27.4 (2026-09-04)

  • Fix: Kobo sync could not be enabled, failing with "Kepubify binary not found" even when the path was set by hand. The LinuxServer base image installs the converter as /usr/bin/kepubify with curl -o, which leaves it mode 0644 and gives it a name calibre-web does not accept : binary_helper.py only takes kepubify-linux-64bit or kepubify-linux-32bit, and only when os.access(X_OK) passes. The addon now makes the binary executable and publishes it as /opt/kepubify/kepubify-linux-64bit, the directory calibre-web's own autodetection already probes, so the path is filled in without any manual step (https://github.com/alexbelgium/hassio-addons/issues/3040)
  • Fix: on installs created before that change, calibre-web had already run its autodetection once, found nothing usable and stored an empty path, and it never retries. An empty path is now reset so calibre-web detects the converter itself at the next start. A path set by hand is left alone
  • Fix: /usr/bin also keeps working as a converter path, so the setting stored by anyone who applied the manual ln -sf /usr/bin/kepubify /usr/bin/kepubify-linux-64bit workaround keeps resolving after the update instead of silently breaking again

0.6.27.3 (2026-08-30)

  • Doc: explain in the README that Calibre-Web's optional extras (metadata, kobo, gdrive, gmail, goodreads, ldap, oauth, comics) are already installed by the LinuxServer base image, that pip install calibreweb[...] inside the container is useless and not persistent, and that the cover fields on the Edit Metadata page are gated on Enable Uploads plus the user's Upload permission (https://github.com/alexbelgium/hassio-addons/issues/1143)
  • Fix: remove the Dockerfile step that claimed to install the Calibre binaries into /opt/calibre. There is no wget in the image, so the command failed silently and left the layer empty; the binaries are and were provided at start by the default linuxserver/mods:universal-calibre docker mod

0.6.27.2 (2026-08-23)

  • Fix: trust the whole supervisor network range for the ingress auth header instead of the addon's own address, which changes across restarts. The list is only written when that range is missing, so an entry added in the calibre-web admin page is no longer erased on every start (https://github.com/alexbelgium/hassio-addons/pull/3010)

0.6.27.1 (2026-08-23)

0.6.27 (2026-08-13)

0.6.26-2 (2026-04-06)

  • Fix: Install calibre (calibredb) at build time to fix 500 error when downloading books

0.6.26 (2026-02-07)

0.6.25 (2025-08-30)

0.6.24-10 (2025-05-28)

  • Fix migration script
  • Allow access to Calibre folder through /addon_configs/xxx-Calibre

0.6.24 (2024-11-23)

0.6.23 (2024-08-10)

0.6.22 (2024-07-13)

0.6.21-7 (2024-01-12)

  • Minor bugs fixed

0.6.21-5 (2024-01-12)

  • ⚠ MAJOR CHANGE : switch to the new config logic from homeassistant. Your configuration files will have migrated from /config/hassio_addons/calibre-web to a folder only accessible from my Filebrowser addon called /addon_configs/something-calibre-web. This avoids the addon to mess with your homeassistant configuration folder, and allows to backup the options. Migration of data, custom configs, and custom scripts should be automatic. Please be sure to update all your links however ! For more information, see here : https://developers.home-assistant.io/blog/2023/11/06/public-addon-config/ https://github.com/alexbelgium/hassio-addons/issues/1177

0.6.21-2 (2023-11-05)

0.6.21 (2023-10-28)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20 (2023-08-26)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls225 (2023-08-26)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls224 (2023-08-19)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls222 (2023-08-12)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls221 (2023-08-05)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls220 (2023-07-23)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls219 (2023-07-22)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls218 (2023-07-15)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls217 (2023-07-08)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls216 (2023-07-01)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls215 (2023-06-24)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls214 (2023-06-17)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls213 (2023-06-10)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls212 (2023-06-03)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls211-2 (2023-05-30)

0.6.20-ls211 (2023-05-27)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls210 (2023-05-19)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls209 (2023-05-13)

  • Update to latest version from linuxserver/docker-calibre-web
  • Feat : cifsdomain added

0.6.20-ls208-2 (2023-05-06)

  • Minor bugs fixed

0.6.20-ls208 (2023-05-06)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls207-6 (2023-05-05)

  • Minor bugs fixed

0.6.20-ls207-3 (2023-05-05)

  • Minor bugs fixed

0.6.20-ls207-2 (2023-05-05)

0.6.20-ls207 (2023-04-23)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls206 (2023-04-21)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls205 (2023-04-15)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls203 (2023-04-01)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.20-ls202 (2023-03-31)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls200 (2023-03-24)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls199 (2023-03-18)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls198 (2023-03-11)

  • Update to latest version from linuxserver/docker-calibre-web
  • Implemented healthcheck

0.6.19-ls197 (2023-03-04)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls196 (2023-02-25)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls195 (2023-02-19)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls194 (2023-02-04)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls193 (2023-01-28)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls192 (2023-01-14)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls191 (2022-12-31)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls190 (2022-12-25)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls189 (2022-12-17)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls187 (2022-12-10)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls186 (2022-12-01)

  • Update to latest version from linuxserver/docker-calibre-web
  • WARNING : update to supervisor 2022.11 before installing

0.6.19-ls185 (2022-11-26)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls184 (2022-11-19)

  • Update to latest version from linuxserver/docker-calibre-web
  • Use nobrl (#556)

0.6.19-ls183 (2022-11-11)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls182 (2022-11-02)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls181 (2022-10-27)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls180 (2022-10-25)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls179 (2022-10-20)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls178 (2022-10-13)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls177 (2022-10-06)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls176 (2022-09-28)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls175 (2022-09-22)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls174 (2022-09-15)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls173 (2022-09-09)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls172 (2022-08-25)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls171 (2022-08-11)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.19-ls170 (2022-08-04)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.18-ls170 (2022-07-28)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.18-ls169 (2022-07-16)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.18-ls168 (2022-07-14)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.18-ls167 (2022-06-30)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.18-ls166 (2022-06-23)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.18-ls165 (2022-06-16)

  • Update to latest version from linuxserver/docker-calibre-web
  • Feat : ingress autologin (thanks @met67)

0.6.18-ls164 (2022-06-09)

  • Update to latest version from linuxserver/docker-calibre-web
  • Fix : ingress (with @met67)

0.6.18-ls163 (2022-05-26)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.18-ls162 (2022-05-19)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.18-ls161 (2022-05-11)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.18-ls160 (2022-05-05)

  • Update to latest version from linuxserver/docker-calibre-web

0.6.18-ls159 (2022-05-03)

  • Update to latest version from linuxserver/docker-calibre-web

v5.41.0-ls158 (2022-04-29)

  • Update to latest version from linuxserver/docker-calibre-web

5.41.0 (2022-04-29)

  • Update to latest version from linuxserver/docker-calibre-web
  • Initial release