Dernier article d’une série de trois et point final du projet : Installer Calibre sur un Raspberry Pi, le lancer en mode serveur OPDS et me connecter dessus avec ma tablette ou mon téléphone pour parcourir ma bibliothèque numérique et télécharger des livres avec FBReader ou tout autre lecteur de e-book compatible OPDS. Rappel des épisodes précédents :

  1. Monter de manière permanente un disque dur USB
  2. Optimiser les accès en écriture sur la carte SD

Je commence par ouvrir une console. Pour installer Calibre, rien de plus simple :

sudo apt-get install calibre

Je veux que Calibre gère ma bibliothèque sur mon disque externe. Je crée tout d’abord un répertoire pour calibre dedans. Comme mon disque externe est monté sur /media/datas, je vais créer un répertoire ici :

mkdir /media/datas/calibre

A présent, je lance calibre : un assistant de bienvenue me guide pour configurer Calibre. La chose la plus importante à préciser est le répertoire.

calibre1

On précise ici le répertoire sur le disque externe

 

calibre2

 

calibre3

C’est fini

Il ne reste plus qu’à utiliser calibre pour construire sa bibliothèque numérique.

Lancer Calibre en mode serveur

Deux méthodes pour cela :

  1. lancer Calibre et dans le menu Connecter / Partager, choisir Démarrer le serveur de contenu.
  2. lancer le serveur directement dans un terminal

Je vais opter pour la seconde option, cela consommera moins de mémoire, je n’ai pas besoin de l’interface graphique de Calibre, juste du mode serveur.

Pour une info complète : Calibre Commande line interface

Pour lancer le mode serveur :

calibre-server &

Le fait de mettre & après une commande lance cette dernière et rend la main au terminal. Je peux donc fermer ma fenêtre terminal sans arrêter le serveur.

FBReader et l’OPDS

J’utilise FBReader (sous android) mais cela fonctionne avec tout autre lecteur e-books compatible OPDS.

Lançons FBReader. Choisir dans le menu : Bibliothèque Réseau

fbr1

Puis Ajouter un catalogue :

fbr2

Si on connaît l’adresse IP du Raspberry sur lequel se trouve Calibre, on peut saisir directement l’URL, sinon, on cherche sur le réseau local, c’est très rapide.

fbr3

Mon Raspberry est trouvé ainsi que le serveur Calibre. Je le sélectionne.

fbr4

C’est terminé, je peux parcourir ma bibliothèque numérique et télécharger les documents que je souhaite.

fbr5Pas besoin de relancer le scan du serveur Calibre lors d’une autre utilisation de FBReader : ma bibliothèque reste dans le menu de FBReader.

fbr6

Et voilà, tout fonctionne à merveille.

Cet article est le 2e d’une série de trois. Je vous rappelle ici mon but : faire tourner un serveur calibre sur mon Raspberry. Ma feuille de route :

  1. Monter de manière permanente un disque dur USB
  2. Optimiser les accès en écriture sur la carte SD
  3. Installer Calibre en mode serveur

La distribution Linux Raspbian pour le Raspberry est une bonne distribution, basée sur la Debian, qui est stable et performante. Mais un système Linux écrit souvent sur le disque dur pour deux raisons principales (autres que l’écriture de fichiers bien sur) :

  1. le swap
  2. les fichiers log

On va donc essayer de réduire ces deux choses pour limiter les accès en écriture sur la carte et ainsi augmenter sa durée de vie. Car c’est le problème principal des cartes SD : elles se fatiguent vite si on écrit souvent dessus.

Le swap

Le swap est un fichier d’échange qui intervient lorsque la RAM commence à être pleine ou qu’elle est sollicitée par un logiciel qui a besoin de ressource : le système va alors écrire sur le disque dur une partie de la RAM pour libérer de la place. C’est une zone d’échange, une sorte de RAM virtuelle qui augmente la taille de la RAM, mais qui est bien sur plus lente car elle passe par un accès disque. Le problème ici : le swap se trouve sur le disque, donc sur la carte SD du Raspberry.

On peut donc se passer de swap tant qu’on ne demande pas au Raspberry des taches trop gourmandes en RAM (ex : retouche d’images, …)

Vérifions cette histoire de swap par la commande top (en lançant simplement top dans un terminal). On obtient ceci :

swapon

On remarque qu’il y a du swap, pour l’instant non utilisé, mais réservé à cet effet, au niveau de la ligne qui commence par KiB Swap.

Pour rappel sur la commande Top et d’autres commandes du même style par ici….

Supprimons le swap par la commande :

sudo dphys-swapfile swapoff

et relançons top pour vérifier :

swapoff

Comme on le voit à présent, il n’y a plus de mémoire réservée pour le swap. Si jamais le système devient instable ou mou, par besoin de swap, on peut le réactiver avec la commande :

sudo dphys-swapfile swapon

Il y a toutefois un soucis : au redémarrage du Raspberry, le swap est réactivé, notre commande le désactive juste quand on lui demande. On peut enlever le swap automatiquement au démarrage par la commande :

sudo update-rc.d -f dphys-swapfile remove

Voilà une affaire de régler : plus de swap pour de bon !

Les fichiers log et temporaires

Le système Linux est très bavard et il écrit pas mal de chose à tout bout de champ. Le problème est que la carte SD subit de nombreuses écritures, ce qui n’est pas bon pour elle. On va donc déplacer les fichiers log dans la RAM du Raspberry, on profitera pour faire pareil avec les fichiers temporaires. Le seul soucis est qu’on perd les fichiers log du système. Ce n’est pas gênant de manière générale, mais ça le devient en cas de serveur web.

Pour cela on va modifier un peu le fichier /etc/fstab. On l’édite par la commande :

sudo nano /etc/fstab

Puis on ajoute ces lignes à la fin :

# les fichiers de log et tempo passent en RAM
tmpfs   /tmp            tmpfs   defaults,noatime,mode=1777,size=10m     0       0
tmpfs   /var/spool      tmpfs   defaults,noatime,mode=1777              0       0
tmpfs   /var/tmp        tmpfs   defaults,noatime,mode=1777,size=10m     0       0
tmpfs   /var/log        tmpfs   defaults,noatime,mode=0755,size=10m     0       0

Je précise pour certains répertoires size = 10m, pour limiter la taille et ne pas occuper trop de RAM. Cela préserve la RAM de trop gros fichiers. J’enregistre et je reboote. A présent mes 4 répertoires sont montés en RAM et plus sur la carte SD.

C’est gagné !

[Mise à jour du 16/11/2016] :

Attention toutefois avec le répertoire /var/spool. En effet ce répertoire contient le répertoire crontab qui gère tous les appelle à cron. Cron permet de définir des taches qui seront lancées à un instant donné, ou lancées périodiquement. Le fait que le répertoire crontab soit en ram détruira à chaque reboot du Raspberry la listes des taches programmées.

Donc si vous utilisez cron sur votre Raspberry, ne mettez pas /var/spool dans la ram.

Merci à ThePhenix pour l’info !

 

 

Je souhaite utiliser mon Raspberry Pi comme serveur de e-books, de manière à pouvoir consulter ma collection de livres et autres documents numériques sur ma tablette.

J’utilise sur cette dernière FBReader pour lire mes e-books et pdf. Et sur mon pc, Calibre pour gérer ma collection de livres numériques. Calibre possède une fonctionnalité intéressante qui permet de l’activer en mode serveur OPDS: il partage le catalogue de livres sur mon réseau local et me permet de les télécharger. FBReader possède un plugin qui permet de se connecter sur ce catalogue OPDS. Je peux ainsi consulter ma bibliothèque numérique et récupérer des livres sur ma tablette pour les lire.

Mon idée est donc la suivante : utiliser mon Raspberry Pi comme serveur pour calibre. C’est un des avantages du Raspberry Pi : il est petit, consomme peu, idéal pour des petits serveurs sur son réseau local. Toutefois, je veux diminuer au maximum les écritures sur la carte SD pour augmenter la durée de vie de cette dernière. Et il me faut en plus monter un disque externe USB sur le Raspberry automatiquement à chaque boot. Ma feuille de route pour mon projet :

  1. Monter de manière permanente un disque dur USB
  2. Optimiser les accès en écriture sur la carte SD
  3. Installer Calibre en mode serveur

Commençons donc par ce premier post d’une série de trois qui va détailler toutes les actions.

Comme toujours, ouvrons un terminal. Puis branchons le disque dur USB. Le mien est déjà formaté en ext4 : en effet, comme je le réserve pour l’usage du Raspberry et que mon autre pc est sous linux, je l’ai formaté sur un système de fichier linux.

J’ai besoin de connaître le nom de ma partition usb pour pouvoir la monter sur le système de fichier du Raspberry. Pour cela :

sudo fdisk -l

Cette commande nous renvoie quelques informations (je fais un peu le ménage pour ne garder que les lignes qui m’intéressent) :

Device         Boot  Start      End  Sectors  Size Id Type
/dev/mmcblk0p1        8192   131071   122880   60M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      131072 62333951 62202880 29,7G 83 Linux

Device     Boot Start       End   Sectors   Size Id Type
/dev/sda1        2048 975400959 975398912 465,1G 83 Linux

Je vois les deux partitions de ma carte SD avec la Raspbian, et en dernier mon disque externe avec son unique partition : /dev/sda1

Je veux que mon disque externe soit accessible dans le répertoire /media/datas. Je commence par créer ce répertoire en root :

sudo mkdir /media/datas

Puis je monte le disque externe avec la commande :

sudo mount -t ext4 /dev/sda1 /media/Data/

Pour le démonter :

sudo umount /media/Data

Je vérifie que tout fonctionne bien et que mon disque est bien monté et accessible dans le bon répertoire. Si je reboote le Raspberry (le disque externe connecté au boot) : il n’est pas monté. Je dois donc à présent automatiser le montage du disque. Pour cela, j’édite le fichier /etc/fstab

sudo nano /etc/fstab

Je le modifie en ajoutant à la fin :

/dev/sda1    /media/datas    ext4    defaults    0    0

On enregistre et c’est bon. Bien sur et comme toujours, il faut modifier certaines valeurs en fonction du nom de la partition à monter (/dev/sda1) et du point de montage (/media/datas) que vous souhaitez avoir.

On redémarre le Raspberry pour une ultime vérification : et là, oh joie !, tout fonctionne !

Dans le prochain épisode nous verrons comment diminuer l’usure de la carte SD en essayant de réduire les accès en écriture sur la carte SD.

 

Le Raspberry PI 3

La Fondation Raspberry vient de sortir un nouveau modèle : le Raspberry Pi 3.

Plutôt que de faire un long commentaire sur ce raspi3nouveau modèle, je n’insisterai que sur les point que j’apprécie le plus, en comparaison avec le Raspberry Pi 2 :

  • le processeur passe de 1000 à 1200 MHz, toujours en quadcore, mais sur du 64 bits au lieu de 32. Il faudra donc la dernière version de Raspbian qui supporte le 64 bits. D’où le petit soucis sur le réglage du wifi.
  • toujours 1 Go de ram, pas de changement
  • Wifi et bluetooth intégré : plus besoin d’ajouter un dongle, la carte possède tout ce qu’il faut, ça libère de l’usb.
  • alimentation : usb 2.5 A. Ceci est une bonne nouvelle car cela permet de brancher un disque externe usb en ayant assez de courant pour l’alimenter. Plus besoin d’un hub usb alimenté, le Rapsberry 3 fournira le courant nécessaire au disque.
  • C’est un modèle B, donc comme le Raspberry Pi 2, les boîtiers sont les mêmes

Après avoir téléchargé la dernière version de la Raspbian, puis l’avoir installée sur la carte SD, j’essaie de refaire ma configuration de connexion Wifi avec IP fixe, comme je l’avais déjà expliquer ici.

Mais soucis : cela ne fonctionne plus du tout. La modification proposée du fichier /etc/network/interfaces ne me permet plus de configurer ma wifi en ip fixe.

D’où le correctif de ce jour.

Donner une IP fixe en Wifi

Première étape : Définir le ssid et le mot de passe de la connexion wifi

Ouvrir un terminal et éditer en root le fichier /etc/wpa_supplicant/wpa_supplicant.conf

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

A la fin du fichier, on ajoute ceci :

network={
ssid="MonSSID"
psk="LaCleWifiDeLaBox"
key_mgmt=WPA-PSK
}

On remplace bien sur MonSSID et LaCleWifiDeLaBox par les bonnes valeurs. Key_mgmt indique que notre clé wifi est de type WPA. Pour d’autres valeurs et tout savoir sur le fichier wpa_supplicant, c’est par ici.

On peut reproduire ce bloc avec d’autres valeurs, si on doit se connecter à d’autre réseau wifi : dans ce cas, faire un bloc network par réseau différent. On enregistre et c’est bon

Deuxième étape : Configurer son IP

Pour cela, et c’est là vraiment la nouveauté, il faut éditer le fichier suivant (toujours en root avec sudo) :

sudo nano /etc/dhcpcd.conf

A la fin du fichier, ajouter ceci :

# configuration ip static pour wlan0
interface wlan0
static ip_address=192.168.1.20/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

L’adresse 192.168.1.20 correspondra à l’IP que l’on veut pour l’interface wifi. Routers correspond à l’ip de la box de son fournisseur d’accès. En général on mettra cette même adresse pour le domain name servers.

On redémarre le Raspberry Pi, et voilà, on a la bonne ip !