Coder Social home page Coder Social logo

docker-calibre-web's People

Contributors

ariesdevil avatar technosoft2000 avatar wanoo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docker-calibre-web's Issues

AttributeError: 'NoneType' object has no attribute 'config_calibre_dir'

hello technosoft2000! I was able to get your Docker image installed about a month ago; but I've just tried to reinstall it, and am hitting an error that makes me think there's a compatibility problem with @janeczku's source.

The shell command and output's copied below. What's happening in this NoneType for the self.config_calibre_dir assignment? Is config_calibre_dir something I need to configure at install time, or is it a problem "upstream?"

caliban@local:~$ docker run --name=calibre-web --restart=always -v /home/calibre/ebooks:/books -v /etc/localtime:/etc/localtime:ro -e PGID=1003 -e PUID=1003 -p 8083:8083 technosoft2000/calibre-web

Unable to find image 'technosoft2000/calibre-web:latest' locally
latest: Pulling from technosoft2000/calibre-web
2aecc7e1714b: Pull complete
3dab6bea1267: Pull complete
5726cc4cd8fb: Pull complete
38d29c9d393f: Pull complete
75fad1da58dd: Pull complete
be1c8b0850cf: Pull complete
f6cde5373e7a: Pull complete
d4e071ea1734: Pull complete
992c3a14eeb4: Pull complete
Digest: sha256:db92853ebc8720bcb106ce2b32147d9b28e0ab735e1139d2d468070f817ed080
Status: Downloaded newer image for technosoft2000/calibre-web:latest
        ,----,
      ,/   .`|
    ,`   .'  : .--.--.        ,----,        ,-.
  ;    ;     //  /    '.    .'   .' \   ,--/ /|
.'___,/    ,'|  :  /`. /  ,----,'    |,--. :/ |
|    :     | ;  |  |--`   |    :  .  ;:  : ' /
;    |.';  ; |  :  ;_     ;    |.'  / |  '  /
`----'  |  |  \  \    `.  `----'/  ;  '  |  :
    '   :  ;   `----.   \   /  ;  /   |  |   \
    |   |  '   __ \  \  |  ;  /  /-,  '  : |. \
    '   :  |  /  /`--'  / /  /  /.`|  |  | ' \ \
    ;   |.'  '--'.     /./__;      :  '  : |--'
    '---'      `--'---' |   :    .'   ;  |,'
                        ;   | .'      '--'
                        `---'

      PRESENTS ANOTHER AWESOME DOCKER IMAGE

      ~~~~~         Calibre Web       ~~~~~

[INFO] Docker image version: 1.1.7
[INFO] Alpine Linux version: 3.6.0
[INFO] Create group calibre with id 1003
[INFO] Create user calibre with id 1003
[INFO] Current active timezone is EDT
[INFO] Change the ownership of /calibre-web (including subfolders) to calibre:calibre
[INFO] Current git version is:
git version 2.13.5
[INFO] Checkout the latest Calibre-Web version ...
[INFO] ... git clone -b master --single-branch https://github.com/janeczku/calibre-web.git /calibre-web/app -v
Cloning into '/calibre-web/app'...
POST git-upload-pack (189 bytes)
[INFO] Autoupdate is active, try to pull the latest sources for Calibre-Web ...
[INFO] ... current git status is
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
a8b53ab38a46158dcd57bccb28805d377a547927
[INFO] ... pulling sources
Already up-to-date.
[INFO] ... git status after update is
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
a8b53ab38a46158dcd57bccb28805d377a547927
[INFO] kindlegen (Amazon Kindle Generator) will be linked into /calibre-web/app/vendor
> create kindlegen link /calibre-web/app/vendor/kindlegen assigned to source /calibre-web/kindlegen/kindlegen
ln: failed to create symbolic link '/calibre-web/app/vendor/kindlegen': No such file or directory
[INFO] Checking permissions of /books
> Output is: 775 calibre 1003 calibre 1003
> Permissions: 775
> Assigned group: calibre
> Assigned group ID: 1003
> Assigned owner: calibre
> Assigned owner ID: 1003
> Using permissions for checks: 0775
> Check if the group calibre has write access at /books
> The group calibre has write access at /books
[INFO] app.db and gdrive.db will be linked into /books
> create app.db link /calibre-web/app/app.db assigned to source /books/app.db
> create gdrive.db link /calibre-web/app/gdrive.db assigned to source /books/gdrive.db
[INFO] Creating directory for temporary directories and files: /tmp
[INFO] Change the ownership of /tmp (including subfolders) to calibre:calibre
[INFO] Launching Calibre-Web ...
Traceback (most recent call last):
  File "/calibre-web/app/cps.py", line 13, in <module>
    from cps import web
  File "/calibre-web/app/cps/web.py", line 30, in <module>
    import ub
  File "/calibre-web/app/cps/ub.py", line 593, in <module>
    config = Config()
  File "/calibre-web/app/cps/ub.py", line 300, in __init__
    self.loadSettings()
  File "/calibre-web/app/cps/ub.py", line 304, in loadSettings
    self.config_calibre_dir = data.config_calibre_dir
AttributeError: 'NoneType' object has no attribute 'config_calibre_dir'

Unable to create /tmp/Mobi

There are a lot of books in my library that fail to be converted to kindle version.

This is the error log I managed to get.

[2017-07-18 10:19:03,161] {/calibre-web/app/cps/helper.py:111} DEBUG -
[2017-07-18 10:19:03,161] {/calibre-web/app/cps/helper.py:111} DEBUG - *************************************************************
[2017-07-18 10:19:03,162] {/calibre-web/app/cps/helper.py:111} DEBUG - Amazon kindlegen(Linux) V2.9 build 1028-0897292
[2017-07-18 10:19:03,162] {/calibre-web/app/cps/helper.py:111} DEBUG - A command line e-book compiler
[2017-07-18 10:19:03,162] {/calibre-web/app/cps/helper.py:111} DEBUG - Copyright Amazon.com and its Affiliates 2014
[2017-07-18 10:19:03,163] {/calibre-web/app/cps/helper.py:111} DEBUG - *************************************************************
[2017-07-18 10:19:03,163] {/calibre-web/app/cps/helper.py:111} DEBUG -
[2017-07-18 10:19:03,163] {/calibre-web/app/cps/helper.py:111} DEBUG - ERROR:2: unable to create temporary filename string /tmp/mobi-TVJ1PV
[2017-07-18 10:19:03,164] {/calibre-web/app/cps/helper.py:109} INFO - make_mobi: Kindlegen failed with Error E21017. Message: Problem while unpacking EPUB file.^M
[2017-07-18 10:19:03,164] {/calibre-web/app/cps/helper.py:110} INFO - Error(prcgen):E21017: Problem while unpacking EPUB file.
[2017-07-18 10:19:03,164] {/calibre-web/app/cps/helper.py:111} DEBUG - Error(prcgen):E21017: Problem while unpacking EPUB file.
[2017-07-18 10:19:03,165] {/calibre-web/app/cps/helper.py:111} DEBUG - in file: /books/TerryPratchett/Lacoronadelpastor (303)/Lacoronadelpastor.epub
[2017-07-18 10:19:03,165] {/calibre-web/app/cps/helper.py:124} INFO - make_mobi: kindlegen failed with error while converting book

The problem is that the /tmp folder doesn't exist.
Fix: a /tmp folder should be created and owned by calibre user when creating the container.

Hide books from login screen

Is it possible to hide books before signing in ? Then I would be able to have a fully hidden content to non authorized users. Right now, anonymous user can have a look at the library content, but cannot have access to descriptions or books themselves.

synology dsm6.17 docker DB location is invalid

But it works well by janeczku/calibre-web.
The log is below.How to solve it?

date stream content
2018-11-18 15:38:44 stdout ::ffff:172.17.0.1 - - [2018-11-18 15:38:44] "GET /static/favicon.ico?q=14bd519 HTTP/1.1" 200 61965 0.008174
2018-11-18 15:38:44 stdout ::ffff:172.17.0.1 - - [2018-11-18 15:38:44] "POST /config HTTP/1.1" 200 12847 0.737313
2018-11-18 15:38:41 stdout ::ffff:172.17.0.1 - - [2018-11-18 15:38:41] "POST /config HTTP/1.1" 200 12847 0.733072
2018-11-18 15:38:33 stdout ::ffff:172.17.0.1 - - [2018-11-18 15:38:33] "POST /config HTTP/1.1" 200 12847 0.720817
2018-11-18 15:38:20 stdout ::ffff:172.17.0.1 - - [2018-11-18 15:38:20] "GET /static/favicon.ico?q=14bd519 HTTP/1.1" 200 61965 0.009778
2018-11-18 15:38:20 stdout ::ffff:172.17.0.1 - - [2018-11-18 15:38:20] "POST /config HTTP/1.1" 200 12847 1.195575
2018-11-18 15:37:35 stdout [2018-11-18 15:37:35,935] INFO in server: Starting Gevent server
2018-11-18 15:37:35 stdout [2018-11-18 15:37:35,551] INFO in web: Starting Calibre Web...
2018-11-18 15:37:32 stdout [INFO] Launching Calibre-Web ...
2018-11-18 15:37:32 stdout > kindlegen link /calibre-web/app/vendor/kindlegen exists already and won't be recreated
2018-11-18 15:37:32 stdout [INFO] kindlegen (Amazon Kindle Generator) will be linked into /calibre-web/app/vendor
2018-11-18 15:37:32 stdout [INFO] Kindlegen application exists already in directory: /calibre-web/kindlegen
2018-11-18 15:37:32 stdout [INFO] The kindlegen directory exist already and will be used: /calibre-web/kindlegen
2018-11-18 15:37:32 stdout > Please check and modify the permissions of the directory
2018-11-18 15:37:32 stdout [WARNING] No write access at /books - new 'metadata.db' and books can't be stored at this directory
2018-11-18 15:37:32 stdout > The group calibre has no write access at /books
2018-11-18 15:37:32 stdout > Check if the group calibre has write access at /books
2018-11-18 15:37:32 stdout > The group : has no write access at /books
2018-11-18 15:37:32 stdout > Check if the group : has write access at /books
2018-11-18 15:37:32 stdout > The group calibre has no write access at /books
2018-11-18 15:37:32 stdout > Check if the group calibre has write access at /books
2018-11-18 15:37:32 stdout > Using permissions for checks: 0770
2018-11-18 15:37:32 stdout > Assigned owner ID: 1024
2018-11-18 15:37:32 stdout > Assigned owner: UNKNOWN
2018-11-18 15:37:32 stdout > Assigned group ID: 100
2018-11-18 15:37:32 stdout > Assigned group: users
2018-11-18 15:37:32 stdout > Permissions: 770
2018-11-18 15:37:32 stdout > Output is: 770 users 100 UNKNOWN 1024
2018-11-18 15:37:32 stdout [INFO] Checking permissions of the books directory: /books
2018-11-18 15:37:32 stdout [WARNING] No write access at /books - app.db and gdrive.db wont be linked into /books
2018-11-18 15:37:32 stdout > The group calibre has no write access at /books
2018-11-18 15:37:32 stdout > Check if the group calibre has write access at /books
2018-11-18 15:37:32 stdout > The group : has no write access at /books
2018-11-18 15:37:32 stdout > Check if the group : has write access at /books
2018-11-18 15:37:32 stdout > The group calibre has no write access at /books
2018-11-18 15:37:32 stdout > Check if the group calibre has write access at /books
2018-11-18 15:37:32 stdout > Using permissions for checks: 0770
2018-11-18 15:37:32 stdout > Assigned owner ID: 1024
2018-11-18 15:37:32 stdout > Assigned owner: UNKNOWN
2018-11-18 15:37:32 stdout > Assigned group ID: 100
2018-11-18 15:37:32 stdout > Assigned group: users
2018-11-18 15:37:32 stdout > Permissions: 770
2018-11-18 15:37:32 stdout > Output is: 770 users 100 UNKNOWN 1024
2018-11-18 15:37:32 stdout [INFO] Checking permissions of the config directory: /books
2018-11-18 15:37:32 stdout > due this the Calibre books directory /books will be used to store the configuration
2018-11-18 15:37:32 stdout [INFO] Config directory option is DEACTIVATED
2018-11-18 15:37:32 stdout a2b612c9ab81ca77a8c9c3bf9987d428cb88efe0
2018-11-18 15:37:32 stdout nothing to commit, working tree clean
2018-11-18 15:37:32 stdout
2018-11-18 15:37:32 stdout Your branch is up to date with 'origin/master'.
2018-11-18 15:37:32 stdout On branch master
2018-11-18 15:37:32 stdout [INFO] ... git status after update is
2018-11-18 15:37:32 stdout Already up to date.
2018-11-18 15:37:31 stdout [INFO] ... pulling sources
2018-11-18 15:37:31 stdout a2b612c9ab81ca77a8c9c3bf9987d428cb88efe0
2018-11-18 15:37:31 stdout nothing to commit, working tree clean
2018-11-18 15:37:31 stdout
2018-11-18 15:37:31 stdout Your branch is up to date with 'origin/master'.
2018-11-18 15:37:31 stdout On branch master
2018-11-18 15:37:31 stdout [INFO] ... current git status is
2018-11-18 15:37:31 stdout [INFO] Autoupdate is active, try to pull the latest sources for Calibre-Web ...
2018-11-18 15:37:31 stdout [INFO] Checkout the latest Calibre-Web version ...
2018-11-18 15:37:31 stdout git version 2.18.0
2018-11-18 15:37:31 stdout [INFO] Current git version is:
2018-11-18 15:37:31 stdout [INFO] Change the ownership of /calibre-web (including subfolders) to calibre:calibre
2018-11-18 15:37:31 stdout [INFO] Current active timezone is UTC
2018-11-18 15:37:31 stdout usermod: no changes
2018-11-18 15:37:31 stdout [WARNING] Assign non-unique user id 15000 to created user calibre
2018-11-18 15:37:31 stdout adduser: user 'calibre' in use
2018-11-18 15:37:31 stdout [WARNING] Create user calibre with temporary user id 999.
2018-11-18 15:37:31 stdout [WARNING] A user with id 15000 exists already [in use by calibre].
2018-11-18 15:37:30 stdout [WARNING] The group calibre will be renamed to calibre
2018-11-18 15:37:30 stdout [WARNING] A group with id 15000 exists already [in use by calibre] and will be modified.
2018-11-18 15:37:30 stdout [INFO] Alpine Linux version: 3.8.0
2018-11-18 15:37:30 stdout [INFO] Docker image version: 1.2.3
2018-11-18 15:37:30 stdout
2018-11-18 15:37:30 stdout ~~~~~ Calibre Web ~~~~~

Config and App folder are empty after container run.

I used the docker app to create the container. I am not sure how to find the docker create statement used for debug purposes, please let me know. Also, I have the docker log file but be aware this log is after a lot of trials of creating the container and using different PUID/PGID/User/Groups:


date | stream | content
-- | -- | --
2018-09-09 14:34:40 | stdout | [2018-09-09 14:34:40,096] INFO in server: Starting Gevent server
2018-09-09 14:34:39 | stdout | [2018-09-09 14:34:39,833] INFO in web: Starting Calibre Web...
2018-09-09 14:34:38 | stdout | [INFO] Launching Calibre-Web ...
2018-09-09 14:34:38 | stdout | [INFO] Change the ownership of /tmp (including subfolders) to calibre:calibre
2018-09-09 14:34:38 | stdout | [INFO] Creating directory for temporary directories and files: /tmp
2018-09-09 14:34:38 | stdout | > change the ownership of /calibre-web/app/vendor/kindlegen to calibre:calibre
2018-09-09 14:34:38 | stdout | > create kindlegen link /calibre-web/app/vendor/kindlegen assigned to source /calibre-web/kindlegen/kindlegen
2018-09-09 14:34:38 | stdout | [INFO] Change the ownership of /calibre-web/app/vendor (including subfolders) to calibre:calibre
2018-09-09 14:34:38 | stdout | [INFO] Creating the vendor directory: /calibre-web/app/vendor
2018-09-09 14:34:38 | stdout | [INFO] kindlegen (Amazon Kindle Generator) will be linked into /calibre-web/app/vendor
2018-09-09 14:34:38 | stdout | [INFO] Change the ownership of /calibre-web/kindlegen (including subfolders) to calibre:calibre
2018-09-09 14:34:37 | stdout | [INFO] Extracting kindlegen_linux_2.6_i386_v2_9.tar.gz into directory: /calibre-web/kindlegen
2018-09-09 14:34:37 | stdout |  
2018-09-09 14:34:37 | stdout | 2018-09-09 14:34:37 (4.06 MB/s) - '/calibre-web/kindlegen/kindlegen_linux_2.6_i386_v2_9.tar.gz' saved [10813137/10813137]
2018-09-09 14:34:37 | stdout |  
2018-09-09 14:34:37 | stdout | kindlegen   0%[                    ]       0  --.-KB/s                         kindlegen_   0%[                    ]  92.76K   373KB/s                        kindlegen_l   5%[>                   ] 534.05K  1.16MB/s                       kindlegen_li  13%[=>                  ]   1.41M  2.17MB/s                      kindlegen_lin  22%[===>                ]   2.37M  2.79MB/s                     kindlegen_linu  32%[=====>              ]   3.32M  3.17MB/s                    kindlegen_linux  41%[=======>            ]   4.28M  3.42MB/s                   kindlegen_linux_  50%[=========>          ]   5.24M  3.61MB/s                  kindlegen_linux_2  60%[===========>        ]   6.20M  3.76MB/s                 kindlegen_linux_2.  69%[============>       ]   7.16M  3.87MB/s                kindlegen_linux_2.6  75%[==============>     ]   7.83M  3.63MB/s                indlegen_linux_2.6_  91%[=================>  ]   9.41M  4.00MB/s                kindlegen_linux_2.6 100%[===================>]  10.31M  4.06MB/s    in 2.5s
2018-09-09 14:34:35 | stdout |  
2018-09-09 14:34:35 | stdout | Saving to: '/calibre-web/kindlegen/kindlegen_linux_2.6_i386_v2_9.tar.gz'
2018-09-09 14:34:35 | stdout | Length: 10813137 (10M) [application/x-gzip]
2018-09-09 14:34:35 | stdout | HTTP request sent, awaiting response... 200 OK
2018-09-09 14:34:35 | stdout | Connecting to kindlegen.s3.amazonaws.com\|52.216.232.99\|:80... connected.
2018-09-09 14:34:34 | stdout | Resolving kindlegen.s3.amazonaws.com... 52.216.232.99
2018-09-09 14:34:34 | stdout | --2018-09-09 14:34:34--  http://kindlegen.s3.amazonaws.com/kindlegen_linux_2.6_i386_v2_9.tar.gz
2018-09-09 14:34:34 | stdout | [INFO] Downloading kindlegen from http://kindlegen.s3.amazonaws.com/kindlegen_linux_2.6_i386_v2_9.tar.gz into directory: /calibre-web/kindlegen/kindlegen_linux_2.6_i386_v2_9.tar.gz
2018-09-09 14:34:34 | stdout | [INFO] The kindlegen directory exist already and will be used: /calibre-web/kindlegen
2018-09-09 14:34:34 | stdout | [INFO] The mapped volume for /books contains a Calibre database file 'metadata.db' which will be used
2018-09-09 14:34:34 | stdout | > The group calibre has write access at /books
2018-09-09 14:34:34 | stdout | > Check if the group calibre has write access at /books
2018-09-09 14:34:34 | stdout | > Using permissions for checks: 0770
2018-09-09 14:34:34 | stdout | > Assigned owner ID: 1029
2018-09-09 14:34:34 | stdout | > Assigned owner: calibre
2018-09-09 14:34:34 | stdout | > Assigned group ID: 100
2018-09-09 14:34:34 | stdout | > Assigned group: calibre
2018-09-09 14:34:34 | stdout | > Permissions: 770
2018-09-09 14:34:34 | stdout | > Output is: 770 calibre 100 calibre 1029
2018-09-09 14:34:34 | stdout | [INFO] Checking permissions of the books directory: /books
2018-09-09 14:34:34 | stdout | > change the ownership of /calibre-web/app/gdrive.db to calibre:calibre
2018-09-09 14:34:34 | stdout | > create 'gdrive.db' link /calibre-web/app/gdrive.db assigned to source /books/gdrive.db
2018-09-09 14:34:34 | stdout | > change the ownership of /calibre-web/app/app.db to calibre:calibre
2018-09-09 14:34:34 | stdout | > create 'app.db' link /calibre-web/app/app.db assigned to source /books/app.db
2018-09-09 14:34:34 | stdout | [INFO] 'app.db' and 'gdrive.db' will be linked into /books
2018-09-09 14:34:34 | stdout | > The group calibre has write access at /books
2018-09-09 14:34:34 | stdout | > Check if the group calibre has write access at /books
2018-09-09 14:34:34 | stdout | > Using permissions for checks: 0770
2018-09-09 14:34:34 | stdout | > Assigned owner ID: 1029
2018-09-09 14:34:34 | stdout | > Assigned owner: calibre
2018-09-09 14:34:34 | stdout | > Assigned group ID: 100
2018-09-09 14:34:34 | stdout | > Assigned group: calibre
2018-09-09 14:34:34 | stdout | > Permissions: 770
2018-09-09 14:34:34 | stdout | > Output is: 770 calibre 100 calibre 1029
2018-09-09 14:34:34 | stdout | [INFO] Checking permissions of the config directory: /books
2018-09-09 14:34:34 | stdout | > due this the Calibre books directory /books will be used to store the configuration
2018-09-09 14:34:34 | stdout | [INFO] Config directory option is DEACTIVATED
2018-09-09 14:34:33 | stdout | bb7d2c6273ae4560e83950d36d64533343623a57
2018-09-09 14:34:33 | stdout | nothing to commit, working tree clean
2018-09-09 14:34:33 | stdout |  
2018-09-09 14:34:33 | stdout | Your branch is up to date with 'origin/master'.
2018-09-09 14:34:33 | stdout | On branch master
2018-09-09 14:34:33 | stdout | [INFO] ... git status after update is
2018-09-09 14:34:33 | stdout | Already up to date.
2018-09-09 14:34:33 | stdout | [INFO] ... pulling sources
2018-09-09 14:34:33 | stdout | bb7d2c6273ae4560e83950d36d64533343623a57
2018-09-09 14:34:33 | stdout | nothing to commit, working tree clean
2018-09-09 14:34:33 | stdout |  
2018-09-09 14:34:33 | stdout | Your branch is up to date with 'origin/master'.
2018-09-09 14:34:33 | stdout | On branch master
2018-09-09 14:34:32 | stdout | [INFO] ... current git status is
2018-09-09 14:34:32 | stdout | [INFO] Autoupdate is active, try to pull the latest sources for Calibre-Web ...
2018-09-09 14:34:32 | stdout | Resolving deltas:   0% (0/5331)    Resolving deltas:   3% (213/5331)    Resolving deltas:   4% (220/5331)    Resolving deltas:   5% (282/5331)    Resolving deltas:   6% (359/5331)    Resolving deltas:   7% (387/5331)    Resolving deltas:   8% (442/5331)    Resolving deltas:   9% (497/5331)    Resolving deltas:  10% (535/5331)    Resolving deltas:  11% (601/5331)    Resolving deltas:  12% (642/5331)    Resolving deltas:  13% (706/5331)    Resolving deltas:  14% (752/5331)    Resolving deltas:  15% (806/5331)    Resolving deltas:  16% (853/5331)    Resolving deltas:  17% (951/5331)    Resolving deltas:  18% (964/5331)    Resolving deltas:  19% (1018/5331)    Resolving deltas:  20% (1067/5331)    Resolving deltas:  21% (1142/5331)    Resolving deltas:  22% (1175/5331)    Resolving deltas:  23% (1234/5331)    Resolving deltas:  24% (1303/5331)    Resolving deltas:  25% (1368/5331)    Resolving deltas:  27% (1441/5331)    Resolving deltas:  28% (1536/5331)    Resolving deltas:  31% (1687/5331)    Resolving deltas:  32% (1747/5331)    Resolving deltas:  33% (1772/5331)    Resolving deltas:  34% (1821/5331)    Resolving deltas:  36% (1922/5331)    Resolving deltas:  37% (2002/5331)    Resolving deltas:  38% (2026/5331)    Resolving deltas:  39% (2083/5331)    Resolving deltas:  40% (2137/5331)    Resolving deltas:  43% (2318/5331)    Resolving deltas:  45% (2407/5331)    Resolving deltas:  46% (2458/5331)    Resolving deltas:  47% (2518/5331)    Resolving deltas:  48% (2561/5331)    Resolving deltas:  49% (2614/5331)    Resolving deltas:  50% (2700/5331)    Resolving deltas:  53% (2878/5331)    Resolving deltas:  54% (2914/5331)    Resolving deltas:  55% (2936/5331)    Resolving deltas:  56% (3007/5331)    Resolving deltas:  58% (3111/5331)    Resolving deltas:  59% (3146/5331)    Resolving deltas:  60% (3202/5331)    Resolving deltas:  61% (3262/5331)    Resolving deltas:  62% (3324/5331)    Resolving deltas:  63% (3362/5331)    Resolving deltas:  64% (3419/5331)    Resolving deltas:  65% (3466/5331)    Resolving deltas:  66% (3519/5331)    Resolving deltas:  67% (3572/5331)    Resolving deltas:  68% (3626/5331)    Resolving deltas:  69% (3680/5331)    Resolving deltas:  70% (3734/5331)    Resolving deltas:  71% (3786/5331)    Resolving deltas:  72% (3840/5331)    Resolving deltas:  73% (3892/5331)    Resolving deltas:  74% (3945/5331)    Resolving deltas:  75% (4013/5331)    Resolving deltas:  76% (4064/5331)    Resolving deltas:  77% (4116/5331)    Resolving deltas:  78% (4167/5331)    Resolving deltas:  79% (4216/5331)    Resolving deltas:  81% (4331/5331)    Resolving deltas:  82% (4373/5331)    Resolving deltas:  83% (4458/5331)    Resolving deltas:  84% (4517/5331)    Resolving deltas:  85% (4538/5331)    Resolving deltas:  86% (4610/5331)    Resolving deltas:  87% (4640/5331)    Resolving deltas:  88% (4703/5331)    Resolving deltas:  89% (4750/5331)    Resolving deltas:  90% (4812/5331)    Resolving deltas:  91% (4855/5331)    Resolving deltas:  92% (4905/5331)    Resolving deltas:  93% (4993/5331)    Resolving deltas:  94% (5018/5331)    Resolving deltas:  95% (5074/5331)    Resolving deltas:  96% (5123/5331)    Resolving deltas:  97% (5172/5331)    Resolving deltas:  98% (5226/5331)    Resolving deltas:  99% (5281/5331)    Resolving deltas: 100% (5331/5331)    Resolving deltas: 100% (5331/5331), done.
2018-09-09 14:34:31 | stdout | Receiving objects: 100% (9344/9344), 39.66 MiB \| 225.00 KiB/s    Receiving objects: 100% (9344/9344), 39.78 MiB \| 341.00 KiB/s, done.
2018-09-09 14:34:31 | stdout | Receiving objects:   0% (1/9344)    Receiving objects:   1% (94/9344)    Receiving objects:   2% (187/9344)    Receiving objects:   3% (281/9344)    Receiving objects:   4% (374/9344)    Receiving objects:   5% (468/9344)    Receiving objects:   6% (561/9344)    Receiving objects:   7% (655/9344)    Receiving objects:   8% (748/9344)    Receiving objects:   9% (841/9344)    Receiving objects:  10% (935/9344)    Receiving objects:  11% (1028/9344)    Receiving objects:  12% (1122/9344)    Receiving objects:  13% (1215/9344), 732.01 KiB \| 1.32 MiB/s    Receiving objects:  14% (1309/9344), 732.01 KiB \| 1.32 MiB/s    Receiving objects:  14% (1386/9344), 732.01 KiB \| 1.32 MiB/s    Receiving objects:  15% (1402/9344), 1.98 MiB \| 1.89 MiB/s    Receiving objects:  16% (1496/9344), 1.98 MiB \| 1.89 MiB/s    Receiving objects:  17% (1589/9344), 1.98 MiB \| 1.89 MiB/s    Receiving objects:  18% (1682/9344), 1.98 MiB \| 1.89 MiB/s    Receiving objects:  19% (1776/9344), 1.98 MiB \| 1.89 MiB/s    Receiving objects:  20% (1869/9344), 1.98 MiB \| 1.89 MiB/s    Receiving objects:  20% (1924/9344), 3.51 MiB \| 1.64 MiB/s    Receiving objects:  21% (1963/9344), 3.51 MiB \| 1.64 MiB/s    Receiving objects:  21% (1994/9344), 4.23 MiB \| 1.58 MiB/s    Receiving objects:  22% (2056/9344), 4.23 MiB \| 1.58 MiB/s    Receiving objects:  22% (2128/9344), 4.98 MiB \| 1.32 MiB/s    Receiving objects:  23% (2150/9344), 4.98 MiB \| 1.32 MiB/s    Receiving objects:  24% (2243/9344), 5.73 MiB \| 1.20 MiB/s    Receiving objects:  24% (2268/9344), 5.73 MiB \| 1.20 MiB/s    Receiving objects:  25% (2336/9344), 6.32 MiB \| 931.00 KiB/s    Receiving objects:  25% (2342/9344), 6.32 MiB \| 931.00 KiB/s    Receiving objects:  25% (2363/9344), 6.76 MiB \| 707.00 KiB/s    Receiving objects:  26% (2430/9344), 6.76 MiB \| 707.00 KiB/s    Receiving objects:  26% (2440/9344), 7.17 MiB \| 578.00 KiB/s    Receiving objects:  26% (2454/9344), 7.62 MiB \| 503.00 KiB/s    Receiving objects:  26% (2472/9344), 8.01 MiB \| 437.00 KiB/s    Receiving objects:  27% (2523/9344), 8.14 MiB \| 398.00 KiB/s    Receiving objects:  27% (2540/9344), 8.30 MiB \| 394.00 KiB/s    Receiving objects:  27% (2555/9344), 8.43 MiB \| 301.00 KiB/s    Receiving objects:  27% (2587/9344), 8.61 MiB \| 259.00 KiB/s    Receiving objects:  27% (2616/9344), 8.72 MiB \| 233.00 KiB/s    Receiving objects:  28% (2617/9344), 8.72 MiB \| 233.00 KiB/s    Receiving objects:  28% (2675/9344), 8.93 MiB \| 190.00 KiB/s    Receiving objects:  28% (2703/9344), 9.13 MiB \| 170.00 KiB/s    Receiving objects:  28% (2706/9344), 9.20 MiB \| 162.00 KiB/s    Receiving objects:  29% (2710/9344), 9.20 MiB \| 162.00 KiB/s    Receiving objects:  29% (2730/9344), 9.36 MiB \| 160.00 KiB/s    Receiving objects:  29% (2771/9344), 9.51 MiB \| 173.00 KiB/s    Receiving objects:  30% (2804/9344), 9.91 MiB \| 205.00 KiB/s    Receiving objects:  31% (2897/9344), 9.91 MiB \| 205.00 KiB/s    Receiving objects:  31% (2962/9344), 10.22 MiB \| 254.00 KiB/s    Receiving objects:  32% (2991/9344), 10.22 MiB \| 254.00 KiB/s    Receiving objects:  33% (3084/9344), 10.22 MiB \| 254.00 KiB/s    Receiving objects:  33% (3125/9344), 10.54 MiB \| 304.00 KiB/s    Receiving objects:  34% (3177/9344), 10.86 MiB \| 348.00 KiB/s    Receiving objects:  34% (3235/9344), 11.33 MiB \| 461.00 KiB/s    Receiving objects:  35% (3271/9344), 11.61 MiB \| 503.00 KiB/s    Receiving objects:  35% (3279/9344), 11.61 MiB \| 503.00 KiB/s    Receiving objects:  36% (3364/9344), 11.91 MiB \| 536.00 KiB/s    Receiving objects:  37% (3458/9344), 12.24 MiB \| 568.00 KiB/s    Receiving objects:  38% (3551/9344), 12.24 MiB \| 568.00 KiB/s    Receiving objects:  38% (3557/9344), 12.24 MiB \| 568.00 KiB/s    Receiving objects:  39% (3645/9344), 12.24 MiB \| 568.00 KiB/s    Receiving objects:  40% (3738/9344), 12.60 MiB \| 595.00 KiB/s    Receiving objects:  40% (3745/9344), 12.96 MiB \| 606.00 KiB/s    Receiving objects:  40% (3749/9344), 13.46 MiB \| 539.00 KiB/s    Receiving objects:  40% (3763/9344), 13.89 MiB \| 534.00 KiB/s    Receiving objects:  41% (3832/9344), 13.89 MiB \| 534.00 KiB/s    Receiving objects:  42% (3925/9344), 13.89 MiB \| 534.00 KiB/s    Receiving objects:  43% (4018/9344), 13.89 MiB \| 534.00 KiB/s    Receiving objects:  44% (4112/9344), 13.89 MiB \| 534.00 KiB/s    Receiving objects:  45% (4205/9344), 13.89 MiB \| 534.00 KiB/s    Receiving objects:  46% (4299/9344), 13.89 MiB \| 534.00 KiB/s    Receiving objects:  47% (4392/9344), 14.13 MiB \| 524.00 KiB/s    Receiving objects:  48% (4486/9344), 14.13 MiB \| 524.00 KiB/s    Receiving objects:  48% (4573/9344), 14.39 MiB \| 518.00 KiB/s    Receiving objects:  49% (4579/9344), 14.39 MiB \| 518.00 KiB/s    Receiving objects:  50% (4672/9344), 14.39 MiB \| 518.00 KiB/s    Receiving objects:  51% (4766/9344), 14.39 MiB \| 518.00 KiB/s    Receiving objects:  52% (4859/9344), 14.69 MiB \| 513.00 KiB/s    Receiving objects:  52% (4880/9344), 14.69 MiB \| 513.00 KiB/s    Receiving objects:  52% (4951/9344), 15.18 MiB \| 461.00 KiB/s    Receiving objects:  53% (4953/9344), 15.18 MiB \| 461.00 KiB/s    Receiving objects:  53% (5033/9344), 15.68 MiB \| 483.00 KiB/s    Receiving objects:  54% (5046/9344), 15.68 MiB \| 483.00 KiB/s    Receiving objects:  54% (5089/9344), 15.94 MiB \| 442.00 KiB/s    Receiving objects:  54% (5110/9344), 16.24 MiB \| 398.00 KiB/s    Receiving objects:  54% (5131/9344), 16.57 MiB \| 347.00 KiB/s    Receiving objects:  55% (5140/9344), 16.57 MiB \| 347.00 KiB/s    Receiving objects:  55% (5154/9344), 16.91 MiB \| 300.00 KiB/s    Receiving objects:  55% (5174/9344), 17.02 MiB \| 283.00 KiB/s    Receiving objects:  55% (5200/9344), 17.25 MiB \| 275.00 KiB/s    Receiving objects:  56% (5233/9344), 17.57 MiB \| 280.00 KiB/s    Receiving objects:  56% (5242/9344), 17.57 MiB \| 280.00 KiB/s    Receiving objects:  56% (5273/9344), 17.89 MiB \| 280.00 KiB/s    Receiving objects:  57% (5327/9344), 18.05 MiB \| 274.00 KiB/s    Receiving objects:  57% (5381/9344), 18.24 MiB \| 286.00 KiB/s    Receiving objects:  58% (5420/9344), 18.44 MiB \| 308.00 KiB/s    Receiving objects:  59% (5513/9344), 18.44 MiB \| 308.00 KiB/s    Receiving objects:  60% (5607/9344), 18.68 MiB \| 338.00 KiB/s    Receiving objects:  61% (5700/9344), 18.68 MiB \| 338.00 KiB/s    Receiving objects:  62% (5794/9344), 18.68 MiB \| 338.00 KiB/s    Receiving objects:  62% (5819/9344), 18.68 MiB \| 338.00 KiB/s    Receiving objects:  63% (5887/9344), 18.68 MiB \| 338.00 KiB/s    Receiving objects:  64% (5981/9344), 18.68 MiB \| 338.00 KiB/s    Receiving objects:  65% (6074/9344), 19.06 MiB \| 363.00 KiB/s    Receiving objects:  65% (6085/9344), 19.06 MiB \| 363.00 KiB/s    Receiving objects:  66% (6168/9344), 19.29 MiB \| 369.00 KiB/s    Receiving objects:  66% (6181/9344), 19.48 MiB \| 367.00 KiB/s    Receiving objects:  67% (6261/9344), 19.65 MiB \| 384.00 KiB/s    Receiving objects:  67% (6291/9344), 19.79 MiB \| 376.00 KiB/s    Receiving objects:  67% (6301/9344), 19.87 MiB \| 350.00 KiB/s    Receiving objects:  67% (6337/9344), 20.03 MiB \| 286.00 KiB/s    Receiving objects:  68% (6354/9344), 20.15 MiB \| 259.00 KiB/s    Receiving objects:  68% (6368/9344), 20.41 MiB \| 242.00 KiB/s    Receiving objects:  68% (6406/9344), 20.51 MiB \| 223.00 KiB/s    Receiving objects:  69% (6448/9344), 20.65 MiB \| 216.00 KiB/s    Receiving objects:  69% (6510/9344), 20.81 MiB \| 222.00 KiB/s    Receiving objects:  70% (6541/9344), 21.02 MiB \| 234.00 KiB/s    Receiving objects:  70% (6542/9344), 21.02 MiB \| 234.00 KiB/s    Receiving objects:  70% (6556/9344), 21.21 MiB \| 229.00 KiB/s    Receiving objects:  71% (6635/9344), 21.33 MiB \| 227.00 KiB/s    Receiving objects:  71% (6709/9344), 21.45 MiB \| 220.00 KiB/s    Receiving objects:  72% (6728/9344), 21.45 MiB \| 220.00 KiB/s    Receiving objects:  73% (6822/9344), 21.61 MiB \| 234.00 KiB/s    Receiving objects:  73% (6874/9344), 21.76 MiB \| 237.00 KiB/s    Receiving objects:  74% (6915/9344), 21.76 MiB \| 237.00 KiB/s    Receiving objects:  74% (6986/9344), 22.17 MiB \| 267.00 KiB/s    Receiving objects:  75% (7008/9344), 22.17 MiB \| 267.00 KiB/s    Receiving objects:  76% (7102/9344), 22.40 MiB \| 298.00 KiB/s    Receiving objects:  76% (7141/9344), 22.40 MiB \| 298.00 KiB/s    Receiving objects:  77% (7195/9344), 22.67 MiB \| 341.00 KiB/s    Receiving objects:  78% (7289/9344), 22.81 MiB \| 344.00 KiB/s    Receiving objects:  78% (7296/9344), 22.81 MiB \| 344.00 KiB/s    Receiving objects:  79% (7382/9344), 23.04 MiB \| 370.00 KiB/s    Receiving objects:  80% (7476/9344), 23.31 MiB \| 406.00 KiB/s    Receiving objects:  80% (7480/9344), 23.31 MiB \| 406.00 KiB/s    Receiving objects:  81% (7569/9344), 23.31 MiB \| 406.00 KiB/s    Receiving objects:  82% (7663/9344), 23.59 MiB \| 431.00 KiB/s    Receiving objects:  83% (7756/9344), 23.89 MiB \| 463.00 KiB/s    Receiving objects:  83% (7760/9344), 23.89 MiB \| 463.00 KiB/s    Receiving objects:  84% (7849/9344), 23.89 MiB \| 463.00 KiB/s    Receiving objects:  85% (7943/9344), 23.89 MiB \| 463.00 KiB/s    Receiving objects:  86% (8036/9344), 24.40 MiB \| 479.00 KiB/s    Receiving objects:  86% (8090/9344), 24.40 MiB \| 479.00 KiB/s    Receiving objects:  87% (8130/9344), 24.40 MiB \| 479.00 KiB/s    Receiving objects:  88% (8223/9344), 24.67 MiB \| 485.00 KiB/s    Receiving objects:  89% (8317/9344), 24.95 MiB \| 490.00 KiB/s    Receiving objects:  90% (8410/9344), 24.95 MiB \| 490.00 KiB/s    Receiving objects:  91% (8504/9344), 24.95 MiB \| 490.00 KiB/s    Receiving objects:  92% (8597/9344), 24.95 MiB \| 490.00 KiB/s    Receiving objects:  92% (8683/9344), 24.95 MiB \| 490.00 KiB/s    Receiving objects:  93% (8690/9344), 24.95 MiB \| 490.00 KiB/s    Receiving objects:  94% (8784/9344), 24.95 MiB \| 490.00 KiB/s    Receiving objects:  95% (8877/9344), 24.95 MiB \| 490.00 KiB/s    Receiving objects:  96% (8971/9344), 25.20 MiB \| 523.00 KiB/s    Receiving objects:  97% (9064/9344), 25.20 MiB \| 523.00 KiB/s    Receiving objects:  98% (9158/9344), 25.20 MiB \| 523.00 KiB/s    Receiving objects:  98% (9167/9344), 25.71 MiB \| 530.00 KiB/s    Receiving objects:  98% (9170/9344), 26.32 MiB \| 536.00 KiB/s    Receiving objects:  98% (9173/9344), 26.65 MiB \| 552.00 KiB/s    Receiving objects:  98% (9174/9344), 27.37 MiB \| 536.00 KiB/s    Receiving objects:  98% (9225/9344), 27.73 MiB \| 507.00 KiB/s    Receiving objects:  98% (9225/9344), 27.90 MiB \| 479.00 KiB/s    Receiving objects:  98% (9225/9344), 28.18 MiB \| 390.00 KiB/s    Receiving objects:  98% (9225/9344), 28.40 MiB \| 295.00 KiB/s    Receiving objects:  98% (9225/9344), 28.56 MiB \| 251.00 KiB/s    Receiving objects:  98% (9225/9344), 28.71 MiB \| 205.00 KiB/s    Receiving objects:  98% (9225/9344), 28.89 MiB \| 180.00 KiB/s    Receiving objects:  98% (9225/9344), 29.14 MiB \| 183.00 KiB/s    Receiving objects:  98% (9226/9344), 29.25 MiB \| 182.00 KiB/s    Receiving objects:  99% (9251/9344), 29.39 MiB \| 196.00 KiB/s    Receiving objects:  99% (9258/9344), 29.53 MiB \| 209.00 KiB/s    Receiving objects:  99% (9323/9344), 29.75 MiB \| 197.00 KiB/s    Receiving objects:  99% (9323/9344), 29.85 MiB \| 198.00 KiB/s    Receiving objects:  99% (9323/9344), 30.10 MiB \| 208.00 KiB/s    Receiving objects:  99% (9323/9344), 30.43 MiB \| 226.00 KiB/s    Receiving objects:  99% (9323/9344), 30.72 MiB \| 228.00 KiB/s    Receiving objects:  99% (9323/9344), 30.99 MiB \| 269.00 KiB/s    Receiving objects:  99% (9323/9344), 31.13 MiB \| 253.00 KiB/s    Receiving objects:  99% (9323/9344), 31.35 MiB \| 235.00 KiB/s    Receiving objects:  99% (9323/9344), 31.49 MiB \| 230.00 KiB/s    Receiving objects:  99% (9323/9344), 31.72 MiB \| 214.00 KiB/s    Receiving objects:  99% (9323/9344), 31.97 MiB \| 205.00 KiB/s    Receiving objects:  99% (9323/9344), 32.24 MiB \| 232.00 KiB/s    Receiving objects:  99% (9323/9344), 32.56 MiB \| 253.00 KiB/s    Receiving objects:  99% (9323/9344), 32.96 MiB \| 283.00 KiB/s    Receiving objects:  99% (9323/9344), 33.41 MiB \| 330.00 KiB/s    Receiving objects:  99% (9323/9344), 33.72 MiB \| 364.00 KiB/s    Receiving objects:  99% (9323/9344), 34.00 MiB \| 366.00 KiB/s    Receiving objects:  99% (9323/9344), 34.32 MiB \| 353.00 KiB/s    Receiving objects:  99% (9323/9344), 34.43 MiB \| 328.00 KiB/s    Receiving objects:  99% (9323/9344), 34.74 MiB \| 297.00 KiB/s    Receiving objects:  99% (9323/9344), 34.99 MiB \| 281.00 KiB/s    Receiving objects:  99% (9323/9344), 35.16 MiB \| 244.00 KiB/s    Receiving objects:  99% (9323/9344), 35.22 MiB \| 203.00 KiB/s    Receiving objects:  99% (9323/9344), 35.36 MiB \| 179.00 KiB/s    Receiving objects:  99% (9323/9344), 35.57 MiB \| 156.00 KiB/s    Receiving objects:  99% (9323/9344), 35.72 MiB \| 135.00 KiB/s    Receiving objects:  99% (9323/9344), 35.79 MiB \| 133.00 KiB/s    Receiving objects:  99% (9323/9344), 35.93 MiB \| 147.00 KiB/s    Receiving objects:  99% (9323/9344), 36.05 MiB \| 143.00 KiB/s    Receiving objects:  99% (9323/9344), 36.19 MiB \| 128.00 KiB/s    Receiving objects:  99% (9323/9344), 36.36 MiB \| 132.00 KiB/s    Receiving objects:  99% (9323/9344), 36.46 MiB \| 141.00 KiB/s    Receiving objects:  99% (9323/9344), 36.71 MiB \| 164.00 KiB/s    Receiving objects:  99% (9323/9344), 37.04 MiB \| 210.00 KiB/s    Receiving objects:  99% (9323/9344), 37.46 MiB \| 280.00 KiB/s    Receiving objects:  99% (9323/9344), 37.77 MiB \| 299.00 KiB/s    Receiving objects:  99% (9323/9344), 38.19 MiB \| 330.00 KiB/s    Receiving objects:  99% (9323/9344), 38.24 MiB \| 307.00 KiB/s    Receiving objects:  99% (9323/9344), 38.47 MiB \| 285.00 KiB/s    Receiving objects:  99% (9323/9344), 38.60 MiB \| 224.00 KiB/s    Receiving objects:  99% (9323/9344), 38.74 MiB \| 191.00 KiB/s    Receiving objects:  99% (9323/9344), 38.82 MiB \| 163.00 KiB/s    Receiving objects:  99% (9323/9344), 39.00 MiB \| 160.00 KiB/s    Receiving objects:  99% (9323/9344), 39.29 MiB \| 173.00 KiB/s    Receiving objects:  99% (9323/9344), 39.66 MiB \| 225.00 KiB/s    remote: Total 9344 (delta 0), reused 0 (delta 0), pack-reused 9344�[K
2018-09-09 14:32:31 | stdout | remote: Counting objects: 9344, done.�[K
2018-09-09 14:32:31 | stdout | POST git-upload-pack (177 bytes)
2018-09-09 14:32:29 | stdout | Cloning into '/calibre-web/app'...
2018-09-09 14:32:29 | stdout | [INFO] ... git clone -b master --single-branch https://github.com/janeczku/calibre-web.git /calibre-web/app -v
2018-09-09 14:32:29 | stdout | [INFO] Checkout the latest Calibre-Web version ...
2018-09-09 14:32:29 | stdout | git version 2.18.0
2018-09-09 14:32:29 | stdout | [INFO] Current git version is:
2018-09-09 14:32:29 | stdout | [INFO] Change the ownership of /calibre-web (including subfolders) to calibre:calibre
2018-09-09 14:32:29 | stdout | [INFO] Current active timezone is UTC
2018-09-09 14:32:29 | stdout | [INFO] Create user calibre with id 1029
2018-09-09 14:32:28 | stdout | [WARNING] The group users will be renamed to calibre
2018-09-09 14:32:28 | stdout | [WARNING] A group with id 100 exists already [in use by users] and will be modified.
2018-09-09 14:32:28 | stdout | [INFO] Alpine Linux version: 3.8.0
2018-09-09 14:32:28 | stdout | [INFO] Docker image version: 1.2.3
2018-09-09 14:32:28 | stdout |  
2018-09-09 14:32:28 | stdout | ~~~~~         Calibre Web       ~~~~~
2018-09-09 14:32:28 | stdout |  
2018-09-09 14:32:28 | stdout | PRESENTS ANOTHER AWESOME DOCKER IMAGE
2018-09-09 14:32:28 | stdout |  
2018-09-09 14:32:28 | stdout | `---'
2018-09-09 14:32:28 | stdout | ;   \| .'      '--'
2018-09-09 14:32:28 | stdout | '---'      `--'---' \|   :    .'   ;  \|,'
2018-09-09 14:32:28 | stdout | ;   \|.'  '--'.     /./__;      :  '  : \|--'
2018-09-09 14:32:28 | stdout | '   :  \|  /  /`--'  / /  /  /.`\|  \|  \| ' \ \
2018-09-09 14:32:28 | stdout | \|   \|  '   __ \  \  \|  ;  /  /-,  '  : \|. \
2018-09-09 14:32:28 | stdout | '   :  ;   `----.   \   /  ;  /   \|  \|   \
2018-09-09 14:32:28 | stdout | `----'  \|  \|  \  \    `.  `----'/  ;  '  \|  :
2018-09-09 14:32:28 | stdout | ;    \|.';  ; \|  :  ;_     ;    \|.'  / \|  '  /
2018-09-09 14:32:28 | stdout | \|    :     \| ;  \|  \|--`   \|    :  .  ;:  : ' /
2018-09-09 14:32:28 | stdout | .'___,/    ,'\|  :  /`. /  ,----,'    \|,--. :/ \|
2018-09-09 14:32:28 | stdout | ;    ;     //  /    '.    .'   .' \   ,--/ /\|
2018-09-09 14:32:28 | stdout | ,`   .'  : .--.--.        ,----,        ,-.
2018-09-09 14:32:28 | stdout | ,/   .`\|
2018-09-09 14:32:28 | stdout | ,----,

Not possible for symlinks to be created

When the check for permissions is run it doesn't always respond with 4 numbers for your permissions. This means that the logic that checks if you have permissions will always return 0 and so never create the symlink. An easy fix would be to change line 16 in get_or_update.sh to the following

INFO=( $(stat -L -c "%0a %G %U" $DIR) )

In order to add the missing zero. This of course isn't a good solution, you would be better off checking the number of symbols in PERM and making sure they add up to 4 instead.

Setting Log Level?

Is there an environment variable or other means to set the server Log Level? It appears to be set at INFO which is a bit noisy.

Thx,

-steve

Database path missing

Hey Mate,

So what I have done I loaded a paket in the docker on my NAS and than I started a container and that one is running now ... To start the container I put down a path for the folder(project/projektbook) and a Mount path(/opt/calibre/library).

and I copied a file named metadata.db into that folder.

That´s what I have done so far.

So now when I am on the website it is asking for the library configuration and where is databank is saved.

I also could create a complete new one if that´s easier ... I would have no problem with that ...

I have already a container started and now I have to put in the path for the database on the website
Do you know what the format is how it would look like ?

Cheers!

PDF conversion failed

Here is log:

::ffff:192.168.1.49 - - [2018-09-09 18:47:42] "POST /admin/book/convert/64 HTTP/1.1" 302 898 0.017439                                        
::ffff:192.168.1.49 - - [2018-09-09 18:47:42] "GET /admin/book/64 HTTP/1.1" 200 18593 0.051851                                               
::ffff:192.168.1.49 - - [2018-09-09 18:47:44] "GET /tasks HTTP/1.1" 200 10891 0.049928                                                       
::ffff:192.168.1.49 - - [2018-09-09 18:47:44] "GET /ajax/emailstat?sort=id&order=asc HTTP/1.1" 200 335 0.007634                              
/opt/calibre/bin/pdftohtml: /usr/lib/libstdc++.so.6: no version information available (required by /opt/calibre/bin/pdftohtml)               
/opt/calibre/bin/pdftohtml: /usr/lib/libstdc++.so.6: no version information available (required by /opt/calibre/bin/pdftohtml)               
/opt/calibre/bin/pdftohtml: /usr/lib/libstdc++.so.6: no version information available (required by /opt/calibre/lib/libpoppler.so.66)        
/opt/calibre/bin/pdftohtml: /usr/lib/libstdc++.so.6: no version information available (required by /opt/calibre/lib/libpoppler.so.66) 

Using latest image. ALthought the task says complete, the output files are blank with small file size

Variable for Language

@Technosoft2000 - is there anyway to include a variable for language on the image?

It's not a huge issue if you know how to change the default language when you've open a session to the container. However, I notice that the ebook-conversion tool's log file entries were not in my preferred (and wholly self-serving, very narrow minded point of view of the world) language of English.

....Well, actually I preferred American as English is WAY too hard. :-)

Thank you!

Converter not available

I configured the Calibre-web Docker as the Readme.md showes but when I Uploaded eBooks,then,it shows Converter not Available error

And I can't read the uploaded ebook in the browser

Confusion about /books folder's property and PGID & PUID for docker

No docker user in my linux system.

I run the command:

mkdir CalibreData
sudo docker run -d --restart=always \
    --name=calibre-web \
    -v /home/xx/CalibreData/books:/books \
    -v /home/xx/CalibreData/config:/calibre-web/config \
    -e USE_CONFIG_DIR=true \
    -p 8083:8083 \
    technosoft2000/calibre-web

then, the /books folder's own is root:root 755
the config folder's own is calibre:calibre
I copy Calibre's metadata.db and so on files to /home/xx/CalibreData/books/
The Calibre-web works well at first launch.
But it occurs error( no permission ) when I want to upload pdf file.
Then I run sudo docker exec calibre-web chmod -R 777 /books and restart docker container.
Uploading works well.

I do not know whether this solution is correct.
what should I do?

Thank you.

Volume for configuration

Is it possible to map the configuration to the file system instead of internally inside the container. I have just updated the image and lost all the configuration.

Raspberry pi 3 version of dockerfile

It could be great to have an arm version of this container in order to run this server on raspberry pi, and it is easy to do that. I have done that cloning your docker-alpine-base and changing the FROM line in order to get the arm32 alpine version. Once I built the alpine version, I change the docker-calibre-web's dockerfile in order to use the new image.

It worked fine, except for Kindlegen tool, that unfortunately has no arm version, but that is not related with docker.

I could up a pull request in both repositories ─ if you want ─ with the new dockerfiles. It could be tagged with arm-{version of alpine} for instance.

Error when i start the container and map my volume [saitoh183]

Error from a comment from https://hub.docker.com/r/technosoft2000/calibre-web/ by user saitoh183:

gives the error below when i start the container and map my volume.

[INFO] Docker image version: 1.1.2
[INFO] Create group calibre with id 15000
[INFO] Create user calibre with id 15000
[INFO] Current active timezone is EDT
[INFO] Change the ownership of /calibre-web (including subfolders) to calibre:calibre
[INFO] Current git version is:
git version 2.13.0
[INFO] Checkout the latest Calibre-Web version ...
[INFO] ... git clone -b master --single-branch https://github.com/janeczku/calibre-web.git /calibre-web/app -v
Cloning into '/calibre-web/app'...
POST git-upload-pack (189 bytes)
[INFO] Autoupdate is active, try to pull the latest sources for Calibre-Web ...
[INFO] ... current git status is
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
e6c6c26fd1ec363c3065f03c388a5d628ed6331e
[INFO] ... pulling sources
Already up-to-date.
[INFO] ... git status after update is
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
e6c6c26fd1ec363c3065f03c388a5d628ed6331e
[INFO] Launching Calibre-Web ...
Traceback (most recent call last):
File "/calibre-web/app/cps.py", line 13, in <module>
from cps import web
File "/calibre-web/app/cps/web.py", line 18, in <module>
import ub
File "/calibre-web/app/cps/ub.py", line 525, in <module>
Base.metadata.create_all(engine)
File "/usr/lib/python2.7/site-packages/sqlalchemy/sql/schema.py", line 3918, in create_all
tables=tables)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1928, in _run_visitor
with self._optional_conn_ctx_manager(connection) as conn:
File "/usr/lib/python2.7/contextlib.py", line 17, in enter
return self.gen.next()
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1921, in _optional_conn_ctx_manager
with self.contextual_connect() as conn:
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2112, in contextual_connect
self._wrap_pool_connect(self.pool.connect, None),
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2151, in _wrap_pool_connect
e, dialect, self)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1465, in _handle_dbapi_exception_noconnection
exc_info
File "/usr/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2147, in _wrap_pool_connect
return fn()
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 387, in connect
return _ConnectionFairy._checkout(self)
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 516, in checkout
rec = pool._do_get()
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 1229, in _do_get
return self._create_connection()
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 461, in init
self.connect(first_connect_check=True)
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 651, in connect
connection = pool._invoke_creator(self)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 105, in connect
return dialect.connect(cargs, **cparams)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 393, in connect
return self.dbapi.connect(cargs, **cparams)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file on startup

Hey there,

I'm trying to get my calibre-web running on a Ubuntu Server 16.04.4 LTS Host.
Unfortunately I don't know why, but it isn't able to run without problems.

Here is the log-output.

[INFO] Docker image version: 1.1.10,
[INFO] Alpine Linux version: 3.6.2,
[INFO] Create group calibre with id 1000,
[INFO] Create user calibre with id 1000,
[INFO] Current active timezone is UTC,
Wed Mar 28 10:53:56 CEST 2018,
[INFO] Container timezone is changed to: Europe/Berlin,
[INFO] Change the ownership of /calibre-web (including subfolders) to calibre:calibre,
[INFO] Current git version is:,
git version 2.13.5,
[INFO] Checkout the latest Calibre-Web version ...,
[INFO] ... git clone -b master --single-branch https://github.com/janeczku/calibre-web.git /calibre-web/app -v,
Cloning into '/calibre-web/app'...,
POST git-upload-pack (189 bytes),
[INFO] Autoupdate is active, try to pull the latest sources for Calibre-Web ...,
[INFO] ... current git status is,
On branch master,
Your branch is up-to-date with 'origin/master'.,
nothing to commit, working tree clean,
d01d7b91a8be744bf35e820795709c97ab7c8654,
[INFO] ... pulling sources,
Already up-to-date.,
[INFO] ... git status after update is,
[INFO] Config directory option is DEACTIVATED,
> due this the Calibre books directory /books will be used to store the configuration,
[INFO] Checking permissions of the config directory: /books,
> Output is: 755 calibre 1000 calibre 1000,
> Permissions: 755,
> Assigned group: calibre,
> Assigned group ID: 1000,
> Assigned owner: calibre,
> Assigned owner ID: 1000,
> Using permissions for checks: 0755,
> The user calibre:1000 is the owner and has write access at /books,
[INFO] 'app.db' and 'gdrive.db' will be linked into /books,
> create 'app.db' link /calibre-web/app/app.db assigned to source /books/app.db,
> create 'gdrive.db' link /calibre-web/app/gdrive.db assigned to source /books/gdrive.db,
[INFO] Checking permissions of the books directory: /books,
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file,
    return self.dbapi.connect(*cargs, **cparams),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 393, in connect,
    return dialect.connect(*cargs, **cparams),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 105, in connect,
    connection = pool._invoke_creator(self),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 651, in __connect,
    self.__connect(first_connect_check=True),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 461, in __init__,
    return _ConnectionRecord(self),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 333, in _create_connection,
    return self._create_connection(),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 1229, in _do_get,
    rec = pool._do_get(),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 516, in checkout,
    fairy = _ConnectionRecord.checkout(pool),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 766, in _checkout,
    return _ConnectionFairy._checkout(self),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 387, in connect,
    return fn(),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2147, in _wrap_pool_connect,
    reraise(type(exception), exception, tb=exc_tb, cause=cause),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause,

    reraise(type(exception), exception, tb=exc_tb, cause=cause),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2147, in _wrap_pool_connect,
    return fn(),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 387, in connect,
    return _ConnectionFairy._checkout(self),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 766, in _checkout,
    fairy = _ConnectionRecord.checkout(pool),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 516, in checkout,
    rec = pool._do_get(),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 1229, in _do_get,
    return self._create_connection(),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 333, in _create_connection,
    return _ConnectionRecord(self),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 461, in __init__,
    self.__connect(first_connect_check=True),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 651, in __connect,
    connection = pool._invoke_creator(self),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 105, in connect,
    return dialect.connect(*cargs, **cparams),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 393, in connect,
    return self.dbapi.connect(*cargs, **cparams),
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file

I know, that we had a similar problem here: #2
But I have a metadata.db file in my volume.

Here is my docker-compose file:

calibre-web:
    image: technosoft2000/calibre-web
    network_mode: "bridge"
    container_name: calibre-web
    ports:
      - "8083:8083"
    volumes:
      - /media/data/eBooks:/books
    environment:
      - SET_CONTAINER_TIMEZONE=true
      - CONTAINER_TIMEZONE=Europe/Berlin
      - PUID=1000
      - PGID=1000
      - VIRTUAL_HOST={Virtual Host}
      - VIRTUAL_PORT=8083
      - LETSENCRYPT_HOST={LetsEncrypt Host}
      - LETSENCRYPT_EMAIL={LetsEncrypt Mail}

The share /media/data comes from my Windows-Server but the UID and GID were configured to 1000, which is my User on my Ubuntu Server and I'm able to create and delete files and folders.

I've checked my eBook Folder and I can see an app.db but no gdrive.db file.

Can anyone help me? I don't know what to do.

remember page of a book

Is there a way that calibre-web remember the page you left a book for a future reading?

Thanks in advance!

starting with an empty database

Hi,
I'm having a small issue configuring the web-interface. I'm running it through a docker-compose file with these parameters:

  calibre:
    image: technosoft2000/calibre-web
    container_name: calibre
    restart: unless-stopped
    env_file:
      - .env
    networks:
      - web
    ports:
      - 8083:8083
    volumes:
      - /media/HDD1/Calibre/data/calibre-web:/config
      - /media/HDD1/Calibre/Archive:/books
    labels:
      - traefik.backend=calibre
      - traefik.frontend.rule=Host:mydomain.com
      - traefik.port=8083
      - traefik.enable=true

And the .env file with these parameters:

# Calibre-web
USE_CONFIG_DIR=true
SET_CONTAINER_TIMEZONE=true
CONTAINER_TIMEZONE=Europe/Madrid
PUID=1000
PGID=1000

As you can see, I've created a metadata.db externally and a book was added. This the where I'm mounting the database and books in /media/HDD1/Calibre:

├── Archive
│   ├── Megan Shisler
│   │   └── NumPy Cookbook (1)
│   │       ├── cover.jpg
│   │       ├── metadata.opf
│   │       └── NumPy Cookbook - Megan Shisler.pdf
│   └── metadata.db
└── data
    └── calibre-web

The problem comes at the web-interface. It asks me about the location of my calibre database, but it doesn't accept:
/media/HDD1/Calibre/Archive

What am I doing wrong?

Thanks for your help.

Stuck to "launching Calibre-web"

Hello, and first, sorry about my (poor) English...
I'm trying to use Calibre-web with Docker in a Synology NAS.
I follow the recommendantions found here:
https://hub.docker.com/r/technosoft2000/calibre-web/
and almost everything went fine... exept that I'm stuck to "laaunching calibre-web"...

Here is the log ( which i d'ont know how to read) :

2018-05-28 07:16:27 stdout [INFO] Launching Calibre-Web ...
2018-05-28 07:16:27 stdout > kindlegen link /calibre-web/app/vendor/kindlegen exists already and won't be recreated
2018-05-28 07:16:27 stdout [INFO] kindlegen (Amazon Kindle Generator) will be linked into /calibre-web/app/vendor
2018-05-28 07:16:27 stdout [INFO] Kindlegen application exists already in directory: /calibre-web/kindlegen
2018-05-28 07:16:27 stdout [INFO] The kindlegen directory exist already and will be used: /calibre-web/kindlegen
2018-05-28 07:16:27 stdout [INFO] The mapped volume for /books contains a Calibre database file 'metadata.db' which will be used
2018-05-28 07:16:27 stdout > Everyone has write access at /books
2018-05-28 07:16:27 stdout > Using permissions for checks: 0777
2018-05-28 07:16:27 stdout > Assigned owner ID: 99
2018-05-28 07:16:27 stdout > Assigned owner: UNKNOWN
2018-05-28 07:16:27 stdout > Assigned group ID: 100
2018-05-28 07:16:27 stdout > Assigned group: users
2018-05-28 07:16:27 stdout > Permissions: 777
2018-05-28 07:16:27 stdout > Output is: 777 users 100 UNKNOWN 99
2018-05-28 07:16:27 stdout [INFO] Checking permissions of the books directory: /books
2018-05-28 07:16:27 stdout > 'gdrive.db' link /calibre-web/app/gdrive.db exists already and won't be recreated
2018-05-28 07:16:27 stdout > 'app.db' link /calibre-web/app/app.db exists already and won't be recreated
2018-05-28 07:16:27 stdout [INFO] 'app.db' and 'gdrive.db' will be linked into /books
2018-05-28 07:16:27 stdout > Everyone has write access at /books
2018-05-28 07:16:27 stdout > Using permissions for checks: 0777
2018-05-28 07:16:27 stdout > Assigned owner ID: 99
2018-05-28 07:16:27 stdout > Assigned owner: UNKNOWN
2018-05-28 07:16:27 stdout > Assigned group ID: 100
2018-05-28 07:16:27 stdout > Assigned group: users
2018-05-28 07:16:27 stdout > Permissions: 777
2018-05-28 07:16:27 stdout > Output is: 777 users 100 UNKNOWN 99
2018-05-28 07:16:27 stdout [INFO] Checking permissions of the config directory: /books
2018-05-28 07:16:27 stdout > due this the Calibre books directory /books will be used to store the configuration
2018-05-28 07:16:27 stdout [INFO] Config directory option is DEACTIVATED
2018-05-28 07:16:27 stdout 0c94faa0999a8728b1cb7c2f40512f5eba571c50
2018-05-28 07:16:27 stdout nothing to commit, working tree clean
2018-05-28 07:16:27 stdout Your branch is up-to-date with 'origin/master'.
2018-05-28 07:16:27 stdout On branch master
2018-05-28 07:16:27 stdout [INFO] ... git status after update is
2018-05-28 07:16:27 stdout Already up-to-date.
2018-05-28 07:16:26 stdout [INFO] ... pulling sources
2018-05-28 07:16:26 stdout 0c94faa0999a8728b1cb7c2f40512f5eba571c50
2018-05-28 07:16:26 stdout nothing to commit, working tree clean
2018-05-28 07:16:26 stdout Your branch is up-to-date with 'origin/master'.
2018-05-28 07:16:26 stdout On branch master
2018-05-28 07:16:26 stdout [INFO] ... current git status is
2018-05-28 07:16:26 stdout [INFO] Autoupdate is active, try to pull the latest sources for Calibre-Web ...
2018-05-28 07:16:26 stdout [INFO] Checkout the latest Calibre-Web version ...
2018-05-28 07:16:26 stdout git version 2.13.5
2018-05-28 07:16:26 stdout [INFO] Current git version is:
2018-05-28 07:16:26 stdout [INFO] Change the ownership of /calibre-web (including subfolders) to calibre:calibre
2018-05-28 07:16:26 stdout [INFO] Container timezone is changed to: Europe/Paris
2018-05-28 07:16:26 stdout Mon May 28 09:16:26 CEST 2018
2018-05-28 07:16:26 stdout [INFO] Current active timezone is CEST
2018-05-28 07:16:26 stderr usermod: no changes
2018-05-28 07:16:26 stdout [WARNING] Assign non-unique user id 1045 to created user calibre
2018-05-28 07:16:26 stderr adduser: user 'calibre' in use
2018-05-28 07:16:26 stdout [WARNING] Create user calibre with temporary user id 999.
2018-05-28 07:16:26 stdout [WARNING] A user with id 1045 exists already [in use by calibre].
2018-05-28 07:16:26 stdout [WARNING] The group calibre will be renamed to calibre
2018-05-28 07:16:26 stdout [WARNING] A group with id 65539 exists already [in use by calibre] and will be modified.
2018-05-28 07:16:26 stdout [INFO] Alpine Linux version: 3.6.2
2018-05-28 07:16:26 stdout [INFO] Docker image version: 1.1.11
2018-05-28 07:16:26 stdout
2018-05-28 07:16:26 stdout ~~~~~ Calibre Web ~~~~~
2018-05-28 07:16:26 stdout
2018-05-28 07:16:26 stdout PRESENTS ANOTHER AWESOME DOCKER IMAGE
2018-05-28 07:16:26 stdout
2018-05-28 07:16:26 stdout ---' 2018-05-28 07:16:26 stdout ; | .' '--' 2018-05-28 07:16:26 stdout '---' --'---' | : .' ; |,'
2018-05-28 07:16:26 stdout ; |.' '--'. /./__; : ' : |--'
2018-05-28 07:16:26 stdout ' : | / /--' / / / /.| | | ' \ \
2018-05-28 07:16:26 stdout | | ' __ \ \ | ; / /-, ' : |. \
2018-05-28 07:16:26 stdout ' : ; ----. \ / ; / | | \ 2018-05-28 07:16:26 stdout ----' | | \ \ . ----'/ ; ' | :
2018-05-28 07:16:26 stdout ; |.'; ; | : ;_ ; |.' / | ' /
2018-05-28 07:16:26 stdout | : | ; | |-- | : . ;: : ' / 2018-05-28 07:16:26 stdout .'___,/ ,'| : /. / ,----,' |,--. :/ |
2018-05-28 07:16:26 stdout ; ; // / '. .' .' \ ,--/ /|
2018-05-28 07:16:26 stdout , .' : .--.--. ,----, ,-. 2018-05-28 07:16:26 stdout ,/ .|
2018-05-28 07:16:26 stdout ,----,

All help is welcome!

Can't change metadata related with path / filename

When I try to change metadata related with file name (path) like author or Title I get an error like this:
Rename author from: '/books/unknown/20180915_Lavavajillas_Manual_925321ES (8960)' to '/books/AEG/20180915_Lavavajillas_Manual_925321ES (8960)' failed with error: [Errno 2] No such file or directory
There should be a way to rename books or authors like in the original calibre because almost every time you touch metadata there are changes in title or authors.
If you don't touch those fields but others you don't get this error.
I have configured the docker with
PGROUP | 100
PUSER | 1000
wich are admin user and administrator group, but noticed, that some directories for example the Calibre Web application folder is changed to user docker.
Any help appreciated.
Klaus
bildschirmfoto vom 2018-11-02 15-35-20

Calibre-Web cannot write into volume on Windows-Host

Hey there,

I'm using Calibre-Web with my Docker for Windows instance on my Windows 10 Server.
I was fiddling with the permission since the container isn't able to have write access to my shared windows-volume "on the fly".
The Permission Group and User are root

[INFO] Checking permissions of /books
> Output is: 755 root 0 root 0
> Permissions: 755
> Assigned group: root
> Assigned group ID: 0
> Assigned owner: root
> Assigned owner ID: 0
> Using permissions for checks: 0755

When I pass through these ID via the environments, the Container will gain write-access to my share, but isn't able to create symbolic links since they seems to be existing and exists the container with an error because he cannot find the user calibre.

> The user calibre:0 is the owner and has write access at /books
[INFO] app.db and gdrive.db will be linked into /books
> create app.db link /calibre-web/app/app.db assigned to source /books/app.db
ln: failed to create symbolic link '/calibre-web/app/app.db': File exists
> create gdrive.db link /calibre-web/app/gdrive.db assigned to source /books/gdrive.db
ln: failed to create symbolic link '/calibre-web/app/gdrive.db': File exists
[INFO] Launching Calibre-Web ...
error: failed switching to "calibre:calibre": unable to find user calibre: no matching entries in passwd file

I don't know what to do at this point. I don't want to set the preferences every time I restart the container.
Another idea may be to create an extra volume for these settings. But I think this isn't possible at the moment?

Maybe someone can help me?
Many thanks in advance!

using google drive

Following the instructions on the calibre-web git.. step 8 it says to copy the json file to calibre-web/cps but this path only exist in the container. I cant make it persistent because it is only created when i start the docker container...So what do i do?

ebook-convert : Error: unsupported locale setting

Hi,

I just upgraded to the latest version of the docker image (v1.2.1 running on Docker on a Synology NAS 6.2). I setup calibre-web to use ebook-ceonvert (instead of kindlegen) with the recommended path (/opt/calibre/ebook-convert). I'm encountering issues when trying to use the "send to kindle" :

failed

I also tried:

bash-4.4# echo $LANG $LC_ALL $LANGUAGE $CONTAINER_TIMEZONE $SET_CONTAINER_TIMEZONE ;
fr_FR.UTF-8 fr_FR.UTF-8 fr_FR:fr Europe/Paris true                                                                                                           

bash-4.4# /opt/calibre/ebook-convert                                              
WARNING: Failed to set default libc locale, using en_US.UTF-8                                                                                                
Traceback (most recent call last):                                                                                                                           
  File "site.py", line 72, in main                                                                                                                           
  File "site.py", line 18, in set_default_encoding                                                                                                           
  File "locale.py", line 581, in setlocale
Error: unsupported locale setting                                                                                                           

Here is my current setup :

Calibre-Web (OzzieIsaacs) : Current commit timestamp: 22/08/2018 21:55

linked_libraries

"DB location is not valid, please enter correct path"

I wrote '\books' in the 'Location of Calibre database', but it told me that "DB location is not valid, please enter correct path". Later I 'chmod 777 \books', but the same hint appeared. How to solve it?
P.S I use the same command to create and run calibre-web
'''
docker create --name=calibre-web --restart=always
-v /volume1/books/calibre:/books
-v /volume1/docker/apps/calibre-web/config:/calibre-web/config
-e USE_CONFIG_DIR=true
-e SET_CONTAINER_TIMEZONE=true
-e CONTAINER_TIMEZONE=Europe/Vienna
-e PGID=65539 -e PUID=1029
-p 8083:8083
technosoft2000/calibre-web
'''

Unable to open database file

Hi,

I'm trying to deploy the docker on a linux NAS running OpenMediaVault, but I run into issues I can't seem to resolve. Can you help me figure this out? Here are my logs:

,----, ,/ .|
, .' : .--.--. ,----, ,-. ; ; // / '. .' .' \ ,--/ /| .'___,/ ,'| : /. / ,----,' |,--. :/ |
| : | ; | |-- | : . ;: : ' / ; |.'; ; | : ;_ ; |.' / | ' /----' | | \ \ . ----'/ ; ' | :
' : ; ----. \ / ; / | | \ | | ' __ \ \ | ; / /-, ' : |. \ ' : | / /--' / / / /.| | | ' \ \ ; |.' '--'. /./__; : ' : |--' '---' --'---' | : .' ; |,'
; | .' '--'
`---'

  PRESENTS ANOTHER AWESOME DOCKER IMAGE

  ~~~~~         Calibre Web       ~~~~~

[INFO] Docker image version: 1.1.8
[INFO] Alpine Linux version: 3.6.0
[INFO] Create group calibre with id 1001
[INFO] Create user calibre with id 1017
[INFO] Current active timezone is CEST
ln: failed to create symbolic link '/etc/localtime': Resource busy
[INFO] Container timezone is changed to: Europe/Amsterdam
[INFO] Change the ownership of /calibre-web (including subfolders) to calibre:calibre
[INFO] Current git version is:
git version 2.13.5
[INFO] Checkout the latest Calibre-Web version ...
[INFO] ... git clone -b master --single-branch https://github.com/janeczku/calibre-web.git /calibre-web/app -v
Cloning into '/calibre-web/app'...
POST git-upload-pack (189 bytes)
[INFO] Autoupdate is active, try to pull the latest sources for Calibre-Web ...
[INFO] ... current git status is
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
9182d8912816c27e67e452334df370c8fdc89ba4
[INFO] ... pulling sources
Already up-to-date.
[INFO] ... git status after update is
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
9182d8912816c27e67e452334df370c8fdc89ba4
[INFO] kindlegen (Amazon Kindle Generator) will be linked into /calibre-web/app/vendor
[INFO] Creating the vendor directory: /calibre-web/app/vendor
[INFO] Change the ownership of /calibre-web/app/vendor (including subfolders) to calibre:calibre

create kindlegen link /calibre-web/app/vendor/kindlegen assigned to source /calibre-web/kindlegen/kindlegen
[INFO] Checking permissions of /books
Output is: 770 calibre 1001 calibre 1017
Permissions: 770
Assigned group: calibre
Assigned group ID: 1001
Assigned owner: calibre
Assigned owner ID: 1017
Using permissions for checks: 0770
Check if the group calibre has write access at /books
The group calibre has write access at /books
[INFO] app.db and gdrive.db will be linked into /books
create app.db link /calibre-web/app/app.db assigned to source /books/app.db
create gdrive.db link /calibre-web/app/gdrive.db assigned to source /books/gdrive.db
[INFO] Creating directory for temporary directories and files: /tmp
[INFO] Change the ownership of /tmp (including subfolders) to calibre:calibre
[INFO] Launching Calibre-Web ...
Traceback (most recent call last):
File "/calibre-web/app/cps.py", line 13, in
from cps import web
File "/calibre-web/app/cps/web.py", line 36, in
import ub
File "/calibre-web/app/cps/ub.py", line 605, in
Base.metadata.create_all(engine)
File "/usr/lib/python2.7/site-packages/sqlalchemy/sql/schema.py", line 3949, in create_all
tables=tables)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1928, in _run_visitor
with self._optional_conn_ctx_manager(connection) as conn:
File "/usr/lib/python2.7/contextlib.py", line 17, in enter
return self.gen.next()
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1921, in _optional_conn_ctx_manager
with self.contextual_connect() as conn:
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2112, in contextual_connect
self._wrap_pool_connect(self.pool.connect, None),
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2151, in _wrap_pool_connect
e, dialect, self)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1465, in _handle_dbapi_exception_noconnection
exc_info
File "/usr/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2147, in _wrap_pool_connect
return fn()
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 387, in connect
return _ConnectionFairy._checkout(self)
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 516, in checkout
rec = pool._do_get()
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 1229, in _do_get
return self._create_connection()
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 461, in init
self.__connect(first_connect_check=True)
File "/usr/lib/python2.7/site-packages/sqlalchemy/pool.py", line 651, in __connect
connection = pool._invoke_creator(self)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 105, in connect
return dialect.connect(*cargs, **cparams)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 393, in connect
return self.dbapi.connect(*cargs, **cparams)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file`

I run the docker with similar command like this;

docker create --name=calibre-web --restart=always
-v /volume1/books/calibre:/books
-e SET_CONTAINER_TIMEZONE=true
-e CONTAINER_TIMEZONE=Europe/Amsterdam
-e PGID=1001 -e PUID=1017
-p 8083:8083
technosoft2000/calibre-web

File permissions are like this:

-rwxrwx---+ 1 calibre restricted 1498112 Oct 23 09:33 metadata.db
-rwxrwx---+ 1 calibre restricted 15205 Oct 23 09:49 metadata_db_prefs_backup.json

id calibre
uid=1017(calibre) gid=100(users) groups=100(users),1001(restricted)

I hope you can help me out.

Regards,

Niels

[BUG] In version 1.1.4 /books folder doesn't have write access

I am using a Synology DSM 6.0.2 and I have set the PUID and GUID to a docker user I've created. It owns the volume where /books is stored.

In version 1.1.3 it works perfect but when I update the container to use version 1.1.4 it fails detecting the folder permissions and I lose all my configuration and settings because refuses to use /books as the save path for the *.db files.

V. 1.1.3 LOG:
[INFO] Everyone has write access at /books
[INFO] app.db and gdrive.db will be linked into /books
[INFO] Launching Calibre-Web ...

V. 1.1.4 LOG:
[INFO] Checking permissions of /books
> Output is: 755 users UNKNOWN
> Permissions: 755
> Assigned group: users
> Assigned owner: UNKNOWN
> Using permissons for checks: 0755
[WARNING] No write access at /books - app.db and gdrive.db wont be linked into /books
[INFO] Creating directory for temporary directories and files: /tmp
[INFO] Change the ownership of /tmp (including subfolders) to calibre:calibre
[INFO] Launching Calibre-Web ...

Can't get it to work on my Synology DSM 5.2-5644 using Docker 1.6.2-0036 package.

Here are my docker settings: http://prntscr.com/kexxte
Also this is what i get form id docker: uid=1029(docker) gid=100(users) groups=100(users),65537(docker)
Here's my server info: http://prntscr.com/kexzad
I am able to get to http://MyPublicIP:8083/config | Pic: http://prntscr.com/key4tz
Could be i'm just doing something wrong. But i have no idea what.
Here's a picture of the log since i couldn't copy it: https://imgur.com/a/VkbhNP0 | Export below.
My exported the log as CSV (It seems to be different from the log i see on in Docker tho) :

calibre-web
date,stream,content
2018-08-05 15:37:54,stdout,[INFO] Launching Calibre-Web ...
2018-08-05 15:37:54,stdout,> change the ownership of /calibre-web/app/vendor/kindlegen to calibre:calibre
2018-08-05 15:37:54,stdout,> create kindlegen link /calibre-web/app/vendor/kindlegen assigned to source /calibre-web/kindlegen/kindlegen
2018-08-05 15:37:54,stdout,[INFO] Change the ownership of /calibre-web/app/vendor (including subfolders) to calibre:calibre
2018-08-05 15:37:54,stdout,[INFO] Creating the vendor directory: /calibre-web/app/vendor
2018-08-05 15:37:54,stdout,[INFO] kindlegen (Amazon Kindle Generator) will be linked into /calibre-web/app/vendor
2018-08-05 15:37:54,stdout,[INFO] Change the ownership of /calibre-web/kindlegen (including subfolders) to calibre:calibre
2018-08-05 15:37:53,stdout,[INFO] Extracting kindlegen_linux_2.6_i386_v2_9.tar.gz into directory: /calibre-web/kindlegen
2018-08-05 15:37:53,stdout,
kindlegen_linux_2.6_   1% |                               |   108k  0:01:36 ETA
kindlegen_linux_2.6_  47% |**************                 |  4990k  0:00:02 ETA
kindlegen_linux_2.6_ 100% |*******************************| 10559k  0:00:00 ETA
2018-08-05 15:37:51,stdout,Connecting to kindlegen.s3.amazonaws.com (52.216.1.208:80)
2018-08-05 15:37:51,stdout,[INFO] Downloading kindlegen from http://kindlegen.s3.amazonaws.com/kindlegen_linux_2.6_i386_v2_9.tar.gz into directory: /calibre-web/kindlegen/kindlegen_linux_2.6_i386_v2_9.tar.gz
2018-08-05 15:37:51,stdout,[INFO] The kindlegen directory exist already and will be used: /calibre-web/kindlegen
2018-08-05 15:37:51,stdout,> Please check and modify the permissions of the directory
2018-08-05 15:37:51,stdout,[WARNING] No write access at /books - new 'metadata.db' and books can't be stored at this directory
2018-08-05 15:37:51,stdout,> The user calibre:=1029 is not the owner has no write access at /books
2018-08-05 15:37:51,stdout,> Using permissions for checks: 0700
2018-08-05 15:37:51,stdout,> Assigned owner ID: 1024
2018-08-05 15:37:51,stdout,> Assigned owner: UNKNOWN
2018-08-05 15:37:51,stdout,> Assigned group ID: 100
2018-08-05 15:37:51,stdout,> Assigned group: users
2018-08-05 15:37:51,stdout,> Permissions: 700
2018-08-05 15:37:51,stdout,> Output is: 700 users 100 UNKNOWN 1024
2018-08-05 15:37:51,stdout,[INFO] Checking permissions of the books directory: /books
2018-08-05 15:37:51,stdout,[WARNING] No write access at /books - app.db and gdrive.db wont be linked into /books
2018-08-05 15:37:51,stdout,> The user calibre:=1029 is not the owner has no write access at /books
2018-08-05 15:37:51,stdout,> Using permissions for checks: 0700
2018-08-05 15:37:51,stdout,> Assigned owner ID: 1024
2018-08-05 15:37:51,stdout,> Assigned owner: UNKNOWN
2018-08-05 15:37:51,stdout,> Assigned group ID: 100
2018-08-05 15:37:51,stdout,> Assigned group: users
2018-08-05 15:37:51,stdout,> Permissions: 700
2018-08-05 15:37:51,stdout,> Output is: 700 users 100 UNKNOWN 1024
2018-08-05 15:37:51,stdout,[INFO] Checking permissions of the config directory: /books
2018-08-05 15:37:51,stdout,> due this the Calibre books directory /books will be used to store the configuration
2018-08-05 15:37:51,stdout,[INFO] Config directory option is DEACTIVATED
2018-08-05 15:37:51,stdout,3db682cd156b5b959d76465de0195919b86ee53e
2018-08-05 15:37:51,stdout,"nothing to commit, working tree clean"
2018-08-05 15:37:51,stdout,Your branch is up-to-date with 'origin/master'.
2018-08-05 15:37:51,stdout,On branch master
2018-08-05 15:37:51,stdout,[INFO] ... git status after update is
2018-08-05 15:37:51,stdout,Already up-to-date.
2018-08-05 15:37:50,stdout,[INFO] ... pulling sources
2018-08-05 15:37:50,stdout,3db682cd156b5b959d76465de0195919b86ee53e
2018-08-05 15:37:50,stdout,"nothing to commit, working tree clean"
2018-08-05 15:37:50,stdout,Your branch is up-to-date with 'origin/master'.
2018-08-05 15:37:50,stdout,On branch master
2018-08-05 15:37:50,stdout,[INFO] ... current git status is
2018-08-05 15:37:50,stdout,"[INFO] Autoupdate is active, try to pull the latest sources for Calibre-Web ..."
2018-08-05 15:37:49,stdout,"Resolving deltas:   0% (0/4700)   
Resolving deltas:   3% (161/4700)   
Resolving deltas:   4% (198/4700)   
Resolving deltas:   6% (289/4700)   
Resolving deltas:   7% (352/4700)   
Resolving deltas:   8% (387/4700)   
Resolving deltas:   9% (423/4700)   
Resolving deltas:  10% (473/4700)   
Resolving deltas:  11% (550/4700)   
Resolving deltas:  12% (566/4700)   
Resolving deltas:  13% (611/4700)   
Resolving deltas:  15% (721/4700)   
Resolving deltas:  16% (759/4700)   
Resolving deltas:  19% (906/4700)   
Resolving deltas:  20% (941/4700)   
Resolving deltas:  21% (1031/4700)   
Resolving deltas:  22% (1037/4700)   
Resolving deltas:  23% (1099/4700)   
Resolving deltas:  24% (1137/4700)   
Resolving deltas:  25% (1178/4700)   
Resolving deltas:  26% (1223/4700)   
Resolving deltas:  33% (1589/4700)   
Resolving deltas:  34% (1603/4700)   
Resolving deltas:  35% (1647/4700)   
Resolving deltas:  36% (1695/4700)   
Resolving deltas:  38% (1804/4700)   
Resolving deltas:  39% (1855/4700)   
Resolving deltas:  40% (1884/4700)   
Resolving deltas:  41% (1927/4700)   
Resolving deltas:  42% (1995/4700)   
Resolving deltas:  44% (2077/4700)   
Resolving deltas:  47% (2250/4700)   
Resolving deltas:  48% (2285/4700)   
Resolving deltas:  49% (2306/4700)   
Resolving deltas:  50% (2353/4700)   
Resolving deltas:  51% (2443/4700)   
Resolving deltas:  52% (2447/4700)   
Resolving deltas:  53% (2496/4700)   
Resolving deltas:  54% (2565/4700)   
Resolving deltas:  55% (2627/4700)   
Resolving deltas:  56% (2665/4700)   
Resolving deltas:  57% (2699/4700)   
Resolving deltas:  58% (2741/4700)   
Resolving deltas:  59% (2779/4700)   
Resolving deltas:  60% (2820/4700)   
Resolving deltas:  61% (2867/4700)   
Resolving deltas:  62% (2916/4700)   
Resolving deltas:  63% (2965/4700)   
Resolving deltas:  64% (3010/4700)   
Resolving deltas:  65% (3056/4700)   
Resolving deltas:  66% (3124/4700)   
Resolving deltas:  67% (3149/4700)   
Resolving deltas:  68% (3196/4700)   
Resolving deltas:  69% (3243/4700)   
Resolving deltas:  70% (3298/4700)   
Resolving deltas:  71% (3360/4700)   
Resolving deltas:  72% (3386/4700)   
Resolving deltas:  73% (3433/4700)   
Resolving deltas:  74% (3485/4700)   
Resolving deltas:  75% (3526/4700)   
Resolving deltas:  77% (3641/4700)   
Resolving deltas:  78% (3683/4700)   
Resolving deltas:  80% (3769/4700)   
Resolving deltas:  81% (3827/4700)   
Resolving deltas:  82% (3856/4700)   
Resolving deltas:  83% (3918/4700)   
Resolving deltas:  84% (3949/4700)   
Resolving deltas:  85% (4012/4700)   
Resolving deltas:  86% (4051/4700)   
Resolving deltas:  87% (4120/4700)   
Resolving deltas:  88% (4163/4700)   
Resolving deltas:  89% (4185/4700)   
Resolving deltas:  90% (4230/4700)   
Resolving deltas:  91% (4283/4700)   
Resolving deltas:  92% (4336/4700)   
Resolving deltas:  93% (4383/4700)   
Resolving deltas:  94% (4418/4700)   
Resolving deltas:  95% (4487/4700)   
Resolving deltas:  96% (4520/4700)   
Resolving deltas:  97% (4561/4700)   
Resolving deltas:  98% (4615/4700)   
Resolving deltas:  99% (4659/4700)   
Resolving deltas: 100% (4700/4700)   
Resolving deltas: 100% (4700/4700), done."
2018-08-05 15:37:48,stdout,"Receiving objects: 100% (8420/8420), 32.26 MiB | 9.12 MiB/s   
Receiving objects: 100% (8420/8420), 36.21 MiB | 9.40 MiB/s, done."
2018-08-05 15:37:48,stdout,"Receiving objects:   0% (1/8420)   
Receiving objects:   1% (85/8420)   
Receiving objects:   2% (169/8420)   
Receiving objects:   3% (253/8420)   
Receiving objects:   4% (337/8420)   
Receiving objects:   5% (421/8420)   
Receiving objects:   6% (506/8420)   
Receiving objects:   7% (590/8420)   
Receiving objects:   8% (674/8420)   
Receiving objects:   9% (758/8420)   
Receiving objects:  10% (842/8420)   
Receiving objects:  11% (927/8420)   
Receiving objects:  12% (1011/8420), 356.01 KiB | 687.00 KiB/s   
Receiving objects:  13% (1095/8420), 356.01 KiB | 687.00 KiB/s   
Receiving objects:  14% (1179/8420), 356.01 KiB | 687.00 KiB/s   
Receiving objects:  14% (1205/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  15% (1263/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  16% (1348/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  17% (1432/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  18% (1516/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  19% (1600/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  20% (1684/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  21% (1769/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  22% (1853/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  23% (1937/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  24% (2021/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  25% (2105/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  26% (2190/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  27% (2274/8420), 1.78 MiB | 1.71 MiB/s   
Receiving objects:  28% (2358/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  29% (2442/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  30% (2526/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  31% (2611/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  32% (2695/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  33% (2779/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  34% (2863/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  35% (2947/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  36% (3032/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  37% (3116/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  38% (3200/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  39% (3284/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  40% (3368/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  41% (3453/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  42% (3537/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  43% (3621/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  44% (3705/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  45% (3789/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  46% (3874/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  46% (3922/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  47% (3958/8420), 7.37 MiB | 4.80 MiB/s   
Receiving objects:  48% (4042/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  49% (4126/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  50% (4210/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  51% (4295/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  52% (4379/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  53% (4463/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  54% (4547/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  55% (4631/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  56% (4716/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  57% (4800/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  58% (4884/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  59% (4968/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  60% (5052/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  61% (5137/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  62% (5221/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  63% (5305/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  64% (5389/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  65% (5473/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  66% (5558/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  67% (5642/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  68% (5726/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  69% (5810/8420), 12.12 MiB | 5.95 MiB/s   
Receiving objects:  70% (5894/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  71% (5979/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  72% (6063/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  73% (6147/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  74% (6231/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  75% (6315/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  76% (6400/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  77% (6484/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  78% (6568/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  79% (6652/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  80% (6736/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  81% (6821/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  82% (6905/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  83% (6989/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  84% (7073/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  85% (7157/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  86% (7242/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  87% (7326/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  88% (7410/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  89% (7494/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  90% (7578/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  91% (7663/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  92% (7747/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  93% (7831/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  94% (7915/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  95% (7999/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  96% (8084/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  97% (8168/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  97% (8243/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  98% (8252/8420), 18.11 MiB | 7.14 MiB/s   
Receiving objects:  99% (8336/8420), 32.26 MiB | 9.12 MiB/s   
remote: Total 8420 (delta 63), reused 60 (delta 30), pack-reused 8318�[K"
2018-08-05 15:37:44,stdout,"remote: Compressing objects:   1% (1/72)   �[K
remote: Compressing objects:   2% (2/72)   �[K
remote: Compressing objects:   4% (3/72)   �[K
remote: Compressing objects:   5% (4/72)   �[K
remote: Compressing objects:   6% (5/72)   �[K
remote: Compressing objects:   8% (6/72)   �[K
remote: Compressing objects:   9% (7/72)   �[K
remote: Compressing objects:  11% (8/72)   �[K
remote: Compressing objects:  12% (9/72)   �[K
remote: Compressing objects:  13% (10/72)   �[K
remote: Compressing objects:  15% (11/72)   �[K
remote: Compressing objects:  16% (12/72)   �[K
remote: Compressing objects:  18% (13/72)   �[K
remote: Compressing objects:  19% (14/72)   �[K
remote: Compressing objects:  20% (15/72)   �[K
remote: Compressing objects:  22% (16/72)   �[K
remote: Compressing objects:  23% (17/72)   �[K
remote: Compressing objects:  25% (18/72)   �[K
remote: Compressing objects:  26% (19/72)   �[K
remote: Compressing objects:  27% (20/72)   �[K
remote: Compressing objects:  29% (21/72)   �[K
remote: Compressing objects:  30% (22/72)   �[K
remote: Compressing objects:  31% (23/72)   �[K
remote: Compressing objects:  33% (24/72)   �[K
remote: Compressing objects:  34% (25/72)   �[K
remote: Compressing objects:  36% (26/72)   �[K
remote: Compressing objects:  37% (27/72)   �[K
remote: Compressing objects:  38% (28/72)   �[K
remote: Compressing objects:  40% (29/72)   �[K
remote: Compressing objects:  41% (30/72)   �[K
remote: Compressing objects:  43% (31/72)   �[K
remote: Compressing objects:  44% (32/72)   �[K
remote: Compressing objects:  45% (33/72)   �[K
remote: Compressing objects:  47% (34/72)   �[K
remote: Compressing objects:  48% (35/72)   �[K
remote: Compressing objects:  50% (36/72)   �[K
remote: Compressing objects:  51% (37/72)   �[K
remote: Compressing objects:  52% (38/72)   �[K
remote: Compressing objects:  54% (39/72)   �[K
remote: Compressing objects:  55% (40/72)   �[K
remote: Compressing objects:  56% (41/72)   �[K
remote: Compressing objects:  58% (42/72)   �[K
remote: Compressing objects:  59% (43/72)   �[K
remote: Compressing objects:  61% (44/72)   �[K
remote: Compressing objects:  62% (45/72)   �[K
remote: Compressing objects:  63% (46/72)   �[K
remote: Compressing objects:  65% (47/72)   �[K
remote: Compressing objects:  66% (48/72)   �[K
remote: Compressing objects:  68% (49/72)   �[K
remote: Compressing objects:  69% (50/72)   �[K
remote: Compressing objects:  70% (51/72)   �[K
remote: Compressing objects:  72% (52/72)   �[K
remote: Compressing objects:  73% (53/72)   �[K
remote: Compressing objects:  75% (54/72)   �[K
remote: Compressing objects:  76% (55/72)   �[K
remote: Compressing objects:  77% (56/72)   �[K
remote: Compressing objects:  79% (57/72)   �[K
remote: Compressing objects:  80% (58/72)   �[K
remote: Compressing objects:  81% (59/72)   �[K
remote: Compressing objects:  83% (60/72)   �[K
remote: Compressing objects:  84% (61/72)   �[K
remote: Compressing objects:  86% (62/72)   �[K
remote: Compressing objects:  87% (63/72)   �[K
remote: Compressing objects:  88% (64/72)   �[K
remote: Compressing objects:  90% (65/72)   �[K
remote: Compressing objects:  91% (66/72)   �[K
remote: Compressing objects:  93% (67/72)   �[K
remote: Compressing objects:  94% (68/72)   �[K
remote: Compressing objects:  95% (69/72)   �[K
remote: Compressing objects:  97% (70/72)   �[K
remote: Compressing objects:  98% (71/72)   �[K
remote: Compressing objects: 100% (72/72)   �[K
remote: Compressing objects: 100% (72/72), done.�[K"
2018-08-05 15:37:44,stdout,"remote: Counting objects: 8420, done.�[K"
2018-08-05 15:37:44,stdout,POST git-upload-pack (177 bytes)
2018-08-05 15:37:43,stdout,Cloning into '/calibre-web/app'...
2018-08-05 15:37:43,stdout,[INFO] ... git clone -b master --single-branch https://github.com/janeczku/calibre-web.git /calibre-web/app -v
2018-08-05 15:37:43,stdout,[INFO] Checkout the latest Calibre-Web version ...
2018-08-05 15:37:43,stdout,git version 2.13.5
2018-08-05 15:37:43,stdout,[INFO] Current git version is:
2018-08-05 15:37:43,stdout,[INFO] Change the ownership of /calibre-web (including subfolders) to calibre:calibre
2018-08-05 15:37:43,stdout,[INFO] Current active timezone is UTC
2018-08-05 15:37:43,stdout,adduser: invalid number '=1029'
2018-08-05 15:37:43,stdout,[INFO] Create user calibre with id =1029
2018-08-05 15:37:43,stdout,addgroup: invalid number '=65537'
2018-08-05 15:37:43,stdout,[INFO] Create group calibre with id =65537
2018-08-05 15:37:43,stdout,[INFO] Alpine Linux version: 3.6.2
2018-08-05 15:37:43,stdout,[INFO] Docker image version: 1.1.11
2018-08-05 15:37:43,stdout,                                           
2018-08-05 15:37:43,stdout,      ~~~~~         Calibre Web       ~~~~~
2018-08-05 15:37:43,stdout,      
2018-08-05 15:37:43,stdout,      PRESENTS ANOTHER AWESOME DOCKER IMAGE
2018-08-05 15:37:43,stdout,
2018-08-05 15:37:43,stdout,                        `---'                    
2018-08-05 15:37:43,stdout,                        ;   | .'      '--'       
2018-08-05 15:37:43,stdout,"    '---'      `--'---' |   :    .'   ;  |,'     "
2018-08-05 15:37:43,stdout,    ;   |.'  '--'.     /./__;      :  '  : |--'  
2018-08-05 15:37:43,stdout,    '   :  |  /  /`--'  / /  /  /.`|  |  | ' \ \ 
2018-08-05 15:37:43,stdout,"    |   |  '   __ \  \  |  ;  /  /-,  '  : |. \  "
2018-08-05 15:37:43,stdout,    '   :  ;   `----.   \   /  ;  /   |  |   \   
2018-08-05 15:37:43,stdout,`----'  |  |  \  \    `.  `----'/  ;  '  |  :    
2018-08-05 15:37:43,stdout,;    |.';  ; |  :  ;_     ;    |.'  / |  '  /    
2018-08-05 15:37:43,stdout,|    :     | ;  |  |--`   |    :  .  ;:  : ' /   
2018-08-05 15:37:43,stdout,".'___,/    ,'|  :  /`. /  ,----,'    |,--. :/ |  "
2018-08-05 15:37:43,stdout,"  ;    ;     //  /    '.    .'   .' \   ,--/ /|  "
2018-08-05 15:37:43,stdout,"    ,`   .'  : .--.--.        ,----,        ,-.  "
2018-08-05 15:37:43,stdout,"      ,/   .`|                                   "
2018-08-05 15:37:43,stdout,"        ,----,                                   "

Kindlegen volume

Can we have the details of the repo reflect that if you use the USE_CONFIG_DIR environment variable, you'll need to have the kindlegen binary in a subdirectory called kindlegen of where you've pointed the other config files (app.db & drive.db)?

Took me a little bit of time to figure this out - I ended up just creating a different directory for kindlegen , outside of the directories I used for app.db & gdrive.db.

Here are the relevant lines from my docker-compose:
volumes:
- /data/CalibreLib:/books
- /data/cps:/calibre-web
- /data/cps/config:/calibre-web/config
- /data/cps/kindlegen:/calibre-web/kindlegen
environment:
- USE_CONFIG_DIR=true

Can't start fresh container

Any ideas? All I've set is puid, pgid, and timezone's

        ,----,                                   ,
      ,/   .`|                                   ,
    ,`   .'  : .--.--.        ,----,        ,-.  ,
  ;    ;     //  /    '.    .'   .' \   ,--/ /|  ,
.'___,/    ,'|  :  /`. /  ,----,'    |,--. :/ |  ,
|    :     | ;  |  |--`   |    :  .  ;:  : ' /   ,
;    |.';  ; |  :  ;_     ;    |.'  / |  '  /    ,
`----'  |  |  \  \    `.  `----'/  ;  '  |  :    ,
    '   :  ;   `----.   \   /  ;  /   |  |   \   ,
    |   |  '   __ \  \  |  ;  /  /-,  '  : |. \  ,
    '   :  |  /  /`--'  / /  /  /.`|  |  | ' \ \ ,
    ;   |.'  '--'.     /./__;      :  '  : |--'  ,
    '---'      `--'---' |   :    .'   ;  |,'     ,
                        ;   | .'      '--'       ,
                        `---'                    ,
,
      PRESENTS ANOTHER AWESOME DOCKER IMAGE,
      ,
      ~~~~~         Calibre Web       ~~~~~,
                                           ,
[INFO] Docker image version: 1.2.3,
[INFO] Alpine Linux version: 3.8.0,
[WARNING] A group with id 1000 exists already [in use by calibre] and will be modified.,
[WARNING] The group calibre will be renamed to calibre,
[WARNING] A user with id 1000 exists already [in use by calibre].,
[WARNING] Create user calibre with temporary user id 999.,
adduser: user 'calibre' in use,
[WARNING] Assign non-unique user id 1000 to created user calibre,
usermod: no changes,
[INFO] Current active timezone is EDT,
ln: failed to create symbolic link '/etc/localtime': Resource busy,
[INFO] Container timezone is changed to: America/New_York,
[INFO] Change the ownership of /calibre-web (including subfolders) to calibre:calibre,
[INFO] Current git version is:,
git version 2.18.0,
[INFO] Checkout the latest Calibre-Web version ...,
[INFO] Autoupdate is active, try to pull the latest sources for Calibre-Web ...,
[INFO] ... current git status is,
On branch master,
Your branch is up to date with 'origin/master'.,
,
nothing to commit, working tree clean,
968cddf2b0c07ee39a62927c1a820c0f662c7ef8,
FO] ... pulling sources,
Already up to date.,
[INFO] ... git status after update is,
On branch master,
Your branch is up to date with 'origin/master'.,
,
nothing to commit, working tree clean,
968cddf2b0c07ee39a62927c1a820c0f662c7ef8,
[INFO] Config directory option is DEACTIVATED,
> due this the Calibre books directory /books will be used to store the configuration,
[INFO] Checking permissions of the config directory: /books,
> Output is: 775 calibre 1000 calibre 1000,
> Permissions: 775,
> Assigned group: calibre,
> Assigned group ID: 1000,
> Assigned owner: calibre,
> Assigned owner ID: 1000,
> Using permissions for checks: 0775,
> Check if the group calibre has write access at /books,
> The group calibre has write access at /books,
[INFO] 'app.db' and 'gdrive.db' will be linked into /books,
> 'app.db' link /calibre-web/app/app.db exists already and won't be recreated,
> create 'gdrive.db' link /calibre-web/app/gdrive.db assigned to source /books/gdrive.db,
ln: failed to create symbolic link '/calibre-web/app/gdrive.db': File exists,
> change the ownership of /calibre-web/app/gdrive.db to calibre:calibre,
[INFO] Checking permissions of the books directory: /books,
> Output is: 775 calibre 1000 calibre 1000,
> Permissions: 775,
> Assigned group: calibre,
> Assigned group ID: 1000,
> Assigned owner: calibre,
> Assigned owner ID: 1000,
> Using permissions for checks: 0775,
> Check if the group calibre has write access at /books,
> The group calibre has write access at /books,
[INFO] The mapped volume for /books contains a Calibre database file 'metadata.db' which will be used,
[INFO] The kindlegen directory exist already and will be used: /calibre-web/kindlegen,
[INFO] Kindlegen application exists already in directory: /calibre-web/kindlegen,
[INFO] kindlegen (Amazon Kindle Generator) will be linked into /calibre-web/app/vendor,
> kindlegen link /calibre-web/app/vendor/kindlegen exists already and won't be recreated,
[INFO] Launching Calibre-Web ...,
Traceback (most recent call last):,
  File "/calibre-web/app/cps.py", line 13, in <module>,
    from cps.server import Server,
  File "/calibre-web/app/cps/server.py", line 20, in <module>,
    import web,
  File "/calibre-web/app/cps/web.py", line 45, in <module>,
    import ub,
  File "/calibre-web/app/cps/ub.py", line 769, in <module>,
    Base.metadata.create_all(engine),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/sql/schema.py", line 4005, in create_all,
    tables=tables),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1940, in _run_visitor,
    conn._run_visitor(visitorcallable, element, **kwargs),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1549, in _run_visitor,
    **kwargs).traverse_single(element),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py", line 121, in traverse_single,
    return meth(obj, **kw),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/sql/ddl.py", line 757, in visit_metadata,
    _is_metadata_operation=True),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py", line 121, in traverse_single,
    return meth(obj, **kw),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/sql/ddl.py", line 791, in visit_table,
    include_foreign_key_constraints=include_foreign_key_constraints,
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 948, in execute,
    return meth(self, multiparams, params),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/sql/ddl.py", line 68, in _execute_on_connection,
    return connection._execute_ddl(self, multiparams, params),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1009, in _execute_ddl,�
    compiled,
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1200, in _execute_context,�
    context),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1413, in _handle_dbapi_exception,�
    exc_info,
  File "/usr/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 265, in raise_from_cause,
    reraise(type(exception), exception, tb=exc_tb, cause=cause),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context,�
    context),
  File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 509, in do_execute,
    cursor.execute(statement, parameters),
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) database is locked [SQL: u'\nCREATE TABLE settings (\n\tid INTEGER NOT NULL, \n\tmail_server VARCHAR, \n\tmail_port INTEGER, \n\tmail_use_ssl SMALLINT, \n\tmail_login VARCHAR, \n\tmail_password VARCHAR, \n\tmail_from VARCHAR, \n\tconfig_calibre_dir VARCHAR, \n\tconfig_port INTEGER, \n\tconfig_certfile VARCHAR, \n\tconfig_keyfile VARCHAR, \n\tconfig_calibre_web_title VARCHAR, \n\tconfig_books_per_page INTEGER, \n\tconfig_random_books INTEGER, \n\tconfig_read_column INTEGER, \n\tconfig_title_regex VARCHAR, \n\tconfig_log_level SMALLINT, \n\tconfig_uploading SMALLINT, \n\tconfig_anonbrowse SMALLINT, \n\tconfig_public_reg SMALLINT, \n\tconfig_default_role SMALLINT, \n\tconfig_default_show SMALLINT, \n\tconfig_columns_to_ignore VARCHAR, \n\tconfig_use_google_drive BOOLEAN, \n\tconfig_google_drive_folder VARCHAR, \n\tconfig_google_drive_watch_changes_response VARCHAR, \n\tconfig_remote_login BOOLEAN, \n\tconfig_use_goodreads BOOLEAN, \n\tconfig_goodreads_api_key VARCHAR, \n\tconfig_goodreads_api_secret VARCHAR, \n\tconfig_mature_content_tags VARCHAR, \n\tconfig_logfile VARCHAR, \n\tconfig_ebookconverter INTEGER, \n\tconfig_converterpath VARCHAR, \n\tconfig_calibre VARCHAR, \n\tconfig_rarfile_location VARCHAR, \n\tPRIMARY KEY (id), \n\tCHECK (config_use_google_drive IN (0, 1)), \n\tCHECK (config_remote_login IN (0, 1)), \n\tCHECK (config_use_goodreads IN (0, 1))\n)\n\n'] (Background on this error at: http://sqlalche.me/e/e3q8),

Dev Usage

Hey @Technosoft2000 - as you know I use your image in my docker environment. However, I'm starting to use it for development purposes. Having the image pull a configurable repo/branch is awesome!

Could you take it one step further? Could you add an environment variable that will skip the check for the latest commits? But continue to do everything else in the script? For instance the symbolic links to the databases, etc.

Here is my workflow for developing:

  1. I create two docker containers, one based off your image, and another based on the calibre-rdp image. I use docker-compose and fire up containers that share my books/database.
  2. Then, I go and delete the app directory (I mount this in the docker-compose) and recreate it with nothing in it.
  3. Then I go into my source control GUI (I use SourceTree) and I clone my target repo into the new app folder.
  4. Then I restart the containers. This will execute your code again, but a number of errors pop up regarding git commits, etc.

So far the script fails since the git data is not what it's expecting. However, the script doesn't make any changes to my modified code or the git info - thus, everything works and I'm able to move forward with checking in my modifications into my local git and push to GitHub, etc. I'm taking advantage of this "error" for my purposes. Although having the environment variable to bypass the check would give me some comfort that nothing is going to happen to my modified code.

Let me know what you think!

Thanks!

changing port to 80 results in error

Setup

Docker image is connected to a macvlan, so it has its own IP.
From log:

[INFO] Docker image version: 1.1.10
[INFO] Alpine Linux version: 3.6.2

Steps to reproduce problem

  1. http://xxx.xxx.xxx.xxx:8083 brings me to the config screen
  2. change port from 8083 to 80 and confirm

Result

  • UI is not reachable
  • docker logs calibre-web shows:
...
[INFO] Launching Calibre-Web ...
Error starting server: Permission denied: ('0.0.0.0', 80)
  • docker container keeps restarting

Expected behaviour

  • calibre web runs on port 80

If there is anything else I can provide to help fix this behaviour or to test the result - please let me know.
Cheers! -bastian

Failed to create path /books/Library/Unknown/Smart-Contract Value-Transfer Protocols (Permission denied).

I used docker-compose to start it.
version: '2'
services:
calibre-web:
image: Technosoft2000/docker-calibre-web
ports:
- '8083:8083'
volumes:
- /opt/opds/data:/books
- /opt/opds/web:/calibre-web
Then execute: sudo docker-compose up
When an admin user upload a pdf file, the error message was as follows:
Failed to create path /books/Library/Unknown/Smart-Contract Value-Transfer Protocols (Permission denied).
Note: selinux is not the reason why this happens, because the following commands were executed:
sudo chcon -Rt svirt_sandbox_file_t /opt/opds/data
sudo chcon -Rt svirt_sandbox_file_t /opt/opds/web

Dockerfile for a different linux distribution

The dockerfile here used alphine, which unfortunately don't have a calibre package in its package list.
It is very complex to build all dependencies of calibre and the binary from source code. It would be really helpful if a dockerfile for other linux distributions such as ubuntu / archlinux can be provided.
That way, I can simply install the compiled binary from the package manager.

Currently calibre releases only contains binary distribution for x86 cpu, not arm cpu. I am trying to deploy calibre-web on a device with arm cpu.

Thanks!

Sometimes my ebook-converter hangs at 67% and no Cover

Hey there,
I was trying the new version of your calibre-web image and most of alle seems to work like a charm. But unfortunately, it seems, that the converter sometimes get stuck at 67%. At least in my container.
I was trying to convert an EPUB File for sending to my kindle and it took 5 minutes where it shows 67% converted and after that, I've lost connection to my site and get an Internal Server Error.
The second try after restarting the container, it was again hanging at converting an EPUB File. Funny thing is, the first one that was okay, was and EPUB File, too.

My log says this:

[2018-09-18 11:37:02,438] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/calibre-web/app/cps/web.py", line 333, in decorated_view
    return login_required(func)(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/flask_login/utils.py", line 261, in decorated_view
    return func(*args, **kwargs)
  File "/calibre-web/app/cps/web.py", line 1254, in index
    entries, random, pagination = fill_indexpage(page, db.Books, True, [db.Books.timestamp.desc()])
  File "/calibre-web/app/cps/web.py", line 524, in fill_indexpage
    .filter(db_filter).filter(common_filters()).all()))
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2836, in all
    return list(self)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2988, in __iter__
    return self._execute_and_instances(context)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3009, in _execute_and_instances
    close_with_result=True)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3018, in _get_bind_args
    **kw
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3000, in _connection_from_session
    conn = self.session.connection(**kw)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1035, in connection
    execution_options=execution_options)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1040, in _connection_for_bind
    engine, execution_options)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 388, in _connection_for_bind
    self._assert_active()
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 264, in _assert_active
    "This session is in 'prepared' state; no further "
InvalidRequestError: This session is in 'prepared' state; no further SQL can be emitted within this transaction.
::ffff:172.17.0.3 - - [2018-09-18 11:37:02] "GET / HTTP/1.1" 500 412 0.033701
[2018-09-18 11:37:04,381] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/calibre-web/app/cps/web.py", line 333, in decorated_view
    return login_required(func)(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/flask_login/utils.py", line 261, in decorated_view
    return func(*args, **kwargs)
  File "/calibre-web/app/cps/web.py", line 1254, in index
    entries, random, pagination = fill_indexpage(page, db.Books, True, [db.Books.timestamp.desc()])
  File "/calibre-web/app/cps/web.py", line 524, in fill_indexpage
    .filter(db_filter).filter(common_filters()).all()))
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2836, in all
    return list(self)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2988, in __iter__
    return self._execute_and_instances(context)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3009, in _execute_and_instances
    close_with_result=True)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3018, in _get_bind_args
    **kw
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3000, in _connection_from_session
    conn = self.session.connection(**kw)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1035, in connection
    execution_options=execution_options)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1040, in _connection_for_bind
    engine, execution_options)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 388, in _connection_for_bind
    self._assert_active()
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 264, in _assert_active
    "This session is in 'prepared' state; no further "
InvalidRequestError: This session is in 'prepared' state; no further SQL can be emitted within this transaction.
::ffff:172.17.0.3 - - [2018-09-18 11:37:04] "GET / HTTP/1.1" 500 412 0.005800
[2018-09-18 11:37:28,342] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/calibre-web/app/cps/web.py", line 333, in decorated_view
    return login_required(func)(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/flask_login/utils.py", line 261, in decorated_view
    return func(*args, **kwargs)
  File "/calibre-web/app/cps/web.py", line 1254, in index
    entries, random, pagination = fill_indexpage(page, db.Books, True, [db.Books.timestamp.desc()])
  File "/calibre-web/app/cps/web.py", line 524, in fill_indexpage
    .filter(db_filter).filter(common_filters()).all()))
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2836, in all
    return list(self)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2988, in __iter__
    return self._execute_and_instances(context)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3009, in _execute_and_instances
    close_with_result=True)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3018, in _get_bind_args
    **kw
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3000, in _connection_from_session
    conn = self.session.connection(**kw)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1035, in connection
    execution_options=execution_options)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1040, in _connection_for_bind
    engine, execution_options)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 388, in _connection_for_bind
    self._assert_active()
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 264, in _assert_active
    "This session is in 'prepared' state; no further "
InvalidRequestError: This session is in 'prepared' state; no further SQL can be emitted within this transaction.
::ffff:172.17.0.3 - - [2018-09-18 11:37:28] "GET / HTTP/1.1" 500 412 0.006676
[2018-09-18 11:38:10,473] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/calibre-web/app/cps/web.py", line 333, in decorated_view
    return login_required(func)(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/flask_login/utils.py", line 261, in decorated_view
    return func(*args, **kwargs)
  File "/calibre-web/app/cps/web.py", line 1254, in index
    entries, random, pagination = fill_indexpage(page, db.Books, True, [db.Books.timestamp.desc()])
  File "/calibre-web/app/cps/web.py", line 524, in fill_indexpage
    .filter(db_filter).filter(common_filters()).all()))
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2836, in all
    return list(self)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2988, in __iter__
    return self._execute_and_instances(context)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3009, in _execute_and_instances
    close_with_result=True)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3018, in _get_bind_args
    **kw
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3000, in _connection_from_session
    conn = self.session.connection(**kw)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1035, in connection
    execution_options=execution_options)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1040, in _connection_for_bind
    engine, execution_options)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 388, in _connection_for_bind
    self._assert_active()
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 264, in _assert_active
    "This session is in 'prepared' state; no further "
InvalidRequestError: This session is in 'prepared' state; no further SQL can be emitted within this transaction.
::ffff:172.17.0.3 - - [2018-09-18 11:38:10] "GET / HTTP/1.1" 500 412 0.012888
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET / HTTP/1.1" 302 621 0.009269
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /login?next=%2F HTTP/1.1" 200 5040 0.010182
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /static/js/libs/jquery.min.js?q=4a35612 HTTP/1.1" 200 84683 0.007039
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /static/js/libs/bootstrap.min.js?q=5869c96 HTTP/1.1" 200 37348 0.011700
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /static/css/style.css?q=dff85ef HTTP/1.1" 200 5670 0.005054
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /static/js/libs/underscore-min.js?q=543feb1 HTTP/1.1" 200 16751 0.015152
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /static/js/libs/intention.min.js?q=02ea871 HTTP/1.1" 200 6136 0.005134
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /static/js/libs/jquery.form.js?q=08a2467 HTTP/1.1" 200 44195 0.017791
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /static/js/libs/plugins.js?q=eda87d3 HTTP/1.1" 200 52256 0.006277
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /static/js/libs/context.min.js?q=b9f1f37 HTTP/1.1" 200 1833 0.017722
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /static/css/libs/bootstrap.min.css?q=ec3bb52 HTTP/1.1" 200 121505 0.123190
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /static/js/main.js?q=b56303a HTTP/1.1" 200 6859 0.013354
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /static/img/loader.gif?q=34015ca HTTP/1.1" 200 7108 0.014346
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /static/css/fonts/GrandHotel-Regular.ttf HTTP/1.1" 200 44865 0.005207
::ffff:192.168.200.3 - - [2018-09-18 11:38:18] "GET /static/favicon.ico?q=14bd519 HTTP/1.1" 200 61966 0.004106
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /login?next=%2F HTTP/1.1" 200 4903 0.016541
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /static/css/libs/bootstrap.min.css?q=ec3bb52 HTTP/1.1" 200 121505 0.006313
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /static/css/style.css?q=dff85ef HTTP/1.1" 200 5670 0.013071
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /static/img/loader.gif?q=34015ca HTTP/1.1" 200 7108 0.006846
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /static/js/libs/jquery.min.js?q=4a35612 HTTP/1.1" 200 84683 0.006325
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /static/js/libs/bootstrap.min.js?q=5869c96 HTTP/1.1" 200 37348 0.015213
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /static/js/libs/underscore-min.js?q=543feb1 HTTP/1.1" 200 16751 0.006500
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /static/js/libs/intention.min.js?q=02ea871 HTTP/1.1" 200 6136 0.012062
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /static/js/libs/context.min.js?q=b9f1f37 HTTP/1.1" 200 1833 0.005526
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /static/js/libs/plugins.js?q=eda87d3 HTTP/1.1" 200 52256 0.017469
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /static/js/libs/jquery.form.js?q=08a2467 HTTP/1.1" 200 44195 0.013917
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /static/js/main.js?q=b56303a HTTP/1.1" 200 6859 0.015535
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /static/css/fonts/GrandHotel-Regular.ttf HTTP/1.1" 200 44865 0.003755
::ffff:172.17.0.3 - - [2018-09-18 11:38:35] "GET /static/favicon.ico?q=14bd519 HTTP/1.1" 200 61966 0.004965
::ffff:172.17.0.3 - - [2018-09-18 11:38:36] "POST /login?next=%2F HTTP/1.1" 302 1009 0.095847
[2018-09-18 11:38:36,783] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/calibre-web/app/cps/web.py", line 333, in decorated_view
    return login_required(func)(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/flask_login/utils.py", line 261, in decorated_view
    return func(*args, **kwargs)
  File "/calibre-web/app/cps/web.py", line 1254, in index
    entries, random, pagination = fill_indexpage(page, db.Books, True, [db.Books.timestamp.desc()])
  File "/calibre-web/app/cps/web.py", line 524, in fill_indexpage
    .filter(db_filter).filter(common_filters()).all()))
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2836, in all
    return list(self)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2988, in __iter__
    return self._execute_and_instances(context)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3009, in _execute_and_instances
    close_with_result=True)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3018, in _get_bind_args
    **kw
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3000, in _connection_from_session
    conn = self.session.connection(**kw)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1035, in connection
    execution_options=execution_options)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1040, in _connection_for_bind
    engine, execution_options)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 388, in _connection_for_bind
    self._assert_active()
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 264, in _assert_active
    "This session is in 'prepared' state; no further "
InvalidRequestError: This session is in 'prepared' state; no further SQL can be emitted within this transaction.
::ffff:172.17.0.3 - - [2018-09-18 11:38:36] "GET / HTTP/1.1" 500 412 0.005987
::ffff:172.17.0.3 - - [2018-09-18 11:38:36] "GET /favicon.ico HTTP/1.1" 404 342 0.005119
::ffff:172.17.0.3 - - [2018-09-18 11:38:36] "GET /favicon.ico HTTP/1.1" 404 342 0.020954
::ffff:192.168.200.3 - - [2018-09-18 11:38:47] "GET / HTTP/1.1" 302 621 0.007672
::ffff:192.168.200.3 - - [2018-09-18 11:38:47] "GET /login?next=%2F HTTP/1.1" 200 5040 0.011651
::ffff:192.168.200.3 - - [2018-09-18 11:38:47] "GET /static/js/libs/bootstrap.min.js?q=5869c96 HTTP/1.1" 200 37348 0.005781
::ffff:192.168.200.3 - - [2018-09-18 11:38:47] "GET /static/js/libs/jquery.min.js?q=4a35612 HTTP/1.1" 200 84683 0.005607
::ffff:192.168.200.3 - - [2018-09-18 11:38:47] "GET /static/js/libs/intention.min.js?q=02ea871 HTTP/1.1" 200 6136 0.005023
::ffff:192.168.200.3 - - [2018-09-18 11:38:47] "GET /static/js/libs/underscore-min.js?q=543feb1 HTTP/1.1" 200 16751 0.013953
::ffff:192.168.200.3 - - [2018-09-18 11:38:48] "GET /static/css/fonts/GrandHotel-Regular.ttf HTTP/1.1" 200 44865 0.006537
::ffff:192.168.200.3 - - [2018-09-18 11:39:00] "POST /login?next=%2F HTTP/1.1" 302 998 0.171177
[2018-09-18 11:39:00,608] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/calibre-web/app/cps/web.py", line 333, in decorated_view
    return login_required(func)(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/flask_login/utils.py", line 261, in decorated_view
    return func(*args, **kwargs)
  File "/calibre-web/app/cps/web.py", line 1254, in index
    entries, random, pagination = fill_indexpage(page, db.Books, True, [db.Books.timestamp.desc()])
  File "/calibre-web/app/cps/web.py", line 524, in fill_indexpage
    .filter(db_filter).filter(common_filters()).all()))
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2836, in all
    return list(self)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2988, in __iter__
    return self._execute_and_instances(context)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3009, in _execute_and_instances
    close_with_result=True)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3018, in _get_bind_args
    **kw
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3000, in _connection_from_session
    conn = self.session.connection(**kw)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1035, in connection
    execution_options=execution_options)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1040, in _connection_for_bind
    engine, execution_options)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 388, in _connection_for_bind
    self._assert_active()
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 264, in _assert_active
    "This session is in 'prepared' state; no further "
InvalidRequestError: This session is in 'prepared' state; no further SQL can be emitted within this transaction.

The first three conversions and sending worked without issues. But this was crashing my whole container.

The second thing is, that 3 of 4 books that where sent, don't have the cover sent with them, only one book, which was an EPUB File, that was converted. I've tested an MOBI file and an PDF File which was converted. Both of them didn't send an cover with them.
On my second try, I've send an MOBI file first. This came with an cover. But converting an EPUB file again crashed my container.

I hope, I have posted everything you need to help me. I just wanted to send my books with an cover to my kindle ^^

New python package dependency

Following package is not included in latest git source requirement.txt.

gevent (may need libevent)
google-api-python-client
pydrive

and suggest static app.db by
ln -s /books/app.db $APP_HOME/app/app.db

APP_REPO variable is ignored

Using this image and setting the APP_REPO environment variable to another repo does nothing.
I have set my fork of the calibre-web project where I plan to add some features but the app shows just updates of the main repo and not mine's.

Empty reply from server on container restart

I've found that when stopping and restarting the container, the server does not seem to start up properly and I get Empty reply from server when trying to curl the root URL.

I'm running the container with the following command:

docker run -d --name=calibre-web --restart=always \
  -v /media/books/calibre:/books \
  -v /etc/localtime:/etc/localtime:ro \
  -v /media/books/config:/calibre-web/config \
  -e PGID=1000 -e PUID=1000 -e USE_CONFIG_DIR=true \
  -p 8083:8083 \
  technosoft2000/calibre-web

This seems to be related to the app.db and gdrive.db files. If they already exist in /calibre-web/config, I get this error. If I move the files then start the container, it works properly but I need to configure everything again.

Any thoughts? Thanks in advance.

socket.error: [Errno 97] Address family not supported by protocol

Cant seem to get the docker started running on a QNAP TVS-473 in container station...

docker create --name=calibre-web --restart=always
-v /share/CACHEDEV1_DATA/Library/eBooks:/books
-e SET_CONTAINER_TIMEZONE=true
-e CONTAINER_TIMEZONE=America/New_York
-e PUID=1001 -e PGID=100
-p 1111:8083
technosoft2000/calibre-web

First experienced on the linuxserver.io version, then again with this repo.
linuxserver/docker-calibre-web#7

[INFO] Docker image version: 1.1.4
[INFO] Alpine Linux version: 3.6.0
[WARNING] A group with id 100 exists already [in use by calibre] and will be modified.
[WARNING] The group calibre will be renamed to calibre
[WARNING] A user with id 1001 exists already [in use by calibre] and will be modified.
[WARNING] The user calibre will renamed to calibre and assigned to group calibre
usermod: no changes
[INFO] Current active timezone is EDT
Sun Jul 23 20:24:47 EDT 2017
[INFO] Container timezone is changed to: America/New_York
[INFO] Change the ownership of /calibre-web (including subfolders) to calibre:calibre
[INFO] Current git version is:
git version 2.13.0
[INFO] Checkout the latest Calibre-Web version ...
[INFO] Autoupdate is active, try to pull the latest sources for Calibre-Web ...
[INFO] ... current git status is
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
a95e6aab6bdcc634f77167e2d315f0ca04f4f1d7
[INFO] ... pulling sources
Already up-to-date.
[INFO] ... git status after update is
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
a95e6aab6bdcc634f77167e2d315f0ca04f4f1d7
ln: failed to create symbolic link '/calibre-web/app/vendor/kindlegen': File exists
[INFO] Checking permissions of /books

Output is: 755 root calibre
Permissions: 755
Assigned group: root
Assigned owner: calibre
Using permissons for checks: 0755
The user is the owner and has write access at /books
[INFO] app.db and gdrive.db will be linked into /books
ln: failed to create symbolic link '/calibre-web/app/app.db': File exists
ln: failed to create symbolic link '/calibre-web/app/gdrive.db': File exists
[INFO] Launching Calibre-Web ...
Traceback (most recent call last):
File "/calibre-web/app/cps.py", line 29, in
web.start_gevent()
File "/calibre-web/app/cps/web.py", line 2999, in start_gevent
gevent_server.serve_forever()
File "/usr/lib/python2.7/site-packages/gevent/baseserver.py", line 360, in serve_forever
self.start()
File "/usr/lib/python2.7/site-packages/gevent/baseserver.py", line 304, in start
self.init_socket()
File "/usr/lib/python2.7/site-packages/gevent/pywsgi.py", line 1450, in init_socket
StreamServer.init_socket(self)
File "/usr/lib/python2.7/site-packages/gevent/server.py", line 127, in init_socket
self.socket = self.get_listener(self.address, self.backlog, self.family)
File "/usr/lib/python2.7/site-packages/gevent/server.py", line 138, in get_listener
return _tcp_listener(address, backlog=backlog, reuse_addr=cls.reuse_addr, family=family)
File "/usr/lib/python2.7/site-packages/gevent/server.py", line 225, in _tcp_listener
sock = socket(family=family)
File "/usr/lib/python2.7/site-packages/gevent/_socket2.py", line 107, in init
self._sock = _realsocket(family, type, proto)
socket.error: [Errno 97] Address family not supported by protocol

metadata.db

In Synology,failed to launch, no metadata.db file.

In advanced Settings:
File directory: /books/calibre
Load path: /volume1/books/calibre

[ERROR] The mapped volume for /books doesn't contain a Calibre database file 'metadata.db'
> Please fix the volume mapping before you retry to start the container again
> Stopping the container with errorlevel 1

deletion of a shelf fails

$ docker inspect -f '{{ index .Config.Labels "image.base.version" }}' calibre-web
3.6-2
$ docker inspect -f '{{ index .Config.Labels "image.version" }}' calibre-web
1.1.6

If I try to delete a shelf in the web interface the calibre-web.log shows:

{/usr/lib/python2.7/site-packages/flask/app.py:1560} ERROR - Exception on /shelf/delete/1 [GET]
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/lib/python2.7/site-packages/flask_login/utils.py", line 228, in decorated_view
    return func(*args, **kwargs)
  File "/calibre-web/app/cps/web.py", line 2201, in delete_shelf
    if deleted:
UnboundLocalError: local variable 'deleted' referenced before assignment

And I get a 500 internal error page in the browser...

I haven't check the calibre-web code yet...

Start-up: "AttributeError: 'NoneType' object has no attribute 'config_calibre_dir'"

After multiple re-installs and combing over my settings, I cannot figure out why my calibre-web docker will not start. Note, I can successfully run the linuxserver/calibre-web docker, but I want to run this one for the ebook-converter feature.

The docker never starts, it just keeps trying continually. This section of log just repeats endlessly:

        ,----,                                   ,
      ,/   .`|                                   ,
    ,`   .'  : .--.--.        ,----,        ,-.  ,
  ;    ;     //  /    '.    .'   .' \   ,--/ /|  ,
.'___,/    ,'|  :  /`. /  ,----,'    |,--. :/ |  ,
|    :     | ;  |  |--`   |    :  .  ;:  : ' /   ,
;    |.';  ; |  :  ;_     ;    |.'  / |  '  /    ,
`----'  |  |  \  \    `.  `----'/  ;  '  |  :    ,
    '   :  ;   `----.   \   /  ;  /   |  |   \   ,
    |   |  '   __ \  \  |  ;  /  /-,  '  : |. \  ,
    '   :  |  /  /`--'  / /  /  /.`|  |  | ' \ \ ,
    ;   |.'  '--'.     /./__;      :  '  : |--'  ,
    '---'      `--'---' |   :    .'   ;  |,'     ,
                        ;   | .'      '--'       ,
                        `---'                    ,
,
      PRESENTS ANOTHER AWESOME DOCKER IMAGE,
      ,
      ~~~~~         Calibre Web       ~~~~~,
                                           ,
[INFO] Docker image version: 1.2.3,
[INFO] Alpine Linux version: 3.8.0,
[WARNING] A group with id 1000 exists already [in use by calibre] and will be modified.,
[WARNING] The group calibre will be renamed to calibre,
[WARNING] A user with id 1000 exists already [in use by calibre].,
[WARNING] Create user calibre with temporary user id 999.,
[WARNING] Assign non-unique user id 1000 to created user calibre,
adduser: user 'calibre' in use,
usermod: no changes,
[INFO] Current active timezone is CET,
[INFO] Change the ownership of /calibre-web (including subfolders) to calibre:calibre,
[INFO] Current git version is:,
git version 2.18.0,
[INFO] Checkout the latest Calibre-Web version ...,
[INFO] Autoupdate is active, try to pull the latest sources for Calibre-Web ...,
[INFO] ... current git status is,
On branch master,
Your branch is up to date with 'origin/master'.,
,
nothing to commit, working tree clean,
dfa17956c908b814b035bf942494ba3450beeccf,
FO] ... pulling sources,
Already up to date.,
[INFO] ... git status after update is,
On branch master,
Your branch is up to date with 'origin/master'.,
,
nothing to commit, working tree clean,
dfa17956c908b814b035bf942494ba3450beeccf,
[INFO] Config directory option is DEACTIVATED,
> due this the Calibre books directory /books will be used to store the configuration,
[INFO] Checking permissions of the config directory: /books,
> Output is: 755 calibre 1000 calibre 1000,
> Permissions: 755,
> Assigned group: calibre,
> Assigned group ID: 1000,
> Assigned owner: calibre,
> Assigned owner ID: 1000,
> Using permissions for checks: 0755,
> The user calibre:1000 is the owner and has write access at /books,
[INFO] 'app.db' and 'gdrive.db' will be linked into /books,
> 'app.db' link /calibre-web/app/app.db exists already and won't be recreated,
> 'gdrive.db' link /calibre-web/app/gdrive.db exists already and won't be recreated,
[INFO] Checking permissions of the books directory: /books,
> Output is: 755 calibre 1000 calibre 1000,
> Permissions: 755,
> Assigned group: calibre,
> Assigned group ID: 1000,
> Assigned owner: calibre,
> Assigned owner ID: 1000,
> Using permissions for checks: 0755,
> The user calibre:1000 is the owner and has write access at /books,
[INFO] The mapped volume for /books contains a Calibre database file 'metadata.db' which will be used,
[INFO] The kindlegen directory exist already and will be used: /calibre-web/kindlegen,
[INFO] Kindlegen application exists already in directory: /calibre-web/kindlegen,
[INFO] kindlegen (Amazon Kindle Generator) will be linked into /calibre-web/app/vendor,
> kindlegen link /calibre-web/app/vendor/kindlegen exists already and won't be recreated,
[INFO] Launching Calibre-Web ...,
Traceback (most recent call last):,
  File "/calibre-web/app/cps.py", line 13, in <module>,
    from cps.server import Server,
  File "/calibre-web/app/cps/server.py", line 8, in <module>,
    import web,
  File "/calibre-web/app/cps/web.py", line 16, in <module>,
    import ub,
  File "/calibre-web/app/cps/ub.py", line 782, in <module>,
    config = Config(),
  File "/calibre-web/app/cps/ub.py", line 348, in __init__,
    self.loadSettings(),
  File "/calibre-web/app/cps/ub.py", line 353, in loadSettings,
    self.config_calibre_dir = data.config_calibre_dir,
AttributeError: 'NoneType' object has no attribute 'config_calibre_dir',

As a second issue, this line in the log concerns me:
[INFO] Config directory option is DEACTIVATED,
because I have USE_CONFIG_DIR set to true, and have set the following volumes:
- "/etc/localtime:/etc/localtime:ro"
- "/mnt/unionfs/Media/Books/Calibre_Library:/books"
- "/mnt:/mnt"
- "/opt/calibre-web/app:/calibre-web/app"
- "/opt/calibre-web/config:/calibre-web/config"
- "/opt/calibre-web/kindlegen:/calibre-web/kindlegen"
- "/opt/calibre:/opt/calibre"

I running this on a headless Ubuntu 18.04.

Originally posted by @BluebonnetSK in #12 (comment)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.