SeaFile und OwnCloud
Cloud-Fileserver, der (insbesondere bei vielen kleinen Dateien) sehr viel schneller arbeitet als OwnCloud. Daher lohnt sich auch die Kombination, OwnCloud für die Synchronisation von Kalender, Aufgaben sowie Kontakte zu verwenden und Seafile für die Dateisynchronisation.
Eine sehr ausführliche Anleitung gibt es auch unter http://manual.seafile.com/deploy/using_mysql.html
SeaFile installieren
Die aktuelle Version kann unter http://seafile.com/en/download/ heruntergeladen werden. Für den Banana Pi mit Bananian als System kann das Server-Paket für den Raspberry Pi verwendet werden.
Die Installation erfolgt durch Entpacken in ein eigenes Verzeichnis z. B. unter /root
cd /root mkdir seafile # Die zuvor heruntergeladene Installationsdatei hier her kopieren tar -xzf seafile-server_* mkdir installed mv seafile-server_* installed
Beim Entpacken wird der Symbolische Link seafile-server-latest erstellt, der auf das aktuelle Verzeichnis verweist. Bei einem Update muss dann das neue Archiv nur wie oben beschrieben entpackt werden und schon ist die neue Version installiert ohne dass die alte Version überschrieben wird. Auch die Einstellungen bleiben erhalten.
Abhängigkeiten installieren
Folgende Pakete werden für Seafile benötigt:
- python 2.7
- python-setuptools
- python-imaging
- python-mysqldb
apt-get update apt-get install python2.7 python-setuptools python-imaging python-mysqldb
MySQL-Datenbanken erstellen
Zuvor muss MySQL vollständig eingerichtet sein. Dies wird im Kapitel zur Owncloud-Installation im Detail beschrieben.
Folgende SeaFile-Komponenten benötigen jeweils eine eigene Datenbank:
- ccnet server
- seafile server
- seahub
Die einfachste Möglichkeit ist, das Konfigurationsscript setup-seafile-mysql.sh
im aktuellen Seafile-Ordner zu verwenden:
/root/seafile/seafile-server-latest/setup-seafile-mysql.sh
Das Skript führt detailliert durch die gesamte Konfiguration. Hier ein Beispiel für eine lokale Installation:
----------------------------------------------------------------- This script will guide you to setup your seafile server using MySQL. Make sure you have read seafile server manual at https://github.com/haiwen/seafile/wiki Press ENTER to continue ----------------------------------------------------------------- What is the name of the server? It will be displayed on the client. 3 - 15 letters or digits [ server name ] tuxcloud What is the ip or domain of the server? For example: www.mycompany.com, 192.168.1.101 [ This server's ip or domain ] 192.168.1.9 Which port do you want to use for the ccnet server? [ default "10001" ] 10001 Where do you want to put your seafile data? Please use a volume with enough free space [ default "/root/seafile/seafile-data" ] /mnt/hdd/seafile Which port do you want to use for the seafile server? [ default "12001" ] 12001 Which port do you want to use for the seafile fileserver? [ default "8082" ] 8082 ------------------------------------------------------- Please choose a way to initialize seafile databases: ------------------------------------------------------- [1] Create new ccnet/seafile/seahub databases [2] Use existing ccnet/seafile/seahub databases [ 1 or 2 ] 1 What is the host of mysql server? [ default "localhost" ] localhost What is the port of mysql server? [ default "3306" ] 3306 What is the password of the mysql root user? [ root password ] verifying password of user root ... done Enter the name for mysql user of seafile. It would be created if not exists. [ default "root" ] Enter the database name for ccnet-server: [ default "ccnet-db" ] Enter the database name for seafile-server: [ default "seafile-db" ] Enter the database name for seahub: [ default "seahub-db" ] --------------------------------- This is your configuration --------------------------------- server name: tuxcloud server ip/domain: 192.168.1.9 ccnet port: 10001 seafile data dir: /mnt/hdd/seafile seafile port: 12001 fileserver port: 8082 database: create new ccnet database: ccnet-db seafile database: seafile-db seahub database: seahub-db database user: root
Sollen viele Clients auf Seafile zugreifen, sollte zuvor ulimit erhöht werden:
ulimit -n 30000
Server starten
./seafile.sh start ./seahub.sh start
Beim ersten Start von Seahub wird ein Admin-Account erstellt. Der User-Name bei Seafile ist immer eine E-Mail-Adresse.
Danach kann der erste Zugriff über einen Browser erfolgen:
http://192.168.1.9:8000/
Beim Systemstart automatisch starten
Hierzu wird als root ein Init-Script erstellt (/etc/init.d/seafile-server):
#!/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: Start Seafile-Daemon at boot time # Description: Enable service provided by Seafile. ### END INIT INFO export LC_ALL='de_DE.UTF-8' # Change the value of "seafile_dir" to your path of seafile installation seafile_dir=/root/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 # Change the value of fastcgi to true if fastcgi is to be used fastcgi=false # Set the port of fastcgi, default is 8000. Change it if you need different. fastcgi_port=8000 case "$1" in start) ${script_path}/seafile.sh start >> ${seafile_init_log} if [ $fastcgi = true ]; then ${script_path}/seahub.sh start-fastcgi ${fastcgi_port} >> ${seahub_init_log} else ${script_path}/seahub.sh start >> ${seahub_init_log} fi ;; restart) ${script_path}/seafile.sh restart >> ${seafile_init_log} if [ $fastcgi = true ]; then ${script_path}/seahub.sh restart-fastcgi ${fastcgi_port} >> ${seahub_init_log} else ${script_path}/seahub.sh restart >> ${seahub_init_log} fi ;; stop) ${script_path}/seafile.sh $1 >> ${seafile_init_log} ${script_path}/seahub.sh $1 >> ${seahub_init_log} ;; *) echo "Usage: /etc/init.d/seafile {start|stop|restart}" exit 1 ;; esac
Dann das Script ausführbar machen und rc.d aktualisieren:
chmod 755 /etc/init.d/seafile-server update-rc.d seafile-server defaults
Manche Systeme starten den Server nach einen Reboot nicht, da Apache noch nicht läuft. Daher kann der Start über einen Cron-Job nachgeholt werden (Eintrag in /etc/crontab):
@reboot sleep 60 && service seafile-server start
Mitgelieferte Skripte
seaf-gc.sh
Seafile verwaltet die Dateien in Datenblöcken. Alte Datenblöcke von gelöschten Dateien und Bibliotheken werden jedoch nicht automatisch gelöscht, wodurch der von Seafile benötigte Speicher immer mehr anwächst. Somit empfiehlt es sich, unnötige Datenblöcke löschen zu lassen. Hierzu muss nur das Skript seaf-gc.sh im Seafile-Ordner gestartet werden:
/root/seafile/seafile-server-latest/seaf-gc.sh
Das entfernen unnötiger Datenblöcke ist z. B. vor dem Erstellen eines Backups zu empfehlen (siehe Kapitel Backup).
seaf-fsck.sh
Nach einem Systemabsturz kann die Dateistruktur von Seafile defekt sein. hierzu gibt es ein eigenes Script, das fehlerhafte Strukturen reparieren kann:
/root/seafile/seafile-server-latest/seaf-fsck.sh
reset-admin.sh
Wenn man das Admin-Passwort vergessen hat oder der Admin-Account nicht mehr richtig funktioniert, kann mit dem Tool reset-admin.sh der Admin-Account zurückgesetzt werden.
/root/seafile/seafile-server-latest/reset-admin.sh
seaf-fuse.sh
Stellt die Dateistruktur aller User und Bibliotheken in einem Verzeichnis dar, das mit dem Script seaf-fuse.sh gemountet wird. Allerdings besteht auf dieses Verzeichnis nur lesender Zugriff.
mkdir /mnt/seafile-fuse /root/seafile/seafile-server-latest/seaf-fuse.sh start /mnt/seafile-fuse
Unmounten geht wie folgt:
/root/seafile/seafile-server-latest/seaf-fuse.sh stop
Backup
Anbei ein Skript für ein Backup mit MySQL und storeBackup. Zunächst wird der Seafile-Server gestoppt, damit im Backup ein definierter Zustand gespeichert wird. Dann werden unnötige Datenblöcke gelöscht (seaf-gc.sh) und die Datenbanken gesichert.
Als Backup-Programm wird storeBackup verwendet. Die verwendete Konfigurationsdatei wird im Skript unter /root/bin/storeBackup/seafile.cfg gesucht. Da die Datenbanken zuvor in den Daten-Ordner von Seafile gesichert wurden, sind diese ebenfalls im Backup enthalten.
Am Ende wird der Seafile-Server wieder gestartet.
seafile=/mnt/hdd/seafile [ -f "$seafile/database-backup" ] || mkdir -p "$seafile/database-backup" service seafile-server stop /root/seafile/seafile-server-latest/seaf-gc.sh mysqldump --lock-tables -h localhost -u root -p<PASSWORT> ccnet-db > "$seafile/database-backup/ccnet-db.bak" mysqldump --lock-tables -h localhost -u root -p<PASSWORT> seafile-db > "$seafile/database-backup/seafile-db.bak" mysqldump --lock-tables -h localhost -u root -p<PASSWORT> seahub-db > "$seafile/database-backup/seahub-db.bak" storeBackup -f /root/bin/storeBackup/seafile.cfg service seafile-server start
Backup zurückspielen:
mysql -h localhost -u root -p<PASSWORT> ccnet-db < ccnet-db.bak mysql -h localhost -u root -p<PASSWORT> seafile-db < seafile-db.bak mysql -h localhost -u root -p<PASSWORT> seahub-db < seahub-db.bak
Update
Mit folgendem Script kann eine neue Version von Seafile automatisch eingespielt werden. Es muss lediglich die neue Versionsnummer eingegeben werden. Das Script ist für den Raspberry-Pi bzw. Banana-Pi geschrieben und muss für andere Systeme ggf. angepasst werden.
#! /bin/bash # Variablen definieren [ "$1" == "" ] && read -p "Bitte Version eingeben (z.B. 4.2.3): " ver || ver=$1 download_path=/root/Software seafile_path=/root/seafile # Seafile herunterladen cd $download_path wget https://github.com/haiwen/seafile-rpi/releases/download/v$ver/seafile-server_${ver}_pi.tar.gz # Seafile-Server entpacken ... echo "seafile-server_${ver}_pi.tar.gz wird entpackt ..." cd $seafile_path tar -xzvf $download_path/seafile-server_${ver}_pi.tar.gz # Seafile Server anhalten echo "Seafile-Server wird angehalten ..." service seafile-server stop # Symbolischen Link aktualisieren ... echo "Link seafile-server-latest neu setzen ..." rm seafile-server-latest ln -s $seafile_path/seafile-server-$ver seafile-server-latest # Seafile neu starten echo "Seafile-Server wird gestartet ..." service seafile-server start exit