COPS : héberger sa propre bibliothèque d'ebooks

Si comme moi vous aimez dévorer ici et là un bon bouquin, peut-être avez-vous également découvert la lecture numérique. Moi, ça fait quelques années que je lis aussi bien en papier qu’avec une liseuse (ou tout autre appareil électronique à vrai dire).

Tous les ans, de plus en plus de lecteurs tentent de lire des ebooks : pourtant, cela reste un marché modeste au regard du livre fait d’arbre. On peut sans doute trouver mille explications à cela, je suis convaincu que l’une d’entre elles peut s’exprimer ainsi : c’est le bazar.

Voyez plutôt :

  • En apparence, on peut lire sur de nombreuses machines. Dans les faits, les compatibilités sont assez aléatoires ;
  • Les DRM sont des verrous posés sur les livres électroniques : selon l’endroit où ils sont achetés, selon la liseuse ou l’appareil de lecture, ils peuvent ou ne peuvent pas être lus ;
  • Vous pensez que les DRM sont standardisés ? Bof. Les différentes solutions sont incompatibles entre elles, requièrent tel ou tel type de matériel, etc. Et ne me lancez pas sur le DRM Adobe…
  • Ces livres que vous pensez acheter, vous n’avez en réalité qu’une licence d’accès. La migration d’un appareil à l’autre, le prêt, la garantie d’y accéder pour toujours ne sont pas garantis ;
  • Un livre acheté sur une boutique en ligne y est le plus souvent attaché ;
  • Les formats : mobi, azw3, azw, cbz, cbr, epub 2, epub 3, kcc, txt, pdf… une vraie jungle. Autant les geeks s’y retrouveront, autant un utilisateur non technophile aura bien du mal à vous donner les compatibilités de sa liseuse.

Il n’est pas étonnant que ça puisse sembler intimidant au moment de tenter l’aventure. Le côté simple des écosystèmes joue également son rôle : aujourd’hui, acheter un Kindle et se fournir en ebook c’est Amazon, c’est assez facile. Acheter une Vivlio et les ebooks au même endroit, ça va. Conséquence logique : on se retrouve rapidement dans un environnement verrouillé, dont il est plus difficile de sortir.

Heureusement, on peut s’en sortir : le format epub s’impose malgré tout comme le format par défaut (sauf chez Amazon). Et il est possible de trouver des livres non protégés pour pouvoir en profiter comme on le souhaite.

Gérer sa bibliothèque

À partir du moment où je me suis mis à consommer mes lectures numériques de façon plus responsable, je me suis rendu compte que tout n’allait pas être simple.

Si j’achète des ebooks chez les éditions du Bélial’ (foncez, c’est de la bonne), sur la plateforme 7Switch ou chez Les Moutons Électriques, mes livres se retrouvent éparpillés un peu partout.

Pour centraliser tout ça, je garde une copie des fichiers de mon côté. Et pour s’occuper du tout, rien de mieux que Calibre : le meilleur logiciel existant pour organiser des ebooks.

Image description

Maintenant, il me suffit d’ouvrir Calibre pour retrouver mes livres, en ajouter, les transférer dans ma liseuse, etc. Mais je voulais aussi pousser cela plus loin : comment faire pour pouvoir y accéder quand je le souhaite, où que je sois ?

Calibre permet de lancer un serveur web intégré : c’est une solution pratique, mais qui nécessite d’avoir son ordinateur allumé. Sans compter que ce n’est pas une solution très légère en termes de consommation de ressources.

COPS

C’est là qu’intervient COPS, développé par Sébastien Lucas et disponible sur GitHub. C’est un serveur extrêmement léger qui permet de rendre une bibliothèque Calibre accessible sous la forme d’une page web. Aucune base de données n’est nécessaire et ça demande peu de ressources. Penser donc : la page listant les 25 derniers livres ajoutés ne pèse que 392 ko, pour seulement 8,82 ko transférés sur le réseau.

Possédant un NAS et un nom de domaine, le plus simple était d’héberger COPS dessus. Pour les modèles Synology, il existe un paquet chez SynoCommuynity, mais j’ai préféré l’installer à la main.

Attention : COPS nécessite de pouvoir lire le dossier contenant la bibliothèque Calibre. J’ai opté pour une solution hybride :

  • Ma bibliothèque est gérée et stockée sur mon ordinateur ;
  • Le dossier est synchronisé sur le NAS via Synology Drive (synchronisation unidirectionnelle ordinateur > NAS).

Comme ça, dès que je modifie la bibliothèque, cela est répercuté sur le NAS. Mais toute modification faite sur le NAS (perte de donnée, mauvaise manipulation) n’est pas synchronisée sur l’ordinateur.

Prérequis

Voici les points importants pour la suite :

  • Mon NAS est un DS118
  • Il fonctionne actuellement sur le DSM 7.0.1-42218
  • Le paquet WebStation est en version 3.0.0-0308
  • Le serveur Apache fonctionne en 2.4
  • Le serveur PHP est en 7.4.18
  • Je dispose d’un nom de domaine qui me permet d’accéder au contenu de l’extérieur, avec un DDNS pour gérer l’IP dynamique

Installation de COPS

J’utilise le dossier partagé Web du NAS : un dossier pour contenir COPS, un autre pour contenir la bibliothèque d’ebook :

  • dossier_1 : COPS
  • dossier_2 : bibliothèque Calibre

Vous pouvez bien sûr les nommer comme bon vous semble. Selon votre configuration dans Web Station, le nom du dossier contenant COPS fera partie de l’URL pour y accéder. Par exemple : https://NAS.fr/dossier_1

À partir de ce point, je pars du principe que la bibliothèque Calibre est synchronisée dans le dossier_2.

Ensuite :

  1. Sur le NAS, dans le volume partagé Web, créer le dossier_1.
  2. Télécharger la dernière version de COPS sur ce lien ;
  3. Décompresser le contenu de l’archive dans le dossier_1 sur le NAS.

Paramétrer COPS

Dans le dossier où est installé COPS, ouvrir le fichier config_default.php avec un éditeur de texte (Textedit marche bien, mais pour avoir un rendu plus adapté, SublimeText fait du bon travail).

  • Ligne 33 : $config['cops_full_url'] = 'https://domaine.fr/dossier_1/';
    Placer l’URL d’accès entre les apostrophes.
  • Ligne 38 : $config['cops_recentbooks_limit'] = '25';
    Choisir le nombre de livres présenté dans la section « récemment ajoutés ». 25 par défaut, à vous de voir.
  • Ligne 58 : $config['cops_title_default'] = 'titre';
    Choisir le nom de la librairie.
  • Ligne 63 : $config['cops_subtitle_default'] = 'sous titre';
    Possible sous-titre de la page.
  • Ligne 109 : $config['cops_prefered_format'] = array('EPUB', 'AZW3', 'PDF', 'MOBI', 'AZW')'
    Choisir l’ordre de préférence des fichiers présentés. Là, ça dépend de vos préférences. Il me semble toutefois utile de placer EPUB en premier choix.
  • Ligne 117 : $config['cops_use_url_rewriting'] = '1';
    Activer la ré-écriture d’URL, utile pour la compatibilité avec des applications compatibles OPDS.
  • Ligne 328 : $config['cops_language'] = 'fr';
    Choisir le langage par défaut de COPS, ici en français.

Ensuite, sauvegardez le fichier et sortez.

Trouver le fichier config_local.php.example et en faire une copie dans le dossier. Puis renommer la copie en config_local.php avant de l’ouvrir avec un éditeur de texte.

  • Ligne 17 : $config['calibre_directory'] = '/volume1/web/dossier_2/';
    On va renseigner ici le chemin vers les ebooks sur le NAS.
  • Ligne 22 : $config['cops_title_default'] = "sous titre";
    On reprend l’info du fichier précédent à la ligne 63.
  • Ligne 30 : $config['cops_use_url_rewriting'] ="1";
    On active à nouveau la ré-écriture URL.

Sauvegarder et quitter le fichier. Si tout va bien, ça fonctionne. En utilisant l’URL https://NAS.fr/dossier_1 l’interface s’ouvre.

Image description

L’inconvénient de cette solution, c’est que tout est accessible par n’importe qui, il n’y a aucune protection. Or, je ne souhaite pas que mes ebooks soient disponibles aux quatre vents.

Protéger l’accès

COPS peut se reposer sur un contrôle d’accès basique au niveau du serveur apache. Ouvrez un éditeur de texte puis ouvrez le fichier .htaccess situé à la racine du dossier_1. En bas, trouvez cette section :

###########################################
<FilesMatch "\.php$">
AuthUserFile /volume1/web/dossier_3/.htpasswd
AuthGroupFile /dev/null
AuthName "Login"
AuthType Basic
require valid-user
</FilesMatch>

À la troisième ligne, il faut indiquer le chemin vers un 3e dossier qui contiendra la liste des accès autorisés. Dans l’exemple, c’est le dossier_3 placé lui-même à la racine de /web. Une fois que c’est fait, sauvegardez.

Évidemment, il faut ensuite créer un nouveau dossier à la racine du volume partagé Web et lui donner le même nom dossier_3. Puis :

  1. Rendez-vous sur un site qui génère des identifiants htpasswd, comme celui-ci par exemple.
  2. Choisissez et renseignez un login dans le champ Username.
  3. Choisissez et renseignez un mot de passe dans le champ Password.
  4. Dans le menu déroulant Mode, sélectionnez Bcrypt (Apache v2.4 onwards).
  5. Cliquez sur le bouton Create .htpasswd file
  6. Une ligne grise avec du texte va apparaitre sous la forme test:$2y$10$AXxSFauIXJzVN4yGqWqfreb4JI0KKAQHLxG8jIUAkj1gyaQFKM3eC.
  7. Copiez la ligne entière et collez-la dans un fichier texte.
  8. Vous pouvez recommencer et en ajouter autant que vous voulez : une ligne par accès dans le fichier.
  9. Une fois terminé, sauvegardez le fichier dans le dossier_3 sous le nom .htpasswd.
  10. Ouvrez un nouveau fichier texte vierge et collez la ligne suivante : deny from all.
  11. Sauvegardez-le dans le dossier_3 sous le nom .htaccess. Ce fichier empêchera l’accès au dossier depuis le web, on ne sait jamais.

Maintenant, vous rencontrez deux comportements différents selon comment vous accéder à COPS.

  • Via l’URL principale https://nas.fr/dossier_1/ : votre navigateur internet (ou application OPDS) affichera un formulaire d’accès login/mot de passe.
  • Via l’URL secondaire https://nas.fr/dossier_1/login : vous obtiendrez un formulaire sous la forme d’une page web. L’intérêt de cette URL, c’est qu’elle est nativement compatible avec un gestionnaire de mot de passe.

Tips

Pas de mot de passe depuis le réseau local

Il est possible de désactiver le contrôle d’accès sur le réseau local exclusivement, tout en demandant toujours un couple login/mot de passe depuis l’extérieur.

Pour cela, éditez le fichier .htaccess situé dans le dossier_1 (celui qui contient COPS) et retournez dans la section finale.

Ensuite, commencez par retirer la ligne require valid-user\. Remplacez par ce qui suit :

<RequireAny>
Require valid-user
Require ip 192.168.0
</RequireAny>\

Pour l’adresse IP, il faudra l’adapter à votre réseau local, en ne laissant que les 3 premières parties. Par exemple, si votre adresse IP locale est 192.168.1.22, il faut laisser juste 192.168.1 dans la ligne.

Plusieurs librairies

Il est possible d’avoir plusieurs librairies séparées. Par exemple, si vous gérez des bibliothèques différentes avec Calibre. Dans ce cas, vous devez synchroniser chaque bibliothèque dans un dossier séparé à la racine de /web sur le NAS.

Ensuite, dans le dossier_1, éditez le fichier config_local.php. À la ligne 17, effacer le contenu $config['calibre_directory'] = '/volume1/web/dossier_2/';.

Ensuite, coller ceci : $config['calibre_directory'] = array (
"First database name" => "/volume1/web/Calibre_library1/",
"Second database name" => "volume1/web//Calibre_library2/");\

Vous pouvez nommer chaque librairie en remplacement First/Second database name. Ensuite, personnalisez le chemin vers chaque librairie selon le nom que vous avez donné aux dossiers.

Utiliser COPS

Sur la page principale, vous avez une icône en forme de roue crantée en haut à droite. Celle-ci sert à faire apparaitre le champ de recherche.

La clé plate en bas à gauche affiche les options : vous pouvez notamment changer de thème.

Quand vous avez une liste de livre sous les yeux :

  • Cliquer sur une couverture l’affiche en grand ;
  • Cliquer sur les informations du livre ouvre un popup avec plusieurs possibilités :
    • Une icône en forme de maillon de chaine devant le titre : pour récupérer un lien direct vers ce livre, pratique pour se l’envoyer ou partager un ouvrage avec la famille.
    • Les informations détaillées du livre. Vous pouvez cliquer dessus : sur l’auteur pour accéder à tous ses livres, sur l’étiquette pour voir tous les ouvrages correspondants, sur la série pour voir la série complète, etc.
    • Les boutons de formats à droite vous permettent de récupérer le fichier correspondant.
    • Le bouton en forme d’œil vous permet de lire le livre dans un nouvel onglet avec un lecteur léger.
    • Si vous avez paraîtrez l’envoi par mail, vous trouverez une icône en forme d’enveloppe.

Image description

Cet article a été mis à jour le 22.01.03