{"id":2767,"date":"2019-01-26T03:42:36","date_gmt":"2019-01-25T19:42:36","guid":{"rendered":"https:\/\/damogame.cn:15443\/wordpress\/?p=2767"},"modified":"2019-01-26T03:42:36","modified_gmt":"2019-01-25T19:42:36","slug":"calibre-web","status":"publish","type":"post","link":"https:\/\/i007.cc\/wordpress\/archives\/2767","title":{"rendered":"Calibre Web"},"content":{"rendered":"<h1 id=\"calibre-web\">Calibre Web<\/h1>\n<p><a href=\"https:\/\/hub.docker.com\/r\/technosoft2000\/calibre-web\/\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/docker\/stars\/technosoft2000\/calibre-web.svg\" alt=\"Docker Stars\" \/><\/a>\u00a0<a href=\"https:\/\/hub.docker.com\/r\/technosoft2000\/calibre-web\/\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/docker\/pulls\/technosoft2000\/calibre-web.svg\" alt=\"Docker Pulls\" \/><\/a>\u00a0<a title=\"Get your own image badge on microbadger.com\" href=\"https:\/\/microbadger.com\/images\/technosoft2000\/calibre-web\"><img decoding=\"async\" src=\"https:\/\/images.microbadger.com\/badges\/image\/technosoft2000\/calibre-web.svg\" alt=\"\" \/><\/a>\u00a0<a title=\"Get your own version badge on microbadger.com\" href=\"https:\/\/microbadger.com\/images\/technosoft2000\/calibre-web\"><img decoding=\"async\" src=\"https:\/\/images.microbadger.com\/badges\/version\/technosoft2000\/calibre-web.svg\" alt=\"\" \/><\/a><\/p>\n<h2 id=\"calibre-web---manage-your-calibre-e-book-collection\">Calibre Web &#8211; Manage your Calibre e-book collection<\/h2>\n<p><a href=\"https:\/\/github.com\/janeczku\/calibre-web\">Calibre Web<\/a>\u00a0is a web app providing a clean interface for browsing, reading and downloading eBooks using an\u00a0<strong>existing Calibre database<\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/janeczku\/docker-calibre-web\/master\/screenshot.png\" alt=\"screenshot\" \/><\/p>\n<p><strong>Calibre Web<\/strong>\u00a0comes with the following features:<\/p>\n<ul>\n<li>Bootstrap 3 HTML5 interface<\/li>\n<li>full graphical setup<\/li>\n<li>User management<\/li>\n<li>Admin interface<\/li>\n<li>User Interface in english, french, german, polish, simplified chinese, spanish<\/li>\n<li>OPDS feed for eBook reader apps<\/li>\n<li>Filter and search by titles, authors, tags, series and language<\/li>\n<li>Create custom book collection (shelves)<\/li>\n<li>Support for editing eBook metadata<\/li>\n<li>Support for converting eBooks from EPUB to Kindle format (mobi\/azw)<\/li>\n<li>Restrict eBook download to logged-in users<\/li>\n<li>Support for public user registration<\/li>\n<li>Send eBooks to Kindle devices with the click of a button<\/li>\n<li>Support for reading eBooks directly in the browser (.txt, .epub, .pdf)<\/li>\n<li>Upload new books in PDF, epub, fb2 format<\/li>\n<li>Support for Calibre custom columns<\/li>\n<li>Fine grained per-user permissions<\/li>\n<li>Self update capability<\/li>\n<\/ul>\n<p>If you want to know more you can head over to the\u00a0<strong>Calibre Web<\/strong>\u00a0project site:\u00a0<a href=\"https:\/\/github.com\/janeczku\/calibre-web\">https:\/\/github.com\/janeczku\/calibre-web<\/a>.<\/p>\n<p>And if you are interested in the original\u00a0<strong>Calibre<\/strong>\u00a0ebook management tool then look at the project site:\u00a0<a href=\"https:\/\/calibre-ebook.com\/\">https:\/\/calibre-ebook.com\/<\/a>.<\/p>\n<h2 id=\"updates\">Updates<\/h2>\n<p><strong>2018-09-09 &#8211; v1.2.3<\/strong><\/p>\n<ul>\n<li>added missing dependency\u00a0<strong>libxcomposite<\/strong>\u00a0which is needed for PDF related conversions via\u00a0<code>ebook-convert<\/code><\/li>\n<li>Updated Libraries\n<ul>\n<li>Calibre converter ebook-convert (calibre 3.30.0) =&gt; (calibre 3.31.0)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th><strong>Program library<\/strong><\/th>\n<th><strong>Installed Version<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Sqlite<\/td>\n<td>v3.24.0<\/td>\n<\/tr>\n<tr>\n<td>lxml<\/td>\n<td>v4.2.4.0<\/td>\n<\/tr>\n<tr>\n<td>Image Magick<\/td>\n<td>ImageMagick 6.9.10-10 Q16 x86_64 2018-08-15\u00a0<a href=\"https:\/\/www.imagemagick.org\/\">https:\/\/www.imagemagick.org<\/a><\/td>\n<\/tr>\n<tr>\n<td>kindlegen<\/td>\n<td>Amazon kindlegen(Linux) V2.9 build 1028-0897292<\/td>\n<\/tr>\n<tr>\n<td>Flask<\/td>\n<td>v1.0.2<\/td>\n<\/tr>\n<tr>\n<td>Babel<\/td>\n<td>v2.6.0<\/td>\n<\/tr>\n<tr>\n<td>PyPdf<\/td>\n<td>v1.26.0<\/td>\n<\/tr>\n<tr>\n<td>pySqlite<\/td>\n<td>v2.6.0<\/td>\n<\/tr>\n<tr>\n<td>Python<\/td>\n<td>2.7.15 (default, May 10 2018, 21:00:22) [GCC 6.4.0]<\/td>\n<\/tr>\n<tr>\n<td>Sqlalchemy<\/td>\n<td>v1.2.11<\/td>\n<\/tr>\n<tr>\n<td>Iso 639<\/td>\n<td>v0.4.5<\/td>\n<\/tr>\n<tr>\n<td>Calibre converter<\/td>\n<td>ebook-convert (calibre 3.31.0)<\/td>\n<\/tr>\n<tr>\n<td>Requests<\/td>\n<td>v2.19.1<\/td>\n<\/tr>\n<tr>\n<td>Gevent<\/td>\n<td>v1.3.6<\/td>\n<\/tr>\n<tr>\n<td>Flask Login<\/td>\n<td>v0.4.1<\/td>\n<\/tr>\n<tr>\n<td>Flask Principal<\/td>\n<td>v0.4.0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul>\n<li><code>ebook-convert<\/code>\u00a0supports the following target formats:\u00a0<strong>EPUB, AZW3, MOBI, DOCX, FB2, HTMLZ, LIT, LRF, PDB, PDF, PMLZ, RB, RTF, SNB, TCR, TXT, TXTZ, ZIP<\/strong>\u00a0see also at\u00a0<a href=\"https:\/\/manual.calibre-ebook.com\/generated\/en\/ebook-convert.html\">https:\/\/manual.calibre-ebook.com\/generated\/en\/ebook-convert.html<\/a><\/li>\n<\/ul>\n<p>For previous changes see at\u00a0<a href=\"https:\/\/hub.docker.com\/r\/technosoft2000\/calibre-web\/CHANGELOG.md\">full changelog<\/a>.<\/p>\n<h2 id=\"features\">Features<\/h2>\n<ul>\n<li>running Calibre Web under its own user (not root)<\/li>\n<li>changing of the UID and GID for the Calibre Web user<\/li>\n<li>no usage of NGINX inside the container, only the Calibre Web application is served as single application without any supervisor<\/li>\n<li>Google Drive integration is included<\/li>\n<li>creation of gdrive.db symlink at\u00a0<code>\/books\/gdrive.db<\/code>\u00a0for external access like backup possibility<\/li>\n<li>creation of app.db symlink at\u00a0<code>\/books\/app.db<\/code>\u00a0for external access like backup possibility<\/li>\n<li>support of\u00a0<strong>Amazon kindlegen<\/strong>\u00a0and\u00a0<strong>Calibre ebook-convert<\/strong>\u00a0tool to convert to MOBI<\/li>\n<\/ul>\n<h2 id=\"hints--tips\">Hints &amp; Tips<\/h2>\n<ul>\n<li>if you need SSL support similiar to the original Docker Container\u00a0<a href=\"https:\/\/hub.docker.com\/r\/janeczku\/calibre-web\/\">janeczku\/calibre-web<\/a>\u00a0then use an additional NGINX or Apache HTTP Server as Reverse-Proxy, e.g see\u00a0<a href=\"https:\/\/hub.docker.com\/r\/jwilder\/nginx-proxy\/\">jwilder\/nginx-proxy<\/a><\/li>\n<li>if you don&#8217;t specify\u00a0<strong>PGID<\/strong>\u00a0and\u00a0<strong>PUID<\/strong>\u00a0values the default\u00a0<strong>PGID<\/strong>\u00a0and\u00a0<strong>PUID<\/strong>\u00a0of the image are used, and if they are used then the mapped host volume\/directory which is alligned to\u00a0<code>\/books<\/code>\u00a0must have\u00a0<em>read-write-execute<\/em>permission for\u00a0<strong><em>others<\/em><\/strong>\u00a0, otherwise the configuration of Calibre-Web can&#8217;t be finished \ud83d\ude10<\/li>\n<li>for Synology Users &#8211; don&#8217;t map a top-level volume directory from the NAS as\u00a0<code>\/books<\/code>\u00a0volume, e.g.\u00a0<code>\/volume1\/books<\/code>\u00a0because it results into problems with directory permissons. Create instead a subdirectory\u00a0<strong>calibre<\/strong>\u00a0at\u00a0<code>\/volume1\/books<\/code>\u00a0and map then\u00a0<code>\/volume1\/books\/calibre<\/code>\u00a0as volume for\u00a0<code>\/books<\/code><\/li>\n<\/ul>\n<h2 id=\"configuration-at-first-launch\">Configuration at first launch<\/h2>\n<ol>\n<li>Point your browser to\u00a0<code>http:\/\/hostname:<\/code>\u00a0e.g.\u00a0<code>http:\/\/hostname:8083<\/code><\/li>\n<li>Set Location of your Calibre books folder to the path of the folder where you mounted your Calibre folder in the container, which is by default\u00a0<code>\\books<\/code>. So enter at the field\u00a0<strong>Location of Calibre database<\/strong>\u00a0the mapped volume\u00a0<code>\\books<\/code>.<\/li>\n<li>Hit\u00a0<strong>Submit<\/strong>\u00a0then\u00a0<strong>Login<\/strong>.<\/li>\n<\/ol>\n<p>Default admin login:<\/p>\n<ul>\n<li><strong>Username:<\/strong>\u00a0admin<\/li>\n<li><strong>Password:<\/strong>\u00a0admin123<\/li>\n<\/ul>\n<p>After successful login change the default password and set the email adress.<\/p>\n<p>To access the OPDS catalog feed, point your Ebook Reader to\u00a0<code>http:\/\/hostname:\/opds<\/code><\/p>\n<h2 id=\"configuration-of-a-converter\">Configuration of a converter<\/h2>\n<p>at\u00a0<strong>Admin<\/strong>\u00a0-&gt;\u00a0<strong>Basic Configuration<\/strong>\u00a0-&gt;\u00a0<strong>E-Book converter<\/strong>\u00a0you&#8217;ve to set the converter which you want to use:<\/p>\n<ul>\n<li>for the option\u00a0<strong>Use Kindlegen<\/strong>\u00a0set the\u00a0<strong>Path to convertertool<\/strong>\u00a0to\u00a0<code>\/calibre-web\/app\/vendor\/kindlegen<\/code>\u00a0and at\u00a0<strong>About<\/strong>\u00a0you will see then\u00a0<code>kindlegen Amazon kindlegen(Linux) V2.9 build 1028-0897292<\/code><\/li>\n<li>for the option\u00a0<strong>Use calibre&#8217;s ebook converter<\/strong>\u00a0set the\u00a0<strong>Path to convertertool<\/strong>\u00a0to\u00a0<code>\/opt\/calibre\/ebook-convert<\/code>\u00a0and at\u00a0<strong>About<\/strong>\u00a0you will see then\u00a0<code>Calibre converter ebook-convert (calibre 3.30.0)<\/code><\/li>\n<\/ul>\n<h2 id=\"known-issue\">Known issue<\/h2>\n<ol>\n<li>if you map the old\/existing app volume like\u00a0<code>-v \/volume1\/docker\/apps\/calibre-web\/app:\/calibre-web\/app<\/code>\u00a0then you&#8217;ll get the following issue at startup<\/li>\n<\/ol>\n<pre><code>[INFO] Checkout the latest Calibre-Web version ...\r\n[INFO] Autoupdate is active, try to pull the latest sources for Calibre-Web ...\r\n[INFO] ... current git status is\r\nfatal: not a git repository (or any parent up to mount point \/calibre-web)\r\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\r\n[INFO] ... pulling sources\r\nfatal: not a git repository (or any parent up to mount point \/calibre-web)\r\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\r\n[INFO] ... git status after update is\r\nfatal: not a git repository (or any parent up to mount point \/calibre-web)\r\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).<\/code><\/pre>\n<p>To solve the issue delete the old files at\u00a0<code>-v \/volume1\/docker\/apps\/calibre-web\/app:\/calibre-web\/app<\/code>\u00a0before you create and start the container.<\/p>\n<h2 id=\"usage\">Usage<\/h2>\n<p><strong>Create the container:<\/strong><\/p>\n<pre><code>docker create --name=calibre-web --restart=always \\\r\n-v :\/books \\\r\n[-v :\/calibre-web\/app] \\\r\n[-v :\/calibre-web\/kindlegen`]\r\n[-v :\/calibre-web\/config \\]\r\n[-e USE_CONFIG_DIR=true \\]\r\n[-e APP_REPO=https:\/\/github.com\/janeczku\/calibre-web.git \\]\r\n[-e APP_BRANCH=master \\]\r\n[-e SET_CONTAINER_TIMEZONE=true \\]\r\n[-e CONTAINER_TIMEZONE= \\]\r\n[-e PGID= -e PUID= \\]\r\n-p :8083 \\\r\ntechnosoft2000\/calibre-web<\/code><\/pre>\n<p><strong>Example:<\/strong><\/p>\n<pre><code>docker create --name=calibre-web --restart=always \\\r\n-v \/volume1\/books\/calibre:\/books \\\r\n-v \/etc\/localtime:\/etc\/localtime:ro \\\r\n-e PGID=65539 -e PUID=1029 \\\r\n-p 8083:8083 \\\r\ntechnosoft2000\/calibre-web<\/code><\/pre>\n<p>or<\/p>\n<pre><code>docker create --name=calibre-web --restart=always \\\r\n-v \/volume1\/books\/calibre:\/books \\\r\n-v \/volume1\/docker\/apps\/calibre-web\/config:\/calibre-web\/config \\\r\n-e USE_CONFIG_DIR=true \\\r\n-e SET_CONTAINER_TIMEZONE=true \\\r\n-e CONTAINER_TIMEZONE=Europe\/Vienna \\\r\n-e PGID=65539 -e PUID=1029 \\\r\n-p 8083:8083 \\\r\ntechnosoft2000\/calibre-web<\/code><\/pre>\n<p><strong>Start the container:<\/strong><\/p>\n<pre><code>docker start calibre-web<\/code><\/pre>\n<h2 id=\"parameters\">Parameters<\/h2>\n<h3 id=\"introduction\">Introduction<\/h3>\n<p>The parameters are split into two parts which are separated via colon. The left side describes the host and the right side the container. For example a port definition looks like this\u00a0<code>-p external:internal<\/code>\u00a0and defines the port mapping from internal (the container) to external (the host). So\u00a0<code>-p 8080:80<\/code>\u00a0would expose port\u00a0<strong>80<\/strong>\u00a0from inside the container to be accessible from the host&#8217;s IP on port\u00a0<strong>8080<\/strong>. Accessing http:\/\/&#8217;host&#8217;:8080 (e.g.\u00a0<a href=\"http:\/\/192.168.0.10:8080\/\">http:\/\/192.168.0.10:8080<\/a>) would then show you what&#8217;s running\u00a0<strong>INSIDE<\/strong>\u00a0the container on port\u00a0<strong>80<\/strong>.<\/p>\n<h3 id=\"details\">Details<\/h3>\n<ul>\n<li><code>-p 8083<\/code>\u00a0&#8211; http port for the web user interface<\/li>\n<li><code>-v \/books<\/code>\u00a0&#8211; local path which contains the Calibre books and the necessary\u00a0<code>metadata.db<\/code>\u00a0which holds all collected meta-information of the books<\/li>\n<li><code>-v \/calibre-web\/app<\/code>\u00a0&#8211; local path for Calibre Web application files; set this volume if you want to use Google Drive<\/li>\n<li><code>-v \/calibre-web\/kindlegen<\/code>\u00a0&#8211; local path for Calibre Web kindlegen application<\/li>\n<li><code>-v \/etc\/localhost<\/code>\u00a0&#8211; for timesync &#8211;\u00a0<strong>optional<\/strong><\/li>\n<li><code>-v \/calibre-web\/config<\/code>\u00a0&#8211; local path for Calibre Web config files, like\u00a0<code>app.db<\/code>\u00a0and\u00a0<code>gdrive.db<\/code>;\u00a0<strong>IMPORTANT<\/strong>: the environment variable\u00a0<code>USE_CONFIG_DIR<\/code>\u00a0must be set to\u00a0<code>true<\/code>\u00a0&#8211;\u00a0<strong>optional<\/strong><\/li>\n<li><code>-e USE_CONFIG_DIR=true<\/code>\u00a0&#8211; activate the usage of a dedicated configuration directory, otherwise the\u00a0<code>books<\/code>directory will be used (default) &#8211;\u00a0<strong>optional<\/strong><\/li>\n<li><code>-e APP_REPO<\/code>\u00a0&#8211; set it to the Calibre Web GitHub repository; by default it uses\u00a0<a href=\"https:\/\/github.com\/janeczku\/calibre-web.git\">https:\/\/github.com\/janeczku\/calibre-web.git<\/a>\u00a0&#8211;\u00a0<strong>optional<\/strong><\/li>\n<li><code>-e APP_BRANCH<\/code>\u00a0&#8211; set which Calibre Web GitHub repository branch you want to use,\u00a0<strong>master<\/strong>\u00a0(default branch) &#8211;\u00a0<strong>optional<\/strong><\/li>\n<li><code>-e SET_CONTAINER_TIMEZONE<\/code>\u00a0&#8211; set it to\u00a0<code>true<\/code>\u00a0if the specified\u00a0<code>CONTAINER_TIMEZONE<\/code>\u00a0should be used &#8211;\u00a0<strong>optional<\/strong><\/li>\n<li><code>-e CONTAINER_TIMEZONE<\/code>\u00a0&#8211; container timezone as found under the directory\u00a0<code>\/usr\/share\/zoneinfo\/<\/code>\u00a0&#8211;\u00a0<strong>optional<\/strong><\/li>\n<li><code>-e PGID<\/code>\u00a0for GroupID &#8211; see below for explanation &#8211;\u00a0<strong>optional<\/strong><\/li>\n<li><code>-e PUID<\/code>\u00a0for UserID &#8211; see below for explanation &#8211;\u00a0<strong>optional<\/strong><\/li>\n<\/ul>\n<h3 id=\"container-timezone\">Container Timezone<\/h3>\n<p>In the case of the Synology NAS it is not possible to map\u00a0<code>\/etc\/localtime<\/code>\u00a0for timesync, and for this and similar case set\u00a0<code>SET_CONTAINER_TIMEZONE<\/code>\u00a0to\u00a0<code>true<\/code>\u00a0and specify with\u00a0<code>CONTAINER_TIMEZONE<\/code>\u00a0which timezone should be used. The possible container timezones can be found under the directory\u00a0<code>\/usr\/share\/zoneinfo\/<\/code>.<\/p>\n<p>Examples:<\/p>\n<ul>\n<li><code>UTC<\/code>\u00a0&#8211;\u00a0<strong>this is the default value if no value is set<\/strong><\/li>\n<li><code>Europe\/Berlin<\/code><\/li>\n<li><code>Europe\/Vienna<\/code><\/li>\n<li><code>America\/New_York<\/code><\/li>\n<li>&#8230;<\/li>\n<\/ul>\n<p>Once the container is running you can get all possible timezones as tree via the command\u00a0<code>docker exec -it tree \/usr\/share\/zoneinfo<\/code><\/p>\n<p>See also at\u00a0<a href=\"https:\/\/hub.docker.com\/r\/technosoft2000\/calibre-web\/TIMEZONES.md\">possible timezone values<\/a>.<\/p>\n<p><strong>Don&#8217;t use the value<\/strong>\u00a0<code>localtime<\/code>\u00a0because it results into:\u00a0<code>failed to access '\/etc\/localtime': Too many levels of symbolic links<\/code><\/p>\n<h3 id=\"container-locale\">Container Locale<\/h3>\n<p>By default the container comes with the following locale environment setting:<\/p>\n<pre><code>    # - LANG, LANGUAGE, LC_ALL: language dependent settings (Default: en_US.UTF-8)\r\n    LANG=\"en_US.UTF-8\"\r\n    LANGUAGE=\"en_US.UTF-8\"\r\n    LC_ALL=\"en_US.UTF-8\"<\/code><\/pre>\n<p>To set a different locale set the corressponding environment settings while container creation via\u00a0<code>-e LANG<\/code>,\u00a0<code>-e LANGUAGE<\/code>,\u00a0<code>-e LC_ALL<\/code>. Look here at\u00a0<a href=\"https:\/\/hub.docker.com\/r\/technosoft2000\/calibre-web\/LOCALE.md\">availaible locale<\/a>\u00a0which values are supported &#8211; e.g. for\u00a0<strong>de_DE<\/strong>\u00a0you&#8217;ve to use then\u00a0<strong>de_DE.UTF-8<\/strong>\u00a0as value, here an example\u00a0<code>-e LANG=de_DE.UTF-8<\/code>.<\/p>\n<p>To check what locale is active inside the container:<\/p>\n<pre><code>root@NAS:~# docker exec -it calibre-web bash\r\n\r\nbash-4.4# echo $LANG $LANGUAGE $LC_ALL\r\nen_US.UTF-8 en_US.UTF-8 C<\/code><\/pre>\n<p>When you execute the\u00a0<code>ebook-convert<\/code>\u00a0tool inside the container you&#8217;ll get a translated output according to the active locale:<\/p>\n<pre><code>bash-4.4# ebook-convert \r\nUsage: ebook-convert input_file output_file [options]\r\n\r\nConvert an e-book from one format to another.\r\n\r\ninput_file is the input and output_file is the output. Both must be specified as the first two arguments to the command.\r\n\r\nThe output e-book format is guessed from the file extension of output_file. output_file can also be of the special format .EXT where EXT is the output file extension. In this cas\r\ne, the name of the output file is derived from the name of the input file. Note that the filenames must not start with a hyphen. Finally, if output_file has no extension, then it\r\n is treated as a directory and an \"open e-book\" (OEB) consisting of HTML files is written to that directory. These files are the files that would normally have been passed to the\r\n output plugin.\r\n\r\nAfter specifying the input and output file you can customize the conversion by specifying various options. The available options depend on the input and output file types. To get\r\n help on them specify the input and output file and then use the -h option.\r\n\r\nFor full documentation of the conversion system see\r\nhttps:\/\/manual.calibre-ebook.com\/conversion.html\r\n\r\nWhenever you pass arguments to ebook-convert that have spaces in them, enclose the arguments in quotation marks. For example: \"\/some path\/with spaces\"\r\n\r\nOptions:\r\n  --version       show program's version number and exit\r\n\r\n  -h, --help      show this help message and exit\r\n\r\n  --list-recipes  List builtin recipe names. You can create an e-book from a\r\n                  builtin recipe like this: ebook-convert \"Recipe Name.recipe\"\r\n                  output.epub\r\n\r\n\r\nCreated by Kovid Goyal \r\nbash-4.4#<\/code><\/pre>\n<p>After change to e.g.\u00a0<strong>de_DE.UTF-8<\/strong>\u00a0you&#8217;ll see the following translated output:<\/p>\n<pre><code>bash-4.4# export LANG=de_DE.UTF-8; LANGUAGE=de_DE.UTF-8; LC_ALL=de_DE.UTF-8\r\nbash-4.4# echo $LANG $LANGUAGE $LC_ALL\r\nde_DE.UTF-8 de_DE.UTF-8 de_DE.UTF-8\r\n\r\nbash-4.4# ebook-convert \r\nVerwendung: ebook-convert Quelldatei Ausgabedatei [Optionen]\r\n\r\nEin eBook von einem Format in ein anderes konvertieren.\r\n\r\nQuelldatei ist die Eingabe, Ausgabedatei die Ausgabe. Beide m\u00fcssen dem Befehl als die ersten beiden Argumente \u00fcbergeben werden.\r\n\r\nDas Zielformat wird durch die Dateiendung von Ausgabedatei bestimmt. Ausgabedatei kann auch das Spezialformat .EXT besitzen, wobei EXT die gew\u00fcnschte Dateinamenerweiterung ist. I\r\nn diesem Fall wird der Name der Ausgabedatei aus dem Namen der Quelldatei abgeleitet. Bitte beachten: Die Dateinamen d\u00fcrfen nicht mit einem Bindestrich beginnen. Zu guter Letzt, \r\nfalls Ausgabedatei keine Dateinamenerweiterung besitzt, wird der Name als Verzeichnis behandelt, und ein \"open ebook\" (OEB), das aus HTML-Dateien besteht, wird in dieses Verzeich\r\nnis geschrieben. Diese Dateien sind jene, die normalerweise an die Ausgabe-Erweiterung \u00fcbergeben w\u00fcrden.\r\n\r\nNach der Angabe von Quell- und Ausgabedatei kann die Konvertierung noch durch die Angabe verschiedener Optionen angepasst werden.  Welche Optionen hier zur Verf\u00fcgung stehen, h\u00e4ng\r\nt von den Dateitypen der Quell- und Ausgabedateien ab.  Um dazu Hilfe zu erhalten, geben Sie die Quell- und Ausgabedatei gefolgt von der Option -h an.\r\n\r\nDie komplette Dokumentation des Konvertierungssystems findet sich unter\r\nhttps:\/\/manual.calibre-ebook.com\/de\/conversion.html\r\n\r\nWann immer Sie Argumente mit Leerzeichen an ebook-convert weitergeben, m\u00fcssen diese Argumente in Anf\u00fchrungsstriche gesetzt werden. Zum Beispiel: \"\/some path\/with spaces\"\r\n\r\nOptionen:\r\n  --version       Programmversion anzeigen und beenden\r\n\r\n  -h, --help      Diesen Hilfetext anzeigen und beenden.\r\n\r\n  --list-recipes  Anzeigen der Namen der integrierten Nachrichtenquellen. Sie\r\n                  k\u00f6nnen aus einer integrierten Quelle ein eBook wie folgt\r\n                  erstellen: ebook-convert \"Recipe Name.recipe\" output.epub\r\n\r\n\r\nErstellt von Kovid Goyal \r\nbash-4.4#<\/code><\/pre>\n<p>To check which locale are supported execute the following command:<\/p>\n<pre><code>bash-4.4# \/usr\/glibc-compat\/bin\/locale -a\r\n\r\nC\r\nPOSIX\r\naa_DJ.utf8\r\naa_ER.utf8\r\naa_ET.utf8\r\naf_ZA.utf8\r\nam_ET.utf8\r\nan_ES.utf8\r\nar_AE.utf8\r\nar_BH.utf8\r\nar_DZ.utf8\r\nar_EG.utf8\r\n...\r\n\r\nbash-4.4#<\/code><\/pre>\n<h2 id=\"user--group-identifiers\">User \/ Group Identifiers<\/h2>\n<p>Sometimes when using data volumes (-v flags) permissions issues can arise between the host OS and the container. We avoid this issue by allowing you to specify the user PUID and group PGID. Ensure the data volume directory on the host is owned by the same user you specify and it will &#8220;just work&#8221; \u2122.<\/p>\n<p>In this instance PUID=1001 and PGID=1001. To find yours use id user as below:<\/p>\n<pre><code>  $ id \r\n    uid=1001(dockeruser) gid=1001(dockergroup) groups=1001(dockergroup)<\/code><\/pre>\n<h2 id=\"container-directory-structure\">Container Directory Structure<\/h2>\n<pre><code> \/\r\n   |- books\r\n   |- calibre-web\r\n       |- app\r\n       |    |- \"all Calibre Web Application files\"\r\n       |    |- app.db -&amp;gt; \/calibre-web\/config\/app.db\r\n       |    |- gdrive.db -&amp;gt; \/calibre-web\/config\/gdrive.db\r\n       |    |- calibre-web.log\r\n       |    |- cps \r\n       |    |    |- *.py\r\n       |    |    |- *.pyc\r\n       |    |\r\n       |    |- vendor\r\n       |         |- kindlegen -&amp;gt; \/calibre-web\/kindlegen\/kindlegen\r\n       |\r\n       |- config\r\n       |    |- app.db\r\n       |    |- gdrive.db\r\n       |\r\n       |- kindlegen\r\n            |- EULA*.txt\r\n            |- KindleGen Legal Notices*.txt\r\n            |- docs\r\n            |- kindlegen\r\n            |- manual.html<\/code><\/pre>\n<h2 id=\"additional\">Additional<\/h2>\n<p>Shell access whilst the container is running:\u00a0<code>docker exec -it calibre-web \/bin\/bash<\/code><\/p>\n<p>Upgrade to the latest version of Calibre Web:\u00a0<code>docker restart calibre-web<\/code><\/p>\n<p>To monitor the logs of the container in realtime:\u00a0<code>docker logs -f calibre-web<\/code><\/p>\n<p>To monitor the logs of Calibre Web:\u00a0<code>docker exec -it calibre-web tail -f \/calibre-web\/app\/calibre-web.log<\/code><\/p>\n<p>Show used base image version number of Calibre Web:\u00a0<code>docker inspect -f '{{ index .Config.Labels \"image.base.version\" }}' calibre-web<\/code><\/p>\n<p>Show used image version number of Calibre Web:\u00a0<code>docker inspect -f '{{ index .Config.Labels \"image.version\" }}' calibre-web<\/code><\/p>\n<hr \/>\n<h2 id=\"for-synology-nas-users\">For Synology NAS users<\/h2>\n<p>Login into the DSM Web Management<\/p>\n<ul>\n<li>Open the Control Panel<\/li>\n<li>Control\u00a0<em>Panel<\/em>\u00a0&gt;\u00a0<em>Privilege<\/em>\u00a0&gt;\u00a0<em>Group<\/em>\u00a0and create a new one with the name &#8216;docker&#8217;<\/li>\n<li>add the permissions for the directories &#8216;downloads&#8217;, &#8216;video&#8217; and so on<\/li>\n<li>disallow the permissons to use the applications<\/li>\n<li>Control\u00a0<em>Panel<\/em>\u00a0&gt;\u00a0<em>Privilege<\/em>\u00a0&gt;\u00a0<em>User<\/em>\u00a0and create a new on with name &#8216;docker&#8217; and assign this user to the group &#8216;docker&#8217;<\/li>\n<\/ul>\n<p>Connect with SSH to your NAS<\/p>\n<ul>\n<li>after sucessful connection change to the root account via\n<pre><code>sudo -i<\/code><\/pre>\n<p>or<\/p>\n<pre><code>sudo su -<\/code><\/pre>\n<p>for the password use the same one which was used for the SSH authentication.<\/li>\n<li>create a &#8216;docker&#8217; directory on your volume (if such doesn&#8217;t exist)\n<pre><code>mkdir -p \/volume1\/docker\/\r\nchown root:root \/volume1\/docker\/<\/code><\/pre>\n<\/li>\n<li>get your Docker User ID and Group ID of your previously created user and group\n<pre><code>id docker\r\nuid=1029(docker) gid=100(users) groups=100(users),65539(docker)<\/code><\/pre>\n<\/li>\n<li>get the Docker image\n<pre><code>docker pull technosoft2000\/calibre-web<\/code><\/pre>\n<\/li>\n<li>create a Docker container (take care regarding the user ID and group ID, change timezone and port as needed) &#8220;` docker create &#8211;name=calibre-web &#8211;restart=always \\<\/li>\n<li>v \/volume1\/books\/calibre:\/books \\<\/li>\n<li>e SET_CONTAINER_TIMEZONE=true \\<\/li>\n<li>e CONTAINER_TIMEZONE=Europe\/Vienna \\<\/li>\n<li>e PGID=65539 -e PUID=1029 \\<\/li>\n<li>p 8083:8083<br \/>\ntechnosoft2000\/calibre-web<\/p>\n<pre><code><\/code><\/pre>\n<\/li>\n<li>check if the Docker container was created successfully\n<pre><code>docker ps -a\r\nCONTAINER ID        IMAGE                           COMMAND                CREATED             STATUS              PORTS               NAMES\r\n40cc1bfaf7be        technosoft2000\/calibre-web      \"\/bin\/bash -c \/init\/s\" 8 seconds ago       Created <\/code><\/pre>\n<\/li>\n<li>start the Docker container\n<pre><code>docker start calibre-web<\/code><\/pre>\n<\/li>\n<li>analyze the log (stop it with CTRL+C)\n<pre><code>docker logs -f calibre-web\r\n      ,----,                                   \r\n    ,\/   .`|                                   \r\n  ,`   .'  : .--.--.        ,----,        ,-.  \r\n;    ;     \/\/  \/    '.    .'   .' \\   ,--\/ \/|  \r\n.'___,\/    ,'|  :  \/`. \/  ,----,'    |,--. :\/ |  \r\n|    :     | ;  |  |--`   |    :  .  ;:  : ' \/   \r\n;    |.';  ; |  :  ;_     ;    |.'  \/ |  '  \/    \r\n`----'  |  |  \\  \\    `.  `----'\/  ;  '  |  :    \r\n  '   :  ;   `----.   \\   \/  ;  \/   |  |   \\   \r\n  |   |  '   __ \\  \\  |  ;  \/  \/-,  '  : |. \\  \r\n  '   :  |  \/  \/`--'  \/ \/  \/  \/.`|  |  | ' \\ \\ \r\n  ;   |.'  '--'.     \/.\/__;      :  '  : |--'  \r\n  '---'      `--'---' |   :    .'   ;  |,'     \r\n                      ;   | .'      '--'       \r\n                      `---'                    \r\n    PRESENTS ANOTHER AWESOME DOCKER IMAGE\r\n    ~~~~~         Calibre Web       ~~~~~                          \r\n[INFO] Docker image version: 1.2.0\r\n[INFO] Alpine Linux version: 3.8.0\r\n[WARNING] A group with id 100 exists already [in use by users] and will be modified.\r\n[WARNING] The group users will be renamed to calibre\r\n[INFO] Create user calibre with id 1029\r\n[INFO] Current active timezone is UTC\r\nWed Aug 15 21:37:35 CEST 2018\r\n[INFO] Container timezone is changed to: Europe\/Vienna\r\n[INFO] Change the ownership of \/calibre-web (including subfolders) to calibre:calibre\r\n[INFO] Current git version is:\r\ngit version 2.18.0\r\n[INFO] Checkout the latest Calibre-Web version ...\r\n[INFO] ... git clone -b master --single-branch https:\/\/github.com\/janeczku\/calibre-web.git \/calibre-web\/app -v\r\nCloning into '\/calibre-web\/app'...\r\nPOST git-upload-pack (189 bytes)\r\n[INFO] Autoupdate is active, try to pull the latest sources for Calibre-Web ...\r\n[INFO] ... current git status is\r\nOn branch master\r\nYour branch is up to date with 'origin\/master'.\r\nnothing to commit, working tree clean\r\nf8132f4d024b4801185572ca8ebc64b04b075b34\r\n[INFO] ... pulling sources\r\nAlready up to date.\r\n[INFO] ... git status after update is\r\nOn branch master\r\nYour branch is up to date with 'origin\/master'.\r\nf8132f4d024b4801185572ca8ebc64b04b075b34\r\n[INFO] Config directory option is ACTIVATED\r\n&amp;gt; due this the directory \/calibre-web\/config will be used to store the configuration\r\n[INFO] Change the ownership of \/calibre-web\/config (including subfolders) to calibre:calibre\r\n[INFO] Checking permissions of the config directory: \/calibre-web\/config\r\n&amp;gt; Output is: 755 calibre 100 calibre 1029\r\n&amp;gt; Permissions: 755\r\n&amp;gt; Assigned group: calibre\r\n&amp;gt; Assigned group ID: 100\r\n&amp;gt; Assigned owner: calibre\r\n&amp;gt; Assigned owner ID: 1029\r\n&amp;gt; Using permissions for checks: 0755\r\n&amp;gt; The user calibre:1029 is the owner and has write access at \/calibre-web\/config\r\n[INFO] 'app.db' and 'gdrive.db' will be linked into \/calibre-web\/config\r\n&amp;gt; create 'app.db' link \/calibre-web\/app\/app.db assigned to source \/calibre-web\/config\/app.db\r\n&amp;gt; change the ownership of \/calibre-web\/app\/app.db to calibre:calibre\r\n&amp;gt; create 'gdrive.db' link \/calibre-web\/app\/gdrive.db assigned to source \/calibre-web\/config\/gdrive.db\r\n&amp;gt; change the ownership of \/calibre-web\/app\/gdrive.db to calibre:calibre\r\n[INFO] Checking permissions of the books directory: \/books\r\n&amp;gt; Output is: 772 calibre 100 UNKNOWN 1026\r\n&amp;gt; Permissions: 772\r\n&amp;gt; Assigned group: calibre\r\n&amp;gt; Assigned group ID: 100\r\n&amp;gt; Assigned owner: UNKNOWN\r\n&amp;gt; Assigned owner ID: 1026\r\n&amp;gt; Using permissions for checks: 0772\r\n&amp;gt; Everyone has write access at \/books\r\n[INFO] The mapped volume for \/books contains a Calibre database file 'metadata.db' which will be used\r\n[INFO] The kindlegen directory exist already and will be used: \/calibre-web\/kindlegen\r\n[INFO] Kindlegen application exists already in directory: \/calibre-web\/kindlegen\r\n[INFO] kindlegen (Amazon Kindle Generator) will be linked into \/calibre-web\/app\/vendor\r\n[INFO] Creating the vendor directory: \/calibre-web\/app\/vendor\r\n[INFO] Change the ownership of \/calibre-web\/app\/vendor (including subfolders) to calibre:calibre\r\n&amp;gt; create kindlegen link \/calibre-web\/app\/vendor\/kindlegen assigned to source \/calibre-web\/kindlegen\/kindlegen\r\n&amp;gt; change the ownership of \/calibre-web\/app\/vendor\/kindlegen to calibre:calibre\r\n[INFO] Creating directory for temporary directories and files: \/tmp\r\n[INFO] Change the ownership of \/tmp (including subfolders) to calibre:calibre\r\n[INFO] Launching Calibre-Web ...\r\n[2018-08-15 21:38:01,618] INFO in web: Starting Calibre Web...\r\n[2018-08-15 21:38:02,083] INFO in server: Starting Gevent server<\/code><\/pre>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Calibre Web \u00a0\u00a0\u00a0 Cali<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[],"tags":[119],"class_list":["post-2767","post","type-post","status-publish","format-standard","hentry","tag-03-"],"_links":{"self":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/2767","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/comments?post=2767"}],"version-history":[{"count":0,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/2767\/revisions"}],"wp:attachment":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/media?parent=2767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/categories?post=2767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/tags?post=2767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}