QNAPの古いNAS に Entware を利用してcalibre-web をインストールしてみた。
以前「QNAPのNASで Calibre-web を動作させる」でQNAPのIntelのプロセッサを搭載したNASの Docker を使って calibre-web をインストールしたが、独立したNASで 書籍ファイルの管理をしたいと思った。細かなところで手間取ったので備忘録として残しておく。
手元で余っているNASは、古い ARM のプロセッサを搭載したNAS (QNAP TS-112) しかない。Dockerは使えないので、Entware ( https://github.com/Entware/Entware ) を使って calibre-web をインストールした。
環境
利用したNAS
かなり古いMarvell 1.2 GHzを搭載した QNAPのNASを利用した。
モデル: TS-112
ファームウェアバージョン: 4.3.3.1098
クライアント
Windows 10 Pro (バージョン 1903)
ssh でNASに接続できるとする。
EntwareのNASへのインストール
QNAPのNAS用のEntware をダウンロードするために、qnapclub.eu をアプリレポジトリに登録する。次のサイトの手順に従って登録する。
https://www.qnapclub.eu/en の Follow our guide to install QPKG ( https://www.qnapclub.eu/en/howto/1) に従う。
リポジトリの追加
NASのAppCenterの歯車アイコンをクリックして設定のパネルを表示する。
アプリリポジトリのタブを選択して次のURLをWebサイトのURL に指定する。必要に応じて名前も指定する。ここでは、qnapclub.eu を名前とした。
https://www.qnapclub.eu/en/repo.xml
インストール
リポジトリとして、QNAP store ではなく、qnapclub.eu を選択する。少し時間がかかったが、しばらくするとインストール可能なアプリなどが表示された。
Entware-std 1.00をインストールする。
Entware-3x や Entware-ng はEntware-stdに統合され、もう保守されないとのことなので、Entware-std が良いとこと。
calibre-web インストールのための準備
SSHでNASに接続
コマンドラインでインストール作業を行うので、ssh で NASに接続する。
パソコンなどから ssh を利用して次のようにして NAS に接続する。
ssh admin@<NASのアドレス>
(たとえば、ssh admin@192.168.1.10)
gitのインストール
calibre-web からzip ファイルをダウンロードしても良いが、今後の更新も考慮に入れて git clone ができるようにする。
次のコマンドを実行する。
1 2 3 |
opkg update opkg install git-http opkg install ca-bundle |
ちなみに、git をインストールするために opkg install git
としたところ git でhttps のリポジトリをアクセスしようとすると次のようなエラーとなったので、j上記のように git-http をインストールする必要がある。
1 2 3 |
[~/calibre-web] # git clone https://github.com/janeczku/calibre-web.git Cloning into 'calibre-web'... fatal: unable to find remote helper for 'https' |
pipのインストール
つぎに、calibre-web のインストールに使うpipをインストールする。
1 |
opkg install python-pip |
次のようなメッセージが出てインストールされた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
[~] # opkg install python-pip Installing python-pip (18.1-2) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-pip_18.1-2_armv5-3.2.ipk Installing python-base (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-base_2.7.16-9_armv5-3.2.ipk Installing libffi (3.2.1-3) to root... Downloading http://bin.entware.net/armv5sf-k3.2/libffi_3.2.1-3_armv5-3.2.ipk Installing libbz2 (1.0.8-1) to root... Downloading http://bin.entware.net/armv5sf-k3.2/libbz2_1.0.8-1_armv5-3.2.ipk Installing libtirpc (1.1.4-2) to root... Downloading http://bin.entware.net/armv5sf-k3.2/libtirpc_1.1.4-2_armv5-3.2.ipk Installing python-light (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-light_2.7.16-9_armv5-3.2.ipk Installing python-ctypes (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-ctypes_2.7.16-9_armv5-3.2.ipk Installing python-pydoc (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-pydoc_2.7.16-9_armv5-3.2.ipk Installing python-multiprocessing (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-multiprocessing_2.7.16-9_armv5-3.2.ipk Installing python-codecs (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-codecs_2.7.16-9_armv5-3.2.ipk Installing libsqlite3 (3290000-1) to root... Downloading http://bin.entware.net/armv5sf-k3.2/libsqlite3_3290000-1_armv5-3.2.ipk Installing python-sqlite3 (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-sqlite3_2.7.16-9_armv5-3.2.ipk Installing python-logging (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-logging_2.7.16-9_armv5-3.2.ipk Installing libgdbm (1.18.1-1) to root... Downloading http://bin.entware.net/armv5sf-k3.2/libgdbm_1.18.1-1_armv5-3.2.ipk Installing python-gdbm (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-gdbm_2.7.16-9_armv5-3.2.ipk Installing python-email (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-email_2.7.16-9_armv5-3.2.ipk Installing python-distutils (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-distutils_2.7.16-9_armv5-3.2.ipk Installing python-openssl (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-openssl_2.7.16-9_armv5-3.2.ipk Installing libexpat (2.2.7-1) to root... Downloading http://bin.entware.net/armv5sf-k3.2/libexpat_2.2.7-1_armv5-3.2.ipk Installing python-xml (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-xml_2.7.16-9_armv5-3.2.ipk Installing python-compiler (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-compiler_2.7.16-9_armv5-3.2.ipk Installing libxml2 (2.9.9-2) to root... Downloading http://bin.entware.net/armv5sf-k3.2/libxml2_2.9.9-2_armv5-3.2.ipk Installing libdb47 (4.7.25.4.NC-5) to root... Downloading http://bin.entware.net/armv5sf-k3.2/libdb47_4.7.25.4.NC-5_armv5-3.2.ipk Installing python-db (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-db_2.7.16-9_armv5-3.2.ipk Installing python-decimal (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-decimal_2.7.16-9_armv5-3.2.ipk Installing python-unittest (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-unittest_2.7.16-9_armv5-3.2.ipk Installing libncursesw (6.1-5) to root... Downloading http://bin.entware.net/armv5sf-k3.2/libncursesw_6.1-5_armv5-3.2.ipk Installing libncurses (6.1-5) to root... Downloading http://bin.entware.net/armv5sf-k3.2/libncurses_6.1-5_armv5-3.2.ipk Installing python-ncurses (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-ncurses_2.7.16-9_armv5-3.2.ipk Installing python (2.7.16-9) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python_2.7.16-9_armv5-3.2.ipk Installing python-setuptools (40.6.2-3) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-setuptools_40.6.2-3_armv5-3.2.ipk Installing python-pip-conf (0.1-1) to root... Downloading http://bin.entware.net/armv5sf-k3.2/python-pip-conf_0.1-1_armv5-3.2.ipk Configuring python-base. Configuring libffi. Configuring libbz2. Configuring libtirpc. Configuring python-light. Configuring python-ctypes. Configuring python-pydoc. Configuring python-multiprocessing. Configuring python-codecs. Configuring libsqlite3. Configuring python-sqlite3. Configuring python-logging. Configuring libgdbm. Configuring python-gdbm. Configuring python-email. Configuring python-distutils. Configuring python-openssl. Configuring libexpat. Configuring python-xml. Configuring python-compiler. Configuring libxml2. Configuring libdb47. Configuring python-db. Configuring python-decimal. Configuring python-unittest. Configuring libncursesw. Configuring libncurses. Configuring python-ncurses. Configuring python. Configuring python-setuptools. Configuring python-pip-conf. Configuring python-pip. [~] # |
pipと setuptools の更新
次のコマンドを実行して、pipと setuptools を更新しておく。
1 |
pip install --upgrade pip setuptools |
次のようなメッセージで終了した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[~] # pip install --upgrade pip setuptools Collecting pip Downloading https://files.pythonhosted.org/packages/00/b6/9cfa56b4081ad13874b0c6f96af8ce16cfbc1cb06bedf8e9164ce5551ec1/pip-19.3.1-py2.py3-none-any.whl (1.4MB) 100% |████████████████████████████████| 1.4MB 569kB/s Collecting setuptools Downloading https://files.pythonhosted.org/packages/54/28/c45d8b54c1339f9644b87663945e54a8503cfef59cf0f65b3ff5dd17cf64/setuptools-42.0.2-py2.py3-none-any.whl (583kB) 100% |████████████████████████████████| 583kB 1.1MB/s Installing collected packages: pip, setuptools Found existing installation: pip 18.1 Uninstalling pip-18.1: Successfully uninstalled pip-18.1 Found existing installation: setuptools 40.6.2 Uninstalling setuptools-40.6.2: Successfully uninstalled setuptools-40.6.2 Successfully installed pip-19.3.1 setuptools-42.0.2 |
calibre-webのインストール
github からダウンロードするために、空きスペースのある領域をワーキングディレクトリにする。
ssh で admin でログインした際には /root がホームディレクトリになっていたが、/ がマウントされている/dev/ramドライブの空きが15.7Mしかなく、空きスペース不足でダウンロードできなかった。
calibre-web の git clone
共有フォルダーの Public (/share/HDA_DATA/Public/)でcalibre-webをgit cloneしてダウンロードした。
1 2 3 4 5 6 7 |
[/share/HDA_DATA/Public] # git clone https://github.com/janeczku/calibre-web Cloning into 'calibre-web'... remote: Enumerating objects: 14644, done. remote: Total 14644 (delta 0), reused 0 (delta 0), pack-reused 14644 Receiving objects: 100% (14644/14644), 47.59 MiB | 1.84 MiB/s, done. Resolving deltas: 100% (8959/8959), done. Checking out files: 100% (589/589), done. |
calibre-web の中をリスティングすると以下の通り。
1 2 3 4 5 |
[/share/HDA_DATA/Public] # cd calibre-web [/share/HDA_DATA/Public/calibre-web] # ls LICENSE babel.cfg messages.pot setup.cfg MANIFEST.in cps/ optional-requirements.txt setup.py README.md cps.py* requirements.txt test |
以下は、https://github.com/janeczku/calibre-web の README.md のQuick start記述にしたがってインストールを行う。
必要なライブラリなどをインストール
依存しているライブラリなどをインストールする。
1 |
pip install --target vendor -r requirements.txt |
以下のメッセージを出力して終了した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
[/share/HDA_DATA/Public/calibre-web] # pip install --target vendor -r requirements.txt DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support Collecting Babel>=1.3 Downloading https://files.pythonhosted.org/packages/2c/60/f2af68eb046c5de5b1fe6dd4743bf42c074f7141fe7b2737d3061533b093/Babel-2.7.0-py2.py3-none-any.whl (8.4MB) |████████████████████████████████| 8.4MB 70kB/s Collecting Flask-Babel>=0.11.1 Downloading https://files.pythonhosted.org/packages/82/b0/986b29938d4e8be7deb552ebfd1ef16c311276a59bcae10dec567a5b3d20/Flask-Babel-0.12.2.tar.gz (44kB) |████████████████████████████████| 51kB 1.0MB/s Collecting Flask-Login>=0.3.2 Downloading https://files.pythonhosted.org/packages/c1/ff/bd9a4d2d81bf0c07d9e53e8cd3d675c56553719bbefd372df69bf1b3c1e4/Flask-Login-0.4.1.tar.gz Collecting Flask-Principal>=0.3.2 Downloading https://files.pythonhosted.org/packages/14/c7/2531aca6ab7baa3774fde2dfc9c9dd6d5a42576a1013a93701bfdc402fdd/Flask-Principal-0.4.0.tar.gz Collecting singledispatch>=3.4.0.0 Downloading https://files.pythonhosted.org/packages/c5/10/369f50bcd4621b263927b0a1519987a04383d4a98fb10438042ad410cf88/singledispatch-3.4.0.3-py2.py3-none-any.whl Collecting backports_abc>=0.4 Downloading https://files.pythonhosted.org/packages/7d/56/6f3ac1b816d0cd8994e83d0c4e55bc64567532f7dc543378bd87f81cebc7/backports_abc-0.5-py2.py3-none-any.whl Collecting Flask>=1.0.2 Downloading https://files.pythonhosted.org/packages/9b/93/628509b8d5dc749656a9641f4caf13540e2cdec85276964ff8f43bbb1d3b/Flask-1.1.1-py2.py3-none-any.whl (94kB) |████████████████████████████████| 102kB 601kB/s Collecting iso-639>=0.4.5 Downloading https://files.pythonhosted.org/packages/5a/8d/27969852f4e664525c3d070e44b2b719bc195f4d18c311c52e57bb93614e/iso-639-0.4.5.tar.gz (167kB) |████████████████████████████████| 174kB 2.1MB/s Collecting PyPDF2==1.26.0 Downloading https://files.pythonhosted.org/packages/b4/01/68fcc0d43daf4c6bdbc6b33cc3f77bda531c86b174cac56ef0ffdb96faab/PyPDF2-1.26.0.tar.gz (77kB) |████████████████████████████████| 81kB 1.3MB/s Collecting pytz>=2016.10 Downloading https://files.pythonhosted.org/packages/e7/f9/f0b53f88060247251bf481fa6ea62cd0d25bf1b11a87888e53ce5b7c8ad2/pytz-2019.3-py2.py3-none-any.whl (509kB) |████████████████████████████████| 512kB 758kB/s Collecting requests>=2.11.1 Downloading https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl (57kB) |████████████████████████████████| 61kB 264kB/s Collecting SQLAlchemy>=1.1.0 Downloading https://files.pythonhosted.org/packages/17/7f/35879c73859368ad19a952b69ee780aa97fc30350dabd45fb948d6a4e3ea/SQLAlchemy-1.3.12.tar.gz (6.0MB) |████████████████████████████████| 6.0MB 310kB/s Collecting tornado>=4.1 Downloading https://files.pythonhosted.org/packages/e6/78/6e7b5af12c12bdf38ca9bfe863fcaf53dc10430a312d0324e76c1e5ca426/tornado-5.1.1.tar.gz (516kB) |████████████████████████████████| 522kB 2.1MB/s Collecting Wand>=0.4.4 Downloading https://files.pythonhosted.org/packages/ad/4a/6d4897ce1c6640c0669829d34cdf956e0829281b3f94c71effdb23bdde3c/Wand-0.5.8-py2.py3-none-any.whl (129kB) |████████████████████████████████| 133kB 289kB/s Collecting unidecode>=0.04.19 Downloading https://files.pythonhosted.org/packages/d0/42/d9edfed04228bacea2d824904cae367ee9efd05e6cce7ceaaedd0b0ad964/Unidecode-1.1.1-py2.py3-none-any.whl (238kB) |████████████████████████████████| 245kB 2.1MB/s Collecting Jinja2>=2.5 Downloading https://files.pythonhosted.org/packages/65/e0/eb35e762802015cab1ccee04e8a277b03f1d8e53da3ec3106882ec42558b/Jinja2-2.10.3-py2.py3-none-any.whl (125kB) |████████████████████████████████| 133kB 1.7MB/s Collecting blinker Downloading https://files.pythonhosted.org/packages/1b/51/e2a9f3b757eb802f61dc1f2b09c8c99f6eb01cf06416c0671253536517b6/blinker-1.4.tar.gz (111kB) |████████████████████████████████| 112kB 905kB/s Collecting six Downloading https://files.pythonhosted.org/packages/65/26/32b8464df2a97e6dd1b656ed26b2c194606c16fe163c695a992b36c11cdf/six-1.13.0-py2.py3-none-any.whl Collecting click>=5.1 Downloading https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB) |████████████████████████████████| 81kB 1.3MB/s Collecting itsdangerous>=0.24 Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl Collecting Werkzeug>=0.15 Downloading https://files.pythonhosted.org/packages/ce/42/3aeda98f96e85fd26180534d36570e4d18108d62ae36f87694b476b83d6f/Werkzeug-0.16.0-py2.py3-none-any.whl (327kB) |████████████████████████████████| 327kB 1.8MB/s Collecting certifi>=2017.4.17 Downloading https://files.pythonhosted.org/packages/b9/63/df50cac98ea0d5b006c55a399c3bf1db9da7b5a24de7890bc9cfd5dd9e99/certifi-2019.11.28-py2.py3-none-any.whl (156kB) |████████████████████████████████| 163kB 1.2MB/s Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 Downloading https://files.pythonhosted.org/packages/b4/40/a9837291310ee1ccc242ceb6ebfd9eb21539649f193a7c8c86ba15b98539/urllib3-1.25.7-py2.py3-none-any.whl (125kB) |████████████████████████████████| 133kB 2.1MB/s Collecting idna<2.9,>=2.5 Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl (58kB) |████████████████████████████████| 61kB 880kB/s Collecting chardet<3.1.0,>=3.0.2 Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB) |████████████████████████████████| 143kB 1.1MB/s Collecting futures Downloading https://files.pythonhosted.org/packages/d8/a6/f46ae3f1da0cd4361c344888f59ec2f5785e69c872e175a748ef6071cdb5/futures-3.3.0-py2-none-any.whl Collecting MarkupSafe>=0.23 Downloading https://files.pythonhosted.org/packages/b9/2e/64db92e53b86efccfaea71321f597fa2e1b2bd3853d8ce658568f7a13094/MarkupSafe-1.1.1.tar.gz Installing collected packages: pytz, Babel, MarkupSafe, Jinja2, click, itsdangerous, Werkzeug, Flask, Flask-Babel, Flask-Login, blinker, Flask-Principal, six, singledispatch, backports-abc, iso-639, PyPDF2, certifi, urllib3, idna, chardet, requests, SQLAlchemy, futures, tornado, Wand, unidecode Running setup.py install for MarkupSafe ... done Running setup.py install for Flask-Babel ... done Running setup.py install for Flask-Login ... done Running setup.py install for blinker ... done Running setup.py install for Flask-Principal ... done Running setup.py install for iso-639 ... done Running setup.py install for PyPDF2 ... done Running setup.py install for SQLAlchemy ... done Running setup.py install for tornado ... done Successfully installed Babel-2.7.0 Flask-1.1.1 Flask-Babel-0.12.2 Flask-Login-0.4.1 Flask-Principal-0.4.0 Jinja2-2.10.3 MarkupSafe-1.1.1 PyPDF2-1.26.0 SQLAlchemy-1.3.12 Wand-0.5.8 Werkzeug-0.16.0 backports-abc-0.5 blinker-1.4 certifi-2019.11.28 chardet-3.0.4 click-7.0 futures-3.3.0 idna-2.8 iso-639-0.4.5 itsdangerous-1.1.0 pytz-2019.3 requests-2.22.0 singledispatch-3.4.0.3 six-1.13.0 tornado-5.1.1 unidecode-1.1.1 urllib3-1.25.7 [/share/HDA_DATA/Public/calibre-web] # |
Calibre-web serverの起動
python cps.py を実行することでサーバーが起動する。
1 |
[/share/HDA_DATA/Public/calibre-web] # python cps.py |
ここでは設定していないが、常時起動するためには、NASの起動時に実行されるように設定する必要がある。
Calibre-webへのアクセス
ブラウザからNASの Calibre-web にアクセスする。ポート番号は8083。
http://<NASのアドレス>:8083
Calibre libraryの設定
Location of Calibre database に Calibre データベースのあるパスを設定して「Submit」をクリックする。
たとえば、 NASの共有フォルダePubのcalibre にデータベースがある場合には、「/share/HDA_DATA/ePub/calibre」を設定する。
Calibre-web サーバーへのログイン
Quick startに記載されている次のデフォルトログイン情報でログインする。
Username: admin
Password: admin123
ログイン後の画面の例は次の通り。
この後、admin以外のユーザの設定などが必要であるが、以前の備忘録と重複するので省略する。