Browse Source

calibre:8.0.1

John 7 months ago
parent
commit
7ac0a44a95

+ 6 - 6
.github/workflows/calibre-web.yml

@@ -13,7 +13,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Checkout
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
 
       - name: 'Set env'
         run: |
@@ -22,31 +22,31 @@ jobs:
 
       - name: Set up QEMU
         id: qemu
-        uses: docker/setup-qemu-action@v2
+        uses: docker/setup-qemu-action@v3
         with:
           platforms: all
 
       - name: Set up Docker Buildx
         id: buildx
-        uses: docker/setup-buildx-action@v2
+        uses: docker/setup-buildx-action@v3
         with:
           version: latest
 
       - name: Login to DockerHub
-        uses: docker/login-action@v2
+        uses: docker/login-action@v3
         with:
           username: ${{ secrets.DOCKER_USERNAME }}
           password: ${{ secrets.DOCKER_PASSWORD }}
 
       - name: Login to GHCR
-        uses: docker/login-action@v2
+        uses: docker/login-action@v3
         with:
           registry: ghcr.io
           username: ${{ github.actor }}
           password: ${{ secrets.GITHUB_TOKEN }}
 
       - name: Build and push
-        uses: docker/build-push-action@v3
+        uses: docker/build-push-action@v6
         with:
           context: ./calibre-web
           file: ./calibre-web/Dockerfile

+ 21 - 21
calibre-web/Dockerfile

@@ -2,9 +2,9 @@ FROM alpine:3.20
 
 ARG S6_VER=3.2.0.2
 ARG CALIBRE_WEB_VER=0.6.24
-ARG CALIBRE_VER=7.9.0
+ARG CALIBRE_VER=8.0.1
 ARG KEPUBIFY_VER=4.0.4
-ARG UNRAR_VERSION=6.2.12
+ARG UNRAR_VERSION=7.1.6
 
 ENV UID=1000
 ENV GID=1000
@@ -24,6 +24,10 @@ ENV TZ=Asia/Shanghai
 ENV CALIBREDB_OTHER_OPTION=
 ENV DISABLE_GOOGLE_SEARCH=false
 ENV DISABLE_SCHOLAR_SEARCH=false
+ENV DISABLE_AMAZON_SEARCH=false
+ENV DISABLE_COMICVINE_SEARCH=false
+ENV DISABLE_DOUBAN_SEARCH=false
+ENV DISABLE_LUBIMYCZYTAC_SEARCH=false
 ENV ENABLE_CHOWN_LIBRARY=true
 ENV LANG=C.UTF-8
 ENV HOME=/home/calibre
@@ -34,18 +38,15 @@ ENV CALIBRE_LOCALHOST=true
 ENV CALIBRE_RECONNECT=true
 ENV ENABLE_FIX_COVER_COLOR=false
 ENV S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0
+ENV PATH=/opt/venv/bin:$PATH
 
 COPY --chmod=755 root /
 
-RUN apk add --no-cache bash ca-certificates shadow tzdata python3 py3-pip py3-wheel expect imagemagick libintl libstdc++ libxcb mesa-gl \
+RUN apk add --no-cache bash ca-certificates shadow tzdata python3 py3-pip py3-wheel py3-setuptools expect imagemagick libintl libstdc++ libxcb mesa-gl \
             mesa-gles bash-completion libxi libxcomposite freetype fontconfig libidn nss eudev libxrender libxcursor libxtst libxrandr \
             libxkbcommon libatomic libxdamage ttf-dejavu inotify-tools libldap sqlite xdg-utils xcb-util-wm xcb-util-image xcb-util-keysyms \
             xcb-util-renderutil libxkbcommon-x11 libevent opus alsa-lib snappy minizip libxkbfile mesa-egl libb2 krb5-libs pcre2 \
-            libjpeg-turbo-utils pciutils-libs lcms2 lcms2-plugins \
-&& pip3 install --no-cache-dir --break-system-package sde rapidfuzz \
-&& apk add --no-cache font-wqy-zenhei --repository https://dl-cdn.alpinelinux.org/alpine/edge/community \
-#libvpx.so.8
-&& apk add --no-cache libvpx==1.13.1-r0 --repository https://dl-cdn.alpinelinux.org/alpine/v3.19/community \
+            libjpeg-turbo-utils pciutils-libs lcms2 lcms2-plugins libwebp font-wqy-zenhei poppler-data jq \
 && apk add --no-cache --virtual calibrewebdep build-base rust cargo libffi-dev git python3-dev openldap-dev libxml2-dev \
             libxslt-dev libjpeg-turbo-dev libevent-dev file cython cmake libressl-dev linux-headers \
 #install unrar
@@ -54,8 +55,10 @@ RUN apk add --no-cache bash ca-certificates shadow tzdata python3 py3-pip py3-wh
 && tar xf /tmp/unrarsrc-${UNRAR_VERSION}.tar.gz -C /tmp/unrar --strip-components=1 \
 && cd /tmp/unrar \
 && sed -i 's|LDFLAGS=-pthread|LDFLAGS=-pthread -static|' makefile \
-&& make \
+&& sed -i 's|CXXFLAGS=-march=native |CXXFLAGS=|' makefile \
+&& make -j $(nproc) \
 && install -v -m755 unrar /usr/bin \
+&& /usr/bin/unrar \
 #install s6-overlay
 && if [ "$(uname -m)" = "x86_64" ];then s6_arch=x86_64;elif [ "$(uname -m)" = "aarch64" ];then s6_arch=aarch64;elif [ "$(uname -m)" = "armv7l" ];then s6_arch=arm; fi \
 && wget -P /tmp https://github.com/just-containers/s6-overlay/releases/download/v${S6_VER}/s6-overlay-noarch.tar.xz \
@@ -71,24 +74,21 @@ RUN apk add --no-cache bash ca-certificates shadow tzdata python3 py3-pip py3-wh
 && wget -P /tmp https://github.com/gshang2017/bypy/releases/download/v${CALIBRE_VER}/calibre-${CALIBRE_VER}-${calibre_arch}.modify.env.musl.txz \
 && mkdir -p /opt/calibre && rm -rf /opt/calibre/* && tar xvf /tmp/calibre-${CALIBRE_VER}-${calibre_arch}.modify.env.musl.txz -C /opt/calibre && /opt/calibre/calibre_postinstall \
 #install calibre-web
-&& wget -P /tmp https://github.com/janeczku/calibre-web/archive/${CALIBRE_WEB_VER}.zip \
-&& unzip -d /tmp /tmp/${CALIBRE_WEB_VER}.zip \
+&& wget -P /tmp https://github.com/janeczku/calibre-web/archive/refs/tags/${CALIBRE_WEB_VER}.tar.gz \
 && mkdir -p /usr/local/calibre-web/app \
-&& cp -rf /tmp/calibre-web-${CALIBRE_WEB_VER}/* /usr/local/calibre-web/app \
+&& tar xf /tmp/${CALIBRE_WEB_VER}.tar.gz -C /usr/local/calibre-web/app --strip-components=1 \
 #install calibre-web dep
-# armv7l netifaces-plu
-&& if [ "$(uname -m)" = "armv7l" ];then pip install git+https://github.com/tsukumijima/netifaces-plus@release_0_12_3 --break-system-packages; fi \
-#
-&& echo 'INPUT ( libldap.so )' > /usr/lib/libldap_r.so \
-&& apk add --no-cache py3-lxml py3-cryptography poppler-data py3-gevent \
-&& pip3 install --no-cache-dir --break-system-package -r /usr/local/calibre-web/app/requirements.txt \
-&& pip3 install --no-cache-dir --break-system-package -r /usr/local/calibre-web/app/optional-requirements.txt \
+&& python3 -m venv /opt/venv \
+&& if [ "$(uname -m)" = "armv7l" ];then pip3 install --no-cache-dir python-Levenshtein==0.25.1; fi \
+&& if [ "$(uname -m)" = "armv7l" ];then export CFLAGS="$CFLAGS -Wno-incompatible-pointer-types"; fi \
+&& if [ "$(uname -m)" = "armv7l" ];then pip3 install --no-cache-dir gevent==24.2.1; fi \
+&& if [ "$(uname -m)" = "armv7l" ];then unset CFLAGS; fi \
+&& pip3 install --no-cache-dir -r /usr/local/calibre-web/app/requirements.txt \
+&& pip3 install --no-cache-dir -r /usr/local/calibre-web/app/optional-requirements.txt \
 #install kepubify
 && if [ "$(uname -m)" = "x86_64" ];then kepubify_arch=64bit;elif [ "$(uname -m)" = "aarch64" ];then kepubify_arch=arm64;elif [ "$(uname -m)" = "armv7l" ];then kepubify_arch=arm;  fi \
 && wget https://github.com/pgaskin/kepubify/releases/download/v${KEPUBIFY_VER}/kepubify-linux-${kepubify_arch} -O /usr/local/bin/kepubify \
 && chmod 755 /usr/local/bin/kepubify \
-#chmod calibre-server-restart.sh
-&& chmod 755 /usr/local/calibre-server/calibre-server-restart.sh \
 #create calibre user
 && mkdir -p /home/calibre \
 && useradd -u 1000 -U -d /home/calibre -s /bin/false calibre \

+ 15 - 1
calibre-web/README.md

@@ -16,7 +16,7 @@
 |名称|版本|说明|
 |:-|:-|:-|
 |calibre-web|0.6.24|amd64;arm64v8;arm32v7|
-|calibre-server|7.9.0|amd64;arm64v8;arm32v7|
+|calibre-server|8.0.1|amd64;arm64v8;arm32v7|
 |kepubify|4.0.4|amd64;arm64v8;arm32v7|
 
 #### 版本升级注意:
@@ -106,8 +106,15 @@
 | `-e CALIBREDB_OTHER_OPTION=` |为自动添加脚本中calibredb命令添加其它参数,例如:duplicates命令[-d]|
 | `-e DISABLE_GOOGLE_SEARCH=false` |(true\|false)设定禁用google搜索,默认不开启|
 | `-e DISABLE_SCHOLAR_SEARCH=false` |(true\|false)设定禁用scholar搜索,默认不开启|
+| `-e DISABLE_AMAZON_SEARCH=false` |(true\|false)设定禁用amazon搜索,默认不开启|
+| `-e DISABLE_COMICVINE_SEARCH=false` |(true\|false)设定禁用comicvine搜索,默认不开启|
+| `-e DISABLE_DOUBAN_SEARCH=false` |(true\|false)设定禁用douban搜索,默认不开启|
+| `-e DISABLE_LUBIMYCZYTAC_SEARCH=false` |(true\|false)设定禁用lubimyczytac搜索,默认不开启|
 | `-e ENABLE_CHOWN_LIBRARY=true` |(true\|false)设定修复library文件夹拥有者,默认开启|
+| `-e CALIBRE_DBPATH=/config/calibre-web` |Calibre-Web配置文件文件夹|
+| `-e CALIBRE_CONFIG_DIRECTORY=/config/calibre-server` |calibre-server配置文件文件夹|
 | `-e CALIBRE_LOCALHOST=true` |(true\|false)设定从本地主机和本地网络加载封面,默认开启|
+| `-e CALIBRE_RECONNECT=true` |(true\|false)设定启用重新连接数据库hostname/reconnect,默认开启|
 | `-e ENABLE_FIX_COVER_COLOR=false` |(true\|false)设定修复封面颜色偏暗,默认关闭|
 
 ### 群晖docker设置:
@@ -149,8 +156,15 @@
 | `CALIBREDB_OTHER_OPTION=` |为自动添加脚本中calibredb命令添加其它参数,例如:duplicates命令[-d]|
 | `DISABLE_GOOGLE_SEARCH=false` |(true\|false)设定禁用google搜索,默认不开启|
 | `DISABLE_SCHOLAR_SEARCH=false` |(true\|false)设定禁用scholar搜索,默认不开启|
+| `DISABLE_AMAZON_SEARCH=false` |(true\|false)设定禁用amazon搜索,默认不开启|
+| `DISABLE_COMICVINE_SEARCH=false` |(true\|false)设定禁用comicvine搜索,默认不开启|
+| `DISABLE_DOUBAN_SEARCH=false` |(true\|false)设定禁用douban搜索,默认不开启|
+| `DISABLE_LUBIMYCZYTAC_SEARCH=false` |(true\|false)设定禁用lubimyczytac搜索,默认不开启|
 | `ENABLE_CHOWN_LIBRARY=true` |(true\|false)设定修复library文件夹拥有者,默认开启|
+| `CALIBRE_DBPATH=/config/calibre-web` |Calibre-Web配置文件文件夹|
+| `CALIBRE_CONFIG_DIRECTORY=/config/calibre-server` |calibre-server配置文件文件夹|
 | `CALIBRE_LOCALHOST=true` |(true\|false)设定从本地主机和本地网络加载封面,默认开启|
+| `CALIBRE_RECONNECT=true` |(true\|false)设定启用重新连接数据库hostname/reconnect,默认开启|
 | `ENABLE_FIX_COVER_COLOR=false` |(true\|false)设定修复封面颜色偏暗,默认关闭|
 
 #### 其它:

+ 42 - 0
calibre-web/docker-compose.yml

@@ -0,0 +1,42 @@
+services:
+  calibre-web:
+    # github镜像:ghcr.io/johngong/calibre-web:latest
+    image: johngong/calibre-web:latest
+    container_name: calibre-web
+    ports:
+      - 8083:8083
+      - 8080:8080
+    volumes:
+      - ./config:/config
+      - ./library:/library
+      - ./autoaddbooks:/autoaddbooks
+    environment:
+      UID: 1000
+      GID: 1000
+      ENABLE_AUTOADDBOOKS: true
+      ENABLE_CALIBRE_SERVER: false
+      ENABLE_CALIBRE_SERVER_OPDS: false
+      ENABLE_CALIBREDB_URLLIBRARYPATH: true
+      CALIBRE_SERVER_RESTART_AUTO: true
+      CALIBRE_SERVER_USER: user
+      CALIBRE_SERVER_PASSWORD: passeord
+      CALIBRE_SERVER_WEB_LANGUAGE: zh_CN
+      CALIBRE_SERVER_PORT: 8080
+      CALIBRE_PORT: 8083
+      CALIBRE_ASCII_FILENAME: true
+      CALIBRE_WEB_LANGUAGE: zh_Hans_CN
+      #TZ: Asia/Shanghai
+      #CALIBREDB_OTHER_OPTION:
+      DISABLE_GOOGLE_SEARCH: false
+      DISABLE_SCHOLAR_SEARCH: false
+      DISABLE_AMAZON_SEARCH: false
+      DISABLE_COMICVINE_SEARCH: false
+      DISABLE_DOUBAN_SEARCH: false
+      DISABLE_LUBIMYCZYTAC_SEARCH: false
+      ENABLE_CHOWN_LIBRARY: true
+      CALIBRE_DBPATH: /config/calibre-web
+      CALIBRE_CONFIG_DIRECTORY: /config/calibre-server
+      CALIBRE_LOCALHOST: true
+      CALIBRE_RECONNECT: true
+      #ENABLE_FIX_COVER_COLOR: false
+    restart: unless-stopped

+ 20 - 23
calibre-web/root/etc/cont-init.d/calibre-web.sh

@@ -40,24 +40,23 @@ fi
 if [ ! -d /usr/local/calibre-web/defaults ]; then
   mkdir -p /usr/local/calibre-web/defaults
 fi
-if [ "$DISABLE_GOOGLE_SEARCH" == "true" ]; then
-  if [ -f /usr/local/calibre-web/app/cps/metadata_provider/google.py ]; then
-    mv /usr/local/calibre-web/app/cps/metadata_provider/google.py /usr/local/calibre-web/defaults/
-  fi
-else
-  if [ ! -f /usr/local/calibre-web/app/cps/metadata_provider/google.py ]; then
-    mv /usr/local/calibre-web/defaults/google.py /usr/local/calibre-web/app/cps/metadata_provider/
-  fi
-fi
-if [ "$DISABLE_SCHOLAR_SEARCH" == "true" ]; then
-  if [ -f /usr/local/calibre-web/app/cps/metadata_provider/scholar.py ]; then
-    mv /usr/local/calibre-web/app/cps/metadata_provider/scholar.py /usr/local/calibre-web/defaults/
-  fi
-else
-  if [ ! -f /usr/local/calibre-web/app/cps/metadata_provider/scholar.py ]; then
-    mv /usr/local/calibre-web/defaults/scholar.py /usr/local/calibre-web/app/cps/metadata_provider/
+file_name[1]=google
+file_name[2]=scholar
+file_name[3]=amazon
+file_name[4]=comicvine
+file_name[5]=douban
+file_name[6]=lubimyczytac
+for i in ${file_name[*]}; do
+  if [ "$(env|grep "DISABLE_${i^^}_SEARCH"|awk -F= '{print $2}')" == "true" ]; then
+    if [ -f /usr/local/calibre-web/app/cps/metadata_provider/$i.py ]; then
+      mv /usr/local/calibre-web/app/cps/metadata_provider/$i.py /usr/local/calibre-web/defaults/
+    fi
+  else
+    if [ ! -f /usr/local/calibre-web/app/cps/metadata_provider/$i.py ]; then
+      mv /usr/local/calibre-web/defaults/$i.py /usr/local/calibre-web/app/cps/metadata_provider/
+    fi
   fi
-fi
+done
 
 #fix封面颜色偏暗
 if [ "$ENABLE_FIX_COVER_COLOR" == "true" ]; then
@@ -116,7 +115,8 @@ fi
 if [ ! -f $CALIBRE_CONFIG_DIRECTORY/global.py.json ]; then
   calibre-server --version
 fi
-sde language en $CALIBRE_CONFIG_DIRECTORY/global.py.json
+jq '.language = "en"' $CALIBRE_CONFIG_DIRECTORY/global.py.json > $CALIBRE_CONFIG_DIRECTORY/temp.json
+mv $CALIBRE_CONFIG_DIRECTORY/temp.json $CALIBRE_CONFIG_DIRECTORY/global.py.json
 
 #添加user.
 if [ "$ENABLE_CALIBRE_SERVER" == "true" ] && [ -n "$CALIBRE_SERVER_USER" ] && [ -n "$CALIBRE_SERVER_PASSWORD" ]; then
@@ -141,7 +141,8 @@ fi
 if [ "$ENABLE_CALIBRE_SERVER" == "true" ] && [ -n "$CALIBRE_SERVER_WEB_LANGUAGE" ]; then
   CALIBRE_SERVER_WEB_ALL_LANGUAGE=("en" "af" "am" "ar" "ast" "az" "be" "bg" "bn" "bn_BD" "bn_IN" "br" "bs" "ca" "crh" "cs" "cy" "da" "de" "el" "en_AU" "en_CA" "en_GB" "eo" "es" "es_MX" "et" "eu" "fa" "fi" "fil" "fo" "fr" "fr_CA" "fur" "ga" "gl" "gu" "he" "hi" "hr" "hu" "hy" "id" "is" "it" "ja" "jv" "ka" "km" "kn" "ko" "ku" "lt" "ltg" "lv" "mi" "mk" "ml" "mn" "mr" "ms" "mt" "my" "nb" "nds" "nl" "nn" "nso" "oc" "or" "pa" "pl" "ps" "pt" "pt_BR" "ro" "ru" "rw" "sc" "si" "sk" "sl" "sq" "sr" "sr@latin" "sv" "ta" "te" "th" "ti" "tr" "tt" "ug" "uk" "ur" "uz@Latn" "ve" "vi" "wa" "xh" "yi" "zh_CN" "zh_HK" "zh_TW" "zu")
   if [[ ${CALIBRE_SERVER_WEB_ALL_LANGUAGE[@]} =~ "$CALIBRE_SERVER_WEB_LANGUAGE" ]]; then
-    sde language $CALIBRE_SERVER_WEB_LANGUAGE $CALIBRE_CONFIG_DIRECTORY/global.py.json
+    jq '.language = "'$CALIBRE_SERVER_WEB_LANGUAGE'"' $CALIBRE_CONFIG_DIRECTORY/global.py.json > $CALIBRE_CONFIG_DIRECTORY/temp.json
+    mv $CALIBRE_CONFIG_DIRECTORY/temp.json $CALIBRE_CONFIG_DIRECTORY/global.py.json
   fi
 fi
 
@@ -201,10 +202,6 @@ fi
 chown -R calibre:calibre /autoaddbooks
 
 #自动添加图书.
-#检查calibre-server文件
-if [ -f /opt/calibre/bin/calibre-server.bak ]; then
-  mv /opt/calibre/bin/calibre-server.bak /opt/calibre/bin/calibre-server
-fi
 #添加图书.
 if [ "$ENABLE_AUTOADDBOOKS" == "true" ]; then
   if [ "`ls -A /autoaddbooks`" != "" ];then

+ 1 - 14
calibre-web/root/etc/services.d/inotify/run

@@ -2,20 +2,7 @@
 
 # 启动inotify
 if [ "$ENABLE_AUTOADDBOOKS" == "true" ]; then
-  while inotifywait -e close -e move -r /autoaddbooks; do
-      if [ "`ls -A /autoaddbooks`" != "" ]; then
-        inotifywait -mr /autoaddbooks -t 30
-        if [ "$ENABLE_CALIBRE_SERVER" == "true" ]; then
-          mv /opt/calibre/bin/calibre-server /opt/calibre/bin/calibre-server.bak
-          ps -ef |grep /opt/calibre/bin/calibre-server |grep -v grep|awk '{print $1}'|xargs kill -9
-          su -p calibre -s /bin/bash -c "calibredb add -r /autoaddbooks $CALIBREDB_OTHER_OPTION --library-path=/library"
-          mv /opt/calibre/bin/calibre-server.bak /opt/calibre/bin/calibre-server
-        else
-          su -p calibre -s /bin/bash -c "calibredb add -r /autoaddbooks $CALIBREDB_OTHER_OPTION --library-path=/library"
-        fi
-        rm -r /autoaddbooks/*
-      fi
-  done
+  exec s6-setuidgid calibre bash /usr/local/calibre-server/inotify.sh
 else
   s6-svc -Od .
   exit 0

+ 17 - 0
calibre-web/root/usr/local/calibre-server/inotify.sh

@@ -0,0 +1,17 @@
+#! /bin/bash
+
+while inotifywait -e close -e move -r /autoaddbooks; do
+    if [ "`ls -A /autoaddbooks`" != "" ]; then
+      inotifywait -mr /autoaddbooks -t 30
+      if [ "$ENABLE_CALIBRE_SERVER" == "true" ]; then
+        if [ -n "$CALIBRE_SERVER_USER" ] && [ -n "$CALIBRE_SERVER_PASSWORD" ]; then
+          calibredb add -r /autoaddbooks $CALIBREDB_OTHER_OPTION --username $CALIBRE_SERVER_USER --password $CALIBRE_SERVER_PASSWORD --library-path="http://localhost:$CALIBRE_SERVER_PORT/#library"
+        else
+          calibredb add -r /autoaddbooks $CALIBREDB_OTHER_OPTION --library-path="http://localhost:$CALIBRE_SERVER_PORT/#library"
+        fi
+      else
+        calibredb add -r /autoaddbooks $CALIBREDB_OTHER_OPTION --library-path=/library
+      fi
+      rm -r /autoaddbooks/*
+    fi
+done