Rooot.net

  • Augmenter la taille
  • Taille par défaut
  • Diminuer la taille
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Home Geek stuff Synology Seafile 3.1 sur Synology DiskStation NAS avec processeur ARM

Seafile 3.1 sur Synology DiskStation NAS avec processeur ARM

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
Ajouter un nouveau Rechercher
Franck  - Problème avec la fonction init_seafile_path   |82.231.6.xxx |2014-08-18 16:10:53
Bonjour,

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: %sn", 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);
}
neo73   |88.178.190.xxx |2014-08-24 17:58:48
Bonjour Franck,
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
Anonyme   |82.231.6.xxx |2014-08-25 16:02:35
Merci ! Je m'en étais tiré entre temps en codant topdir en dur lors de sa
déclaration et en supprimant son affectiation dans la fonction.
F.
Cutman2593  - Problème lors du build de la librairie ccnet   |176.131.240.xxx |2016-10-02 22:34:01
Bonjour !

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-serv er/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-serv
er/lib'

-----------------

L'aut...
neo73   |81.57.93.xxx |2016-10-02 23:15:14
Bonjour,

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=/
cutman2593  - Autre problème ...   |176.131.240.xxx |2016-10-03 20:51:03
Re-bonjour !

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/seafil e/seafile-
server/src/seafile-3.0.3-server/server/r epo-op.c:4320: undefined reference
to `seaf_branch_manager_test_and_update_branch'

../c ommon/rpc-servic
e.o: In
function `seafile_edit_repo':
/home/seafile/seafile-server/ src/seafil
e-3.0.3-server/server/../common/rpc-serv ice.c:1439: undefined reference
to `seaf_branch_manager_test_and_update_branch'

../c ommon/rpc-servic
e.o: In
function `seafile_change_repo_passwd':
/home/seafile/seafil e-server/s
rc/seafile-3.0.3-server/server/../common /rpc-service.c:1547: undefined
reference
to `seaf_branch_manager_test_and_update_branch'

proc essors/recvbranc
h-proc.o: In
function `update_repo':
/home/seafile/seafile-server/src/se afile-3.0.
3-server/server/processors/recvbranch-pr oc.c:198: undefined reference
to `seaf_branch_manager_test_and_update_branch'

coll ect2: 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-se rver/serv
er'



Il doit manquer un include quelque part pour qu'il fasse un 'undefined
reference', mais alors&nbs...
neo73   |81.57.93.xxx |2016-10-03 22:38:42
La fonction en question est common/branch-mgr.h et ce fichier est bien inclu par
common/rpc-service.c et autres fichiers... Je conseille de ne pas trop insister
sur les fix manuels, surtout puisqu'il y a potentiellement eu des erreurs lors
des étapes précédentes.

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-upg rade-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.htm l ).
Je
tâcherai de faire une install de cette nouvelle version prochainement sur mon
NAS.
neo73   |81.57.93.xxx |2017-03-13 15:18:49
J'ai finalement pris le temps de passer à Seafile 6.0.8 (
http://www.rooot.net/en/geek-stuff/synology/44-sea
file6-armv7-synology-diskstation-nas.html ) depuis un chroot Debian Jessie. En
reprenant les mêmes étapes pour compiler les projets je n'ai pas rencontré de
problème.

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.
Ecrire un commentaire
Nom:
Email:
 
Website:
Titre:
BBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Saisissez le code que vous voyez.

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."