Seafile est une alternative open source à Dropbox. Elle permet le chiffrement des données entre le client et le serveur ainsi que sur le server (le serveur ne disposant pas du mot de passe de chiffrement). Malheureusement aucun paquet Seafile n'est disponible pour Synology. Afin de minimiser la maintenance de l'installation j'ai choisi d'installer Seafile dans un chroot Debian chroot tournant sur le NAS.
Installation des paquets
La documentation de référence pour installer Seafile depuis la source est disponible sur https://github.com/haiwen/seafile/wiki/Build-and-deploy-seafile-server-from-source. Cette procédure reprend la documentation officielle pour installer Seafile 3.0.x en incluant les détails spécifiques à la distribution Debian et ses paquets disponibles ; elle suppose que vous ayez déjà mis en place un chroot Debian sur Synology.
Installation des librairies de développement
~$ aptitude install libevent-dev libcurl4-openssl-dev libglib2.0-dev uuid-dev intltool libsqlite3-dev libarchive-dev libtool libjansson-dev valac libfuse-dev
Au moment de la rédaction certains packages ne sont pas disponibles dans Debian stable. Ajouter les dépots testing aux sources et définir des préférences afin de garantir que la version testing ne sera pas choisie par défault. Consulter AptPreferences pour davantage de détails à propos d'apt pinning.
~$ cat >> /etc/apt/sources.list << EOF
~$ deb http://ftp.fr.debian.org/debian/ jessie main contrib non-free
~$ deb-src http://ftp.fr.debian.org/debian/ jessie main contrib non-free
~$ EOF
~$ cat > /etc/apt/preferences.d/00preferStable << EOF
~$ Package: *
~$ Pin: release a=stable
~$ Pin-Priority: 900
~$
~$ Package: *
~$ Pin: release a=testing
~$ Pin-Priority: 800
~$ EOF
# Adding the packages from jessie (Debian testing)
~$ aptitude install libonig-dev -t jessie
~$ aptitude install libzdb-dev libsqlite3-dev sqlite3 -t jessie
La seule exception est libevhtp: une version spéciale de cette librairie est requise et n'est pas disponible sous Debian.
~$ mkdir libs
~$ cd libs
~$ wget https://github.com/ellzey/libevhtp/archive/1.1.6.zip
Décompresser la librairie et utiliser cmake pour préparer la compilation.
~$ aptitude install cmake
~$ cmake .
~$ make
~$ sudo make install
Installer ensuite les paquets pour seahub, le front end Python de Seafile. Certaines librairies Python ne sont pas disponible dans les dépots Debian et Seafile 3.0.x nécessite Django 1.5.
~$ aptitude install python-simplejson python-chardet gunicorn python-imaging python-six
~$ # Some python lib aren't available from Debian.
~$ aptitude install python-pip
~$ pip install django==1.5
~$ pip install djblets==0.6
Preparation du projet Seafile
Ajouter un utilisateur seafile et créer un dossier pour préparer le layout du project. Définir ORGANIZATION_NAME avec un nom décrivant votre installation Seafile (nom d'entreprise ou nom de domaine).
~$ ORGANIZATION_NAME=
~$ adduser seafile
~$ su seafile
~$ cd
~$ mkdir -p $ORGANIZATION_NAME/seafile-server
~$ cd $ORGANIZATION_NAME/seafile-server
Obtenir les sources. Remplacer VERSION avec la version de Seafile désirée.
~$ VERSION=3.0.3
~$ mkdir src
~$ cd src
~$ wget https://github.com/haiwen/libsearpc/archive/v${VERSION}-server.tar.gz
~$ tar xf v${VERSION}-server.tar.gz
~$ rm v${VERSION}-server.tar.gz
~$ wget https://github.com/haiwen/ccnet/archive/v${VERSION}-server.tar.gz
~$ tar xf v${VERSION}-server.tar.gz
~$ rm v${VERSION}-server.tar.gz
~$ wget https://github.com/haiwen/seafile/archive/v${VERSION}-server.tar.gz
~$ tar xf v${VERSION}-server.tar.gz
~$ rm v${VERSION}-server.tar.gz
~$ cd ..
~$ wget https://github.com/haiwen/seahub/archive/v${VERSION}-server.tar.gz
~$ tar xf v${VERSION}-server.tar.gz
~$ rm v${VERSION}-server.tar.gz
~$ mv seahub-${VERSION}-server seahub
Compilation de Seafile
Générer et installer les projets Seafile. Les commandes autogen, configure et make peuvent être executée par l'utilisateur seafile mais la commande "make install" nécessite les privileges de l'utilisateur root.
~$ cd src/libsearpc-${VERSION}-server
~$ ./autogen.sh
~$ ./configure
~$ make
~$ make install
~$ ~$ cd ../ccnet-${VERSION}-server
~$ ./autogen.sh
~$ ./configure --disable-client --enable-server # `export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig` if libsearpc is not found
~$ make
~$ make install
~$
~$ cd ../seafile-${VERSION}-server
Avec Seafile 3.0.3, l'exécutable seafile-controller nécessite une petite correction. Au démarrage, ce programme définit ses dossiers de configuration, bin et pids en fonction de l'emplacement du binaire. Etant installé dans /usr/local/bin au lieu d'un sous dossier de seafile-server, le démarrage échoue. Pour le corriger, éditer la fonction init_seafile_path dans le fichier controller/seafile-controller.c :
static void init_seafile_path (char *config_dir)
{
topdir = g_path_get_dirname (config_dir);
installpath = g_build_filename (topdir, "seafile-server", NULL);
}
Il faut également modifier l'appel à init_seafile_path depuis la fonction seaf_controller_init :
static int seaf_controller_init (SeafileController *ctl,
char *config_dir,
char *seafile_dir,
char *logdir,
gboolean cloud_mode)
{
init_seafile_path (config_dir);
Completer maintenant l'installation de seafile-server avec cette petite correction.
~$ ./autogen.sh
~$ ./configure --disable-client --enable-server
~$ make
~$ make install
Deploiement de Seafile
Avec l'utilisateur seafile, se placer dans le dossier racine et démarrer le script de configuration de Seafile.
~$ cd ~/$ORGANIZATION_NAME
~$ export PYTHONPATH=/home/seafile/$ORGANIZATION_NAME/seafile-server/seahub/thirdpart
~$ seafile-admin setup
Répondre aux quelques questions d'installation et démarrer Seafile
~$ seafile-admin setup
Seafile doit maintenant être lancé et accessible depuis le NAS.
Démarrage automatique de Seafile
La commande seafile-admin doit être lancée par l'utilisateur seafile depuis le dossier racine de l'installation. Avec l'utilisateur seafile, créer un script pour lancer cette commande.
~$ cd ~/$ORGANIZATION_NAME/
~$ cat >> start_seafile.sh << EOF
~$ #!/bin/bash
~$ cd `dirname $0`
~$ seafile-admin start
~$ EOF
~$ chmod +x start_seafile.sh
Puis avec l'utilisateur root, installer sudo
~$ aptitude install sudo
La dernière partie est d'ajouter ce script à la séquence de démarrage de Synology. Si un script S99chrootDebian.sh est déjà présent, y ajouter :
~$ cat >> /usr/local/etc/rc.d/S99chrootDebian.sh << EOF
~$ # Start seafile
~$ chroot \$CHROOT /usr/bin/sudo -u seafile /bin/bash /home/seafile/<organization_name>/start_seafile.sh
~$ EOF
~$ chmod 755 /usr/local/etc/rc.d/S99chrootDebian.sh
Commentaires
Merci pour ce tuto détaillé. Je le suis avec comme variante de travailler dans le Debian chroot de SynoCommunity (https://synocommunity.com), du coup j'ai pu installer libevhtp avec aptitude.
Mon problème est ailleurs : lorsque je veux modifier la fonction init_seafile_path comme indiqué, la mienne ne prend pas de paramètre, du coup, je ne vois pas comment la modifier. Je pourrais modifier l'appel aussi, mais quoi lui passer. Ci-dessous la fonction qui est dans le code source que j'ai obtenu en suivant le tuto.
Tout aide sera la bienvenue ! Merci.
Franck
Code :
static void
init_seafile_path ()
{
GError *error = NULL;
char *exectuble = g_file_read_link ("/proc/self/exe", &error);
char *tmp = NULL;
if (error != NULL) {
seaf_warning ("failed to readlink: %s\n", error->message);
return;
}
bin_dir = g_path_get_dirname (exectuble);
tmp = g_path_get_dirname (bin_dir);
installpath = g_path_get_dirname (tmp);
topdir = g_path_get_dirname (installpath);
g_free (exectuble);
g_free (tmp);
}
Effectivement petit oubli, je n'avais pas mentionné le changement dans l'appel à init_seafile_path depuis seaf_controller_init. C'est corrigé, il suffit normalement d'ajouter config_dir en paramètre lors de l'appel.
Merci :cheer:
F.
Merci pour ce tutoriel bien complet !
Par contre, je rencontre un problème au niveau du build de la librairie ccnet ...
Voici le bout de code montrant l'erreur lors de l'éxécution de la commande 'make' dans le dossier "ccnet-3.0.3-server"
----------------------------------
[libsearpc]: done
make all-am
make[3]: Entering directory '/home/seafile/seafile-server/src/ccnet-3.0.3-server/lib'
/bin/bash ../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I../include -I../include/ccnet -I../lib -I../include -DG_LOG_DOMAIN=\"Ccnet\" -pthread -I(DESTDIR)/usr/local/include -I(DESTDIR)/usr/local/include/searpc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -Wall -DCCNET_LIB -g -O2 -MT libccnet_la-ccnet-client.lo -MD -MP -MF .deps/libccnet_la-ccnet-client.Tpo -c -o libccnet_la-ccnet-client.lo `test -f 'ccnet-client.c' || echo './'`ccnet-client.c
/bin/bash: -c: line 0: syntax error near unexpected token `('
/bin/bash: -c: line 0: `/bin/bash ../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I.. -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I../include -I../include/ccnet -I../lib -I../include -DG_LOG_DOMAIN=\"Ccnet\" -pthread -I(DESTDIR)/usr/local/include -I(DESTDIR)/usr/local/include/searpc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -Wall -DCCNET_LIB -g -O2 -MT libccnet_la-ccnet-client.lo -MD -MP -MF .deps/libccnet_la-ccnet-client.Tpo -c -o libccnet_la-ccnet-client.lo `test -f 'ccnet-client.c' || echo './'`ccnet-client.c'
Makefile:563: recipe for target 'libccnet_la-ccnet-client.lo' failed
make[3]: *** [libccnet_la-ccnet-client.lo] Error 1
make[3]: Leaving directory '/home/seafile/seafile-server/src/ccnet-3.0.3-server/lib'
-----------------
L'autogen ou le configure n'aurait pas marché ? Je ne sais pas, je trouve ça vraiment bizarre comme erreur, aurais-tu des idées ? (ou au moins comment débuguer la chose ... )
Merci d'avance :)
Cutman2593
Quelques pistes :
- Vérifies que la commande executée est make et non make install (la présence de DESTDIR dans la ligne générant l'erreur est étrange, cette variable étant généralement utilisée pour l'installation)
- Relance les commandes autogen.sh et configure donnera peut-être des messages d'erreurs permettant de comprendre ce qui ne va pas.
Si ces solutions ne donnent rien :
- Edite le fichier Makefile et remplace (DESTDIR) par $(DESTDIR)
- Lance make DESTDIR=/
Après avoir suivi tes conseils, j'ai modifié tous les Makefile incorrects en corrigeant la syntaxe. Du coup la compilation des librairies externes a fonctionné.
Par contre, je les collectionne ... là, bug au niveau de la compilation de seafile-server,
Code :
repo-op.o: In function `gen_new_commit':
/home/seafile/seafile-server/src/seafile-3.0.3-server/server/repo-op.c:520: undefined reference to `seaf_branch_manager_test_and_update_branch'
repo-op.o: In function `seaf_repo_manager_revert_on_server':
/home/seafile/seafile-server/src/seafile-3.0.3-server/server/repo-op.c:4320: undefined reference to `seaf_branch_manager_test_and_update_branch'
../common/rpc-service.o: In function `seafile_edit_repo':
/home/seafile/seafile-server/src/seafile-3.0.3-server/server/../common/rpc-service.c:1439: undefined reference to `seaf_branch_manager_test_and_update_branch'
../common/rpc-service.o: In function `seafile_change_repo_passwd':
/home/seafile/seafile-server/src/seafile-3.0.3-server/server/../common/rpc-service.c:1547: undefined reference to `seaf_branch_manager_test_and_update_branch'
processors/recvbranch-proc.o: In function `update_repo':
/home/seafile/seafile-server/src/seafile-3.0.3-server/server/processors/recvbranch-proc.c:198: undefined reference to `seaf_branch_manager_test_and_update_branch'
collect2: error: ld returned 1 exit status
Makefile:681: recipe for target 'seaf-server' failed
make[3]: *** [seaf-server] Error 1
make[3]: Leaving directory '/home/seafile/seafile-server/src/seafile-3.0.3-server/server'
Il doit manquer un include quelque part pour qu'il fasse un 'undefined reference', mais alors pour quelle librairie ? ...
Aurais-tu des idées encore ?
J'ai trouvé quelque chose ici https://forum.seafile.de/t/seafile-server-wont-compile/2801 mais je t'avouerai que ça ne m'a pas aidé plus que ça ...
Voilà, merci bien pour l'aide que tu m'apportes ^^
Bonne soirée
Cutman2593
Comme la version 3 de seafile commence à dater il vaudrait mieux recommencer une install à partir d'une version plus récente des sources. J'avais fait une rapide update pour l'install de la version 4 ( http://www.rooot.net/fr/geek-stuff/synology/43-upgrade-seafile-synology.html ). Seafile en est maintenant à la version 6 mais il devrait y avoir peu de modifications ( https://manual.seafile.com/build_seafile/linux.html ).
Je tâcherai de faire une install de cette nouvelle version prochainement sur mon NAS.
Peux-être la génération de libtool s'était mal passée, vérifie que tu as bien les dernières versions d'autoconf, automake et libtool installées et que l'éxécution d'autogen et configure ne remontent pas d'erreur.
S’abonner au flux RSS pour les commentaires de cet article.