Könyv szerver házilag

Ma kicsit meguntam a zártságot, a nagyok butácska megoldásait és valami saját infrastruktúrán alapuló, házi megoldást kezdtem keresni az elektronikus könyveim tárolására és elérhetőségére. Ha neked is rengeteg PDF, ePUB dokumentum gyűlt össze az évek hosszú sora alatt, akkor valószínűleg érdekelhet, hogy én milyen megoldásokat találtam az interneten barangolva.

Calibre mindenre

Körülbelül 5 éve találkozhattam először a Calibre nevű, multiplatformos, konvertáló és rendszerező programmal. Szinten minden platformon futott, mindenhol ugyan úgy nézett ki, és nagyából ugyan úgy is működött. Szinte bármilyen írott dokumentumot, bármivé át tudott varázsolni valamilyen más formátumra, illetve szabadon testre szabhattuk a hiányzó meta adatokat vele. Engem mindig is egyetlen egy dolog zavart. Mégpedig az, hogy nagyon csúnyának találtam a kezelőfelületét. Valószínűleg csak velem van baj, minden esetre már-már fizikai fájdalmat éreztem, ha hosszabb ideig kellett használnom. Így használat után, gyorsan letöröltem. A megjelenítésével, most is lesznek gondjaim, de erről később.

Calibre Server

Sok idő eltelt, amíg felismertem, hogy a Calibre tud ám „szerver üzemmódban” is futni. Ez annyit tesz, hogy a program segítségével létrehozhatjuk egy gépen a saját könyvtárunkat, majd ezt a hálózaton keresztül bármely Calibre kommunikációt támogató klienssel elérhetjük. Szerencsére a program olyan régi és olyan etalonnak számít az eBook témában, hogy nem nehéz olyan klienseket találni, amik a Calibre-re épülnek. Viszont ha ez se lenne elég, akkor a szerverben egyszerűen bekapcsolhatunk egy webes klienst, amivel akár böngészőből is elérhetjük a tartalmat.

Nézzük is, mennyire egyszerű a beüzemelése ennek a rendszernek. Én a továbbiakban egy Ubuntu 16.04-al fogom bemutatni a lépéseket.

Szerencsénkre az alapértelmezett repository-ban megtalálható a calibre, így a jól ismert parancs segítségével telepítsük.

root@server# apt-get install calibre

Most hozzunk létre, egy felhasználót és egy csoportot a Linuxonkon. A továbbiakban minden calibre folyamat ennek a felhasználónak a nevében fog futni.

root@server# groupadd calibre
root@server# useradd -g calibre -md /home/calibre calibre

Ezek után hozzunk létre egy könyvtárat, ahova azt akarjuk, hogy a calibre dolgozzon. Én külön létrehozok egy uploads könyvtárat is ebbe. Ennek a célje, hogy oda fogom rakni a feldolgozandó file-kat.

root@server# mkdir /books/
root@server# mkdir /books/uploads
root@server# chown -R calibre:calibre /books/

Jelenleg semmi sincs ebben a könyvtárban, így másoljunk egy tetszőleges ePUB-ot a /books/uploads -ba.

root@server# su - calibre
calibre@server$ cp ~/Indul_a_bakterhaz.epub /books/uploads/

Most pedig adjuk hozzá a katalógusunkhoz ezt az új könyvet. Mivel még nem is létezik semmi, ezért az első parancs létre is hozza a calibre adatbázisát és minden hozzátartozó meta file-t.

calibre@server$ calibredb add /books/uploads/ -r --with-library /books/

Az calibredb add után kell definiálni azt a file-t, amit hozzá szeretnénk adni. Az egész könyvtár tartalmát is hozzáadhatjuk, akkor a -r kapcsolót kell használnunk. A végén pedig mindig meg kell adnunk, hogy a „Library”, hol található, ahova dolgozni fog a calibre.

Ha sikeresen megtörtént a könyv hozzáadása, akkor már listázhatjuk is a parancssorból.

calibre@server$ calibredb list --with-library /books/

Persze, ezt nem kell mindig kézzel megtennünk. Beállíthatunk egy automatikus parancsot, ami ha kerül valami új az uploads könyvtárba, azt hozzáadja a calibre könyvtárunkhoz és törli az eredeti file-t. Ezek után nincs más dolgunk, mint odamásolni a könyveket és hagyni, hogy a rendszer tegye a dolgát.

A crontab-ban a következő job-ot definiáltam erre a célra:

calibre@server$ crontab -e 
*/10 * * * * calibredb add /books/uploads/ -r --with-library /books/ ; rm -rf /books/uploads/*

Web Elérés

Most már csupán el kellene érnünk távolról. Itt az ideje, hogy bekapcsoljuk a server-t és vele a webes felületet. Ehhez a következő parancsot kell kiadnunk:

calibre@server$ calibre-server --daemonize --max-cover=600x800 --max-opds-items=30 --max-opds-ungrouped-items=100 --username=calibre --port=8888 --pidfile=/var/run/calibre/calibre-server.pid --with-library=/books/

A parancs hatására, a 8888-as porton el fog indulni a server, és a háttérben futva elérhetővé teszi a calibre könyvtárunkat. Ha most egy böngészőbe beírjuk a gép IP címét és a 8888-as portot, akkor valami ilyet kell, hogy láss:

http://[IP]:8888

Innen szabadon kereshetsz és tölthetsz le bármit a könyvtáradból. Az egyetlen gond, hogy maga a web szerverünket most kézzel indítottuk el. A gép következő újraindulásakor nem fog elindulni automatikusan. Ehhez egy (az esetemben systemd) service-t kell létrehozni. Ehhez én a következőket tettem.

root@server# vi /lib/systemd/system/calibre.service

A file tartalma a következő volt az én esetemben:

[Unit]
Description=Calibre Service
After=network.target

[Service]
User=calibre
Group=calibre
Type=forking
PIDFile=/var/run/calibre/calibre-server.pid
ExecStart=/usr/bin/calibre-server \
        --daemonize \
        --max-cover=600x800 \
        --max-opds-items=30 \
        --max-opds-ungrouped-items=100 \
        --username=calibre \
        --port=8888 \
        --pidfile=/var/run/calibre/calibre-server.pid \
        --with-library=/books/

[Install]
WantedBy=multi-user.target

Majd lehetett bekapcsolni, és újraindítani a service-t, immár a rendszer beépített funkciójával.

root@server# systemctl enable calibre.service
root@server# systemctl stop calibre.service
root@server# systemctl start calibre.service

Fejlettebb Web felület

Ahogy, már említettem nekem a legnagyobb bajom a Calibre-val az a grafikus megjelenése. Nincs ez másként a webes felülettel sem. Egy butácska, és végtelenül egyszerű és nem túl ízléses felületet kapunk alapból. Viszont találtam egy Jan B német fejlesztőt, aki írt egy Python alkalmazást, ami sokkal szebb és használhatóbb is Calibre webes felületként. A használatához tegyük a következőket.

Először is kapcsoljuk ki a beépített Calibre-web szolgáltatást, amit az előbb felépítettünk.

root@server# systemctl stop calibre.service
root@server# systemctl disable calibre.service

Menjünk Jan GitHub oldalára és töltsük le a legutolsó verziót: https://github.com/janeczku/calibre-web/archive/master.zip. Ezt másoljuk fel a szerverünkre, a /home/calibre könyvtárba és csomagoljuk ki.

calibre@server$ cd /home/calibre
calibre@server$ tar xf master.zip

Ennél a python programnál nincs semmi féle lokális konfigurációs file amit szerkesztenünk kell. Első indulásnál, weben keresztül kell majd konfigurálni. Viszont kézi indítás helyett, egyből csináljunk rá (systemd) service-t.

root@server# vi /etc/systemd/system/cps.service

A file tartalma a következő volt az én esetemben:

[Unit]
Description=Calibre-web
After=network.target

[Service]
Type=simple
User=calibre
ExecStart=/home/calibre/calibre-web-master/cps.py

[Install]
WantedBy=multi-user.target

Most engedélyezzük és indítsuk el a service-t.

root@server# systemctl enable cps.service
root@server# systemctl start cps.service

Az indítást követően a következő címet kell a böngészőbe írnunk:
http://[IP]:8083

Az első belépésnél meg kell adni a Calibre Library helyét a filesystem-en (az én esetemben /books/), majd néhány oldallal kapcsolatos és jogosultság kérdést. A submit és login gombok után már be is lehet lépni a felületre.

Az első felhasználónév és jelszó a következő lesz:

Username: admin
Password: admin123

(Az első dolgunk egy új admin felhasználó létrehozása legyen, és a beépített admin törlése)

A felületre lépve elérhető lesz a teljes könyvtárunk egy megújult és kellemes felületen. Ez az új felület nem csak szép, hanem rengeteg hasznos szolgáltatást is kínál:

  • Bootstrap 3 HTML5 interface
  • full graphical setup
  • User management
  • Admin interface
  • User Interface in english, french, german, polish, simplified chinese, spanish
  • OPDS feed for eBook reader apps
  • Filter and search by titles, authors, tags, series and language
  • Create custom book collection (shelves)
  • Support for editing eBook metadata
  • Support for converting eBooks from EPUB to Kindle format (mobi/azw)
  • Restrict eBook download to logged-in users
  • Support for public user registration
  • Send eBooks to Kindle devices with the click of a button
  • Support for reading eBooks directly in the browser (.txt, .epub, .pdf)
  • Upload new books in PDF, epub, fb2 format
  • Support for Calibre custom columns
  • Fine grained per-user permissions
  • Self update capability

A hosszú listából én csak a kinézetet és a beépített olvasót emelném ki, amiben könyvjelzőket is használhatunk.

Könyvolvasó App

Természetesen, kellett valamilyen (esetemben iOS) alkalmazás is, amivel elérhetem ezt a gyűjteményt. Én a Marvin nevű megoldást választottam. Egy nagyon kellemes és sokat tudó App Store találat, aminek van ingyenes verziója. Gyakorlatilag minden honnan támogatja az importálást. A mi esetünkben a OPDS importálásra lesz szükség. Adjuk meg a már ismer URL-t, csak a végére kell egy OPDS-t tennünk:

http://[IP]:8083/opds

Az importáláshoz még szükséges lesz felhasználó névre és jelszóra. Ez ugyan az, amit a webes felületen megadtunk. (Alapból admin/admin123, de remélem ezt már törölted és sajátot hoztál létre). Amennyiben minden működik, akkor a teljes Calibre könyvtárunkból böngészhetünk, és egy kattintásra, bármit letölthetünk az iOS olvasóba.

Összegzés

Meglepően jó megoldást lehet építeni meglévő és ingyenes programok segítségével. Számomra nagy megkönnyebbülés, hogy a könyveim nincsenek elveszve egy Cloud szolgáltatásban, és valami mágikus módon nem nyeli el egy alkalmazás, amiben meg van kötve a kezem. Ha felkeltettem az érdeklődésedet, és az említett problémára találtál jobb megoldást, akkor kérlek mindenképp oszd meg velem.

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük