Seafile

From SME Server




seafile
NeedImage.svg
seafile logo
Maintainer[[user:Jean-Philippe Pialasse|Jean-Philippe Pialasse]]
Urlhttps://wwww.seafile.com
CategoryCategory:file
Tags cloudfile share
Warning.png Warning:
This is early alpha development please use only on test machine, not for production


Maintainer

Jean-Philippe Pialasse

Version

smeserver-seafile
The latest version of smeserver-seafile is available in the SME repository, click on the version number(s) for more information.
Alpha 9:
seafile
The latest version of seafile is available in the SME repository, click on the version number(s) for more information.
Alpha 9:
seafile-server
The latest version of seafile-server is available in the SME repository, click on the version number(s) for more information.
Alpha 9:
ccnet
The latest version of ccnet is available in the SME repository, click on the version number(s) for more information.

Description

install needed repo

yum install --enablerepo=smedev,smecontribs smeserver-extrarepositories-epel smeserver-extrarepositories-centos-sclo -y
signal-event yum-modify

install

yum install --enablerepo=smedev,smecontribs,epel,centos-sclo-rh,centos-sclo-centos seafile-seahub seafile-server

this will at least pull :

  • ccnet-server          x86_64       5.1.3-4.el6.sme         smedev         91 k
  • fuse-libs             x86_64       2.8.3-5.el6             base           74 k
  • libarchive            x86_64       2.8.3-7.el6_8           base          127 k
  • libccnet              x86_64       5.1.3-4.el6.sme         smedev         38 k
  • libevent2             x86_64       2.0.21-2.el6            base          193 k
  • libevhtp              x86_64       1.2.11n-4.el6.sme       smedev        125 k
  • libsearpc             x86_64       3.0.7-3.el6.sme         smedev         27 k
  • libzdb                x86_64       3.1-4.el6.sme           smedev         63 k
  • postgresql-libs       x86_64       8.4.20-8.el6_9          updates       202 k
  • python-ccnet          noarch       5.1.3-4.el6.sme         smedev         37 k
  • python-seafile        noarch       5.1.3-1                 smedev         42 k
  • seafile-lib x86_64       5.1.3-1                 smedev         36 k

NB: you will need new version of sqlite 3.7.17-9.el6.sme from smecontribs.; need to add this in Requires of the seafile-server rpms

yum update sqlite --enablerepo=smedev,smecontribs

also will need to update spec file of seafile server : Requires: /usr/bin/ccnet-init

yum install ccnet --enablerepo=smecontribs,smedev

NOT TO DO as already compiled :

install prerequesites for seafile -server is still missing. maybe not necessary

yum install libevent libcurl4-openssl libglib  uuid  intltool   libsqlite  libmysqlclient  libarchive    libtool  libjansson   valac   libfuse --enablerepo=epel,smedev,smecontribs

will miss this

  • libcurl4-openssl
  • libglib
  • libsqlite
  • libmysqlclient
  • libjansson
  • valac
  • libfuse

install python27

yum install python27-python sclo-python27-python-chardet python27-python-six  --enablerepo=centos-sclo-rh,epel,centos-sclo-centos

install prerequesite for seahub

yum install --enablerepo=epel pytz

will need pip install or create rpm :

install Django and other python related modules

scl enable python27 "pip install https://github.com/haiwen/django-constance/archive/bde7f7c.zip"
scl enable python27 "pip install django==1.8"
scl enable python27 "pip install django-statici18n"
scl enable python27 "pip install djangorestframework"
scl enable python27 "pip install openpyxl"
scl enable python27 "pip install pytz"
scl enable python27 "pip install django-post_office "
scl enable python27 "pip install django-picklefield "
scl enable python27 "pip install gunicorn "
scl enable python27 "pip install flup "
scl enable python27 "pip install jsonfield "
scl enable python27 "pip install Pillow  "
scl enable python27 "pip install python-dateutil"

NB, rpm installation of python-six is too old for dateutile :

  Downloading python_dateutil-2.6.1-py2.py3-none-any.whl (194kB)
    100% |████████████████████████████████| 194kB 1.2MB/s 
Collecting six>=1.5 (from python-dateutil)
  Downloading six-1.11.0-py2.py3-none-any.whl
Installing collected packages: six, python-dateutil
  Found existing installation: six 1.3.0
    DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
    Uninstalling six-1.3.0:

the following needs gcc

yum install gcc intltool libtool glib2-devel
yum install python27-python-devel --enablerepo=centos-sclo-rh
scl enable python27 "pip install django-compressor "
yum remove gcc cpp cloog-ppl mpfr ppl autoconf automake gettext-devel gettext-libs libart_lgpl libgcj glib2-devel
yum remove python27-python-devel scl-utils-build

well I got some errors and the files in github says different from doc

: test-requirements.txt and      requirements.txt for 5.1 branch (NB server asks for requests==2.8.0 while seahub for 2.3.0)

scl enable python 27


pip install mock==1.0.1
pip install nose==1.3.7
pip install exam==0.10.5
pip install splinter==0.7.2
pip install requests==2.3.0
pip install pytest==2.7.0
pip install pytest-django==2.8.0
pip install python-dateutil
pip install python-memcached==1.57
pip install chardet
pip install six
pip install Pillow>=2.6.1,<3.0.0
pip install Django==1.8.10
pip install django-compressor==1.4
pip install django-post-office==2.0.3
pip install django-statici18n==1.1.2
pip install djangorestframework==3.3.1
pip install git+git://github.com/haiwen/django-constance.git@751f7f8b60651a2828e4a535a47fc05b907883da#egg=django-constance[database]
pip install openpyxl==2.3.0
pip install pytz==2015.7


pip install termcolor==1.1.0
pip install prettytable==0.7.2
pip install pexpect==4.0
pip install httpie
pip install django-constance[database]

seafile server would need pip install MySQL-python==1.2.5, which will need mysql devel to compile

I also see some memcached service is needed... seahub/avatar/sql/migration.md

startup scripts and sme related db

config set seafile service TCPPort 8000 status enabled access private

signal-event remoteaccess-update

configuration

Start server

scl enable python27 bash
mkdir /opt/seafile/; 
cd  /opt/seafile/; 
mkdir seafile-server/
mkdir logs pids
mkdir seafile-server/runtime
mkdir -p /opt/seafile/seafile-data/library-template
cd seafile-server/
ln /usr/share/seafile-seahub seahub -s
cd /opt/seafile/

export PYTHONPATH=/opt/seafile/seafile-server/seahub/thirdpart:$PYTHONPATH
export CCNET_CONF_DIR=/opt/seafile/conf/
export SEAFILE_CONF_DIR=/opt/seafile/conf/

seafile-admin setup

python seafile-server/seahub/manage.py syncdb

issue: seafile-admin setup makes creation of seahub.db in /usr

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

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

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

Your seafile server configuration has been finished successfully.

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

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

To start/stop seafile server:

$ cd /opt/seafile

$ seafile-admin { start | stop }

If you have any problem, refer to

Seafile server manual:      https://github.com/haiwen/seafile/wiki

Seafile discussion group:   https://groups.google.com/forum/?fromgroups#!forum/seafile

Seafile website:            http://www.seafile.com

for more information.

# seafile-admin start

Starting seafile-server...
Starting seahub...
Seahub running on port 8000
Done

configure httpd reverse proxy

the easy way is :

db domains setprop seafile.itx.pialasse.com  Nameservers local ProxyPassTarget http://127.0.0.1:8000/ TemplatePath ProxyPassVirtualHosts

signal-event domain-modify seafile.itx.pialasse.com

more long way:

mkdir /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf/VirtualHosts/ -p
cat  > /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf/VirtualHosts/28SeafileProxyPass <<- 'EndOfMessage' 
# Seahub for Seafile ProxyPass
{
    $haveSSL = (exists ${modSSL}{status} and ${modSSL}{status} eq "enabled") ?  'yes' : 'no';
    $seahubPort = ${'seafile'}{TCPPort} || '8000';
    $OUT = '';
    if ((${'seafile'}{'status'} || 'disabled') eq 'enabled' ){

        if (($port eq "80") && ($haveSSL eq 'yes')){
            $OUT .= "    RewriteRule ^/seafile(/.*|\$)    https://%{HTTP_HOST}/seafile\$1 [L,R]\n";
        }
        else{
            $OUT .= "    ProxyPass /seafile http://127.0.0.1:$seahubPort\n";
            $OUT .= "    ProxyPassReverse /seafile http://127.0.0.1:$seahubPort\n";
        }

        $OUT .=<<"HERE";

    <Location /seafile>
        SSLRequireSSL on
        order deny,allow
        deny from all
        allow from $localAccess $externalSSLAccess
    </Location>

HERE
    }
}
EndOfMessage
expand-template /etc/httpd/conf/httpd.conf
service httpd-e-smith restart

and then you have to change the configuration to show correctly the images alternatively if you want to use a domain this way : seafile.mydomain.com

mkdir /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf/VirtualHosts/ -p
cat  > /etc/e-smith/templates-custom/etc/httpd/conf/httpd.conf/VirtualHosts/28SeafileProxyPass <<- 'EndOfMessage' 
# Seahub for Seafile ProxyPass
{
    $haveSSL = (exists ${modSSL}{status} and ${modSSL}{status} eq "enabled") ?  'yes' : 'no';
    $seahubPort = ${'seafile'}{TCPPort} || '8000';
    $seahubdomain = ${'seafile'}{domain} || 'disabled';    
    $OUT = '';
    if ((${'seafile'}{'status'} || 'disabled') eq 'enabled' && $seahubdomain eq 'disabled' ){

        if (($port eq "80") && ($haveSSL eq 'yes')){
            $OUT .= "    RewriteRule ^seafile(/.*|\$)    https://%{HTTP_HOST}seafile\$1 [L,R]\n";
        }
        else{
            $OUT .= "    ProxyPass /seafile http://127.0.0.1:$seahubPort\n";
            $OUT .= "    ProxyPassReverse /seafile http://127.0.0.1:$seahubPort\n";
        }

        $OUT .=<<"HERE";

    <Location /seafile>
        SSLRequireSSL on
        order deny,allow
        deny from all
        allow from $localAccess $externalSSLAccess
    </Location>

HERE
    }
    elseif ($seahubdomain ne 'disabled' ) {
        if (($port eq "80") && ($haveSSL eq 'yes')){
            $OUT .= "    RewriteRule ^(/.*|\$)    https://$seahubdomain\$1 [L,R]\n";
        }
        else{
            $OUT .= "    ProxyPass / http://127.0.0.1:$seahubPort\n";
            $OUT .= "    ProxyPassReverse / http://127.0.0.1:$seahubPort\n";
        }
    }
}
EndOfMessage
expand-template /etc/httpd/conf/httpd.conf
service httpd-e-smith restart

service start

cat > /etc/rc.d/init.d/seafile << 'EOF'
#!/bin/bash
### BEGIN INIT INFO
# Provides:          seafile-server
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Seafile server
# Description:       Start Seafile server
### END INIT INFO

# Change the value of "user" to your linux user name
user=root

# Change the value of "seafile_dir" to your path of seafile installation
# usually the home directory of $user
seafile_dir=/opt/seafile
script_path=${seafile_dir}/seafile-server-latest
seafile_init_log=${seafile_dir}/logs/seafile.init.log
seahub_init_log=${seafile_dir}/logs/seahub.init.log


#
# Write a polite log message with date and time
#
echo -e "\n \n About to perform $1 for seafile at `date -Iseconds` \n " >> ${seafile_init_log}
echo -e "\n \n About to perform $1 for seahub at `date -Iseconds` \n " >> ${seahub_init_log}

# Python
sclname='python27'
. /opt/rh/$sclname/enable
export X_SCLS="$X_SCLS $sclname"

# we want start daemon only inside "scl enable" invocation
if ! scl_enabled python27 ; then
     echo "Collection python27 has to be listed in /opt/rh/python27/service-environment"
     exit 1
fi
cd /opt/seafile
export TOPDIR=/opt/seafile
export INSTALLPATH=/opt/seafile
export PYTHONPATH=/opt/seafile:/opt/seafile/seafile-server/seahub/thirdpart:$PYTHONPATH
export CCNET_CONF_DIR=/opt/seafile/conf/
export SEAFILE_CONF_DIR=/opt/seafile/seafile-data/
export SEAFILE_CENTRAL_CONF_DIR=/opt/seafile/conf/
export SEAHUB_LOG_DIR=/opt/seafile/logs
export SEAFILE_PIDFILE=/opt/seafile/pids/controller.pid

case "$1" in
        start)
                /usr/bin/seafile-admin start
        ;;
        restart)
                /usr/bin/seafile-admin stop
                /usr/bin/seafile-admin start
        stop)
                /usr/bin/seafile-admin stop

        ;;
        *)
                echo "Usage: /etc/init.d/seafile {start|stop|restart}"
                exit 1
        ;;
esac
EOF

chkconfig seafile on
ln -s /etc/rc.d/init.d/seafile /etc/rc.d/rc7.d/S85seafile

add ldap support

simply add this to /opt/seafile/conf/ccnet.conf

[LDAP]
HOST = ldap://localhost
BASE = ou=Users,dc=domain,dc=tld
LOGIN_ATTR = mail
FILTER = objectClass=inetOrgPerson

add log to syslog

see https://manual.seafile.com/maintain/logs.html and more : https://manual.seafile.com/deploy/using_syslog.html

there are 2 files to edit. Then arrange logrotate

Installation

for now you need to do :

latter you will be able to do this:

yum --enablerepo=smecontribs install smeserver-seafile-server smeserver-seafile

Client usage

If you want to connect locally you need to do the following:

cd ~
mkdir ~/seafile-client
seaf-cli init -d ~/seafile-client
seaf-cli start
seaf-cli download -l "the id of the library" -s  "the url + port of server" -d "the folder where the library folder will be downloaded" -u "username on server" [-p "password"]
seaf-cli status

Uninstall

yum remove smeserver-seafile  seafile

Bugs

Please raise bugs under the SME-Contribs section in bugzilla and select the smeserver-seafile component or use this link


Below is an overview of the current issues for this contrib:

IDProductVersionStatusSummary
10527SME Contribs9.2IN_PROGRESSrebuild with sqlite3 notify support

Changelog

Only released version in smecontrib are listed here.


References

TODO

  • compile seafdav
  • add pythonmodules for seafdav
  • patch controller of seafile-server to force pid folder