logo_seafileL’objectif de cet article : installer un serveur de fichiers sur mon Raspberry Pi pour me permettre de synchroniser des documents entre plusieurs ordinateurs.

Au départ je voulais me tourner vers Owncloud, mais c’est trop lourd, et ça fait un tas de choses dont je n’ai pas utilité pour le moment.

Seafile est plus léger et fait parfaitement adapté à ce que je souhaite faire. De plus il existe une version prévue pour le Raspberry Pi. Seafile permet de synchroniser des fichiers et de partager des documents.

Seafile est un logiciel libre (pour la version Community), il se décline sous toutes les plates-formes et possède des clients Linux, Windows, Android et Mac. On peut aussi utiliser un navigateur internet pour se connecter. C’est un système de stockage de fichiers en mode Cloud. Comme il est libre, c’est pour moi la garantie de toujours contrôler mes données.

Seafile utilise une base de données pour fonctionner : on peut donc utiliser MySQL ou SQLite. Vu que la base ne prendra pas trop de place, et pour s’éviter une installation de MySQL, j’ai choisi d’utliser SQLite. De même, il peut s’interfacer sur un annuaire LDAP, mais je n’utiliserais pas cette option : pour une utilisation personnelle, cela ne sert pas à grand chose.

Préparer Rasbian pour Seafile

Pour commencer on met a jour le Raspberry, ça coûte rien :

sudo apt-get update
sudo apt-get upgrade

Prérequis pour Seafile : (en mode SQLite)

  • python 2.7 or python 2.6.5+
  • python-setuptools
  • python-imaging
  • (python-ldap)
  • sqlite3

Si vous avez avez la dernière version de Raspbian à jour, il ne manquera que : python-setuptools, python-imaging, sqlite3 :

sudo apt-get install python-imaging python-setuptools sqlite3

 

Télécharger Seafile

Comme je vais avoir des fichiers à stocker, pas la peine de compter sur la carte SD du Raspberry : je vais utiliser un disque externe pour cela (voir cet article sur la mise en place de ce disque externe).

Pour rappel, ce disque dur est accessible dans ma configuration sous /media/Data/. Commençons par ouvrir un terminal pour travailler et plaçons nous sur le disque dur externe :

cd /media/Data/

je commence par y créer le répertorie dans lequel sera Seafile, et je m’y déplace :

mkdir seafile
cd seafile

Il me faut à présent télécharger une version de Seafile compatible avec le Raspberry. L’archive de Seafile pour le Raspberry se trouve ici : https://github.com/haiwen/seafile-rpi. Nous allons prendre la dernière version stable, soit la 5.0.5 qui se trouve : https://github.com/haiwen/seafile-rpi/releases/download/v5.0.5/seafile-server_stable_jobenvil_5.0.5_pi.tar.gz

Nous allons faire tout ça dans notre terminal (nous sommes dans /media/Data/seafile/ pour rappel) :

  1.  télécharger notre archive de seafile
  2. l’extraire
  3. créer un répertoire (seafile_archive) et la déplacer dedans dedans (pour l’avoir sous la main au cas où)

Ce qui donne :

wget https://github.com/haiwen/seafile-rpi/releases/download/v5.0.5/seafile-server_stable_jobenvil_5.0.5_pi.tar.gz
tar -xzvf seafile-server_stable_jobenvil_5.0.5_pi.tar.gz
mkdir seafile_archive
mv seafile-server_stable_jobenvil_5.0.5_pi.tar.gz seafile_archive/

Installation de Seafile

Les fichiers ont été extraits, on peut lancer l’installation. Déplaçons-nous dans le répertoire du serveur Seafile pour lancer l’installation :

cd seafile-server-5.0.5
./setup-seafile.sh

Le script  setup-seafile.sh va poser quelques questions pour configurer Seafile :

Seafile1

Seafile nous donnes quelques infos, on fait juste [ENTER] pour passer à la suite.

Seafile2

Seafile commence par vérifier les dépendances : comme nous avons mis tout ce qu’il faut, il demande un nom pour le serveur.

Seafile3

On donne ensuite l’IP du Raspberry. Donc une bonne idée est de lui mettre une IP fixe, comme expliqué dans cet article ou celui-ci pour le wifi.

Seafile4

Seafile nous demande ensuite où stocker les données. Puisque nous l’avons installé sur un disque externe, les données seront la aussi : il nous propose donc /media/Data/seafile/seafile-data. Je fais juste [Entrée] pour valider car c’est ce que je veux.Seafile5

On peut changer le Port du serveur. C’est une bonne idée si on déploie Seafile en production. Si on veut conserver la valeur par défaut, on fait jsute [Entrée].

Seafile6

Seafile nous résume notre configuration avant de passer à la suite.

Seafile7

Puis conclut la configuration :

Seafile-8

Seafile crée les bases de données. Il termine en précisant les deux commandes à lancer pour être exécuté :

  • ./seafile.sh (avec l’option start, restart et stop) qui lance Seafile
  • ./seahub.sh (même genre d’options) qui lance le serveur web SeaHub, pour se connecter avec son navigateur

Lancement de Seafile

Dernière étape : lancer Seafile et se connecter avec son navigateur internet. Dans le terminal on lance :

./seafile.sh start

Puis il faut lancer le serveur SeaHub pour pouvoir se connecter en web :

./seahub.sh start

Au premier lancement de SeaHub, il nous est demandé de créer le compte admin : on complète alors avec une adresse mail (qui sera le login) et le mot de passe.

Seafile9

Il ne reste plus qu’à se connecter avec son navigateur internet : on utilise l’ip de la machine et le port. Si notre IP local est 192.168.1.100 et que l’on n’a pas changé le port par defaut (8000), on se rendra à l’adresse http://192.168.1.100:8000.

Et voila le résultat :

Seafile10

Petite correction sur une Raspbian configurée FR

Comme on peut le remarquer au premier lancement de seahub j’ai une ligne d’erreur qui n’empêche pas Seafile de tourner :

LC_ALL is not set in ENV, set to en_US.UTF-8 […]

En gros soucis du paramétrage de la langue. Il se trouve que lors de la configuration de ma Raspbian, j’ai mis comme charset le fr_FR.UTF-8. Dans mon cas, si je laisse comme ça, Seafile tourne bien, mais au lancement de la page web de login, il me faut systématiquement repasser sur le Français.

J’ai réglé ce problème en éditant le fichier seahub.sh. On cherche la ligne où se trouve ce bloc de code :

if [[ -z "$LANG" ]]; then
    echo "LANG is not set in ENV, set to en_US.UTF-8"
    export LANG='en_US.UTF-8'
fi
if [[ -z "$LC_ALL" ]]; then
    echo "LC_ALL is not set in ENV, set to en_US.UTF-8"
    export LC_ALL='en_US.UTF-8'
fi

Je remplace alors tous les en_US.UTF-8 par fr_FR.UTF-8. Ce qui donne :

if [[ -z "$LANG" ]]; then
    echo "LANG is not set in ENV, set to fr_FR.UTF-8"
    export LANG='fr_FR.UTF-8'
fi
if [[ -z "$LC_ALL" ]]; then
    echo "LC_ALL is not set in ENV, set to fr_FR.UTF-8"
    export LC_ALL='fr_FR.UTF-8'
fi

Puis je relance le serveur SeaHub par :

./seahub.sh restart

Et hop : le problème est résolu.

Il ne reste plus qu’à jouer un peu avec Seafile.

Les liens qui vont bien :