daniel-j / send2ereader

A service for sending ebooks to a Kobo or Kindle ereader through the built-in browser
https://send.djazz.se
MIT License
341 stars 54 forks source link

exception throw "Error: spawn kepubify ENOENT" when attempting to upload epub file #16

Closed GregHilston closed 9 months ago

GregHilston commented 9 months ago

I'm working on the following Dockerfile:

FROM node:16

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3001
CMD [ "node", "index" ]

and docker-compose.yaml:

version: "3"
  services:
    send2ereader:
      build:
        context: .
        dockerfile: ./Dockerfile
      container_name: send3ereader
      ports:
        - 3001:3001

when I uploaded a few test .epub files, I'm always getting the following errors in the docker compose logs:

> docker compose up
[+] Running 1/0
 ⠿ Container send3ereader  Created                                                                                                                      0.0s
Attaching to send3ereader
send3ereader  | server is listening on port 3001
send3ereader  |   <-- GET /status/null
send3ereader  |   --> GET /status/null 200 5ms 23b
send3ereader  |   <-- GET /
send3ereader  | ::ffff:172.18.0.1 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0
send3ereader  |   --> GET / 304 2ms
send3ereader  |   <-- GET /style.css
send3ereader  |   --> GET /style.css 304 2ms
send3ereader  |   <-- POST /generate
send3ereader  | There are currently 0 key(s) in use.
send3ereader  | Generating unique key... ::ffff:172.18.0.1 Mozilla/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit/538.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/538.1 (Kobo Touch 0376/4.38.21908)
send3ereader  | Generated key T9HR, 1 attempt(s)
send3ereader  |   --> POST /generate 200 2ms 4b
send3ereader  |   <-- GET /status/T9HR
send3ereader  |   --> GET /status/T9HR 200 1ms 48b
send3ereader  |   <-- POST /upload
send3ereader  | Incoming file: {
send3ereader  |   fieldname: 'file',
send3ereader  |   originalname: REDACTED.epub',
send3ereader  |   encoding: '7bit',
send3ereader  |   mimetype: 'application/epub+zip'
send3ereader  | }
send3ereader  | Uploaded file: {
send3ereader  |   fieldname: 'file',
send3ereader  |   originalname: 'REDACTED.epub',
send3ereader  |   encoding: '7bit',
send3ereader  |   mimetype: 'application/epub+zip',
send3ereader  |   destination: 'uploads',
send3ereader  |   filename: 'file-1701317046504-305283146.epub',
send3ereader  |   path: 'uploads/file-1701317046504-305283146.epub',
send3ereader  |   size: 3933051
send3ereader  | }
send3ereader  | node:events:491
send3ereader  |       throw er; // Unhandled 'error' event
send3ereader  |       ^
send3ereader  |
send3ereader  | Error: spawn kepubify ENOENT
send3ereader  |     at Process.ChildProcess._handle.onexit (node:internal/child_process:285:19)
send3ereader  |     at onErrorNT (node:internal/child_process:485:16)
send3ereader  |     at processTicksAndRejections (node:internal/process/task_queues:83:21)
send3ereader  | Emitted 'error' event on ChildProcess instance at:
send3ereader  |     at Process.ChildProcess._handle.onexit (node:internal/child_process:291:12)
send3ereader  |     at onErrorNT (node:internal/child_process:485:16)
send3ereader  |     at processTicksAndRejections (node:internal/process/task_queues:83:21) {
send3ereader  |   errno: -2,
send3ereader  |   code: 'ENOENT',
send3ereader  |   syscall: 'spawn kepubify',
send3ereader  |   path: 'kepubify',
send3ereader  |   spawnargs: [
send3ereader  |     '-v',
send3ereader  |     '-u',
send3ereader  |     '-o',
send3ereader  |     'file-1701317046504-305283146.kepub.epub',
send3ereader  |     'file-1701317046504-305283146.epub'
send3ereader  |   ]
send3ereader  | }
send3ereader exited with code 1

Any advice as to what may be causing this? Once I have this resolved, I can submit a PR with the Dockerfile and docker-compose.yaml file.

daniel-j commented 9 months ago

Hi!

kepubify and kindlegen needs to be in $PATH. You can download them here:

https://pgaskin.net/kepubify/

https://archive.org/download/kindlegen2.9/kindlegen_linux_2.6_i386_v2_9.tar.gz

GregHilston commented 9 months ago

Awesome, thanks @daniel-j . i'm preparing a PR now

GregHilston commented 9 months ago

Link to PR