Merge pull request #11565 from jefferyto/seafile-7.1.2

seafile-server: Update to 7.1.2, update dependencies
This commit is contained in:
Hannu Nyman 2020-03-16 20:22:49 +02:00 committed by GitHub
commit ee9cb3c81d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
63 changed files with 2252 additions and 1059 deletions

View file

@ -8,11 +8,11 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=django-appconf PKG_NAME:=django-appconf
PKG_VERSION:=1.0.2 PKG_VERSION:=1.0.3
PKG_RELEASE:=6 PKG_RELEASE:=1
PYPI_NAME:=$(PKG_NAME) PYPI_NAME:=$(PKG_NAME)
PKG_HASH:=6a4d9aea683b4c224d97ab8ee11ad2d29a37072c0c6c509896dd9857466fb261 PKG_HASH:=35f13ca4d567f132b960e2cd4c832c2d03cb6543452d34e29b7ba10371ba80e3
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com> PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
PKG_LICENSE:=BSD-3-Clause PKG_LICENSE:=BSD-3-Clause
@ -35,7 +35,8 @@ define Package/python-django-appconf
$(call Package/django-appconf/Default) $(call Package/django-appconf/Default)
DEPENDS:= \ DEPENDS:= \
+PACKAGE_python-django-appconf:python \ +PACKAGE_python-django-appconf:python \
python-django1 python-django1 \
+PACKAGE_python-django-appconf:python-six
VARIANT:=python VARIANT:=python
MDEPENDS:=python-django1 MDEPENDS:=python-django1
endef endef
@ -48,7 +49,8 @@ define Package/python3-django-appconf
$(call Package/django-appconf/Default) $(call Package/django-appconf/Default)
DEPENDS:= \ DEPENDS:= \
+PACKAGE_python3-django-appconf:python3 \ +PACKAGE_python3-django-appconf:python3 \
+PACKAGE_python3-django-appconf:python3-django1 +PACKAGE_python3-django-appconf:python3-django1 \
+PACKAGE_python3-django-appconf:python3-six
VARIANT:=python3 VARIANT:=python3
endef endef

View file

@ -8,14 +8,14 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=django-jsonfield PKG_NAME:=django-jsonfield
PKG_VERSION:=1.0.1 PKG_VERSION:=2.1.1
PKG_RELEASE:=6 PKG_RELEASE:=1
PYPI_NAME:=$(PKG_NAME) PYPI_NAME:=jsonfield
PKG_HASH:=6c0afd5554739365b55d86e285cf966cc3a45682fff963463364ea1f6511ca3e PKG_HASH:=ed7c5e1829e9453e24a8bebef1e702ffe402e6def6b326f0e0b88764c59a6dc7
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com> PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
PKG_LICENSE:=BSD-3-Clause PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE PKG_LICENSE_FILES:=LICENSE
include ../pypi.mk include ../pypi.mk
@ -27,28 +27,31 @@ define Package/django-jsonfield/Default
SUBMENU:=Python SUBMENU:=Python
SECTION:=lang SECTION:=lang
CATEGORY:=Languages CATEGORY:=Languages
TITLE:=JSONField for django models TITLE:=A reusable Django field to store validated JSON in models
URL:=https://github.com/adamchainz/django-jsonfield URL:=https://github.com/rpkilby/jsonfield
endef endef
define Package/python-django-jsonfield define Package/python-django-jsonfield
$(call Package/django-jsonfield/Default) $(call Package/django-jsonfield/Default)
DEPENDS:= \ DEPENDS:= \
+PACKAGE_python-django-jsonfield:python \ +PACKAGE_python-django-jsonfield:python \
python-django1 python-django1 \
+PACKAGE_python-django-jsonfield:python-six
VARIANT:=python VARIANT:=python
MDEPENDS:=python-django1 MDEPENDS:=python-django1
endef endef
define Package/python-django-jsonfield/description define Package/python-django-jsonfield/description
JSONField for django models jsonfield is a reusable model field that allows you to store validated
JSON, automatically handling serialization to and from the database.
endef endef
define Package/python3-django-jsonfield define Package/python3-django-jsonfield
$(call Package/django-jsonfield/Default) $(call Package/django-jsonfield/Default)
DEPENDS:= \ DEPENDS:= \
+PACKAGE_python3-django-jsonfield:python3 \ +PACKAGE_python3-django-jsonfield:python3 \
+PACKAGE_python3-django-jsonfield:python3-django1 +PACKAGE_python3-django-jsonfield:python3-django1 \
+PACKAGE_python3-django-jsonfield:python3-six
VARIANT:=python3 VARIANT:=python3
endef endef

View file

@ -8,11 +8,11 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=django-picklefield PKG_NAME:=django-picklefield
PKG_VERSION:=1.1.0 PKG_VERSION:=2.1.1
PKG_RELEASE:=5 PKG_RELEASE:=1
PYPI_NAME:=$(PKG_NAME) PYPI_NAME:=$(PKG_NAME)
PKG_HASH:=ce7fee5c6558fe5dc8924993d994ccde75bb75b91cd82787cbd4c92b95a69f9c PKG_HASH:=67a5e156343e3b032cac2f65565f0faa81635a99c7da74b0f07a0f5db467b646
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com> PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
PKG_LICENSE:=MIT PKG_LICENSE:=MIT
@ -23,6 +23,11 @@ include $(INCLUDE_DIR)/package.mk
include ../python-package.mk include ../python-package.mk
include ../python3-package.mk include ../python3-package.mk
PYTHON_PKG_SETUP_VARS:= \
PKG_VERSION="$(PKG_VERSION)"
PYTHON3_PKG_SETUP_VARS:= \
PKG_VERSION="$(PKG_VERSION)"
define Package/django-picklefield/Default define Package/django-picklefield/Default
SUBMENU:=Python SUBMENU:=Python
SECTION:=lang SECTION:=lang

View file

@ -0,0 +1,19 @@
--- a/setup.py
+++ b/setup.py
@@ -2,14 +2,14 @@ from __future__ import unicode_literals
from setuptools import find_packages, setup
-import picklefield
+import os
with open('README.rst') as file_:
long_description = file_.read()
setup(
name='django-picklefield',
- version=picklefield.__version__,
+ version=os.getenv('PKG_VERSION'),
description='Pickled object field for Django',
long_description=long_description,
author='Simon Charette',

View file

@ -8,12 +8,12 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=django-postoffice PKG_NAME:=django-postoffice
PKG_VERSION:=3.1.0 PKG_VERSION:=3.2.1
PKG_RELEASE:=6 PKG_RELEASE:=1
PYPI_NAME:=django-post-office PYPI_NAME:=django-post-office
PYPI_SOURCE_NAME:=django-post_office PYPI_SOURCE_NAME:=django-post_office
PKG_HASH:=827937a944fe47cea393853069cd9315d080298c8ddb0faf787955d6aa51a030 PKG_HASH:=e32427822f647719575094f790ca949ef9f9827ec0e8378cb021f01f3834b2a4
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com> PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
PKG_LICENSE:=MIT PKG_LICENSE:=MIT

View file

@ -26,7 +26,7 @@ define Package/django-ranged-response/Default
SECTION:=lang SECTION:=lang
CATEGORY:=Languages CATEGORY:=Languages
TITLE:=Add Content-Range: to FileResponse TITLE:=Add Content-Range: to FileResponse
URL:=https://github.com/wearespindle/django-ranged-fileresponse URL:=https://github.com/i3thuan5/django-ranged-response
endef endef
define Package/python-django-ranged-response define Package/python-django-ranged-response

View file

@ -8,11 +8,11 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=django-statici18n PKG_NAME:=django-statici18n
PKG_VERSION:=1.8.2 PKG_VERSION:=1.9.0
PKG_RELEASE:=6 PKG_RELEASE:=1
PYPI_NAME:=$(PKG_NAME) PYPI_NAME:=$(PKG_NAME)
PKG_HASH:=ba9eeb3c4517027922645999359f8335fbb9fea04c457123cfbd6b4a36cbeda4 PKG_HASH:=913dd056c1abcbe129b1db806cb4cfb821c4077d7e857d6eb29043ea64f4d1d0
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com> PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
PKG_LICENSE:=BSD-3-Clause PKG_LICENSE:=BSD-3-Clause
@ -35,7 +35,9 @@ define Package/python-django-statici18n
$(call Package/django-statici18n/Default) $(call Package/django-statici18n/Default)
DEPENDS:= \ DEPENDS:= \
+PACKAGE_python-django-statici18n:python \ +PACKAGE_python-django-statici18n:python \
python-django1 python-django1 \
+PACKAGE_python-django-statici18n:python-django-appconf \
+PACKAGE_python-django-statici18n:python-six
VARIANT:=python VARIANT:=python
MDEPENDS:=python-django1 MDEPENDS:=python-django1
endef endef
@ -48,7 +50,9 @@ define Package/python3-django-statici18n
$(call Package/django-statici18n/Default) $(call Package/django-statici18n/Default)
DEPENDS:= \ DEPENDS:= \
+PACKAGE_python3-django-statici18n:python3 \ +PACKAGE_python3-django-statici18n:python3 \
+PACKAGE_python3-django-statici18n:python3-django1 +PACKAGE_python3-django-statici18n:python3-django1 \
+PACKAGE_python3-django-statici18n:python3-django-appconf \
+PACKAGE_python3-django-statici18n:python3-six
VARIANT:=python3 VARIANT:=python3
endef endef

View file

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=django1 PKG_NAME:=django1
PKG_VERSION:=1.11.29 PKG_VERSION:=1.11.29
PKG_RELEASE:=1 PKG_RELEASE:=2
PYPI_NAME:=Django PYPI_NAME:=Django
PKG_HASH:=4200aefb6678019a0acf0005cd14cfce3a5e6b9b90d06145fcdd2e474ad4329c PKG_HASH:=4200aefb6678019a0acf0005cd14cfce3a5e6b9b90d06145fcdd2e474ad4329c

View file

@ -0,0 +1,11 @@
--- a/django/db/migrations/loader.py
+++ b/django/db/migrations/loader.py
@@ -106,7 +106,7 @@ class MigrationLoader(object):
# Scan for .py files
migration_names = set()
for name in os.listdir(directory):
- if name.endswith(".py"):
+ if name.endswith(".py") or name.endswith(".pyc"):
import_name = name.rsplit(".", 1)[0]
if import_name[0] not in "_.~":
migration_names.add(import_name)

View file

@ -8,15 +8,15 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=libsearpc PKG_NAME:=libsearpc
PKG_VERSION:=3.1.0 PKG_VERSION:=3.2.0
PKG_RELEASE=2 PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/haiwen/libsearpc/tar.gz/v$(PKG_VERSION)? PKG_SOURCE_URL:=https://codeload.github.com/haiwen/libsearpc/tar.gz/v$(PKG_VERSION)?
PKG_HASH:=cbd86d3c37b54ca2060ca537a07940fe3e98498abf345b2f3e1cec488230231a PKG_HASH:=c479d85e405674c3450eac040abe143af5a9fafe7f1b74926e2a05280ab5420e
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
PKG_LICENSE:=GPL-3.0 PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>, Jeffery To <jeffery.to@gmail.com>
PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE.txt PKG_LICENSE_FILES:=LICENSE.txt
PKG_FIXUP:=autoreconf PKG_FIXUP:=autoreconf
@ -26,41 +26,70 @@ PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk include $(INCLUDE_DIR)/nls.mk
include ../../lang/python/python-package.mk include ../../lang/python/python-package.mk
include ../../lang/python/python3-package.mk
define Package/libsearpc define Package/libsearpc
SECTION:=libs SECTION:=libs
CATEGORY:=Libraries CATEGORY:=Libraries
TITLE:=Seafile RPC Library TITLE:=Seafile RPC Library
URL:=https://seafile.com URL:=https://seafile.com
DEPENDS:=+glib2 +jansson +python $(ICONV_DEPENDS) DEPENDS:=+glib2 +jansson $(ICONV_DEPENDS)
endef endef
define Package/libsearpc/description define Package/libsearpc/description
Searpc is a simple C language RPC framework based on GObject system. Searpc is a simple C language RPC framework based on GObject system.
Searpc handles the serialization/deserialization part of RPC, Searpc handles the serialization/deserialization part of RPC, the
the transport part is left to users. transport part is left to users.
endef endef
CONFIGURE_ARGS += --enable-compile-demo=no \ define Package/python3-searpc
--disable-server-pkg SECTION:=lang
CATEGORY:=Languages
SUBMENU:=Python
TITLE:=Python bindings for Searpc
DEPENDS:=+libsearpc +python3-light +python3-logging
VARIANT:=python3
endef
TARGET_LDFLAGS += -Wl,-rpath-link=$(STAGING_DIR)/usr/lib -liconv define Package/python3-searpc/description
$(call Package/libsearpc/description)
This package contains the Python bindings for Searpc.
endef
CONFIGURE_ARGS += \
--disable-compile-demo \
--disable-server-pkg
define Build/InstallDev define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/{bin,include} $(INSTALL_DIR) $(1)/usr/{bin,include}
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libsearpc.so* $(1)/usr/lib/ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libsearpc.so* $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/usr/include/searpc* $(1)/usr/include/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libsearpc.pc $(1)/usr/lib/pkgconfig/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libsearpc.pc $(1)/usr/lib/pkgconfig/
$(CP) $(PKG_INSTALL_DIR)/usr/bin/searpc-codegen.py $(1)/usr/bin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/searpc-codegen.py $(1)/usr/bin/
endef endef
# Include Python 2 bindings in this package to maintain compatibility with previous versions
define Package/libsearpc/install define Package/libsearpc/install
$(INSTALL_DIR) $(1)/usr/lib $(INSTALL_DIR) $(1)/usr/lib
$(INSTALL_DIR) $(1)$(PYTHON_PKG_DIR) $(INSTALL_DIR) $(1)$(PYTHON_PKG_DIR)/pysearpc
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libsearpc.so* $(1)/usr/lib/ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libsearpc.so* $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR)/pysearpc $(1)$(PYTHON_PKG_DIR) $(INSTALL_DATA) $(PKG_BUILD_DIR)/pysearpc/*.py $(1)$(PYTHON_PKG_DIR)/pysearpc/
find $(1) -name "*\.pyc" -o -name "*\.pyo" | xargs rm -f rm -f $(1)$(PYTHON_PKG_DIR)/pysearpc/{pygencode,test_pysearpc}.py
endef endef
define Py3Build/Compile
rm -rf $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/pysearpc
$(INSTALL_DIR) $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/pysearpc
$(INSTALL_DATA) $(PKG_BUILD_DIR)/pysearpc/*.py $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/pysearpc/
rm -f $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/pysearpc/{pygencode,test_pysearpc}.py
endef
Py3Package/python3-searpc/install:=:
$(eval $(call BuildPackage,libsearpc)) $(eval $(call BuildPackage,libsearpc))
$(eval $(call Py3Package,python3-searpc))
$(eval $(call BuildPackage,python3-searpc))
$(eval $(call BuildPackage,python3-searpc-src))

View file

@ -0,0 +1,19 @@
From 9b2e2dc65213fb22ed400dc54e4c2279564df62b Mon Sep 17 00:00:00 2001
From: ly1217 <yu.liu@seafile.com>
Date: Thu, 31 Oct 2019 00:31:38 -0700
Subject: [PATCH] Fix memory leak.
---
lib/searpc-named-pipe-transport.c | 1 +
1 file changed, 1 insertion(+)
--- a/lib/searpc-named-pipe-transport.c
+++ b/lib/searpc-named-pipe-transport.c
@@ -377,6 +377,7 @@ void searpc_free_client_with_pipe_transp
close(pipe_client->pipe_fd);
#endif
g_free (pipe_client);
+ g_free (data->service);
g_free (data);
searpc_client_free (client);
}

View file

@ -0,0 +1,11 @@
--- a/pysearpc/named_pipe.py
+++ b/pysearpc/named_pipe.py
@@ -2,8 +2,6 @@
RPC client/server implementation based on named pipe transport.
"""
-from future import standard_library
-standard_library.install_aliases()
from builtins import object
import json
import logging

View file

@ -8,67 +8,100 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=seafile-ccnet PKG_NAME:=seafile-ccnet
PKG_VERSION:=6.3.4 PKG_VERSION:=7.1.2
PKG_RELEASE:=2 PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/haiwen/ccnet-server/tar.gz/v$(PKG_VERSION)-server? PKG_SOURCE_URL:=https://codeload.github.com/haiwen/ccnet-server/tar.gz/v$(PKG_VERSION)-server?
PKG_HASH:=ab3d5bda728f87c71929a6247c9f74c5209b9b8e44bafa77db91e8de590ec6ef PKG_HASH:=32d3d7290415497c52ab407a64468538662dde81ccd139b6e4499e3f2c5b8d4b
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>, Jeffery To <jeffery.to@gmail.com>
PKG_LICENSE:=AGPL-3.0-only
PKG_LICENSE_FILES:=LICENSE.txt
PKG_BUILD_DIR:=$(BUILD_DIR)/ccnet-server-$(PKG_VERSION)-server PKG_BUILD_DIR:=$(BUILD_DIR)/ccnet-server-$(PKG_VERSION)-server
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com> PKG_BUILD_DEPENDS:=vala/host
PKG_FIXUP:=autoreconf PKG_FIXUP:=autoreconf
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1 PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk include $(INCLUDE_DIR)/nls.mk
include ../../lang/python/python-package.mk include ../../lang/python/python-package.mk
include ../../lang/python/python3-package.mk
define Package/seafile-ccnet define Package/seafile-ccnet
SECTION:=net SECTION:=net
CATEGORY:=Network CATEGORY:=Network
TITLE:=Seafile server - ccnet component TITLE:=Seafile server - ccnet component
URL:=http://seafile.com/ URL:=http://seafile.com/
DEPENDS:=+libsearpc +libevent2 +libopenssl \ DEPENDS:= \
+glib2 +python +libzdb +libuuid \ +glib2 \
+libpthread +libsqlite3 +jansson $(ICONV_DEPENDS) +jansson \
+libevent2 \
+libmariadb \
+libopenssl \
+libpthread \
+libsearpc \
+libsqlite3 \
+libuuid \
$(ICONV_DEPENDS)
endef endef
define Package/seafile-ccnet/description define Package/seafile-ccnet/description
Ccnet is a framework for writing networked applications in C. Ccnet is a framework for writing networked applications in C.
endef endef
CONFIGURE_ARGS += --disable-client \ define Package/python3-seafile-ccnet
--enable-server \ SECTION:=lang
--disable-ldap \ CATEGORY:=Languages
--disable-cluster \ SUBMENU:=Python
--enable-python \ TITLE:=Python bindings for Seafile Ccnet
--disable-server-pkg \ DEPENDS:=+seafile-ccnet +python3-light +python3-searpc
--disable-static-build \ VARIANT:=python3
--disable-compile-demo \ endef
--disable-console
PKG_BUILD_DEPENDS:=vala/host define Package/python3-seafile-ccnet/description
$(call Package/seafile-ccnet/description)
TARGET_LDFLAGS += -Wl,-rpath-link=$(STAGING_DIR)/usr/lib -liconv \ This package contains Python bindings for Ccnet.
-L$(STAGING_DIR)/usr/lib/mysql -lmysqlclient -lz endef
CONFIGURE_ARGS += \
--disable-console \
--disable-ldap \
--enable-python \
--with-mysql="$(STAGING_DIR)/usr/bin/mysql_config"
# Include Python 2 bindings in this package to maintain compatibility with previous versions
define Package/seafile-ccnet/install define Package/seafile-ccnet/install
$(INSTALL_DIR) $(1)/usr/{bin,lib} $(INSTALL_DIR) $(1)/usr/{lib,libexec}
$(INSTALL_DIR) $(1)$(PYTHON_PKG_DIR) $(INSTALL_DIR) $(1)$(PYTHON_PKG_DIR)/ccnet
$(CP) $(PKG_INSTALL_DIR)/usr/bin/ccnet* $(1)/usr/bin/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/libexec/
$(CP) $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR)/ccnet $(1)$(PYTHON_PKG_DIR) $(INSTALL_DATA) $(PKG_BUILD_DIR)/python/ccnet/*.py $(1)$(PYTHON_PKG_DIR)/ccnet/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libccnet.so* $(1)/usr/lib/ $(CP) $(PKG_INSTALL_DIR)/usr/lib/libccnet.so* $(1)/usr/lib/
find $(1) -name "*\.pyc" -o -name "*\.pyo" | xargs rm -f
endef endef
define Build/InstallDev define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include $(INSTALL_DIR) $(1)/usr/include/ccnet
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
$(CP) $(PKG_INSTALL_DIR)/usr/include/ccnet* $(1)/usr/include/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libccnet.pc $(1)/usr/lib/pkgconfig/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/include/ccnet/*.h $(1)/usr/include/ccnet/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libccnet.so* $(1)/usr/lib/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libccnet.pc $(1)/usr/lib/pkgconfig/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libccnet.{a,la,so*} $(1)/usr/lib/
endef endef
define Py3Build/Compile
rm -rf $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/ccnet
$(INSTALL_DIR) $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/ccnet
$(INSTALL_DATA) $(PKG_BUILD_DIR)/python/ccnet/*.py $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/ccnet/
endef
Py3Package/python3-seafile-ccnet/install:=:
$(eval $(call BuildPackage,seafile-ccnet)) $(eval $(call BuildPackage,seafile-ccnet))
$(eval $(call Py3Package,python3-seafile-ccnet))
$(eval $(call BuildPackage,python3-seafile-ccnet))
$(eval $(call BuildPackage,python3-seafile-ccnet-src))

View file

@ -5,21 +5,7 @@
AM_CPPFLAGS = @GLIB2_CFLAGS@ -I$(top_srcdir)/include \ AM_CPPFLAGS = @GLIB2_CFLAGS@ -I$(top_srcdir)/include \
-I$(top_srcdir)/include/ccnet \ -I$(top_srcdir)/include/ccnet \
@@ -72,11 +73,11 @@ ccnet-client.c: ccnet-object.h @@ -85,7 +86,7 @@ rpc_table.stamp: ${top_srcdir}/lib/rpc_t
ccnet-object.h: ${ccnet_object_define}
rm -f $@
- valac --pkg posix ${ccnet_object_define} -C -H ccnet-object.h
+ "$(STAGING_DIR_HOSTPKG)/bin/valac" --pkg posix ${ccnet_object_define} -C -H ccnet-object.h
ccnetobj.c: ${ccnet_object_define}
rm -f $@
- valac -C --pkg posix ${ccnet_object_define}
+ "$(STAGING_DIR_HOSTPKG)/bin/valac" -C --pkg posix ${ccnet_object_define}
searpc_gen = searpc-signature.h searpc-marshal.h
@@ -86,7 +87,7 @@ rpc_table.stamp: ${top_srcdir}/lib/rpc_table.py
@rm -f rpc_table.tmp @rm -f rpc_table.tmp
@touch rpc_table.tmp @touch rpc_table.tmp
@echo "[libsearpc]: generating rpc header files" @echo "[libsearpc]: generating rpc header files"

View file

@ -20,8 +20,6 @@ Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
tools/ccnet-init.c | 2 ++ tools/ccnet-init.c | 2 ++
7 files changed, 23 insertions(+), 8 deletions(-) 7 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/lib/rsa.c b/lib/rsa.c
index 7cca150..d969a62 100644
--- a/lib/rsa.c --- a/lib/rsa.c
+++ b/lib/rsa.c +++ b/lib/rsa.c
@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
@ -36,11 +34,10 @@ index 7cca150..d969a62 100644
generate_private_key(u_int bits) generate_private_key(u_int bits)
{ {
RSA *private = NULL; RSA *private = NULL;
- + BIGNUM *e = NULL;
- private = RSA_generate_key(bits, 35, NULL, NULL); - private = RSA_generate_key(bits, 35, NULL, NULL);
- if (private == NULL) - if (private == NULL)
+ BIGNUM *e = NULL;
+
+ private = RSA_new(); + private = RSA_new();
+ e = BN_new(); + e = BN_new();
+ if (private == NULL || e == NULL || !BN_set_word(e, 35) || + if (private == NULL || e == NULL || !BN_set_word(e, 35) ||
@ -53,11 +50,9 @@ index 7cca150..d969a62 100644
+ BN_free(e); + BN_free(e);
return private; return private;
} }
diff --git a/net/common/processors/keepalive-proc.c b/net/common/processors/keepalive-proc.c
index 609d102..42a0c23 100644
--- a/net/common/processors/keepalive-proc.c --- a/net/common/processors/keepalive-proc.c
+++ b/net/common/processors/keepalive-proc.c +++ b/net/common/processors/keepalive-proc.c
@@ -401,7 +401,7 @@ static void send_challenge(CcnetProcessor *processor) @@ -401,7 +401,7 @@ static void send_challenge(CcnetProcesso
unsigned char *buf; unsigned char *buf;
int len; int len;
@ -66,7 +61,7 @@ index 609d102..42a0c23 100644
buf = public_key_encrypt (peer->pubkey, priv->random_buf, 40, &len); buf = public_key_encrypt (peer->pubkey, priv->random_buf, 40, &len);
ccnet_processor_send_update (processor, "311", NULL, (char *)buf, len); ccnet_processor_send_update (processor, "311", NULL, (char *)buf, len);
@@ -434,7 +434,7 @@ static void send_challenge_user(CcnetProcessor *processor, CcnetUser *user) @@ -434,7 +434,7 @@ static void send_challenge_user(CcnetPro
ccnet_debug ("[Keepalive] Send user challenge to %.8s\n", ccnet_debug ("[Keepalive] Send user challenge to %.8s\n",
processor->peer->id); processor->peer->id);
@ -75,11 +70,9 @@ index 609d102..42a0c23 100644
buf = public_key_encrypt (user->pubkey, priv->random_buf, 40, &len); buf = public_key_encrypt (user->pubkey, priv->random_buf, 40, &len);
ccnet_processor_send_update (processor, "321", NULL, (char *)buf, len); ccnet_processor_send_update (processor, "321", NULL, (char *)buf, len);
diff --git a/net/common/processors/keepalive2-proc.c b/net/common/processors/keepalive2-proc.c
index d3e799e..d81c266 100644
--- a/net/common/processors/keepalive2-proc.c --- a/net/common/processors/keepalive2-proc.c
+++ b/net/common/processors/keepalive2-proc.c +++ b/net/common/processors/keepalive2-proc.c
@@ -306,7 +306,7 @@ static void send_challenge(CcnetProcessor *processor) @@ -306,7 +306,7 @@ static void send_challenge(CcnetProcesso
unsigned char *buf; unsigned char *buf;
int len; int len;
@ -88,11 +81,9 @@ index d3e799e..d81c266 100644
buf = public_key_encrypt (peer->pubkey, priv->random_buf, 40, &len); buf = public_key_encrypt (peer->pubkey, priv->random_buf, 40, &len);
if (len < 0) { if (len < 0) {
ccnet_debug ("[Keepalive] Failed to encrypt challenge " ccnet_debug ("[Keepalive] Failed to encrypt challenge "
diff --git a/net/common/processors/sendsessionkey-proc.c b/net/common/processors/sendsessionkey-proc.c
index 3ec2757..10c3340 100644
--- a/net/common/processors/sendsessionkey-proc.c --- a/net/common/processors/sendsessionkey-proc.c
+++ b/net/common/processors/sendsessionkey-proc.c +++ b/net/common/processors/sendsessionkey-proc.c
@@ -124,7 +124,7 @@ generate_session_key (CcnetProcessor *processor, int *len_p) @@ -124,7 +124,7 @@ generate_session_key (CcnetProcessor *pr
unsigned char random_buf[40]; unsigned char random_buf[40];
SHA_CTX s; SHA_CTX s;
@ -101,11 +92,9 @@ index 3ec2757..10c3340 100644
SHA1_Init (&s); SHA1_Init (&s);
SHA1_Update (&s, random_buf, sizeof(random_buf)); SHA1_Update (&s, random_buf, sizeof(random_buf));
diff --git a/net/common/processors/sendsessionkey-v2-proc.c b/net/common/processors/sendsessionkey-v2-proc.c
index c1c6924..4805ba6 100644
--- a/net/common/processors/sendsessionkey-v2-proc.c --- a/net/common/processors/sendsessionkey-v2-proc.c
+++ b/net/common/processors/sendsessionkey-v2-proc.c +++ b/net/common/processors/sendsessionkey-v2-proc.c
@@ -125,7 +125,7 @@ generate_session_key (CcnetProcessor *processor, int *len_p) @@ -125,7 +125,7 @@ generate_session_key (CcnetProcessor *pr
unsigned char random_buf[40]; unsigned char random_buf[40];
SHA_CTX s; SHA_CTX s;
@ -114,11 +103,9 @@ index c1c6924..4805ba6 100644
SHA1_Init (&s); SHA1_Init (&s);
SHA1_Update (&s, random_buf, sizeof(random_buf)); SHA1_Update (&s, random_buf, sizeof(random_buf));
diff --git a/net/server/user-mgr.c b/net/server/user-mgr.c
index 8a356f0..7a3f5cb 100644
--- a/net/server/user-mgr.c --- a/net/server/user-mgr.c
+++ b/net/server/user-mgr.c +++ b/net/server/user-mgr.c
@@ -816,9 +816,13 @@ hash_password_pbkdf2_sha256 (const char *passwd, @@ -816,9 +816,13 @@ hash_password_pbkdf2_sha256 (const char
char salt_str[SHA256_DIGEST_LENGTH*2+1]; char salt_str[SHA256_DIGEST_LENGTH*2+1];
if (!RAND_bytes (salt, sizeof(salt))) { if (!RAND_bytes (salt, sizeof(salt))) {
@ -132,11 +119,9 @@ index 8a356f0..7a3f5cb 100644
} }
PKCS5_PBKDF2_HMAC (passwd, strlen(passwd), PKCS5_PBKDF2_HMAC (passwd, strlen(passwd),
diff --git a/tools/ccnet-init.c b/tools/ccnet-init.c
index 4748962..28c9995 100644
--- a/tools/ccnet-init.c --- a/tools/ccnet-init.c
+++ b/tools/ccnet-init.c +++ b/tools/ccnet-init.c
@@ -162,7 +162,9 @@ main(int argc, char **argv) @@ -108,7 +108,9 @@ main(int argc, char **argv)
config_dir = ccnet_expand_path (config_dir); config_dir = ccnet_expand_path (config_dir);
/* printf("[conf_dir=%s\n]", config_dir); */ /* printf("[conf_dir=%s\n]", config_dir); */
@ -146,6 +131,3 @@ index 4748962..28c9995 100644
if (RAND_status() != 1) { /* it should be seeded automatically */ if (RAND_status() != 1) { /* it should be seeded automatically */
fprintf(stderr, "PRNG is not seeded\n"); fprintf(stderr, "PRNG is not seeded\n");
--
2.19.1

View file

@ -0,0 +1,33 @@
--- a/net/common/rpc-service.c
+++ b/net/common/rpc-service.c
@@ -314,7 +314,11 @@ ccnet_start_rpc(CcnetSession *session)
#endif /* CCNET_SERVER */
- char *path = g_build_filename (session->config_dir, CCNET_SOCKET_NAME, NULL);
+ const char *socket_dir = g_getenv ("SEAFILE_UCI_SOCKET_DIR");
+ if (!socket_dir) {
+ socket_dir = session->config_dir;
+ }
+ char *path = g_build_filename (socket_dir, CCNET_SOCKET_NAME, NULL);
SearpcNamedPipeServer *server = searpc_create_named_pipe_server_with_threadpool (path, NAMED_PIPE_SERVER_THREAD_POOL_SIZE);
if (!server) {
ccnet_warning ("Failed to create named pipe server.\n");
--- a/net/server/ccnet-server.c
+++ b/net/server/ccnet-server.c
@@ -292,10 +292,13 @@ main (int argc, char **argv)
config_dir = ccnet_expand_path (config_dir);
if (!log_file) {
- char *logdir = g_build_filename (config_dir, "logs", NULL);
+ char *logdir = g_strdup (g_getenv ("SEAFILE_UCI_LOG_DIR"));
+ if (!logdir) {
+ logdir = g_build_filename (config_dir, "logs", NULL);
+ }
checkdir_with_mkdir (logdir);
+ log_file = g_build_filename (logdir, "ccnet.log", NULL);
g_free (logdir);
- log_file = g_build_filename (config_dir, "logs", "ccnet.log", NULL);
}
if (ccnet_log_init (log_file, log_level_str) < 0) {
fprintf (stderr, "ccnet_log_init error: %s, %s\n", strerror(errno),

View file

@ -8,67 +8,88 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=seafile-seahub PKG_NAME:=seafile-seahub
PKG_VERSION:=6.3.4 PKG_VERSION:=7.1.2
PKG_RELEASE:=8 PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/haiwen/seahub/tar.gz/v$(PKG_VERSION)-server? PKG_SOURCE_URL:=https://codeload.github.com/haiwen/seahub/tar.gz/v$(PKG_VERSION)-server?
PKG_HASH:=53a9efdb6791fd3a2a191e89cb0f133632056046ec08adbb2ad72088e6161430 PKG_HASH:=647dca870c996ed00844d3bf45bc15f22fdf5268cfd3ac4c0dd9e4c15360361d
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com> PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>, Jeffery To <jeffery.to@gmail.com>
PKG_LICENSE:=Apache-2.0 PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE.txt PKG_LICENSE_FILES:=LICENSE.txt
HOST_PYTHON_PACKAGE_BUILD_DEPENDS:="django>=1.11"
PKG_BUILD_DIR:=$(BUILD_DIR)/seahub-$(PKG_VERSION)-server PKG_BUILD_DIR:=$(BUILD_DIR)/seahub-$(PKG_VERSION)-server
include $(INCLUDE_DIR)/package.mk HOST_PYTHON3_PACKAGE_BUILD_DEPENDS:="Django~=1.11"
include ../../lang/python/python-package.mk
SEAFILE_PYTHON_DEPENDS:= \ PKG_BUILD_PARALLEL:=1
simplejson chardet dateutil mysqlclient pytz qrcode requests requests-oauthlib \
django1 django-constance django-appconf django-compressor django-formtools \ include $(INCLUDE_DIR)/package.mk
django-jsonfield django-picklefield django-postoffice django-restframework39 \ include ../../lang/python/python3-package.mk
pillow django-simple-captcha django-statici18n django-webpack-loader
define Package/seafile-seahub define Package/seafile-seahub
SECTION:=net SECTION:=net
CATEGORY:=Network CATEGORY:=Network
TITLE:=Seafile server - seahub component TITLE:=Seafile server - seahub component
URL:=https://seafile.com/ URL:=https://seafile.com/
DEPENDS:=+python \ DEPENDS:= \
+python-flup +gunicorn +openpyxl \ +gunicorn3 \
$(foreach dep,$(SEAFILE_PYTHON_DEPENDS),+python-$(dep)) +python3 \
+python3-chardet \
+python3-cryptodome \
+python3-dateutil \
+python3-django1 \
+python3-django-formtools \
+python3-django-picklefield \
+python3-django-postoffice \
+python3-django-restframework39 \
+python3-django-simple-captcha \
+python3-django-statici18n \
+python3-django-webpack-loader \
+python3-openpyxl \
+python3-pillow \
+python3-pyjwt \
+python3-pymysql \
+python3-pytz \
+python3-qrcode \
+python3-requests \
+python3-requests-oauthlib \
+python3-seafile-ccnet \
+python3-searpc
VARIANT:=python3
endef
define Package/seafile-seahub/description
The web end of seafile server.
Note: Localization support is turned off by default for performance
reasons. Set 'USE_I18N = True' in /etc/seafile/conf/seahub_settings.py
to use languages other than English.
endef endef
define Build/Configure define Build/Configure
endef endef
MAKE_VARS += \ MAKE_VARS += \
PYTHON="$(HOST_PYTHON_BIN)" \ PYTHON="$(HOST_PYTHON3_BIN)" \
DJANGO_ADMIN_PY="$(STAGING_DIR_HOSTPKG)/bin/django-admin" DJANGO_ADMIN_PY="$(STAGING_DIR_HOSTPKG)/bin/django-admin"
define Build/Compile define Py3Build/Compile
$(call Build/Compile/HostPyPipInstall,$(HOST_PYTHON_PACKAGE_BUILD_DEPENDS)) $(call Build/Compile/HostPy3PipInstall,$(HOST_PYTHON3_PACKAGE_BUILD_DEPENDS))
$(call Build/Compile/Default,locale) $(call Build/Compile/Default,locale)
$(INSTALL_DIR) $(PKG_INSTALL_DIR)/$(PYTHON3_PKG_DIR)
endef endef
define Package/seafile-seahub/description define Py3Package/seafile-seahub/install
The web end of seafile server. $(INSTALL_DIR) $(1)/usr/share/seafile/seafile-server/seahub/tools
$(CP) $(PKG_BUILD_DIR)/{frontend,locale,media,seahub,sql,static,thirdpart} $(1)/usr/share/seafile/seafile-server/seahub/
NOTE: in order to have better performance, localization support is turned off by default. $(INSTALL_BIN) $(PKG_BUILD_DIR)/manage.py $(1)/usr/share/seafile/seafile-server/seahub/
Please set 'USE_I18N = True' in seahub_settings.py if you intend to use languages other than English. $(INSTALL_DATA) $(PKG_BUILD_DIR)/tools/secret_key_generator.py $(1)/usr/share/seafile/seafile-server/seahub/tools/
endef
define Package/seafile-seahub/install
$(INSTALL_DIR) $(1)/usr/share/seafile/seafile-server/seahub
$(CP) $(PKG_BUILD_DIR)/{locale,media,fabfile,seahub,sql,tests,thirdpart,tools} $(1)/usr/share/seafile/seafile-server/seahub/
$(CP) $(PKG_BUILD_DIR)/*.{sh,template,py,txt} $(1)/usr/share/seafile/seafile-server/seahub/
$(CP) $(PKG_BUILD_DIR)/{CONTRIBUTORS,HACKING,README.markdown} $(1)/usr/share/seafile/seafile-server/seahub/
$(CP) $(PKG_BUILD_DIR)/pylintrc* $(1)/usr/share/seafile/seafile-server/seahub/
find $(1) -name "*\.pyc" -o -name "*\.pyo" | xargs rm -f
$(SED) "s/\(SEAFILE_VERSION\s*=\s*\)'\([0-9]\.[0-9]\.[0-9]\)'/\1'$(PKG_VERSION)'/g" $(1)/usr/share/seafile/seafile-server/seahub/seahub/settings.py $(SED) "s/\(SEAFILE_VERSION\s*=\s*\)'\([0-9]\.[0-9]\.[0-9]\)'/\1'$(PKG_VERSION)'/g" $(1)/usr/share/seafile/seafile-server/seahub/seahub/settings.py
mv $(1)/usr/share/seafile/seafile-server/seahub/media/avatars $(1)/usr/share/seafile/seafile-server/seahub/media/avatars_default
endef endef
$(eval $(call Py3Package,seafile-seahub))
$(eval $(call BuildPackage,seafile-seahub)) $(eval $(call BuildPackage,seafile-seahub))
$(eval $(call BuildPackage,seafile-seahub-src))

View file

@ -1,29 +0,0 @@
--- a/seahub/settings.py
+++ b/seahub/settings.py
@@ -46,7 +46,7 @@ SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
-USE_I18N = True
+USE_I18N = False
# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
@@ -339,7 +339,7 @@ SHARE_LINK_EMAIL_LANGUAGE = ''
ENABLE_UPLOAD_LINK_VIRUS_CHECK = False
# mininum length for user's password
-USER_PASSWORD_MIN_LENGTH = 6
+USER_PASSWORD_MIN_LENGTH = 8
# LEVEL based on four types of input:
# num, upper letter, lower letter, other symbols
@@ -348,7 +348,7 @@ USER_PASSWORD_STRENGTH_LEVEL = 3
# default False, only check USER_PASSWORD_MIN_LENGTH
# when True, check password strength level, STRONG(or above) is allowed
-USER_STRONG_PASSWORD_REQUIRED = False
+USER_STRONG_PASSWORD_REQUIRED = True
# Force user to change password when admin add/reset a user.
FORCE_PASSWORD_CHANGE = True

View file

@ -7,7 +7,7 @@
PROJECT=seahub PROJECT=seahub
develop: setup-git develop: setup-git
@@ -9,7 +12,7 @@ dist: locale uglify statici18n collectstatic @@ -9,22 +12,22 @@ dist: locale statici18n collectstatic
locale: locale:
@echo "--> Compile locales" @echo "--> Compile locales"
@ -15,9 +15,6 @@
+ $(DJANGO_ADMIN_PY) compilemessages + $(DJANGO_ADMIN_PY) compilemessages
@echo "" @echo ""
uglify:
@@ -19,17 +22,17 @@ uglify:
statici18n: statici18n:
@echo "--> Generate JS locale files in static/scripts/i18n" @echo "--> Generate JS locale files in static/scripts/i18n"
- python manage.py compilejsi18n - python manage.py compilejsi18n
@ -26,8 +23,8 @@
collectstatic: collectstatic:
@echo "--> Collect django static files to media/assets" @echo "--> Collect django static files to media/assets"
rm -rf media/assets 2> /dev/null rm -rf media/assets 2> /dev/null
- python manage.py collectstatic --noinput -i admin -i termsandconditions -i app -i sysadmin-app -i build.js - python manage.py collectstatic --noinput -i admin -i termsandconditions
+ $(PYTHON) manage.py collectstatic --noinput -i admin -i termsandconditions -i app -i sysadmin-app -i build.js + $(PYTHON) manage.py collectstatic --noinput -i admin -i termsandconditions
compressstatic: compressstatic:
@echo "--> Compress static files(css) to media/CACHE" @echo "--> Compress static files(css) to media/CACHE"

View file

@ -0,0 +1,29 @@
--- a/seahub/settings.py
+++ b/seahub/settings.py
@@ -140,7 +140,7 @@ TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
- os.path.join(PROJECT_ROOT, '../../seahub-data/custom/templates'),
+ os.path.join(os.environ.get('SEAFILE_UCI_DATA_DIR', os.path.join(PROJECT_ROOT, '../..')), 'seahub-data/custom/templates'),
os.path.join(PROJECT_ROOT, 'seahub/templates'),
],
'APP_DIRS': True,
@@ -627,7 +627,7 @@ CAPTCHA_IMAGE_SIZE = (90, 42)
ENABLE_THUMBNAIL = True
# Absolute filesystem path to the directory that will hold thumbnail files.
-SEAHUB_DATA_ROOT = os.path.join(PROJECT_ROOT, '../../seahub-data')
+SEAHUB_DATA_ROOT = os.path.join(os.environ.get('SEAFILE_UCI_DATA_DIR', os.path.join(PROJECT_ROOT, '../..')), 'seahub-data')
if os.path.exists(SEAHUB_DATA_ROOT):
THUMBNAIL_ROOT = os.path.join(SEAHUB_DATA_ROOT, 'thumbnail')
else:
@@ -790,7 +790,7 @@ except ImportError:
pass
else:
# In server release, sqlite3 db file is <topdir>/seahub.db
- DATABASES['default']['NAME'] = os.path.join(install_topdir, 'seahub.db')
+ DATABASES['default']['NAME'] = os.path.join(os.environ.get('SEAFILE_UCI_DATA_DIR', install_topdir), 'seahub.db')
# In server release, gunicorn is used to deploy seahub
INSTALLED_APPS += ('gunicorn', )

View file

@ -0,0 +1,8 @@
--- a/manage.py
+++ b/manage.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python3
import os
import sys

View file

@ -1,12 +0,0 @@
menu "Configuration"
depends on PACKAGE_seafile-server
config SEAFILE_FUSE_SUPPORT
bool "Enable FUSE support"
select PACKAGE_libfuse
default n
config SEAFILE_CONSOLE_SUPPORT
bool "Enable seafile server console"
default n
endmenu

View file

@ -8,144 +8,246 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=seafile-server PKG_NAME:=seafile-server
PKG_VERSION:=6.3.4 PKG_VERSION:=7.1.2
PKG_RELEASE:=7 PKG_RELEASE:=1
PKG_LICENSE:=GPL-3.0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/haiwen/seafile-server/tar.gz/v$(PKG_VERSION)-server? PKG_SOURCE_URL:=https://codeload.github.com/haiwen/seafile-server/tar.gz/v$(PKG_VERSION)-server?
PKG_HASH:=1ba4c641bad8d7592fd2592827e81470c88b8e802707d2b1e6d551c16d0da100 PKG_HASH:=30b972d17eb13da28f4dffcbabd2a2a4a7426a017f694e0fb8440e93fd5bd355
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>, Jeffery To <jeffery.to@gmail.com>
PKG_LICENSE:=AGPL-3.0-only
PKG_LICENSE_FILES:=LICENSE.txt
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)-server PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)-server
PKG_MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com> PKG_BUILD_DEPENDS:=vala/host libevhtp
PKG_FIXUP:=autoreconf PKG_FIXUP:=autoreconf
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1 PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk include $(INCLUDE_DIR)/nls.mk
include ../../lang/python/python-package.mk include ../../lang/python/python-package.mk
include ../../lang/python/python3-package.mk
# Check that the actual Makefile version-relase match the above. # Check that the actual Makefile version-relase match the above.
$(eval $(shell awk '/^PKG_VERSION.*=/ { print "SEAHUB_" $$$$0 }' ../seafile-seahub/Makefile)) $(eval $(shell awk '/^PKG_VERSION.*=/ { print "SEAHUB_" $$$$0 }' ../seafile-seahub/Makefile))
ifneq ($(PKG_VERSION),$(SEAHUB_PKG_VERSION)) ifneq ($(PKG_VERSION),$(SEAHUB_PKG_VERSION))
$(error $(if $(SEAHUB_PKG_VERSION), \ $(error $(if $(SEAHUB_PKG_VERSION), \
Version mismatch between seafile-seahub ($(SEAHUB_PKG_VERSION)) and \ Version mismatch between seafile-seahub ($(SEAHUB_PKG_VERSION)) and \
seafile-server ($(PKG_VERSION)), \ seafile-server ($(PKG_VERSION)), \
Could not get PKG_VERSION from seafile-seahub Makefile)) Could not get PKG_VERSION from seafile-seahub Makefile))
endif endif
define Package/seafile-server define Package/seafile-server
SECTION:=net SECTION:=net
CATEGORY:=Network CATEGORY:=Network
TITLE:=Seafile server TITLE:=Seafile server
URL:=https://seafile.com/ URL:=https://seafile.com/
DEPENDS:=+libarchive +libopenssl +glib2 +libsearpc +seafile-ccnet +seafile-seahub +sqlite3-cli \ DEPENDS:= \
+python-mysqlclient +python-urllib3 +jansson +libevent2 +libevent2-openssl \ +bash \
+libevent2-pthreads +zlib +libzdb +libsqlite3 +libmysqlclient +oniguruma \ +glib2 \
+libpthread +libuuid +bash +procps-ng +procps-ng-pkill +SEAFILE_FUSE_SUPPORT:libfuse $(ICONV_DEPENDS) +jansson \
MENU:=1 +libarchive \
endef +libevent2 \
+libevent2-openssl \
define Package/seafile-server/config +libmariadb \
source "$(SOURCE)/Config.in" +libopenssl \
+libpthread \
+libsearpc \
+libsqlite3 \
+libuuid \
+oniguruma \
+procps-ng-pkill \
+python3-pymysql \
+python3-seafile-server \
+seafile-ccnet \
+seafile-seahub \
+sqlite3-cli \
+zlib \
$(ICONV_DEPENDS)
endef endef
define Package/seafile-server/description define Package/seafile-server/description
Open source cloud storage with advanced features on privacy protection and teamwork. Open source cloud storage with advanced features on privacy
protection and teamwork.
endef endef
CONFIGURE_ARGS += --enable-python define Package/seafile-server-fuse
SECTION:=net
CATEGORY:=Network
TITLE:=Seafile server - FUSE extension
URL:=https://seafile.com/
DEPENDS:= \
+bash \
+glib2 \
+jansson \
+libevent2 \
+libevent2-openssl \
+libfuse \
+libmariadb \
+libopenssl \
+libpthread \
+libsearpc \
+libsqlite3 \
+libuuid \
+procps-ng-pkill \
+seafile-ccnet \
+seafile-server \
+zlib \
$(ICONV_DEPENDS)
endef
ifeq ($(CONFIG_SEAFILE_FUSE_SUPPORT),y) define Package/seafile-server-fuse/description
CONFIGURE_ARGS += --enable-fuse $(call Package/seafile-server/description)
TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include/fuse
else
CONFIGURE_ARGS += --disable-fuse
endif
ifeq ($(CONFIG_SEAFILE_CONSOLE_SUPPORT),y) This package contains the FUSE extension (seaf-fuse) for Seafile
CONFIGURE_ARGS += --enable-console server.
else endef
CONFIGURE_ARGS += --disable-console
endif
PKG_BUILD_DEPENDS:=vala/host libevhtp define Package/python3-seafile-server
SECTION:=lang
CATEGORY:=Languages
SUBMENU:=Python
TITLE:=Python bindings for Seafile server
DEPENDS:=+python3-light +python3-logging +python3-searpc +python3-seafile-ccnet
VARIANT:=python3
endef
# This is required as python-package.mk overrides the default setting of having interlinking enabled define Package/python3-seafile-server/description
$(call Package/seafile-server/description)
This package contains Python bindings for Seafile server.
endef
CONFIGURE_ARGS += \
--disable-console \
--enable-fuse \
--enable-python \
--with-mysql="$(STAGING_DIR)/usr/bin/mysql_config"
# This is required as python[3]-package.mk overrides the default setting of having interlinking enabled
ifdef CONFIG_USE_MIPS16 ifdef CONFIG_USE_MIPS16
TARGET_CFLAGS += -minterlink-mips16 TARGET_CFLAGS += -minterlink-mips16
endif endif
TARGET_LDFLAGS += -Wl,-rpath-link=$(STAGING_DIR)/usr/lib -liconv \
-L$(STAGING_DIR)/usr/lib/mysql -lmysqlclient -lz -levent_openssl -levent
ifdef CONFIG_GCC_LIBSSP ifdef CONFIG_GCC_LIBSSP
TARGET_LDFLAGS += -lssp TARGET_LDFLAGS += -lssp
endif endif
define Package/seafile-server/conffiles define Package/seafile-server/conffiles
/etc/config/seafile /etc/config/seafile-server
endef endef
SEAFILE_SERVER_BINARIES:= \
seaf-fsck \
seafile-controller \
seaf-server \
seaf-server-init \
seafserv-gc
SEAFILE_SERVER_SHELL_SCRIPTS:= \
reset-admin.sh \
seaf-fsck.sh \
seaf-gc.sh \
seafile.sh \
seahub.sh \
setup-seafile-mysql.sh \
setup-seafile.sh
# sqlite2mysql.sh handled differently
SEAFILE_SERVER_PYTHON_SCRIPTS:= \
check_init_admin.py \
setup-seafile-mysql.py \
sqlite2mysql.py
# Include Python 2 bindings in this package to maintain compatibility with previous versions
define Package/seafile-server/install define Package/seafile-server/install
$(INSTALL_DIR) $(1)/usr/{bin,lib} $(INSTALL_DIR) $(1)/usr/{bin,libexec}
$(INSTALL_DIR) $(1)$(PYTHON_PKG_DIR) $(INSTALL_DIR) $(1)$(PYTHON_PKG_DIR)/{seafile,seaserv}
$(INSTALL_DIR) $(1)/usr/share/seafile/seafile-server $(INSTALL_DIR) $(1)/usr/share/seafile/seafile-server
$(INSTALL_DIR) $(1)/usr/share/seafile/conf $(INSTALL_DIR) $(1)/etc/{config,init.d,seafile}
$(INSTALL_DIR) $(1)/etc/{config,init.d} $(INSTALL_DIR) $(1)/lib/upgrade/keep.d
$(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
$(CP) $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR)/seafile/ $(1)$(PYTHON_PKG_DIR)/ for bin in $(SEAFILE_SERVER_BINARIES) ; do \
$(CP) $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR)/seaserv/ $(1)$(PYTHON_PKG_DIR)/ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/$$$$bin $(1)/usr/libexec/ ; \
$(CP) $(PKG_BUILD_DIR)/scripts/seaf-gc.sh $(1)/usr/share/seafile/seafile-server/ done
$(CP) $(PKG_BUILD_DIR)/scripts/seaf-fsck.sh $(1)/usr/share/seafile/seafile-server/
ifeq ($(CONFIG_SEAFILE_FUSE_SUPPORT),y) $(INSTALL_DATA) $(PKG_BUILD_DIR)/python/seafile/*.py $(1)$(PYTHON_PKG_DIR)/seafile/
$(CP) $(PKG_BUILD_DIR)/scripts/seaf-fuse.sh $(1)/usr/share/seafile/seafile-server/ $(INSTALL_DATA) $(PKG_BUILD_DIR)/python/seaserv/*.py $(1)$(PYTHON_PKG_DIR)/seaserv/
endif
$(CP) $(PKG_BUILD_DIR)/scripts/setup-seafile-mysql.py $(1)/usr/share/seafile/seafile-server/ for sh in $(SEAFILE_SERVER_SHELL_SCRIPTS) ; do \
$(CP) $(PKG_BUILD_DIR)/scripts/setup-seafile-mysql.sh $(1)/usr/share/seafile/seafile-server/ $(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/$$$$sh $(1)/usr/bin/$$$${sh%.sh} ; \
$(CP) $(PKG_BUILD_DIR)/scripts/sqlite2mysql.py $(1)/usr/share/seafile/seafile-server/ done
$(CP) $(PKG_BUILD_DIR)/scripts/sqlite2mysql.sh $(1)/usr/share/seafile/seafile-server/ mv $(1)/usr/bin/reset-admin $(1)/usr/bin/reset-seafile-admin
$(CP) $(PKG_BUILD_DIR)/scripts/check_init_admin.py $(1)/usr/share/seafile/seafile-server/
$(CP) $(PKG_BUILD_DIR)/scripts/upgrade/ $(1)/usr/share/seafile/seafile-server/ $(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/sqlite2mysql.sh $(1)/usr/share/seafile/seafile-server/
$(CP) ./files/seafile.conf $(1)/etc/config/seafile
$(INSTALL_BIN) ./files/seafile.init $(1)/etc/init.d/seafile for py in $(SEAFILE_SERVER_PYTHON_SCRIPTS) ; do \
$(INSTALL_BIN) ./files/seahub.init $(1)/etc/init.d/seahub $(INSTALL_DATA) $(PKG_BUILD_DIR)/scripts/$$$$py $(1)/usr/share/seafile/seafile-server/ ; \
find $(1) -name "*\.pyc" -o -name "*\.pyo" | xargs rm -f done
$(CP) $(PKG_BUILD_DIR)/scripts/{sql,upgrade} $(1)/usr/share/seafile/seafile-server/
rm -rf $(1)/usr/share/seafile/seafile-server/upgrade/win32
$(INSTALL_BIN) ./files/create-seafile-admin.sh $(1)/usr/bin/create-seafile-admin
$(INSTALL_CONF) ./files/seafile-server.config $(1)/etc/config/seafile-server
$(INSTALL_BIN) ./files/seafile-server.init $(1)/etc/init.d/seafile-server
$(INSTALL_DATA) ./files/seafile-server.upgrade $(1)/lib/upgrade/keep.d/seafile-server
endef endef
define Build/InstallDev define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include $(INSTALL_DIR) $(1)/usr/include/seafile
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
$(INSTALL_DIR) $(1)$(PYTHON_PKG_DIR) $(INSTALL_DIR) $(1)$(PYTHON_PKG_DIR)
$(CP) $(PKG_INSTALL_DIR)/usr/include/seafile/ $(1)/usr/include/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/include/seafile/*.h $(1)/usr/include/seafile/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libseafile.pc $(1)/usr/lib/pkgconfig/ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libseafile.pc $(1)/usr/lib/pkgconfig/
$(CP) $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR)/seafile/ $(1)$(PYTHON_PKG_DIR)/
$(CP) $(PKG_INSTALL_DIR)$(PYTHON_PKG_DIR)/seaserv/ $(1)$(PYTHON_PKG_DIR)/
endef endef
define Py3Build/Compile
rm -rf $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/{seafile,seaserv}
$(INSTALL_DIR) $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/{seafile,seaserv}
$(INSTALL_DATA) $(PKG_BUILD_DIR)/python/seafile/*.py $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/seafile/
$(INSTALL_DATA) $(PKG_BUILD_DIR)/python/seaserv/*.py $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/seaserv/
endef
define Package/seafile-server-fuse/install
$(INSTALL_DIR) $(1)/usr/{bin,libexec}
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/seaf-fuse $(1)/usr/libexec/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/seaf-fuse.sh $(1)/usr/bin/seaf-fuse
endef
Py3Package/python3-seafile-server/install:=:
define Package/seafile-server/postinst define Package/seafile-server/postinst
#!/bin/sh #!/bin/sh
[ ! -f /etc/init.d/seafile ] && exit 0 cat << EOF
if [ ! -d /usr/share/seafile/seafile-data ] Please see:
then
echo "*** Installation completed, running configuration script..."
/etc/init.d/seafile setup
if [ $$? -ne 0 ] https://github.com/openwrt/packages/blob/master/net/seafile-server/README.md
then
echo for OpenWrt-specific installation notes (in particular, if you are
echo "*** ERROR: Configuration failed. Please fix the issues if any and re-run the script using the command below:" upgrading from a version before 7.1).
echo "*** \"/etc/init.d/seafile setup\""
fi EOF
else
echo "*** seafile-data directory already exists." [ -z "$$IPKG_INSTROOT" ] || exit 0
echo
echo "*** In case you are upgrading seafile, please run the appropriate upgrade script" cat << EOF
echo "*** manually before using the new version."
echo "*** Upgrade scripts are located at \"/usr/share/seafile/seafile-server/upgrade\"" opkg will attempt to start Seafile server now. This may fail if you have
echo not set up Seafile server before or if you are upgrading and have not
echo "*** For more information, please read http://manual.seafile.com/deploy/upgrade.html" run the upgrade scripts.
fi
EOF
endef endef
$(eval $(call BuildPackage,seafile-server)) $(eval $(call BuildPackage,seafile-server))
$(eval $(call BuildPackage,seafile-server-fuse))
$(eval $(call Py3Package,python3-seafile-server))
$(eval $(call BuildPackage,python3-seafile-server))
$(eval $(call BuildPackage,python3-seafile-server-src))

View file

@ -0,0 +1,114 @@
# Seafile Server on OpenWrt
## Installation Notes
### First-time Installation
1. Consider where you would like the Seafile data directory
(`seafile-data`), Seahub data directory (`seahub-data`), and the
Seahub database (`seahub.db`, if you will be using SQLite) to be
stored.
This location can be configured in `/etc/config/seafile-server`
(using the _data_dir_ option); the default is `/usr/share/seafile`.
If you are certain you will use a custom location, set this location
in `/etc/config/seafile-server` before continuing with the other
installation steps.
2. Run one of the two setup scripts:
* To use SQLite:
# setup-seafile
* To use MySQL:
# setup-seafile-mysql
3. Create a Seafile admin account:
# create-seafile-admin
4. Start Seafile server:
# service seafile-server start
### Upgrading
Please run the appropriate upgrade scripts in
`/usr/share/seafile/seafile-server/upgrade` before using the new
version.
For more information, see
https://download.seafile.com/published/seafile-manual/upgrade/upgrade.md.
Note that since version 7.1, configuration files are stored in
`/etc/seafile` instead of `/usr/share/seafile`.
If you are upgrading from a version before 7.1:
1. Run the upgrade scripts in
`/usr/share/seafile/seafile-server/upgrade` up to 7.1.
2. Move the `conf` and `ccnet` directories from `/usr/share/seafile` to
`/etc/seafile`.
3. If you are using a custom Seafile data directory location and have
set this in `ccnet/seafile.ini`:
Starting with 7.1, the Seafile data directory location will be taken
from `/etc/config/seafile-server`, and any setting in
`ccnet/seafile.ini` will be ignored.
It is strongly recommended to migrate the custom location setting to
`/etc/config/seafile-server` and rename/remove the `seafile.ini`
file.
Note that the _data_dir_ option in /etc/config/seafile-server
determines the *parent* path to the Seafile data directory (along
with the Seahub data directory and the Seahub database, if you are
using SQLite). The actual Seafile data directory must be named
`seafile-data`.
For example, if your Seafile data directory is
`/srv/seafile/my-seafile-data`:
1. Rename the directory to `seafile-data`, so now the Seafile data
directory is `/srv/seafile/seafile-data`.
2. Move the Seahub data directory (`seahub-data`) from
`/usr/share/seafile` into `/srv/seafile`.
3. If you are using SQLite, move the Seahub database (`seahub.db`)
from `/usr/share/seafile` into `/srv/seafile`.
4. Set the _data_dir_ option in `/etc/config/seafile-server` to the
parent path, `/srv/seafile`.
5. Rename or delete `ccnet/seafile.ini`.
4. Review/update your Seahub settings. In previous versions of the
Seahub OpenWrt package, some of Seahub's default settings (in
`/usr/share/seafile/seafile-server/seahub/seahub/settings.py`) were
modified from the defaults shipped by upstream.
Starting with 7.1, Seahub's default settings are the same as
[upstream][seahub_settings], with custom settings added to
`/etc/seafile/conf/seahub_settings.py` during setup for new
installations.
To use the same custom settings in your upgraded installation, add
these lines to `/etc/seafile/conf/seahub_settings.py`:
# Custom settings for OpenWrt
USE_I18N = False
USER_PASSWORD_MIN_LENGTH = 8
USER_STRONG_PASSWORD_REQUIRED = True
[seahub_settings]: https://github.com/haiwen/seahub/blob/v7.1.2-server/seahub/settings.py
5. Continue running the upgrade scripts up to the new version.

View file

@ -0,0 +1,10 @@
#!/bin/sh
TOPDIR=/usr/share/seafile
INSTALLPATH=$TOPDIR/seafile-server
seafile start || exit 1
seahub python-env python3 "$INSTALLPATH/check_init_admin.py"
seafile stop

View file

@ -0,0 +1,11 @@
config seafile-server
#
# Directory that holds:
#
# * Seafile data directory (seafile-data)
# * Seahub data directory (seahub-data)
# * Seahub database (seahub.db), if using SQLite
#
# Default: /usr/share/seafile
#
option data_dir /usr/share/seafile

View file

@ -0,0 +1,74 @@
#!/bin/sh /etc/rc.common
START=99
STOP=01
EXTRA_COMMANDS="generate_uci_conf"
TOPDIR=/usr/share/seafile
INSTALLPATH=$TOPDIR/seafile-server
uci_conf=/var/run/seafile/uci.conf
default_data_dir=$TOPDIR
seafile_server_latest_symlink=$TOPDIR/seafile-server-latest
seafile_data_dir_symlink=$TOPDIR/seafile-data
seahub_avatars_symlink=$INSTALLPATH/seahub/media/avatars
seahub_custom_media_symlink=$INSTALLPATH/seahub/media/custom
read_uci_section() {
local cfg="$1"
local data_dir
config_get data_dir "$cfg" data_dir "$default_data_dir"
uci_data_dir="$data_dir"
}
generate_uci_conf() {
local uci_data_dir="$default_data_dir"
config_load seafile-server
config_foreach read_uci_section seafile-server
mkdir -p "$uci_data_dir"
mkdir -p "${uci_conf%/*}"
cat <<- EOF > "$uci_conf"
export SEAFILE_UCI_CONF_DIR=/etc/seafile
export SEAFILE_UCI_DATA_DIR="$uci_data_dir"
export SEAFILE_UCI_LOG_DIR=/var/log/seafile
export SEAFILE_UCI_PID_DIR=/var/run/seafile
export SEAFILE_UCI_SOCKET_DIR=/var/run/seafile
EOF
[ ! -L "$seafile_server_latest_symlink" ] || rm -f "$seafile_server_latest_symlink"
[ ! -L "$seafile_data_dir_symlink" ] || rm -f "$seafile_data_dir_symlink"
[ ! -L "$seahub_avatars_symlink" ] || \
[ "$(readlink -f "$seahub_avatars_symlink")" = "$uci_data_dir/seahub-data/avatars" ] || \
ln -snf "$uci_data_dir/seahub-data/avatars" "$seahub_avatars_symlink"
[ ! -L "$seahub_custom_media_symlink" ] || \
[ "$(readlink -f "$seahub_custom_media_symlink")" = "$uci_data_dir/seahub-data/custom" ] || \
ln -snf "$uci_data_dir/seahub-data/custom" "$seahub_custom_media_symlink"
}
start() {
seafile start || return
if ! seahub start; then
seafile stop
return 1
fi
}
stop() {
seahub stop
seahub_ret=$?
seafile stop
seafile_ret=$?
[ "$seahub_ret" -eq 0 ] && [ "$seafile_ret" -eq 0 ]
}
restart() {
stop
sleep 2
start
}

View file

@ -0,0 +1 @@
/etc/seafile/

View file

@ -1,12 +0,0 @@
# Start Seahub in fastcgi mode - 1 = enable, 0 = disable
SEAHUB_FASTCGI=0
# Listen on the port specified below (defaults to 8000)
SEAHUB_PORT=8000
# Method of serving requests (fastcgi mode only) - threaded or prefork
# Using threaded mode is recommended as it consumes less resources
SEAHUB_METHOD=threaded
# The maximum number of worker processes/threads (fastcgi mode only)
# General formula: (2 x $num_cores) + 1
# To set the number of workers in WSGI mode (which is the default)
# please edit /usr/share/seafile/seafile-server/runtime/seahub.conf
SEAHUB_WORKERS=3

View file

@ -1,157 +0,0 @@
#!/bin/bash /etc/rc.common
START=98
APP=seafile
EXTRA_HELP=" setup Runs the setup script
create_admin Creates the administrative login
reset_admin Alias to create_admin"
EXTRA_COMMANDS="setup create_admin reset_admin"
TOPDIR=/usr/share/seafile
default_ccnet_conf_dir=${TOPDIR}/ccnet
central_config_dir=${TOPDIR}/conf
seaf_controller=/usr/bin/seafile-controller
function validate_ccnet_conf_dir () {
if [[ ! -d ${default_ccnet_conf_dir} ]]; then
echo "Error: there is no ccnet config directory."
echo "Have you run \"/etc/init.d/seafile setup\"?"
echo ""
exit 1
fi
}
function validate_central_conf_dir () {
if [[ ! -d ${central_config_dir} ]]; then
echo "Error: there is no conf/ directory."
echo "Have you run \"/etc/init.d/seafile setup\"?"
echo ""
exit 1
fi
}
function read_seafile_data_dir () {
seafile_ini=${default_ccnet_conf_dir}/seafile.ini
if [[ ! -f ${seafile_ini} ]]; then
echo "Error: ${seafile_ini} not found."
exit 1
fi
seafile_data_dir=$(cat "${seafile_ini}")
if [[ ! -d ${seafile_data_dir} ]]; then
echo "Your seafile server data directory \"${seafile_data_dir}\" is invalid or doesn't exits."
echo "Please check it first, or create this directory yourself."
echo ""
exit 1
fi
}
function test_config() {
if ! ${seaf_controller} --test \
-c "${default_ccnet_conf_dir}" \
-d "${seafile_data_dir}" \
-F "${central_config_dir}" ; then
exit 1
fi
}
function check_component_running() {
name=$1
cmd=$2
if pid=$(pgrep -f "$cmd" 2>/dev/null); then
return 1
fi
}
function validate_already_running () {
check_component_running "seafile-controller" "seafile-controller -F ${central_config_dir}" || return 1
check_component_running "ccnet-server" "ccnet-server -F ${central_config_dir}" || return 1
check_component_running "seaf-server" "seaf-server -F ${central_config_dir}" || return 1
check_component_running "fileserver" "fileserver -F ${central_config_dir}" || return 1
check_component_running "seafdav" "wsgidav.server.run_server" || return 1
}
function start_seafile_server () {
if ! validate_already_running; then
if [[ "$name" == "seafile-controller" ]]; then
echo "Seafile already running."
else
echo "Error: component [$name] is already running. Please try stopping it manually by running \"kill $pid\"."
echo "To force killing the process, use \"kill -9 $pid\"."
fi
exit 1
fi
validate_central_conf_dir
validate_ccnet_conf_dir
read_seafile_data_dir
test_config
echo "Starting seafile server, please wait ..."
${seaf_controller} \
-F "${central_config_dir}" \
-c "${default_ccnet_conf_dir}" \
-d "${seafile_data_dir}"
sleep 3
# check if seafile server started successfully
if ! pgrep -f "seafile-controller -F ${central_config_dir}" 2>/dev/null 1>&2; then
echo "Failed to start seafile server"
exit 1
fi
echo "Seafile server started"
echo
}
function stop_seafile_server () {
if ! pgrep -f "seafile-controller -F ${central_config_dir}" 2>/dev/null 1>&2; then
echo "Seafile server not running"
else
echo "Stopping seafile server ..."
pkill -SIGTERM -f "seafile-controller -F ${central_config_dir}"
pkill -f "ccnet-server -F ${central_config_dir}"
pkill -f "seaf-server -F ${central_config_dir}"
pkill -f "fileserver -F ${central_config_dir}"
pkill -f "soffice.*--invisible --nocrashreport"
pkill -f "wsgidav.server.run_server"
retry=1
while ! validate_already_running && [ $retry -lt 60 ]; do sleep 1; ((retry++)); done
if ! validate_already_running; then
echo "Error: [$name] component is still running. Please try stopping it manually by running \"kill $pid\"."
echo "To force killing the process, use \"kill -9 $pid\"."
fi
fi
}
function restart_seafile_server () {
stop_seafile_server
start_seafile_server
}
function start() {
start_seafile_server
}
function stop() {
stop_seafile_server
}
function restart() {
restart_seafile_server
}
function setup() {
cd "$TOPDIR" && \
/usr/bin/seafile-admin setup
}
function create_admin() {
cd "$TOPDIR" && \
/usr/bin/seafile-admin create-admin
}
function reset_admin() {
create_admin
}

View file

@ -1,226 +0,0 @@
#!/bin/bash /etc/rc.common
START=99
APP=seahub
EXTRA_HELP=" clearsessions Clears expired sessions from database"
EXTRA_COMMANDS="clearsessions"
SEAHUB_FASTCGI=0
SEAHUB_PORT=8000
SEAHUB_METHOD=threaded
SEAHUB_WORKERS=3
[ -f /etc/config/seafile ] && \
. /etc/config/seafile
INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
central_config_dir=${TOPDIR}/conf
manage_py=${INSTALLPATH}/seahub/manage.py
gunicorn_conf=${INSTALLPATH}/runtime/seahub.conf
pidfile=/var/run/seafile/seahub.pid
errorlog=${INSTALLPATH}/runtime/error.log
accesslog=${INSTALLPATH}/runtime/access.log
gunicorn_exe=/usr/bin/gunicorn
function check_python_executable() {
if [[ "$PYTHON" != "" && -x $PYTHON ]]; then
return 0
fi
if which python2.7 2>/dev/null 1>&2; then
PYTHON=python2.7
elif which python27 2>/dev/null 1>&2; then
PYTHON=python27
else
echo
echo "Can't find a python executable of version 2.7 or above in PATH"
echo "Install python 2.7+ before continue."
echo "Or if you installed it in a non-standard PATH, set the PYTHON enviroment varirable to it"
echo
exit 1
fi
}
function validate_ccnet_conf_dir() {
if [[ ! -d ${default_ccnet_conf_dir} ]]; then
echo "Error: there is no ccnet config directory."
echo "Have you run '/etc/init.d/seafile setup'?"
echo ""
exit 1
fi
}
function read_seafile_data_dir() {
seafile_ini=${default_ccnet_conf_dir}/seafile.ini
if [[ ! -f ${seafile_ini} ]]; then
echo "Error: ${seafile_ini} not found."
exit 1
fi
seafile_data_dir=$(cat "${seafile_ini}")
if [[ ! -d ${seafile_data_dir} ]]; then
echo "Your seafile server data directory \"${seafile_data_dir}\" is invalid or doesn't exits."
echo "Please check it first, or create this directory yourself."
echo ""
exit 1
fi
}
function validate_seahub_running() {
if pid=$(pgrep -f "${manage_py}" 2>/dev/null); then
return 1
elif pid=$(pgrep -f "seahub.wsgi:application" 2>/dev/null); then
return 1
fi
}
function validate_port() {
if ! [[ ${SEAHUB_PORT} =~ ^[1-9][0-9]{1,4}$ ]] ; then
printf "\033[033m${SEAHUB_PORT}\033[m is not a valid port number\n"
exit 1
fi
}
function warning_if_seafile_not_running() {
if ! pgrep -f "seafile-controller -F ${central_config_dir}" 2>/dev/null 1>&2; then
echo
echo "Error: seafile-controller not running. Have you run \"/etc/init.d/seafile start\"?"
echo
exit 1
fi
}
function prepare_seahub_log_dir() {
logdir="${TOPDIR}/logs"
if ! [[ -d "${logsdir}" ]]; then
if ! mkdir -p "${logdir}"; then
echo "Error: failed to create log dir \"${logdir}\""
exit 1
fi
fi
export SEAHUB_LOG_DIR="${logdir}"
}
function before_start() {
prepare_env
warning_if_seafile_not_running
if ! validate_seahub_running; then
echo "Seahub is already running."
exit 1
fi
prepare_seahub_log_dir
validate_port
}
function start_seahub() {
before_start
echo "Starting seahub at port ${SEAHUB_PORT} ..."
check_init_admin
$PYTHON $gunicorn_exe seahub.wsgi:application -c "${gunicorn_conf}" -b "0.0.0.0:${SEAHUB_PORT}" --preload
# Ensure seahub is started successfully
retry=1
while ! validate_seahub_running && [[ ! -f "${pidfile}" ]] && [[ $retry -lt 120 ]]; do sleep 1; ((retry++)); done
if ! validate_seahub_running && [[ -f "${pidfile}" ]]; then
echo
echo "Seahub is started"
echo
else
printf "\033[33mError: Seahub failed to start.\033[m\n"
exit 1
fi
}
function start_seahub_fastcgi() {
before_start
# Returns 127.0.0.1 if SEAFILE_FASTCGI_HOST is unset or hasn't got any value,
# otherwise returns value of SEAFILE_FASTCGI_HOST environment variable
address=`(test -z "$SEAFILE_FASTCGI_HOST" && echo "127.0.0.1") || echo $SEAFILE_FASTCGI_HOST`
echo "Starting seahub (fastcgi) at ${address}:${SEAHUB_PORT} ..."
check_init_admin
$PYTHON "${manage_py}" runfcgi host=${address} port=${SEAHUB_PORT} pidfile=${pidfile} \
outlog=${accesslog} errlog=${errorlog} maxchildren=${SEAHUB_WORKERS} method=${SEAHUB_METHOD}
# Ensure seahub is started successfully
retry=1
while ! validate_seahub_running && [[ ! -f "${pidfile}" ]] && [[ $retry -lt 120 ]]; do sleep 1; ((retry++)); done
if ! validate_seahub_running && [[ -f "${pidfile}" ]]; then
echo
echo "Seahub is started"
echo
else
printf "\033[33mError: Seahub failed to start.\033[m\n"
exit 1
fi
}
function prepare_env() {
check_python_executable
validate_ccnet_conf_dir
read_seafile_data_dir
export CCNET_CONF_DIR=${default_ccnet_conf_dir}
export SEAFILE_CONF_DIR=${seafile_data_dir}
export SEAFILE_CENTRAL_CONF_DIR=${central_config_dir}
export PYTHONPATH="${INSTALLPATH}/seahub:${INSTALLPATH}/seahub/thirdpart:${PYTHONPATH}"
}
function clear_sessions() {
prepare_env
echo "Start clear expired session records ..."
$PYTHON "${manage_py}" clearsessions
echo
echo "Done"
echo
}
function stop_seahub() {
if [[ -f ${pidfile} ]]; then
pid=$(cat "${pidfile}")
echo "Stopping seahub ..."
kill ${pid}
rm -f ${pidfile}
retry=1
while ! validate_seahub_running && [ $retry -lt 60 ]; do sleep 1; ((retry++)); done
if ! validate_seahub_running; then
echo "Error: seahub cannot be stopped. Please try stopping it manually by running \"kill $(echo "$pid" | tr '\n' ' ')\"."
echo "To force killing the processes, use \"kill -9 $(echo "$pid" | tr '\n' ' ')\"."
fi
else
echo "Seahub is not running"
fi
}
function check_init_admin() {
check_init_admin_script=${INSTALLPATH}/check_init_admin.py
if ! $PYTHON $check_init_admin_script; then
exit 1
fi
}
function start() {
if [ "$SEAHUB_FASTCGI" == "1" ]; then
start_seahub_fastcgi
else
start_seahub
fi
}
function stop() {
stop_seahub
}
function restart() {
stop
start
}
function clearsessions() {
clear_sessions
}

View file

@ -0,0 +1,11 @@
--- a/configure.ac
+++ b/configure.ac
@@ -219,7 +219,7 @@ PKG_CHECK_MODULES(JANSSON, [jansson >= $
AC_SUBST(JANSSON_CFLAGS)
AC_SUBST(JANSSON_LIBS)
-PKG_CHECK_MODULES(LIBEVENT, [libevent >= $LIBEVENT_REQUIRED])
+PKG_CHECK_MODULES(LIBEVENT, [libevent_openssl >= $LIBEVENT_REQUIRED])
AC_SUBST(LIBEVENT_CFLAGS)
AC_SUBST(LIBEVENT_LIBS)

View file

@ -0,0 +1,10 @@
--- a/configure.ac
+++ b/configure.ac
@@ -167,6 +167,7 @@ else
LIB_MAC=
MSVC_CFLAGS=
LIB_CRYPT32=
+ LIB_ICONV=-liconv
fi
AC_SUBST(LIB_WS32)

View file

@ -0,0 +1,99 @@
--- a/controller/seafile-controller.c
+++ b/controller/seafile-controller.c
@@ -257,7 +257,7 @@ init_seafile_path ()
bin_dir = g_path_get_dirname (binary);
tmp = g_path_get_dirname (bin_dir);
- installpath = g_path_get_dirname (tmp);
+ installpath = "/usr/share/seafile/seafile-server";
topdir = g_path_get_dirname (installpath);
--- a/scripts/reset-admin.sh
+++ b/scripts/reset-admin.sh
@@ -1,7 +1,7 @@
#!/bin/bash
SCRIPT=$(readlink -f "$0")
-INSTALLPATH=$(dirname "${SCRIPT}")
+INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_seafile_data_dir=${TOPDIR}/seafile-data
--- a/scripts/seaf-fsck.sh
+++ b/scripts/seaf-fsck.sh
@@ -3,7 +3,7 @@
echo ""
SCRIPT=$(readlink -f "$0")
-INSTALLPATH=$(dirname "${SCRIPT}")
+INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_seafile_data_dir=${TOPDIR}/seafile-data
--- a/scripts/seaf-fuse.sh
+++ b/scripts/seaf-fuse.sh
@@ -3,7 +3,7 @@
echo ""
SCRIPT=$(readlink -f "$0")
-INSTALLPATH=$(dirname "${SCRIPT}")
+INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_seafile_data_dir=${TOPDIR}/seafile-data
--- a/scripts/seaf-gc.sh
+++ b/scripts/seaf-gc.sh
@@ -3,7 +3,7 @@
echo ""
SCRIPT=$(readlink -f "$0")
-INSTALLPATH=$(dirname "${SCRIPT}")
+INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_seafile_data_dir=${TOPDIR}/seafile-data
--- a/scripts/seafile.sh
+++ b/scripts/seafile.sh
@@ -13,7 +13,7 @@
echo ""
SCRIPT=$(readlink -f "$0")
-INSTALLPATH=$(dirname "${SCRIPT}")
+INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_seafile_data_dir=${TOPDIR}/seafile-data
--- a/scripts/seahub.sh
+++ b/scripts/seahub.sh
@@ -13,7 +13,7 @@
echo ""
SCRIPT=$(readlink -f "$0")
-INSTALLPATH=$(dirname "${SCRIPT}")
+INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_seafile_data_dir=${TOPDIR}/seafile-data
--- a/scripts/setup-seafile-mysql.sh
+++ b/scripts/setup-seafile-mysql.sh
@@ -7,7 +7,7 @@
set -e
SCRIPT=$(readlink -f "$0")
-INSTALLPATH=$(dirname "${SCRIPT}")
+INSTALLPATH=/usr/share/seafile/seafile-server
cd "$INSTALLPATH"
--- a/scripts/setup-seafile.sh
+++ b/scripts/setup-seafile.sh
@@ -1,7 +1,7 @@
#!/bin/bash
SCRIPT=$(readlink -f "$0")
-INSTALLPATH=$(dirname "${SCRIPT}")
+INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_seafile_data_dir=${TOPDIR}/seafile-data

View file

@ -1,73 +0,0 @@
--- a/scripts/seaf-fsck.sh
+++ b/scripts/seaf-fsck.sh
@@ -7,7 +7,7 @@ INSTALLPATH=$(dirname "${SCRIPT}")
TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_conf_dir=${TOPDIR}/conf
-seaf_fsck=${INSTALLPATH}/seafile/bin/seaf-fsck
+seaf_fsck=/usr/bin/seaf-fsck
export PATH=${INSTALLPATH}/seafile/bin:$PATH
export SEAFILE_LD_LIBRARY_PATH=${INSTALLPATH}/seafile/lib/:${INSTALLPATH}/seafile/lib64:${LD_LIBRARY_PATH}
--- a/scripts/seaf-gc.sh
+++ b/scripts/seaf-gc.sh
@@ -7,7 +7,7 @@ INSTALLPATH=$(dirname "${SCRIPT}")
TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_conf_dir=${TOPDIR}/conf
-seaf_gc=${INSTALLPATH}/seafile/bin/seafserv-gc
+seaf_gc=/usr/bin/seafserv-gc
seaf_gc_opts=""
export PATH=${INSTALLPATH}/seafile/bin:$PATH
--- a/scripts/setup-seafile-mysql.sh
+++ b/scripts/setup-seafile-mysql.sh
@@ -40,15 +40,10 @@ function check_python_executable() {
function check_python_module () {
module=$1
name=$2
- hint=$3
printf " Checking python module: ${name} ... "
if ! $PYTHON -c "import ${module}" 2>/dev/null 1>&2; then
echo
printf "\033[33m ${name} \033[m is not installed, Please install it first.\n"
- if [[ "${hint}" != "" ]]; then
- printf "${hint}"
- echo
- fi
err_and_quit;
fi
echo -e "Done."
@@ -70,14 +65,10 @@ function check_python () {
if [[ $PYTHON == "python2.6" ]]; then
py26="2.6"
fi
- hint="\nOn Debian/Ubntu: apt-get install python-setuptools\nOn CentOS/RHEL: yum install python${py26}-distribute"
- check_python_module pkg_resources setuptools "${hint}"
-
- hint="\nOn Debian/Ubntu: apt-get install python-imaging\nOn CentOS/RHEL: yum install python${py26}-imaging"
- check_python_module PIL python-imaging "${hint}"
- hint='\nOn Debian/Ubuntu:\n\nsudo apt-get install python-mysqldb\n\nOn CentOS/RHEL:\n\nsudo yum install MySQL-python'
- check_python_module MySQLdb python-mysqldb "${hint}"
+ check_python_module pkg_resources setuptools
+ check_python_module PIL python-imaging
+ check_python_module MySQLdb python-mysqldb
fi
echo
}
@@ -85,5 +76,6 @@ function check_python () {
check_python;
export PYTHON=$PYTHON
+export PYTHONPATH="/usr/share/seafile/seafile-server/seahub/thirdpart:$PYTHONPATH"
exec $PYTHON "$python_script" "$@"
--- a/scripts/sqlite2mysql.sh
+++ b/scripts/sqlite2mysql.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
#
# This shell script and corresponding sqlite2mysql.py are used to
# migrate Seafile data from SQLite to MySQL.

View file

@ -0,0 +1,104 @@
--- a/scripts/seaf-fsck.sh
+++ b/scripts/seaf-fsck.sh
@@ -8,9 +8,9 @@ TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_seafile_data_dir=${TOPDIR}/seafile-data
default_conf_dir=${TOPDIR}/conf
-seaf_fsck=${INSTALLPATH}/seafile/bin/seaf-fsck
+seaf_fsck=/usr/libexec/seaf-fsck
-export PATH=${INSTALLPATH}/seafile/bin:$PATH
+export PATH=/usr/libexec:$PATH
export SEAFILE_LD_LIBRARY_PATH=${INSTALLPATH}/seafile/lib/:${INSTALLPATH}/seafile/lib64:${LD_LIBRARY_PATH}
script_name=$0
--- a/scripts/seaf-fuse.sh
+++ b/scripts/seaf-fuse.sh
@@ -8,9 +8,9 @@ TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_seafile_data_dir=${TOPDIR}/seafile-data
default_conf_dir=${TOPDIR}/conf
-seaf_fuse=${INSTALLPATH}/seafile/bin/seaf-fuse
+seaf_fuse=/usr/libexec/seaf-fuse
-export PATH=${INSTALLPATH}/seafile/bin:$PATH
+export PATH=/usr/libexec:$PATH
export SEAFILE_LD_LIBRARY_PATH=${INSTALLPATH}/seafile/lib/:${INSTALLPATH}/seafile/lib64:${LD_LIBRARY_PATH}
script_name=$0
--- a/scripts/seaf-gc.sh
+++ b/scripts/seaf-gc.sh
@@ -8,10 +8,10 @@ TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_seafile_data_dir=${TOPDIR}/seafile-data
default_conf_dir=${TOPDIR}/conf
-seaf_gc=${INSTALLPATH}/seafile/bin/seafserv-gc
+seaf_gc=/usr/libexec/seafserv-gc
seaf_gc_opts=""
-export PATH=${INSTALLPATH}/seafile/bin:$PATH
+export PATH=/usr/libexec:$PATH
export SEAFILE_LD_LIBRARY_PATH=${INSTALLPATH}/seafile/lib/:${INSTALLPATH}/seafile/lib64:${LD_LIBRARY_PATH}
script_name=$0
--- a/scripts/seafile.sh
+++ b/scripts/seafile.sh
@@ -18,9 +18,9 @@ TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_seafile_data_dir=${TOPDIR}/seafile-data
central_config_dir=${TOPDIR}/conf
-seaf_controller="${INSTALLPATH}/seafile/bin/seafile-controller"
+seaf_controller="/usr/libexec/seafile-controller"
-export PATH=${INSTALLPATH}/seafile/bin:$PATH
+export PATH=/usr/libexec:$PATH
export ORIG_LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
export SEAFILE_LD_LIBRARY_PATH=${INSTALLPATH}/seafile/lib/:${INSTALLPATH}/seafile/lib64:${LD_LIBRARY_PATH}
--- a/scripts/seahub.sh
+++ b/scripts/seahub.sh
@@ -25,7 +25,7 @@ gunicorn_conf=${TOPDIR}/conf/gunicorn.co
pidfile=${TOPDIR}/pids/seahub.pid
errorlog=${TOPDIR}/logs/gunicorn_error.log
accesslog=${TOPDIR}/logs/gunicorn_access.log
-gunicorn_exe=${INSTALLPATH}/seahub/thirdpart/bin/gunicorn
+gunicorn_exe=/usr/bin/gunicorn3
script_name=$0
function usage () {
@@ -233,9 +233,9 @@ function clear_sessions () {
function stop_seahub () {
if [[ -f ${pidfile} ]]; then
echo "Stopping seahub ..."
- pkill -9 -f "thirdpart/bin/gunicorn"
+ pkill -9 -f "/usr/bin/gunicorn3"
sleep 1
- if pgrep -f "thirdpart/bin/gunicorn" 2>/dev/null 1>&2 ; then
+ if pgrep -f "/usr/bin/gunicorn3" 2>/dev/null 1>&2 ; then
echo 'Failed to stop seahub.'
exit 1
fi
--- a/scripts/setup-seafile-mysql.py
+++ b/scripts/setup-seafile-mysql.py
@@ -299,7 +299,7 @@ class EnvManager(object):
def __init__(self):
self.install_path = os.path.dirname(os.path.abspath(__file__))
self.top_dir = os.path.dirname(self.install_path)
- self.bin_dir = os.path.join(self.install_path, 'seafile', 'bin')
+ self.bin_dir = '/usr/libexec'
self.central_config_dir = os.path.join(self.top_dir, 'conf')
self.central_pids_dir = os.path.join(self.top_dir, 'pids')
self.central_logs_dir = os.path.join(self.top_dir, 'logs')
--- a/scripts/setup-seafile.sh
+++ b/scripts/setup-seafile.sh
@@ -455,8 +455,8 @@ if [[ "${need_pause}" == "1" ]]; then
read dummy
fi
-ccnet_init=${INSTALLPATH}/seafile/bin/ccnet-init
-seaf_server_init=${INSTALLPATH}/seafile/bin/seaf-server-init
+ccnet_init=/usr/libexec/ccnet-init
+seaf_server_init=/usr/libexec/seaf-server-init
# -------------------------------------------
# Create ccnet conf

View file

@ -0,0 +1,583 @@
--- a/common/seaf-utils.c
+++ b/common/seaf-utils.c
@@ -236,7 +236,12 @@ create_ccnet_rpc_client ()
SearpcNamedPipeClient *transport = NULL;
char *pipe_path = NULL;
- pipe_path = g_build_path ("/", seaf->ccnet_dir, CCNET_RPC_PIPE_NAME, NULL);
+ char *socket_dir = g_strdup (g_getenv ("SEAFILE_UCI_SOCKET_DIR"));
+ if (!socket_dir) {
+ socket_dir = g_strdup (seaf->ccnet_dir);
+ }
+ pipe_path = g_build_path ("/", socket_dir, CCNET_RPC_PIPE_NAME, NULL);
+ g_free (socket_dir);
transport = searpc_create_named_pipe_client(pipe_path);
g_free(pipe_path);
if (!transport)
--- a/controller/seafile-controller.c
+++ b/controller/seafile-controller.c
@@ -480,7 +480,10 @@ stop_services ()
static void
init_pidfile_path (SeafileController *ctl)
{
- char *pid_dir = g_build_filename (topdir, "pids", NULL);
+ char *pid_dir = g_strdup (g_getenv ("SEAFILE_UCI_PID_DIR"));
+ if (!pid_dir) {
+ pid_dir = g_build_filename (topdir, "pids", NULL);
+ }
if (!g_file_test(pid_dir, G_FILE_TEST_EXISTS)) {
if (g_mkdir(pid_dir, 0777) < 0) {
seaf_warning("failed to create pid dir %s: %s", pid_dir, strerror(errno));
@@ -492,6 +495,8 @@ init_pidfile_path (SeafileController *ct
ctl->pidfile[PID_SERVER] = g_build_filename (pid_dir, "seaf-server.pid", NULL);
ctl->pidfile[PID_SEAFDAV] = g_build_filename (pid_dir, "seafdav.pid", NULL);
ctl->pidfile[PID_SEAFEVENTS] = g_build_filename (pid_dir, "seafevents.pid", NULL);
+
+ g_free (pid_dir);
}
static int
@@ -514,7 +519,10 @@ seaf_controller_init (SeafileController
if (logdir == NULL) {
char *topdir = g_path_get_dirname(config_dir);
- logdir = g_build_filename (topdir, "logs", NULL);
+ logdir = g_strdup (g_getenv ("SEAFILE_UCI_LOG_DIR"));
+ if (!logdir) {
+ logdir = g_build_filename (topdir, "logs", NULL);
+ }
if (checkdir_with_mkdir(logdir) < 0) {
fprintf (stderr, "failed to create log folder \"%s\": %s\n",
logdir, strerror(errno));
@@ -523,10 +531,15 @@ seaf_controller_init (SeafileController
g_free (topdir);
}
+ char *socket_dir = g_strdup (g_getenv ("SEAFILE_UCI_SOCKET_DIR"));
+ if (!socket_dir) {
+ socket_dir = g_build_filename (installpath, "runtime", NULL);
+ }
+
ctl->central_config_dir = central_config_dir;
ctl->config_dir = config_dir;
ctl->seafile_dir = seafile_dir;
- ctl->rpc_pipe_path = g_build_filename (installpath, "runtime", NULL);
+ ctl->rpc_pipe_path = socket_dir;
ctl->logdir = logdir;
if (read_seafdav_config() < 0) {
--- a/python/seaserv/service.py
+++ b/python/seaserv/service.py
@@ -32,11 +32,17 @@ CCNET_CONF_PATH = _load_path_from_env('C
SEAFILE_CONF_DIR = _load_path_from_env('SEAFILE_CONF_DIR')
SEAFILE_CENTRAL_CONF_DIR = _load_path_from_env('SEAFILE_CENTRAL_CONF_DIR', check=False)
SEAFILE_RPC_PIPE_PATH = _load_path_from_env ("SEAFILE_RPC_PIPE_PATH", check=False)
+SEAFILE_UCI_SOCKET_DIR = _load_path_from_env('SEAFILE_UCI_SOCKET_DIR', check=False)
-ccnet_pipe_path = os.path.join (CCNET_CONF_PATH, 'ccnet-rpc.sock')
+ccnet_pipe_path = os.path.join (SEAFILE_UCI_SOCKET_DIR if SEAFILE_UCI_SOCKET_DIR else CCNET_CONF_PATH, 'ccnet-rpc.sock')
ccnet_threaded_rpc = ccnet.CcnetThreadedRpcClient(ccnet_pipe_path)
-seafile_pipe_path = os.path.join(SEAFILE_RPC_PIPE_PATH if SEAFILE_RPC_PIPE_PATH else SEAFILE_CONF_DIR,
+socket_dir = SEAFILE_CONF_DIR
+if SEAFILE_RPC_PIPE_PATH:
+ socket_dir = SEAFILE_RPC_PIPE_PATH
+elif SEAFILE_UCI_SOCKET_DIR:
+ socket_dir = SEAFILE_UCI_SOCKET_DIR
+seafile_pipe_path = os.path.join(socket_dir,
'seafile.sock')
seafserv_threaded_rpc = seafile.ServerThreadedRpcClient(seafile_pipe_path)
--- a/scripts/check_init_admin.py
+++ b/scripts/check_init_admin.py
@@ -284,7 +284,7 @@ class RPC(object):
import ccnet
ccnet_dir = os.environ['CCNET_CONF_DIR']
central_config_dir = os.environ['SEAFILE_CENTRAL_CONF_DIR']
- ccnet_named_pipe_path = ccnet_dir + '/' + 'ccnet-rpc.sock'
+ ccnet_named_pipe_path = os.environ.get('SEAFILE_UCI_SOCKET_DIR', ccnet_dir) + '/' + 'ccnet-rpc.sock'
self.rpc_client = ccnet.CcnetThreadedRpcClient(ccnet_named_pipe_path)
def get_db_email_users(self):
--- a/scripts/reset-admin.sh
+++ b/scripts/reset-admin.sh
@@ -1,11 +1,13 @@
#!/bin/bash
+/etc/init.d/seafile-server generate_uci_conf && . /var/run/seafile/uci.conf
+
SCRIPT=$(readlink -f "$0")
INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
-default_ccnet_conf_dir=${TOPDIR}/ccnet
-default_seafile_data_dir=${TOPDIR}/seafile-data
-central_config_dir=${TOPDIR}/conf
+default_ccnet_conf_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/ccnet
+default_seafile_data_dir=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seafile-data
+central_config_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/conf
function check_python_executable() {
if [[ "$PYTHON" != "" && -x $PYTHON ]]; then
--- a/scripts/seaf-fsck.sh
+++ b/scripts/seaf-fsck.sh
@@ -2,12 +2,14 @@
echo ""
+/etc/init.d/seafile-server generate_uci_conf && . /var/run/seafile/uci.conf
+
SCRIPT=$(readlink -f "$0")
INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
-default_ccnet_conf_dir=${TOPDIR}/ccnet
-default_seafile_data_dir=${TOPDIR}/seafile-data
-default_conf_dir=${TOPDIR}/conf
+default_ccnet_conf_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/ccnet
+default_seafile_data_dir=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seafile-data
+default_conf_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/conf
seaf_fsck=/usr/libexec/seaf-fsck
export PATH=/usr/libexec:$PATH
--- a/scripts/seaf-fuse.sh
+++ b/scripts/seaf-fuse.sh
@@ -2,12 +2,14 @@
echo ""
+/etc/init.d/seafile-server generate_uci_conf && . /var/run/seafile/uci.conf
+
SCRIPT=$(readlink -f "$0")
INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
-default_ccnet_conf_dir=${TOPDIR}/ccnet
-default_seafile_data_dir=${TOPDIR}/seafile-data
-default_conf_dir=${TOPDIR}/conf
+default_ccnet_conf_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/ccnet
+default_seafile_data_dir=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seafile-data
+default_conf_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/conf
seaf_fuse=/usr/libexec/seaf-fuse
export PATH=/usr/libexec:$PATH
@@ -78,7 +80,7 @@ function start_seaf_fuse () {
echo "Starting seaf-fuse, please wait ..."
- logfile=${TOPDIR}/logs/seaf-fuse.log
+ logfile=${SEAFILE_UCI_LOG_DIR-$TOPDIR/logs}/seaf-fuse.log
LD_LIBRARY_PATH=$SEAFILE_LD_LIBRARY_PATH ${seaf_fuse} \
-c "${default_ccnet_conf_dir}" \
--- a/scripts/seaf-gc.sh
+++ b/scripts/seaf-gc.sh
@@ -2,12 +2,14 @@
echo ""
+/etc/init.d/seafile-server generate_uci_conf && . /var/run/seafile/uci.conf
+
SCRIPT=$(readlink -f "$0")
INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
-default_ccnet_conf_dir=${TOPDIR}/ccnet
-default_seafile_data_dir=${TOPDIR}/seafile-data
-default_conf_dir=${TOPDIR}/conf
+default_ccnet_conf_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/ccnet
+default_seafile_data_dir=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seafile-data
+default_conf_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/conf
seaf_gc=/usr/libexec/seafserv-gc
seaf_gc_opts=""
--- a/scripts/seafile.sh
+++ b/scripts/seafile.sh
@@ -12,12 +12,14 @@
echo ""
+/etc/init.d/seafile-server generate_uci_conf && . /var/run/seafile/uci.conf
+
SCRIPT=$(readlink -f "$0")
INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
-default_ccnet_conf_dir=${TOPDIR}/ccnet
-default_seafile_data_dir=${TOPDIR}/seafile-data
-central_config_dir=${TOPDIR}/conf
+default_ccnet_conf_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/ccnet
+default_seafile_data_dir=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seafile-data
+central_config_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/conf
seaf_controller="/usr/libexec/seafile-controller"
export PATH=/usr/libexec:$PATH
@@ -121,7 +123,7 @@ function start_seafile_server () {
echo "Starting seafile server, please wait ..."
- mkdir -p $TOPDIR/logs
+ mkdir -p ${SEAFILE_UCI_LOG_DIR-$TOPDIR/logs}
LD_LIBRARY_PATH=$SEAFILE_LD_LIBRARY_PATH ${seaf_controller} \
-c "${default_ccnet_conf_dir}" \
-d "${default_seafile_data_dir}" \
--- a/scripts/seahub.sh
+++ b/scripts/seahub.sh
@@ -12,19 +12,21 @@
echo ""
+/etc/init.d/seafile-server generate_uci_conf && . /var/run/seafile/uci.conf
+
SCRIPT=$(readlink -f "$0")
INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
-default_ccnet_conf_dir=${TOPDIR}/ccnet
-default_seafile_data_dir=${TOPDIR}/seafile-data
-central_config_dir=${TOPDIR}/conf
-seafile_rpc_pipe_path=${INSTALLPATH}/runtime
+default_ccnet_conf_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/ccnet
+default_seafile_data_dir=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seafile-data
+central_config_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/conf
+seafile_rpc_pipe_path=${SEAFILE_UCI_SOCKET_DIR-$INSTALLPATH/runtime}
manage_py=${INSTALLPATH}/seahub/manage.py
-gunicorn_conf=${TOPDIR}/conf/gunicorn.conf.py
-pidfile=${TOPDIR}/pids/seahub.pid
-errorlog=${TOPDIR}/logs/gunicorn_error.log
-accesslog=${TOPDIR}/logs/gunicorn_access.log
+gunicorn_conf=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/conf/gunicorn.conf.py
+pidfile=${SEAFILE_UCI_PID_DIR-$TOPDIR/pids}/seahub.pid
+errorlog=${SEAFILE_UCI_LOG_DIR-$TOPDIR/logs}/gunicorn_error.log
+accesslog=${SEAFILE_UCI_LOG_DIR-$TOPDIR/logs}/gunicorn_access.log
gunicorn_exe=/usr/bin/gunicorn3
script_name=$0
@@ -138,7 +140,7 @@ function warning_if_seafile_not_running
}
function prepare_seahub_log_dir() {
- logdir=${TOPDIR}/logs
+ logdir=${SEAFILE_UCI_LOG_DIR-$TOPDIR/logs}
if ! [[ -d ${logsdir} ]]; then
if ! mkdir -p "${logdir}"; then
echo "ERROR: failed to create logs dir \"${logdir}\""
--- a/scripts/setup-seafile-mysql.py
+++ b/scripts/setup-seafile-mysql.py
@@ -300,9 +300,9 @@ class EnvManager(object):
self.install_path = os.path.dirname(os.path.abspath(__file__))
self.top_dir = os.path.dirname(self.install_path)
self.bin_dir = '/usr/libexec'
- self.central_config_dir = os.path.join(self.top_dir, 'conf')
- self.central_pids_dir = os.path.join(self.top_dir, 'pids')
- self.central_logs_dir = os.path.join(self.top_dir, 'logs')
+ self.central_config_dir = os.path.join(os.environ.get('SEAFILE_UCI_CONF_DIR', self.top_dir), 'conf')
+ self.central_pids_dir = os.environ.get('SEAFILE_UCI_PID_DIR', os.path.join(self.top_dir, 'pids'))
+ self.central_logs_dir = os.environ.get('SEAFILE_UCI_LOG_DIR', os.path.join(self.top_dir, 'logs'))
Utils.must_mkdir(self.central_config_dir)
def check_pre_condiction(self):
@@ -790,7 +790,7 @@ class CcnetConfigurator(AbstractConfigur
def __init__(self):
'''Initialize default values of ccnet configuration'''
AbstractConfigurator.__init__(self)
- self.ccnet_dir = os.path.join(env_mgr.top_dir, 'ccnet')
+ self.ccnet_dir = os.path.join(os.environ.get('SEAFILE_UCI_CONF_DIR', env_mgr.top_dir), 'ccnet')
self.port = 10001
self.server_name = None
self.ip_or_domain = None
@@ -919,7 +919,7 @@ class CcnetConfigurator(AbstractConfigur
class SeafileConfigurator(AbstractConfigurator):
def __init__(self):
AbstractConfigurator.__init__(self)
- self.seafile_dir = os.path.join(env_mgr.top_dir, 'seafile-data')
+ self.seafile_dir = os.path.join(os.environ.get('SEAFILE_UCI_DATA_DIR', env_mgr.top_dir), 'seafile-data')
self.port = 12001
self.fileserver_port = None
self.seafile_conf = os.path.join(env_mgr.central_config_dir, 'seafile.conf')
@@ -983,7 +983,7 @@ class SeafileConfigurator(AbstractConfig
question = 'Where do you want to put your seafile data?'
key = 'seafile-data'
note = 'Please use a volume with enough free space'
- default = os.path.join(env_mgr.top_dir, 'seafile-data')
+ default = os.path.join(os.environ.get('SEAFILE_UCI_DATA_DIR', env_mgr.top_dir), 'seafile-data')
self.seafile_dir = Utils.ask_question(question,
key=key,
note=note,
@@ -1204,7 +1204,7 @@ class SeahubConfigurator(AbstractConfigu
media_dir = os.path.join(env_mgr.install_path, 'seahub', 'media')
orig_avatar_dir = os.path.join(media_dir, 'avatars')
- seahub_data_dir = os.path.join(env_mgr.top_dir, 'seahub-data')
+ seahub_data_dir = os.path.join(os.environ.get('SEAFILE_UCI_DATA_DIR', env_mgr.top_dir), 'seahub-data')
dest_avatar_dir = os.path.join(seahub_data_dir, 'avatars')
if os.path.exists(dest_avatar_dir):
@@ -1214,7 +1214,7 @@ class SeahubConfigurator(AbstractConfigu
os.mkdir(seahub_data_dir)
shutil.move(orig_avatar_dir, dest_avatar_dir)
- os.symlink('../../../seahub-data/avatars', orig_avatar_dir)
+ os.symlink(dest_avatar_dir, orig_avatar_dir)
except Exception as e:
Utils.error('Failed to prepare seahub avatars dir: %s' % e)
@@ -1390,7 +1390,7 @@ def check_params(args):
seafile_config.fileserver_port = Utils.validate_port(fileserver_port)
seafile_dir = get_param_val(args.seafile_dir, 'SEAFILE_DIR',
- os.path.join(env_mgr.top_dir, 'seafile-data'))
+ os.path.join(os.environ.get('SEAFILE_UCI_DATA_DIR', env_mgr.top_dir), 'seafile-data'))
seafile_config.seafile_dir = seafile_config.validate_seafile_dir(seafile_dir)
global db_config
--- a/scripts/setup-seafile-mysql.sh
+++ b/scripts/setup-seafile-mysql.sh
@@ -6,6 +6,8 @@
set -e
+/etc/init.d/seafile-server generate_uci_conf && . /var/run/seafile/uci.conf
+
SCRIPT=$(readlink -f "$0")
INSTALLPATH=/usr/share/seafile/seafile-server
--- a/scripts/setup-seafile.sh
+++ b/scripts/setup-seafile.sh
@@ -1,14 +1,16 @@
#!/bin/bash
+/etc/init.d/seafile-server generate_uci_conf && . /var/run/seafile/uci.conf
+
SCRIPT=$(readlink -f "$0")
INSTALLPATH=/usr/share/seafile/seafile-server
TOPDIR=$(dirname "${INSTALLPATH}")
-default_ccnet_conf_dir=${TOPDIR}/ccnet
-default_seafile_data_dir=${TOPDIR}/seafile-data
-default_seahub_db=${TOPDIR}/seahub.db
-default_conf_dir=${TOPDIR}/conf
-default_pids_dir=${TOPDIR}/pids
-default_logs_dir=${TOPDIR}/logs
+default_ccnet_conf_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/ccnet
+default_seafile_data_dir=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seafile-data
+default_seahub_db=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seahub.db
+default_conf_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/conf
+default_pids_dir=${SEAFILE_UCI_PID_DIR-$TOPDIR/pids}
+default_logs_dir=${SEAFILE_UCI_LOG_DIR-$TOPDIR/logs}
export SEAFILE_LD_LIBRARY_PATH=${INSTALLPATH}/seafile/lib/:${INSTALLPATH}/seafile/lib64:${LD_LIBRARY_PATH}
@@ -516,7 +518,7 @@ gen_seafdav_conf;
# -------------------------------------------
# generate seahub/settings.py
# -------------------------------------------
-dest_settings_py=${TOPDIR}/conf/seahub_settings.py
+dest_settings_py=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/conf/seahub_settings.py
seahub_secret_keygen=${INSTALLPATH}/seahub/tools/secret_key_generator.py
if [[ ! -f ${dest_settings_py} ]]; then
@@ -621,44 +623,44 @@ function get_seahub_admin_passwd () {
echo "Creating database now, it may take one minute, please wait... "
echo
-cd ${TOPDIR}/ccnet && mkdir -m 0755 GroupMgr misc OrgMgr PeerMgr && cd -
+cd ${SEAFILE_UCI_CONF_DIR-$TOPDIR}/ccnet && mkdir -m 0755 GroupMgr misc OrgMgr PeerMgr && cd -
-ccnet_group_db=${TOPDIR}/ccnet/GroupMgr/groupmgr.db
+ccnet_group_db=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/ccnet/GroupMgr/groupmgr.db
ccnet_group_sql=${INSTALLPATH}/sql/sqlite/groupmgr.sql
if ! sqlite3 ${ccnet_group_db} ".read ${ccnet_group_sql}" 2>/dev/null 1>&2; then
echo "Failed to sync ccnet groupmgr database."
err_and_quit;
fi
-ccnet_config_db=${TOPDIR}/ccnet/misc/config.db
+ccnet_config_db=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/ccnet/misc/config.db
ccnet_config_sql=${INSTALLPATH}/sql/sqlite/config.sql
if ! sqlite3 ${ccnet_config_db} ".read ${ccnet_config_sql}" 2>/dev/null 1>&2; then
echo "Failed to sync ccnet config database."
err_and_quit;
fi
-ccnet_org_db=${TOPDIR}/ccnet/OrgMgr/orgmgr.db
+ccnet_org_db=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/ccnet/OrgMgr/orgmgr.db
ccnet_org_sql=${INSTALLPATH}/sql/sqlite/org.sql
if ! sqlite3 ${ccnet_org_db} ".read ${ccnet_org_sql}" 2>/dev/null 1>&2; then
echo "Failed to sync ccnet org database."
err_and_quit;
fi
-ccnet_user_db=${TOPDIR}/ccnet/PeerMgr/usermgr.db
+ccnet_user_db=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/ccnet/PeerMgr/usermgr.db
ccnet_user_sql=${INSTALLPATH}/sql/sqlite/user.sql
if ! sqlite3 ${ccnet_user_db} ".read ${ccnet_user_sql}" 2>/dev/null 1>&2; then
echo "Failed to sync ccnet user database."
err_and_quit;
fi
-seafile_db=${TOPDIR}/seafile-data/seafile.db
+seafile_db=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seafile-data/seafile.db
seafile_sql=${INSTALLPATH}/sql/sqlite/seafile.sql
if ! sqlite3 ${seafile_db} ".read ${seafile_sql}" 2>/dev/null 1>&2; then
echo "Failed to sync seafile database."
err_and_quit;
fi
-seahub_db=${TOPDIR}/seahub.db
+seahub_db=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seahub.db
seahub_sqls=${INSTALLPATH}/seahub/sql/sqlite3.sql
if ! sqlite3 ${seahub_db} ".read ${seahub_sqls}" 2>/dev/null 1>&2; then
echo "Failed to sync seahub database."
@@ -671,12 +673,12 @@ echo "Done."
media_dir=${INSTALLPATH}/seahub/media
orig_avatar_dir=${INSTALLPATH}/seahub/media/avatars
-dest_avatar_dir=${TOPDIR}/seahub-data/avatars
+dest_avatar_dir=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seahub-data/avatars
if [[ ! -d ${dest_avatar_dir} ]]; then
- mkdir -p "${TOPDIR}/seahub-data"
+ mkdir -p "${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seahub-data"
mv "${orig_avatar_dir}" "${dest_avatar_dir}"
- ln -s ../../../seahub-data/avatars ${media_dir}
+ ln -s ${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seahub-data/avatars ${media_dir}
fi
# Make a seafile-server symlink, like this:
--- a/scripts/sqlite2mysql.sh
+++ b/scripts/sqlite2mysql.sh
@@ -13,17 +13,19 @@
# (mysql> source ccnet-db.sql)
#
+/etc/init.d/seafile-server generate_uci_conf && . /var/run/seafile/uci.conf
+
CCNET_DB='ccnet-db.sql'
SEAFILE_DB='seafile-db.sql'
SEAHUB_DB='seahub-db.sql'
########## ccnet
seafile_path=$(pwd)
-if [ -f "${seafile_path}/conf/ccnet.conf" ]; then
- USER_MGR_DB=${seafile_path}/ccnet/PeerMgr/usermgr.db
- GRP_MGR_DB=${seafile_path}/ccnet/GroupMgr/groupmgr.db
+if [ -f "${SEAFILE_UCI_CONF_DIR-$seafile_path}/conf/ccnet.conf" ]; then
+ USER_MGR_DB=${SEAFILE_UCI_CONF_DIR-$seafile_path}/ccnet/PeerMgr/usermgr.db
+ GRP_MGR_DB=${SEAFILE_UCI_CONF_DIR-$seafile_path}/ccnet/GroupMgr/groupmgr.db
else
- echo "${seafile_path}/conf/ccnet.conf does not exists."
+ echo "${SEAFILE_UCI_CONF_DIR-$seafile_path}/conf/ccnet.conf does not exists."
read -p "Please provide your ccnet.conf path(e.g. /data/haiwen/conf/ccnet.conf): " ccnet_conf_path
if [ -f ${ccnet_conf_path} ]; then
USER_MGR_DB=$(dirname $(dirname "${ccnet_conf_path}"))/ccnet/PeerMgr/usermgr.db
@@ -50,11 +52,11 @@ sed 's/email TEXT, role TEXT/email VARCH
########## seafile
rm -rf ${SEAFILE_DB}
-if [ -f "${seafile_path}/seafile-data/seafile.db" ]; then
- echo "sqlite3 ${seafile_path}/seafile-data/seafile.db .dump | python sqlite2mysql.py > ${SEAFILE_DB}"
- sqlite3 ${seafile_path}/seafile-data/seafile.db .dump | python sqlite2mysql.py > ${SEAFILE_DB}
+if [ -f "${SEAFILE_UCI_DATA_DIR-$seafile_path}/seafile-data/seafile.db" ]; then
+ echo "sqlite3 ${SEAFILE_UCI_DATA_DIR-$seafile_path}/seafile-data/seafile.db .dump | python sqlite2mysql.py > ${SEAFILE_DB}"
+ sqlite3 ${SEAFILE_UCI_DATA_DIR-$seafile_path}/seafile-data/seafile.db .dump | python sqlite2mysql.py > ${SEAFILE_DB}
else
- echo "${seafile_path}/seafile-data/seafile.db does not exists."
+ echo "${SEAFILE_UCI_DATA_DIR-$seafile_path}/seafile-data/seafile.db does not exists."
read -p "Please provide your seafile.db path(e.g. /data/haiwen/seafile-data/seafile.db): " seafile_db_path
if [ -f ${seafile_db_path} ];then
echo "sqlite3 ${seafile_db_path} .dump | python sqlite2mysql.py > ${SEAFILE_DB}"
@@ -74,11 +76,11 @@ sed 's/user_name TEXT/user_name VARCHAR(
########## seahub
rm -rf ${SEAHUB_DB}
-if [ -f "${seafile_path}/seahub.db" ]; then
- echo "sqlite3 ${seafile_path}/seahub.db .dump | tr -d '\n' | sed 's/;/;\n/g' | python sqlite2mysql.py > ${SEAHUB_DB}"
- sqlite3 ${seafile_path}/seahub.db .dump | tr -d '\n' | sed 's/;/;\n/g' | python sqlite2mysql.py > ${SEAHUB_DB}
+if [ -f "${SEAFILE_UCI_DATA_DIR-$seafile_path}/seahub.db" ]; then
+ echo "sqlite3 ${SEAFILE_UCI_DATA_DIR-$seafile_path}/seahub.db .dump | tr -d '\n' | sed 's/;/;\n/g' | python sqlite2mysql.py > ${SEAHUB_DB}"
+ sqlite3 ${SEAFILE_UCI_DATA_DIR-$seafile_path}/seahub.db .dump | tr -d '\n' | sed 's/;/;\n/g' | python sqlite2mysql.py > ${SEAHUB_DB}
else
- echo "${seafile_path}/seahub.db does not exists."
+ echo "${SEAFILE_UCI_DATA_DIR-$seafile_path}/seahub.db does not exists."
read -p "Please prove your seahub.db path(e.g. /data/haiwen/seahub.db): " seahub_db_path
if [ -f ${seahub_db_path} ]; then
echo "sqlite3 ${seahub_db_path} .dump | tr -d '\n' | sed 's/;/;\n/g' | python sqlite2mysql.py > ${SEAHUB_DB}"
--- a/scripts/upgrade/minor-upgrade.sh
+++ b/scripts/upgrade/minor-upgrade.sh
@@ -1,5 +1,7 @@
#!/bin/bash
+/etc/init.d/seafile-server generate_uci_conf && . /var/run/seafile/uci.conf
+
SCRIPT=$(readlink -f "$0") # haiwen/seafile-server-1.3.0/upgrade/upgrade_xx_xx.sh
UPGRADE_DIR=$(dirname "$SCRIPT") # haiwen/seafile-server-1.3.0/upgrade/
INSTALLPATH=$(dirname "$UPGRADE_DIR") # haiwen/seafile-server-1.3.0/
@@ -15,11 +17,11 @@ read dummy
media_dir=${INSTALLPATH}/seahub/media
orig_avatar_dir=${INSTALLPATH}/seahub/media/avatars
-dest_avatar_dir=${TOPDIR}/seahub-data/avatars
+dest_avatar_dir=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seahub-data/avatars
seafile_server_symlink=${TOPDIR}/seafile-server-latest
-default_conf_dir=${TOPDIR}/conf
-default_ccnet_conf_dir=${TOPDIR}/ccnet
-seahub_data_dir=${TOPDIR}/seahub-data
+default_conf_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/conf
+default_ccnet_conf_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/ccnet
+seahub_data_dir=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seahub-data
elasticsearch_config_file=${seafile_server_symlink}/pro/elasticsearch/config/jvm.options
function migrate_avatars() {
@@ -37,7 +39,7 @@ function migrate_avatars() {
elif [[ ! -L ${orig_avatar_dir} ]]; then
mv "${orig_avatar_dir}"/* "${dest_avatar_dir}" 2>/dev/null 1>&2
rm -rf "${orig_avatar_dir}"
- ln -s ../../../seahub-data/avatars "${media_dir}"
+ ln -s ${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seahub-data/avatars "${media_dir}"
fi
echo
echo "DONE"
@@ -51,14 +53,14 @@ function make_media_custom_symlink() {
return
elif [[ ! -e "${media_symlink}" ]]; then
- ln -s ../../../seahub-data/custom "${media_symlink}"
+ ln -s ${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seahub-data/custom "${media_symlink}"
return
elif [[ -d "${media_symlink}" ]]; then
cp -rf "${media_symlink}" "${seahub_data_dir}/"
rm -rf "${media_symlink}"
- ln -s ../../../seahub-data/custom "${media_symlink}"
+ ln -s ${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seahub-data/custom "${media_symlink}"
fi
}
--- a/server/seaf-server.c
+++ b/server/seaf-server.c
@@ -767,8 +767,12 @@ static void start_rpc_service (const cha
"set_server_config_boolean",
searpc_signature_int__string_string_int());
+ const char *socket_dir = g_getenv ("SEAFILE_UCI_SOCKET_DIR");
+
if (rpc_pipe_path) {
pipe_path = g_build_path ("/", rpc_pipe_path, SEAFILE_RPC_PIPE_NAME, NULL);
+ } else if (socket_dir) {
+ pipe_path = g_build_path ("/", socket_dir, SEAFILE_RPC_PIPE_NAME, NULL);
} else {
pipe_path = g_build_path ("/", seafile_dir, SEAFILE_RPC_PIPE_NAME, NULL);
}
@@ -973,8 +977,14 @@ main (int argc, char **argv)
if (seafile_dir == NULL)
seafile_dir = g_build_filename (ccnet_dir, "seafile", NULL);
- if (logfile == NULL)
- logfile = g_build_filename (seafile_dir, "seafile.log", NULL);
+ if (logfile == NULL) {
+ char *log_dir = g_strdup (g_getenv("SEAFILE_UCI_LOG_DIR"));
+ if (!log_dir) {
+ log_dir = g_strdup (seafile_dir);
+ }
+ logfile = g_build_filename (log_dir, "seafile.log", NULL);
+ g_free (log_dir);
+ }
if (seafile_log_init (logfile, "info", "debug") < 0) {
seaf_warning ("Failed to init log.\n");

View file

@ -0,0 +1,73 @@
--- a/scripts/seaf-gc.sh
+++ b/scripts/seaf-gc.sh
@@ -63,8 +63,8 @@ function validate_already_running () {
exit 1;
fi
- check_component_running "ccnet-server" "ccnet-server -c ${default_ccnet_conf_dir}"
- check_component_running "seaf-server" "seaf-server -c ${default_ccnet_conf_dir}"
+ check_component_running "ccnet-server" "ccnet-server -F ${default_conf_dir} -c ${default_ccnet_conf_dir}"
+ check_component_running "seaf-server" "seaf-server -F ${default_conf_dir} -c ${default_ccnet_conf_dir}"
check_component_running "fileserver" "fileserver -c ${default_ccnet_conf_dir}"
check_component_running "seafdav" "wsgidav.server.server_cli"
}
--- a/scripts/seafile.sh
+++ b/scripts/seafile.sh
@@ -107,8 +107,8 @@ function validate_already_running () {
exit 1;
fi
- check_component_running "ccnet-server" "ccnet-server -c ${default_ccnet_conf_dir}"
- check_component_running "seaf-server" "seaf-server -c ${default_ccnet_conf_dir}"
+ check_component_running "ccnet-server" "ccnet-server -F ${central_config_dir} -c ${default_ccnet_conf_dir}"
+ check_component_running "seaf-server" "seaf-server -F ${central_config_dir} -c ${default_ccnet_conf_dir}"
check_component_running "fileserver" "fileserver -c ${default_ccnet_conf_dir}"
check_component_running "seafdav" "wsgidav.server.server_cli"
}
@@ -149,8 +149,8 @@ function stop_seafile_server () {
echo "Stopping seafile server ..."
pkill -SIGTERM -f "seafile-controller -c ${default_ccnet_conf_dir}"
- pkill -f "ccnet-server -c ${default_ccnet_conf_dir}"
- pkill -f "seaf-server -c ${default_ccnet_conf_dir}"
+ pkill -f "ccnet-server -F ${central_config_dir} -c ${default_ccnet_conf_dir}"
+ pkill -f "seaf-server -F ${central_config_dir} -c ${default_ccnet_conf_dir}"
pkill -f "fileserver -c ${default_ccnet_conf_dir}"
pkill -f "soffice.*--invisible --nocrashreport"
pkill -f "wsgidav.server.server_cli"
--- a/scripts/seahub.sh
+++ b/scripts/seahub.sh
@@ -94,10 +94,10 @@ function validate_seafile_data_dir () {
}
function validate_seahub_running () {
- if pgrep -f "${manage_py}" 2>/dev/null 1>&2; then
+ if pgrep -f "${manage_py} runfcgi" 2>/dev/null 1>&2; then
echo "Seahub is already running."
exit 1;
- elif pgrep -f "seahub.wsgi:application" 2>/dev/null 1>&2; then
+ elif pgrep -f "$gunicorn_exe seahub.wsgi:application -c ${gunicorn_conf}" 2>/dev/null 1>&2; then
echo "Seahub is already running."
exit 1;
fi
@@ -165,7 +165,7 @@ function start_seahub () {
# Ensure seahub is started successfully
sleep 5
- if ! pgrep -f "seahub.wsgi:application" 2>/dev/null 1>&2; then
+ if ! pgrep -f "$gunicorn_exe seahub.wsgi:application -c ${gunicorn_conf}" 2>/dev/null 1>&2; then
printf "\033[33mError:Seahub failed to start.\033[m\n"
echo "Please try to run \"./seahub.sh start\" again"
exit 1;
@@ -235,9 +235,9 @@ function clear_sessions () {
function stop_seahub () {
if [[ -f ${pidfile} ]]; then
echo "Stopping seahub ..."
- pkill -9 -f "/usr/bin/gunicorn3"
+ pkill -9 -f "$gunicorn_exe seahub.wsgi:application -c ${gunicorn_conf}"
sleep 1
- if pgrep -f "/usr/bin/gunicorn3" 2>/dev/null 1>&2 ; then
+ if pgrep -f "$gunicorn_exe seahub.wsgi:application -c ${gunicorn_conf}" 2>/dev/null 1>&2 ; then
echo 'Failed to stop seahub.'
exit 1
fi

View file

@ -0,0 +1,42 @@
--- a/scripts/reset-admin.sh
+++ b/scripts/reset-admin.sh
@@ -51,5 +51,5 @@ export SEAFILE_CONF_DIR=${default_seafil
export SEAFILE_CENTRAL_CONF_DIR=${central_config_dir}
export PYTHONPATH=${INSTALLPATH}/seafile/lib/python3.6/site-packages:${INSTALLPATH}/seafile/lib64/python3.6/site-packages:${INSTALLPATH}/seahub/thirdpart:$PYTHONPATH
-manage_py=${INSTALLPATH}/seahub/manage.py
+manage_py=${INSTALLPATH}/seahub/manage.pyc
exec "$PYTHON" "$manage_py" createsuperuser
--- a/scripts/seahub.sh
+++ b/scripts/seahub.sh
@@ -22,7 +22,7 @@ default_seafile_data_dir=${SEAFILE_UCI_D
central_config_dir=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/conf
seafile_rpc_pipe_path=${SEAFILE_UCI_SOCKET_DIR-$INSTALLPATH/runtime}
-manage_py=${INSTALLPATH}/seahub/manage.py
+manage_py=${INSTALLPATH}/seahub/manage.pyc
gunicorn_conf=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/conf/gunicorn.conf.py
pidfile=${SEAFILE_UCI_PID_DIR-$TOPDIR/pids}/seahub.pid
errorlog=${SEAFILE_UCI_LOG_DIR-$TOPDIR/logs}/gunicorn_error.log
--- a/scripts/setup-seafile-mysql.py
+++ b/scripts/setup-seafile-mysql.py
@@ -1083,7 +1083,7 @@ class SeahubConfigurator(AbstractConfigu
fp.write('# -*- coding: utf-8 -*-')
def write_secret_key(self, fp):
- script = os.path.join(env_mgr.install_path, 'seahub/tools/secret_key_generator.py')
+ script = os.path.join(env_mgr.install_path, 'seahub/tools/secret_key_generator.pyc')
cmd = [
Utils.get_python_executable(),
script,
--- a/scripts/setup-seafile.sh
+++ b/scripts/setup-seafile.sh
@@ -519,7 +519,7 @@ gen_seafdav_conf;
# generate seahub/settings.py
# -------------------------------------------
dest_settings_py=${SEAFILE_UCI_CONF_DIR-$TOPDIR}/conf/seahub_settings.py
-seahub_secret_keygen=${INSTALLPATH}/seahub/tools/secret_key_generator.py
+seahub_secret_keygen=${INSTALLPATH}/seahub/tools/secret_key_generator.pyc
if [[ ! -f ${dest_settings_py} ]]; then
key=$($PYTHON "${seahub_secret_keygen}")

View file

@ -0,0 +1,180 @@
--- a/scripts/reset-admin.sh
+++ b/scripts/reset-admin.sh
@@ -37,7 +37,7 @@ function check_python_executable() {
function validate_seafile_data_dir () {
if [[ ! -d ${default_seafile_data_dir} ]]; then
echo "Error: there is no seafile server data directory."
- echo "Have you run setup-seafile.sh before this?"
+ echo "Have you run setup-seafile before this?"
echo ""
exit 1;
fi
--- a/scripts/seaf-fsck.sh
+++ b/scripts/seaf-fsck.sh
@@ -25,7 +25,7 @@ function usage () {
function validate_ccnet_conf_dir () {
if [[ ! -d ${default_ccnet_conf_dir} ]]; then
echo "Error: there is no ccnet config directory."
- echo "Have you run setup-seafile.sh before this?"
+ echo "Have you run setup-seafile before this?"
echo ""
exit -1;
fi
@@ -34,7 +34,7 @@ function validate_ccnet_conf_dir () {
function validate_seafile_data_dir () {
if [[ ! -d ${default_seafile_data_dir} ]]; then
echo "Error: there is no seafile server data directory."
- echo "Have you run setup-seafile.sh before this?"
+ echo "Have you run setup-seafile before this?"
echo ""
exit 1;
fi
--- a/scripts/seaf-fuse.sh
+++ b/scripts/seaf-fuse.sh
@@ -41,7 +41,7 @@ fi
function validate_ccnet_conf_dir () {
if [[ ! -d ${default_ccnet_conf_dir} ]]; then
echo "Error: there is no ccnet config directory."
- echo "Have you run setup-seafile.sh before this?"
+ echo "Have you run setup-seafile before this?"
echo ""
exit -1;
fi
@@ -50,7 +50,7 @@ function validate_ccnet_conf_dir () {
function validate_seafile_data_dir () {
if [[ ! -d ${default_seafile_data_dir} ]]; then
echo "Error: there is no seafile server data directory."
- echo "Have you run setup-seafile.sh before this?"
+ echo "Have you run setup-seafile before this?"
echo ""
exit 1;
fi
@@ -67,7 +67,7 @@ function validate_already_running () {
function warning_if_seafile_not_running () {
if ! pgrep -f "seafile-controller -c ${default_ccnet_conf_dir}" 2>/dev/null 1>&2; then
echo
- echo "Warning: seafile-controller not running. Have you run \"./seafile.sh start\" ?"
+ echo "Warning: seafile-controller not running. Have you run \"service seafile-server start\" ?"
echo
fi
}
--- a/scripts/seaf-gc.sh
+++ b/scripts/seaf-gc.sh
@@ -27,7 +27,7 @@ function usage () {
function validate_ccnet_conf_dir () {
if [[ ! -d ${default_ccnet_conf_dir} ]]; then
echo "Error: there is no ccnet config directory."
- echo "Have you run setup-seafile.sh before this?"
+ echo "Have you run setup-seafile before this?"
echo ""
exit -1;
fi
@@ -36,7 +36,7 @@ function validate_ccnet_conf_dir () {
function validate_seafile_data_dir () {
if [[ ! -d ${default_seafile_data_dir} ]]; then
echo "Error: there is no seafile server data directory."
- echo "Have you run setup-seafile.sh before this?"
+ echo "Have you run setup-seafile before this?"
echo ""
exit 1;
fi
@@ -58,7 +58,7 @@ function check_component_running() {
function validate_already_running () {
if pid=$(pgrep -f "seafile-controller -c ${default_ccnet_conf_dir}" 2>/dev/null); then
- echo "seafile server is still running, stop it by \"seafile.sh stop\""
+ echo "seafile server is still running, stop it by \"service seafile-server stop\""
echo
exit 1;
fi
--- a/scripts/seafile.sh
+++ b/scripts/seafile.sh
@@ -53,7 +53,7 @@ function validate_running_user () {
function validate_ccnet_conf_dir () {
if [[ ! -d ${default_ccnet_conf_dir} ]]; then
echo "Error: there is no ccnet config directory."
- echo "Have you run setup-seafile.sh before this?"
+ echo "Have you run setup-seafile before this?"
echo ""
exit -1;
fi
@@ -62,7 +62,7 @@ function validate_ccnet_conf_dir () {
function validate_central_conf_dir () {
if [[ ! -d ${central_config_dir} ]]; then
echo "Error: there is no conf/ directory."
- echo "Have you run setup-seafile.sh before this?"
+ echo "Have you run setup-seafile before this?"
echo ""
exit -1;
fi
@@ -71,7 +71,7 @@ function validate_central_conf_dir () {
function validate_seafile_data_dir () {
if [[ ! -d ${default_seafile_data_dir} ]]; then
echo "Error: there is no seafile server data directory."
- echo "Have you run setup-seafile.sh before this?"
+ echo "Have you run setup-seafile before this?"
echo ""
exit 1;
fi
--- a/scripts/seahub.sh
+++ b/scripts/seahub.sh
@@ -78,7 +78,7 @@ function check_python_executable() {
function validate_ccnet_conf_dir () {
if [[ ! -d ${default_ccnet_conf_dir} ]]; then
echo "Error: there is no ccnet config directory."
- echo "Have you run setup-seafile.sh before this?"
+ echo "Have you run setup-seafile before this?"
echo ""
exit -1;
fi
@@ -87,7 +87,7 @@ function validate_ccnet_conf_dir () {
function validate_seafile_data_dir () {
if [[ ! -d ${default_seafile_data_dir} ]]; then
echo "Error: there is no seafile server data directory."
- echo "Have you run setup-seafile.sh before this?"
+ echo "Have you run setup-seafile before this?"
echo ""
exit 1;
fi
@@ -133,7 +133,7 @@ fi
function warning_if_seafile_not_running () {
if ! pgrep -f "seafile-controller -c ${default_ccnet_conf_dir}" 2>/dev/null 1>&2; then
echo
- echo "Warning: seafile-controller not running. Have you run \"./seafile.sh start\" ?"
+ echo "Warning: seafile-controller not running. Have you run \"service seafile-server start\" ?"
echo
exit 1
fi
@@ -167,7 +167,7 @@ function start_seahub () {
sleep 5
if ! pgrep -f "$gunicorn_exe seahub.wsgi:application -c ${gunicorn_conf}" 2>/dev/null 1>&2; then
printf "\033[33mError:Seahub failed to start.\033[m\n"
- echo "Please try to run \"./seahub.sh start\" again"
+ echo "Please try to run \"service seafile-server start\" again"
exit 1;
fi
echo
--- a/scripts/setup-seafile-mysql.py
+++ b/scripts/setup-seafile-mysql.py
@@ -1557,8 +1557,7 @@ def report_success():
Your seafile server configuration has been finished successfully.
-----------------------------------------------------------------
-run seafile server: ./seafile.sh { start | stop | restart }
-run seahub server: ./seahub.sh { start <port> | stop | restart <port> }
+run seafile server: service seafile-server { start | stop | restart }
-----------------------------------------------------------------
If you are behind a firewall, remember to allow input/output of these tcp ports:
--- a/scripts/setup-seafile.sh
+++ b/scripts/setup-seafile.sh
@@ -718,8 +718,7 @@ echo "----------------------------------
echo "Your seafile server configuration has been completed successfully."
echo "-----------------------------------------------------------------"
echo
-echo "run seafile server: ./seafile.sh { start | stop | restart }"
-echo "run seahub server: ./seahub.sh { start <port> | stop | restart <port> }"
+echo "run seafile server: service seafile-server { start | stop | restart }"
echo
echo "-----------------------------------------------------------------"
echo "If the server is behind a firewall, remember to open these tcp ports:"

View file

@ -0,0 +1,11 @@
--- a/controller/seafile-controller.c
+++ b/controller/seafile-controller.c
@@ -485,7 +485,7 @@ init_pidfile_path (SeafileController *ct
pid_dir = g_build_filename (topdir, "pids", NULL);
}
if (!g_file_test(pid_dir, G_FILE_TEST_EXISTS)) {
- if (g_mkdir(pid_dir, 0777) < 0) {
+ if (g_mkdir(pid_dir, 0755) < 0) {
seaf_warning("failed to create pid dir %s: %s", pid_dir, strerror(errno));
controller_exit(1);
}

View file

@ -1,23 +0,0 @@
--- a/controller/seafile-controller.c
+++ b/controller/seafile-controller.c
@@ -21,7 +21,7 @@
SeafileController *ctl;
-static char *controller_pidfile = NULL;
+static char *controller_pidfile = "/var/run/seafile/seafile-controller.pid";
char *bin_dir = NULL;
char *installpath = NULL;
@@ -591,9 +591,9 @@ stop_ccnet_server ()
static void
init_pidfile_path (SeafileController *ctl)
{
- char *pid_dir = g_build_filename (topdir, "pids", NULL);
+ char *pid_dir = g_path_get_dirname (controller_pidfile);
if (!g_file_test(pid_dir, G_FILE_TEST_EXISTS)) {
- if (g_mkdir(pid_dir, 0777) < 0) {
+ if (g_mkdir(pid_dir, 0755) < 0) {
seaf_warning("failed to create pid dir %s: %s", pid_dir, strerror(errno));
controller_exit(1);
}

View file

@ -0,0 +1,61 @@
--- a/scripts/sqlite2mysql.sh
+++ b/scripts/sqlite2mysql.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
#
# This shell script and corresponding sqlite2mysql.py are used to
# migrate Seafile data from SQLite to MySQL.
@@ -38,10 +38,10 @@ fi
rm -rf ${CCNET_DB}
-echo "sqlite3 ${USER_MGR_DB} .dump | python sqlite2mysql.py > ${CCNET_DB}"
-sqlite3 ${USER_MGR_DB} .dump | python sqlite2mysql.py > ${CCNET_DB}
-echo "sqlite3 ${GRP_MGR_DB} .dump | python sqlite2mysql.py >> ${CCNET_DB}"
-sqlite3 ${GRP_MGR_DB} .dump | python sqlite2mysql.py >> ${CCNET_DB}
+echo "sqlite3 ${USER_MGR_DB} .dump | python3 sqlite2mysql.py > ${CCNET_DB}"
+sqlite3 ${USER_MGR_DB} .dump | python3 sqlite2mysql.py > ${CCNET_DB}
+echo "sqlite3 ${GRP_MGR_DB} .dump | python3 sqlite2mysql.py >> ${CCNET_DB}"
+sqlite3 ${GRP_MGR_DB} .dump | python3 sqlite2mysql.py >> ${CCNET_DB}
# change ctime from INTEGER to BIGINT in EmailUser table
sed 's/ctime INTEGER/ctime BIGINT/g' ${CCNET_DB} > ${CCNET_DB}.tmp && mv ${CCNET_DB}.tmp ${CCNET_DB}
@@ -53,14 +53,14 @@ sed 's/email TEXT, role TEXT/email VARCH
rm -rf ${SEAFILE_DB}
if [ -f "${SEAFILE_UCI_DATA_DIR-$seafile_path}/seafile-data/seafile.db" ]; then
- echo "sqlite3 ${SEAFILE_UCI_DATA_DIR-$seafile_path}/seafile-data/seafile.db .dump | python sqlite2mysql.py > ${SEAFILE_DB}"
- sqlite3 ${SEAFILE_UCI_DATA_DIR-$seafile_path}/seafile-data/seafile.db .dump | python sqlite2mysql.py > ${SEAFILE_DB}
+ echo "sqlite3 ${SEAFILE_UCI_DATA_DIR-$seafile_path}/seafile-data/seafile.db .dump | python3 sqlite2mysql.py > ${SEAFILE_DB}"
+ sqlite3 ${SEAFILE_UCI_DATA_DIR-$seafile_path}/seafile-data/seafile.db .dump | python3 sqlite2mysql.py > ${SEAFILE_DB}
else
echo "${SEAFILE_UCI_DATA_DIR-$seafile_path}/seafile-data/seafile.db does not exists."
read -p "Please provide your seafile.db path(e.g. /data/haiwen/seafile-data/seafile.db): " seafile_db_path
if [ -f ${seafile_db_path} ];then
- echo "sqlite3 ${seafile_db_path} .dump | python sqlite2mysql.py > ${SEAFILE_DB}"
- sqlite3 ${seafile_db_path} .dump | python sqlite2mysql.py > ${SEAFILE_DB}
+ echo "sqlite3 ${seafile_db_path} .dump | python3 sqlite2mysql.py > ${SEAFILE_DB}"
+ sqlite3 ${seafile_db_path} .dump | python3 sqlite2mysql.py > ${SEAFILE_DB}
else
echo "${seafile_db_path} does not exists, quit."
exit 1
@@ -77,14 +77,14 @@ sed 's/user_name TEXT/user_name VARCHAR(
rm -rf ${SEAHUB_DB}
if [ -f "${SEAFILE_UCI_DATA_DIR-$seafile_path}/seahub.db" ]; then
- echo "sqlite3 ${SEAFILE_UCI_DATA_DIR-$seafile_path}/seahub.db .dump | tr -d '\n' | sed 's/;/;\n/g' | python sqlite2mysql.py > ${SEAHUB_DB}"
- sqlite3 ${SEAFILE_UCI_DATA_DIR-$seafile_path}/seahub.db .dump | tr -d '\n' | sed 's/;/;\n/g' | python sqlite2mysql.py > ${SEAHUB_DB}
+ echo "sqlite3 ${SEAFILE_UCI_DATA_DIR-$seafile_path}/seahub.db .dump | tr -d '\n' | sed 's/;/;\n/g' | python3 sqlite2mysql.py > ${SEAHUB_DB}"
+ sqlite3 ${SEAFILE_UCI_DATA_DIR-$seafile_path}/seahub.db .dump | tr -d '\n' | sed 's/;/;\n/g' | python3 sqlite2mysql.py > ${SEAHUB_DB}
else
echo "${SEAFILE_UCI_DATA_DIR-$seafile_path}/seahub.db does not exists."
read -p "Please prove your seahub.db path(e.g. /data/haiwen/seahub.db): " seahub_db_path
if [ -f ${seahub_db_path} ]; then
- echo "sqlite3 ${seahub_db_path} .dump | tr -d '\n' | sed 's/;/;\n/g' | python sqlite2mysql.py > ${SEAHUB_DB}"
- sqlite3 ${seahub_db_path} .dump | tr -d '\n' | sed 's/;/;\n/g' | python sqlite2mysql.py > ${SEAHUB_DB}
+ echo "sqlite3 ${seahub_db_path} .dump | tr -d '\n' | sed 's/;/;\n/g' | python3 sqlite2mysql.py > ${SEAHUB_DB}"
+ sqlite3 ${seahub_db_path} .dump | tr -d '\n' | sed 's/;/;\n/g' | python3 sqlite2mysql.py > ${SEAHUB_DB}
else
echo "${seahub_db_path} does not exists, quit."
exit 1

View file

@ -0,0 +1,15 @@
--- a/scripts/seafile.sh
+++ b/scripts/seafile.sh
@@ -42,10 +42,9 @@ fi
function validate_running_user () {
real_data_dir=`readlink -f ${default_seafile_data_dir}`
running_user=`id -un`
- data_dir_owner=`stat -c %U ${real_data_dir}`
- if [[ "${running_user}" != "${data_dir_owner}" ]]; then
- echo "Error: the user running the script (\"${running_user}\") is not the owner of \"${real_data_dir}\" folder, you should use the user \"${data_dir_owner}\" to run the script."
+ if [[ -z "$(find "${real_data_dir}" -user "${running_user}" -maxdepth 0)" ]]; then
+ echo "Error: the user running the script (\"${running_user}\") is not the owner of \"${real_data_dir}\" folder, you should use the owner of \"${real_data_dir}\" to run the script."
exit -1;
fi
}

View file

@ -0,0 +1,56 @@
--- a/scripts/check_init_admin.py
+++ b/scripts/check_init_admin.py
@@ -310,7 +310,7 @@ def create_admin(email, passwd):
def ask_admin_email():
print()
print('----------------------------------------')
- print('It\'s the first time you start the seafile server. Now let\'s create the admin account')
+ print('Let\'s create the admin account')
print('----------------------------------------')
def validate(email):
# whitespace is not allowed
@@ -350,8 +350,15 @@ def ask_admin_password():
rpc = RPC()
-def main():
+def main(argv):
+ if len(argv) > 1 and argv[1] == 'has-admin':
+ sys.exit(1 if need_create_admin() else 0)
+
if not need_create_admin():
+ print('')
+ print('A seafile admin account already exists.')
+ print('Log into seahub to add additional accounts.')
+ print('If you cannot log in, run reset-seafile-admin to add a new admin account.')
return
password_file = os.path.join(os.environ['SEAFILE_CENTRAL_CONF_DIR'], 'admin.txt')
@@ -369,7 +376,7 @@ def main():
if __name__ == '__main__':
try:
- main()
+ main(sys.argv)
except KeyboardInterrupt:
print('\n\n\n')
print(Utils.highlight('Aborted.'))
@@ -379,3 +386,4 @@ if __name__ == '__main__':
print()
print(Utils.highlight('Error happened during creating seafile admin.'))
print()
+ sys.exit(1)
--- a/scripts/seahub.sh
+++ b/scripts/seahub.sh
@@ -250,7 +250,10 @@ function stop_seahub () {
function check_init_admin() {
check_init_admin_script=${INSTALLPATH}/check_init_admin.py
- if ! $PYTHON $check_init_admin_script; then
+ if ! $PYTHON $check_init_admin_script has-admin; then
+ echo "Error: there is no seafile admin account."
+ echo "Have you run create-seafile-admin before this?"
+ echo ""
exit 1
fi
}

View file

@ -0,0 +1,10 @@
--- a/fuse/seaf-fuse.c
+++ b/fuse/seaf-fuse.c
@@ -5,7 +5,6 @@
#define FUSE_USE_VERSION 26
#include <fuse.h>
-#include <fuse_opt.h>
#include <glib.h>
#include <glib-object.h>

View file

@ -1,60 +0,0 @@
--- a/tools/seafile-admin
+++ b/tools/seafile-admin
@@ -449,9 +449,12 @@ workers = 3
# Logging
runtime_dir = os.path.dirname(__file__)
-pidfile = os.path.join(runtime_dir, 'seahub.pid')
+pidfile = '/var/run/seafile/seahub.pid'
errorlog = os.path.join(runtime_dir, 'error.log')
accesslog = os.path.join(runtime_dir, 'access.log')
+
+# for file upload, we need a longer timeout value (default is only 30s, too short)
+timeout = 1200
'''
try:
@@ -526,6 +529,7 @@ def check_django_version():
def check_python_module(import_name, package_name=None, silent=False):
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "seahub.settings")
package_name = package_name or import_name
if not silent:
info('checking %s' % package_name)
@@ -785,7 +789,7 @@ def check_layout(args):
conf[CONF_SEAFILE_DIR] = seafile_data_dir
conf[CONF_SEAHUB_DIR] = seahub_dir
conf[CONF_SEAHUB_CONF] = seahub_conf
- conf[CONF_SEAHUB_PIDFILE] = os.path.join(runtime_dir, 'seahub.pid')
+ conf[CONF_SEAHUB_PIDFILE] = '/var/run/seafile/seahub.pid'
conf[CONF_SEAHUB_OUTLOG] = os.path.join(runtime_dir, 'access.log')
conf[CONF_SEAHUB_ERRLOG] = os.path.join(runtime_dir, 'error.log')
@@ -836,10 +840,13 @@ def setup_seafile(args):
print '-----------------------------------------------------------------'
print '-----------------------------------------------------------------'
print
- print 'To start/stop seafile server:'
+ print 'To start, stop or restart seafile:'
+ print
+ print highlight(' # /etc/init.d/seafile { start | stop | restart }')
print
- print highlight(' $ cd %s' % cwd)
- print highlight(' $ %s { start | stop }' % SCRIPT_NAME)
+ print 'To start, stop or restart seahub:'
+ print
+ print highlight(' # /etc/init.d/seahub { start | stop | restart }')
print
print 'If you have any problem, refer to\n'
print
@@ -903,8 +910,7 @@ def start_seafile(args):
def stop_seafile(dummy):
info('Stopping seafile server')
pkill('seafile-controller')
- runtime_dir = os.path.join(cwd, 'seafile-server', 'runtime')
- pidfile = os.path.join(runtime_dir, 'seahub.pid')
+ pidfile = '/var/run/seafile/seahub.pid'
try:
with open(pidfile, 'r') as fp:
pid = fp.read().strip('\n ')

View file

@ -0,0 +1,22 @@
--- a/scripts/setup-seafile-mysql.py
+++ b/scripts/setup-seafile-mysql.py
@@ -316,9 +316,6 @@ class EnvManager(object):
os.path.join(self.install_path, 'runtime'),
]
- for path in paths:
- error_if_not_exists(path)
-
if os.path.exists(ccnet_config.ccnet_dir):
Utils.error('Ccnet config dir \"%s\" already exists.' % ccnet_config.ccnet_dir)
--- a/scripts/setup-seafile.sh
+++ b/scripts/setup-seafile.sh
@@ -415,7 +415,6 @@ if [[ $# -ge 1 && "$1" == "auto" ]]; the
need_pause=0
fi
-check_sanity;
if [[ "${need_pause}" == "1" ]]; then
welcome;
fi

View file

@ -0,0 +1,27 @@
--- a/scripts/setup-seafile-mysql.py
+++ b/scripts/setup-seafile-mysql.py
@@ -1101,6 +1101,10 @@ class SeahubConfigurator(AbstractConfigu
}
}
+# Custom settings for OpenWrt
+USE_I18N = False
+USER_PASSWORD_MIN_LENGTH = 8
+USER_STRONG_PASSWORD_REQUIRED = True
'''
text = template % dict(name=db_config.seahub_db_name,
username=db_config.seafile_mysql_user,
--- a/scripts/setup-seafile.sh
+++ b/scripts/setup-seafile.sh
@@ -525,6 +525,11 @@ if [[ ! -f ${dest_settings_py} ]]; then
cat > ${dest_settings_py} <<EOF
# -*- coding: utf-8 -*-
SECRET_KEY = "$key"
+
+# Custom settings for OpenWrt
+USE_I18N = False
+USER_PASSWORD_MIN_LENGTH = 8
+USER_STRONG_PASSWORD_REQUIRED = True
EOF
fi

View file

@ -0,0 +1,20 @@
--- a/scripts/setup-seafile-mysql.py
+++ b/scripts/setup-seafile-mysql.py
@@ -1543,7 +1543,6 @@ def main():
seahub_config.do_syncdb()
seahub_config.prepare_avatar_dir()
# db_config.create_seahub_admin()
- user_manuals_handler.copy_user_manuals()
create_seafile_server_symlink()
set_file_perm()
--- a/scripts/setup-seafile.sh
+++ b/scripts/setup-seafile.sh
@@ -709,7 +709,6 @@ chmod 0700 "$default_conf_dir"
# -------------------------------------------
# copy user manuals to library template
# -------------------------------------------
-copy_user_manuals;
# -------------------------------------------
# final message

View file

@ -0,0 +1,40 @@
--- a/scripts/setup-seafile-mysql.py
+++ b/scripts/setup-seafile-mysql.py
@@ -1543,7 +1543,6 @@ def main():
seahub_config.do_syncdb()
seahub_config.prepare_avatar_dir()
# db_config.create_seahub_admin()
- create_seafile_server_symlink()
set_file_perm()
--- a/scripts/setup-seafile.sh
+++ b/scripts/setup-seafile.sh
@@ -689,17 +689,6 @@ fi
# /data/haiwen/
# -- seafile-server-2.0.4
# -- seafile-server-latest # symlink to 2.0.4
-seafile_server_symlink=${TOPDIR}/seafile-server-latest
-echo
-echo -n "creating seafile-server-latest symbolic link ... "
-if ! ln -s $(basename ${INSTALLPATH}) ${seafile_server_symlink}; then
- echo
- echo
- echo "Failed to create symbolic link ${seafile_server_symlink}"
- err_and_quit;
-fi
-echo "done"
-echo
chmod 0600 "$dest_settings_py"
chmod 0700 "$default_ccnet_conf_dir"
--- a/scripts/upgrade/minor-upgrade.sh
+++ b/scripts/upgrade/minor-upgrade.sh
@@ -162,7 +162,6 @@ make_media_custom_symlink;
move_old_elasticsearch_config_to_latest;
-update_latest_symlink;
echo "DONE"

View file

@ -0,0 +1,32 @@
--- a/scripts/setup-seafile.sh
+++ b/scripts/setup-seafile.sh
@@ -418,9 +418,9 @@ fi
if [[ "${need_pause}" == "1" ]]; then
welcome;
fi
-sleep .5
+sleep 1
check_system_dependency;
-sleep .5
+sleep 1
check_existing_ccnet;
check_existing_seafile;
@@ -438,7 +438,7 @@ if [[ "$fileserver_port" == "" ]]; then
fi
-sleep .5
+sleep 1
printf "\nThis is your config information:\n\n"
@@ -475,7 +475,7 @@ fi
echo
-sleep 0.5
+sleep 1
# -------------------------------------------
# Create seafile conf

View file

@ -0,0 +1,39 @@
--- a/scripts/setup-seafile-mysql.py
+++ b/scripts/setup-seafile-mysql.py
@@ -1203,7 +1203,7 @@ USER_STRONG_PASSWORD_REQUIRED = True
try:
media_dir = os.path.join(env_mgr.install_path, 'seahub', 'media')
- orig_avatar_dir = os.path.join(media_dir, 'avatars')
+ orig_avatar_dir = os.path.join(media_dir, 'avatars_default')
seahub_data_dir = os.path.join(os.environ.get('SEAFILE_UCI_DATA_DIR', env_mgr.top_dir), 'seahub-data')
dest_avatar_dir = os.path.join(seahub_data_dir, 'avatars')
@@ -1214,8 +1214,8 @@ USER_STRONG_PASSWORD_REQUIRED = True
if not os.path.exists(seahub_data_dir):
os.mkdir(seahub_data_dir)
- shutil.move(orig_avatar_dir, dest_avatar_dir)
- os.symlink(dest_avatar_dir, orig_avatar_dir)
+ shutil.copytree(orig_avatar_dir, dest_avatar_dir)
+ os.symlink(dest_avatar_dir, os.path.join(media_dir, 'avatars'))
except Exception as e:
Utils.error('Failed to prepare seahub avatars dir: %s' % e)
--- a/scripts/setup-seafile.sh
+++ b/scripts/setup-seafile.sh
@@ -676,12 +676,12 @@ echo "Done."
# prepare avatar folder
media_dir=${INSTALLPATH}/seahub/media
-orig_avatar_dir=${INSTALLPATH}/seahub/media/avatars
+orig_avatar_dir=${INSTALLPATH}/seahub/media/avatars_default
dest_avatar_dir=${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seahub-data/avatars
if [[ ! -d ${dest_avatar_dir} ]]; then
mkdir -p "${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seahub-data"
- mv "${orig_avatar_dir}" "${dest_avatar_dir}"
+ cp -pr "${orig_avatar_dir}" "${dest_avatar_dir}"
ln -s ${SEAFILE_UCI_DATA_DIR-$TOPDIR}/seahub-data/avatars ${media_dir}
fi

View file

@ -0,0 +1,24 @@
--- a/scripts/setup-seafile-mysql.py
+++ b/scripts/setup-seafile-mysql.py
@@ -1556,6 +1556,9 @@ def report_success():
Your seafile server configuration has been finished successfully.
-----------------------------------------------------------------
+You will need to create an admin account before starting seafile server.
+
+create admin account: create-seafile-admin
run seafile server: service seafile-server { start | stop | restart }
-----------------------------------------------------------------
--- a/scripts/setup-seafile.sh
+++ b/scripts/setup-seafile.sh
@@ -710,6 +710,9 @@ echo "----------------------------------
echo "Your seafile server configuration has been completed successfully."
echo "-----------------------------------------------------------------"
echo
+echo "You will need to create an admin account before starting seafile server."
+echo
+echo "create admin account: create-seafile-admin"
echo "run seafile server: service seafile-server { start | stop | restart }"
echo
echo "-----------------------------------------------------------------"

View file

@ -6,16 +6,7 @@
pcfiles = libseafile.pc pcfiles = libseafile.pc
pkgconfig_DATA = $(pcfiles) pkgconfig_DATA = $(pcfiles)
pkgconfigdir = $(libdir)/pkgconfig pkgconfigdir = $(libdir)/pkgconfig
@@ -33,7 +35,7 @@ seafile_HEADERS = seafile-object.h @@ -56,7 +58,7 @@ rpc_table.stamp: ${top_srcdir}/lib/rpc_t
seafile-object.h: ${seafile_object_define}
rm -f $@
- valac --pkg posix ${seafile_object_define} -C -H seafile-object.h
+ "$(STAGING_DIR_HOSTPKG)/bin/valac" --pkg posix ${seafile_object_define} -C -H seafile-object.h
DISTCLEANFILES = ${searpc_gen}
@@ -56,7 +58,7 @@ rpc_table.stamp: ${top_srcdir}/lib/rpc_table.py
@rm -f rpc_table.tmp @rm -f rpc_table.tmp
@touch rpc_table.tmp @touch rpc_table.tmp
@echo "[libsearpc]: generating rpc header files" @echo "[libsearpc]: generating rpc header files"
@ -24,15 +15,6 @@
@echo "[libsearpc]: done" @echo "[libsearpc]: done"
@mv -f rpc_table.tmp $@ @mv -f rpc_table.tmp $@
@@ -66,7 +68,7 @@ vala.stamp: ${seafile_object_define}
rm -f ${seafile_object_gen}
@rm -f vala.tmp
@touch vala.tmp
- valac -C --pkg posix $^
+ "$(STAGING_DIR_HOSTPKG)/bin/valac" -C --pkg posix $^
@mv -f vala.tmp $@
${seafile_object_gen}: vala.stamp
@@ -82,5 +84,5 @@ install-data-local: @@ -82,5 +84,5 @@ install-data-local:
if MACOS if MACOS
sed -i '' -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles) sed -i '' -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)

View file

@ -9,7 +9,7 @@
public int64 size { get; set; } public int64 size { get; set; }
public int64 file_count { get; set; } public int64 file_count { get; set; }
public string last_modifier { get; set; } public string last_modifier { get; set; }
@@ -45,7 +45,7 @@ public class Repo : Object { @@ -46,7 +46,7 @@ public class Repo : Object {
public string repo_id { get; set; } public string repo_id { get; set; }
public string repo_name { get; set; } public string repo_name { get; set; }
public string repo_desc { get; set; } public string repo_desc { get; set; }
@ -18,7 +18,7 @@
// Section 2: Encryption related // Section 2: Encryption related
// Members in this section should be set for every Repo object // Members in this section should be set for every Repo object
@@ -68,7 +68,7 @@ public class Repo : Object { @@ -70,7 +70,7 @@ public class Repo : Object {
get { return _relay_id; } get { return _relay_id; }
set { _relay_id = value; } set { _relay_id = value; }
} }
@ -27,7 +27,7 @@
public bool auto_sync { get; set; } public bool auto_sync { get; set; }
public bool worktree_invalid { get; set; } public bool worktree_invalid { get; set; }
@@ -162,7 +162,7 @@ public class DeletedEntry : Object { @@ -164,7 +164,7 @@ public class DeletedEntry : Object {
public string obj_name { get; set; } public string obj_name { get; set; }
public string basedir { get; set; } public string basedir { get; set; }
public int mode { get; set; } public int mode { get; set; }

View file

@ -1,20 +0,0 @@
--- a/scripts/seaf-fuse.sh
+++ b/scripts/seaf-fuse.sh
@@ -7,7 +7,7 @@ INSTALLPATH=$(dirname "${SCRIPT}")
TOPDIR=$(dirname "${INSTALLPATH}")
default_ccnet_conf_dir=${TOPDIR}/ccnet
default_conf_dir=${TOPDIR}/conf
-seaf_fuse=${INSTALLPATH}/seafile/bin/seaf-fuse
+seaf_fuse=/usr/bin/seaf-fuse
export PATH=${INSTALLPATH}/seafile/bin:$PATH
export SEAFILE_LD_LIBRARY_PATH=${INSTALLPATH}/seafile/lib/:${INSTALLPATH}/seafile/lib64:${LD_LIBRARY_PATH}
@@ -68,7 +68,7 @@ function validate_already_running () {
}
function warning_if_seafile_not_running () {
- if ! pgrep -f "seafile-controller -c ${default_ccnet_conf_dir}" 2>/dev/null 1>&2; then
+ if ! pgrep -f "seafile-controller -F ${default_conf_dir}" 2>/dev/null 1>&2; then
echo
echo "Warning: seafile-controller not running. Have you run \"./seafile.sh start\" ?"
echo

View file

@ -1,35 +0,0 @@
From 13f95a28ce12216ba51cf0ca8d61c3d89689d02b Mon Sep 17 00:00:00 2001
From: Eneas U de Queiroz <cote2004-github@yahoo.com>
Date: Wed, 6 Jun 2018 18:11:47 -0300
Subject: [PATCH] Remove API deprecated in openssl 1.1
Openssl 1.1 has deprecated RAND_pseudo_bytes. It won't compile with
openssl built witout deprecated API.
Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
---
common/seafile-crypt.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/common/seafile-crypt.c b/common/seafile-crypt.c
index c7d1702..c3cebf5 100644
--- a/common/seafile-crypt.c
+++ b/common/seafile-crypt.c
@@ -81,9 +81,14 @@ seafile_generate_random_key (const char *passwd, char *random_key)
int rc = RAND_bytes (secret_key, sizeof(secret_key));
if (rc != 1) {
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || OPENSSL_API_COMPAT < 0x10100000L
seaf_warning ("Failed to generate secret key for repo encryption "
"with RAND_bytes(), use RAND_pseudo_bytes().\n");
RAND_pseudo_bytes (secret_key, sizeof(secret_key));
+#else
+ seaf_warning ("Failed to generate secret key for repo encryption "
+ "with RAND_bytes().\n");
+#endif
}
seafile_derive_key (passwd, strlen(passwd), 2, key, iv);
--
2.16.4

View file

@ -1,61 +0,0 @@
From 115a4583deb9ae11adbc419ea87c990d0b8572fe Mon Sep 17 00:00:00 2001
From: Joffrey Darcq <j-off@live.fr>
Date: Sat, 28 Apr 2018 22:27:28 +0200
Subject: [PATCH 1/2] fix django version 1.11
---
tools/seafile-admin | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tools/seafile-admin b/tools/seafile-admin
index 5e3658b..38e7288 100755
--- a/tools/seafile-admin
+++ b/tools/seafile-admin
@@ -518,10 +518,10 @@ def init_seahub():
def check_django_version():
- '''Requires django 1.8'''
+ '''Requires django 1.11'''
import django
- if django.VERSION[0] != 1 or django.VERSION[1] != 8:
- error('Django 1.8 is required')
+ if django.VERSION[0] != 1 or django.VERSION[1] != 11:
+ error('Django 1.11 is required')
del django
From bf69ff1cf1080081eae5d8115842c26468746736 Mon Sep 17 00:00:00 2001
From: Joffrey Darcq <j-off@live.fr>
Date: Sun, 3 Jun 2018 15:51:54 +0200
Subject: [PATCH 2/2] fix django version 1.11
---
tools/seafile-admin | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tools/seafile-admin b/tools/seafile-admin
index 38e7288..c16aab6 100755
--- a/tools/seafile-admin
+++ b/tools/seafile-admin
@@ -499,8 +499,8 @@ def init_seahub():
# create seahub_settings.py
create_seahub_settings_py()
- argv = [PYTHON, 'manage.py', 'syncdb']
- # Set proper PYTHONPATH before run django syncdb command
+ argv = [PYTHON, 'manage.py', 'migrate']
+ # Set proper PYTHONPATH before run django migrate command
env = get_seahub_env()
print
@@ -509,7 +509,7 @@ def init_seahub():
print
if run_argv(argv, cwd=seahub_dir, env=env) != 0:
- error('Seahub syncdb failed')
+ error('Seahub migrate failed')
info('done')

View file

@ -1,26 +0,0 @@
--- a/tools/seafile-admin
+++ b/tools/seafile-admin
@@ -831,7 +831,22 @@ def setup_seafile(args):
conf[CONF_SEAFILE_CENTRAL_CONF_DIR] = os.path.join(cwd, 'conf')
config_ccnet_seafile()
init_ccnet_seafile()
- init_seahub()
+
+ # make sure ccnet-server is running to avoid an error creating django superuser
+ if not is_running('ccnet-server'):
+ argv = [
+ 'ccnet-server',
+ '-F',
+ conf[CONF_SEAFILE_CENTRAL_CONF_DIR],
+ '-c',
+ conf[CONF_CCNET_DIR],
+ '-d'
+ ]
+ run_argv(argv)
+ init_seahub()
+ pkill('ccnet-server')
+ else:
+ init_seahub()
print
print '-----------------------------------------------------------------'

View file

@ -2,11 +2,9 @@ Author: David Barbion <davidb@230ruedubac.fr>
Description: Use shared object for libevhtp Description: Use shared object for libevhtp
Forwarded: https://github.com/haiwen/seafile-server/pull/12 Forwarded: https://github.com/haiwen/seafile-server/pull/12
Index: seafile-server/configure.ac --- a/configure.ac
=================================================================== +++ b/configure.ac
--- seafile-server.orig/configure.ac @@ -224,6 +224,10 @@ PKG_CHECK_MODULES(LIBEVENT, [libevent_op
+++ seafile-server/configure.ac
@@ -218,6 +218,10 @@ PKG_CHECK_MODULES(LIBEVENT, [libevent >=
AC_SUBST(LIBEVENT_CFLAGS) AC_SUBST(LIBEVENT_CFLAGS)
AC_SUBST(LIBEVENT_LIBS) AC_SUBST(LIBEVENT_LIBS)
@ -17,24 +15,22 @@ Index: seafile-server/configure.ac
PKG_CHECK_MODULES(ZLIB, [zlib >= $ZLIB_REQUIRED]) PKG_CHECK_MODULES(ZLIB, [zlib >= $ZLIB_REQUIRED])
AC_SUBST(ZLIB_CFLAGS) AC_SUBST(ZLIB_CFLAGS)
AC_SUBST(ZLIB_LIBS) AC_SUBST(ZLIB_LIBS)
Index: seafile-server/server/Makefile.am --- a/server/Makefile.am
=================================================================== +++ b/server/Makefile.am
--- seafile-server.orig/server/Makefile.am
+++ seafile-server/server/Makefile.am
@@ -13,6 +13,7 @@ AM_CFLAGS = -DPKGDATADIR=\"$(pkgdatadir) @@ -13,6 +13,7 @@ AM_CFLAGS = -DPKGDATADIR=\"$(pkgdatadir)
@GLIB2_CFLAGS@ \ @GLIB2_CFLAGS@ \
@MSVC_CFLAGS@ \ @MSVC_CFLAGS@ \
@LIBARCHIVE_CFLAGS@ \ @LIBARCHIVE_CFLAGS@ \
+ @LIBEVHTP_CFLAGS@ \ + @LIBEVHTP_CFLAGS@ \
@MYSQL_CFLAGS@ \
-Wall -Wall
bin_PROGRAMS = seaf-server @@ -73,7 +74,7 @@ seaf_server_SOURCES = \
@@ -114,7 +115,7 @@ seaf_server_SOURCES = \
seaf_server_LDADD = @CCNET_LIBS@ \ seaf_server_LDADD = @CCNET_LIBS@ \
$(top_builddir)/lib/libseafile_common.la \ $(top_builddir)/lib/libseafile_common.la \
- @GLIB2_LIBS@ @GOBJECT_LIBS@ @SSL_LIBS@ @LIB_RT@ @LIB_UUID@ -lsqlite3 @LIBEVENT_LIBS@ -levhtp \ - @GLIB2_LIBS@ @GOBJECT_LIBS@ @SSL_LIBS@ @LIB_RT@ @LIB_UUID@ -lsqlite3 @LIBEVENT_LIBS@ -levhtp \
+ -lonig @GLIB2_LIBS@ @GOBJECT_LIBS@ @SSL_LIBS@ @LIB_RT@ @LIB_UUID@ -lsqlite3 @LIBEVENT_LIBS@ @LIBEVHTP_LIBS@ \ + -lonig @GLIB2_LIBS@ @GOBJECT_LIBS@ @SSL_LIBS@ @LIB_RT@ @LIB_UUID@ -lsqlite3 @LIBEVENT_LIBS@ @LIBEVHTP_LIBS@ \
$(top_builddir)/common/cdc/libcdc.la \ $(top_builddir)/common/cdc/libcdc.la \
$(top_builddir)/common/db-wrapper/libdbwrapper.la \
@SEARPC_LIBS@ @JANSSON_LIBS@ ${LIB_WS32} @ZLIB_LIBS@ \ @SEARPC_LIBS@ @JANSSON_LIBS@ ${LIB_WS32} @ZLIB_LIBS@ \
@LIBARCHIVE_LIBS@ @LIB_ICONV@ \

View file

@ -7,11 +7,9 @@ Description: Fix download stalling on recent libevhtp
[2] https://github.com/haiwen/seafile/issues/1119 [2] https://github.com/haiwen/seafile/issues/1119
Forwarded: no Forwarded: no
Index: seafile-server/server/access-file.c --- a/server/access-file.c
=================================================================== +++ b/server/access-file.c
--- seafile-server.orig/server/access-file.c 2018-02-01 12:23:53.209308343 +0100 @@ -661,7 +661,7 @@ do_file(evhtp_request_t *req, SeafRepo *
+++ seafile-server/server/access-file.c 2018-02-01 12:23:53.205308288 +0100
@@ -618,7 +618,7 @@
/* Block any new request from this connection before finish /* Block any new request from this connection before finish
* handling this request. * handling this request.
*/ */
@ -20,7 +18,7 @@ Index: seafile-server/server/access-file.c
/* Kick start data transfer by sending out http headers. */ /* Kick start data transfer by sending out http headers. */
evhtp_send_reply_start(req, EVHTP_RES_OK); evhtp_send_reply_start(req, EVHTP_RES_OK);
@@ -967,7 +967,7 @@ @@ -1021,7 +1021,7 @@ do_file_range (evhtp_request_t *req, Sea
/* Block any new request from this connection before finish /* Block any new request from this connection before finish
* handling this request. * handling this request.
*/ */
@ -29,7 +27,7 @@ Index: seafile-server/server/access-file.c
/* Kick start data transfer by sending out http headers. */ /* Kick start data transfer by sending out http headers. */
evhtp_send_reply_start(req, EVHTP_RES_PARTIAL); evhtp_send_reply_start(req, EVHTP_RES_PARTIAL);
@@ -1032,7 +1032,7 @@ @@ -1091,7 +1091,7 @@ start_download_zip_file (evhtp_request_t
/* Block any new request from this connection before finish /* Block any new request from this connection before finish
* handling this request. * handling this request.
*/ */
@ -38,7 +36,7 @@ Index: seafile-server/server/access-file.c
/* Kick start data transfer by sending out http headers. */ /* Kick start data transfer by sending out http headers. */
evhtp_send_reply_start(req, EVHTP_RES_OK); evhtp_send_reply_start(req, EVHTP_RES_OK);
@@ -1365,7 +1365,7 @@ @@ -1435,7 +1435,7 @@ do_block(evhtp_request_t *req, SeafRepo
/* Block any new request from this connection before finish /* Block any new request from this connection before finish
* handling this request. * handling this request.
*/ */
@ -47,11 +45,9 @@ Index: seafile-server/server/access-file.c
/* Kick start data transfer by sending out http headers. */ /* Kick start data transfer by sending out http headers. */
evhtp_send_reply_start(req, EVHTP_RES_OK); evhtp_send_reply_start(req, EVHTP_RES_OK);
Index: seafile-server/server/upload-file.c --- a/server/upload-file.c
=================================================================== +++ b/server/upload-file.c
--- seafile-server.orig/server/upload-file.c 2018-02-01 12:23:53.209308343 +0100 @@ -2196,6 +2196,7 @@ out:
+++ seafile-server/server/upload-file.c 2018-02-01 12:25:14.542400155 +0100
@@ -2054,6 +2054,7 @@
if (res != EVHTP_RES_OK) { if (res != EVHTP_RES_OK) {
/* Don't receive any data before the connection is closed. */ /* Don't receive any data before the connection is closed. */
//evhtp_request_pause (req); //evhtp_request_pause (req);
@ -59,7 +55,7 @@ Index: seafile-server/server/upload-file.c
/* Set keepalive to 0. This will cause evhtp to close the /* Set keepalive to 0. This will cause evhtp to close the
* connection after sending the reply. * connection after sending the reply.
@@ -2271,6 +2272,7 @@ @@ -2513,6 +2514,7 @@ upload_headers_cb (evhtp_request_t *req,
err: err:
/* Don't receive any data before the connection is closed. */ /* Don't receive any data before the connection is closed. */
//evhtp_request_pause (req); //evhtp_request_pause (req);

View file

@ -2,11 +2,9 @@ Author: Alexandre Rossi <alexandre.rossi@gmail.com>
Description: Take into account libevhtp API changes Description: Take into account libevhtp API changes
Forwarded: no Forwarded: no
Index: seafile-server/server/upload-file.c --- a/server/upload-file.c
=================================================================== +++ b/server/upload-file.c
--- seafile-server.orig/server/upload-file.c 2018-02-01 12:25:52.666911934 +0100 @@ -2201,7 +2201,7 @@ out:
+++ seafile-server/server/upload-file.c 2018-02-01 12:27:37.812323399 +0100
@@ -2059,7 +2059,7 @@
/* Set keepalive to 0. This will cause evhtp to close the /* Set keepalive to 0. This will cause evhtp to close the
* connection after sending the reply. * connection after sending the reply.
*/ */
@ -15,7 +13,7 @@ Index: seafile-server/server/upload-file.c
fsm->state = RECV_ERROR; fsm->state = RECV_ERROR;
} }
@@ -2260,8 +2260,8 @@ @@ -2502,8 +2502,8 @@ upload_headers_cb (evhtp_request_t *req,
} }
/* Set up per-request hooks, so that we can read file data piece by piece. */ /* Set up per-request hooks, so that we can read file data piece by piece. */
@ -26,7 +24,7 @@ Index: seafile-server/server/upload-file.c
/* Set arg for upload_cb or update_cb. */ /* Set arg for upload_cb or update_cb. */
req->cbarg = fsm; req->cbarg = fsm;
@@ -2277,7 +2277,7 @@ @@ -2519,7 +2519,7 @@ err:
/* Set keepalive to 0. This will cause evhtp to close the /* Set keepalive to 0. This will cause evhtp to close the
* connection after sending the reply. * connection after sending the reply.
*/ */
@ -35,12 +33,8 @@ Index: seafile-server/server/upload-file.c
send_error_reply (req, EVHTP_RES_BADREQ, err_msg); send_error_reply (req, EVHTP_RES_BADREQ, err_msg);
g_free (repo_id); g_free (repo_id);
@@ -2346,38 +2346,32 @@ @@ -2620,32 +2620,32 @@ upload_file_init (evhtp_t *htp, const ch
g_free (cluster_shared_dir);
cb = evhtp_set_regex_cb (htp, "^/upload/.*", upload_cb, NULL);
/* upload_headers_cb() will be called after evhtp parsed all http headers. */
- evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL);
+ evhtp_callback_set_hook(cb, evhtp_hook_on_headers, upload_headers_cb, NULL);
cb = evhtp_set_regex_cb (htp, "^/upload-api/.*", upload_api_cb, NULL); cb = evhtp_set_regex_cb (htp, "^/upload-api/.*", upload_api_cb, NULL);
- evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL); - evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL);
@ -53,17 +47,13 @@ Index: seafile-server/server/upload-file.c
cb = evhtp_set_regex_cb (htp, "^/upload-blks-api/.*", upload_blks_api_cb, NULL); cb = evhtp_set_regex_cb (htp, "^/upload-blks-api/.*", upload_blks_api_cb, NULL);
- evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL); - evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL);
-
- /* cb = evhtp_set_regex_cb (htp, "^/upload-blks-aj/.*", upload_blks_ajax_cb, NULL); */
- /* evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL); */
+ evhtp_callback_set_hook(cb, evhtp_hook_on_headers, upload_headers_cb, NULL); + evhtp_callback_set_hook(cb, evhtp_hook_on_headers, upload_headers_cb, NULL);
/* cb = evhtp_set_regex_cb (htp, "^/upload-blks-aj/.*", upload_blks_ajax_cb, NULL); */
/* evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL); */
cb = evhtp_set_regex_cb (htp, "^/upload-aj/.*", upload_ajax_cb, NULL); cb = evhtp_set_regex_cb (htp, "^/upload-aj/.*", upload_ajax_cb, NULL);
- evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL); - evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL);
+ evhtp_callback_set_hook(cb, evhtp_hook_on_headers, upload_headers_cb, NULL);
cb = evhtp_set_regex_cb (htp, "^/update/.*", update_cb, NULL);
- evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL);
+ evhtp_callback_set_hook(cb, evhtp_hook_on_headers, upload_headers_cb, NULL); + evhtp_callback_set_hook(cb, evhtp_hook_on_headers, upload_headers_cb, NULL);
cb = evhtp_set_regex_cb (htp, "^/update-api/.*", update_api_cb, NULL); cb = evhtp_set_regex_cb (htp, "^/update-api/.*", update_api_cb, NULL);
@ -72,11 +62,11 @@ Index: seafile-server/server/upload-file.c
cb = evhtp_set_regex_cb (htp, "^/update-blks-api/.*", update_blks_api_cb, NULL); cb = evhtp_set_regex_cb (htp, "^/update-blks-api/.*", update_blks_api_cb, NULL);
- evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL); - evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL);
-
- /* cb = evhtp_set_regex_cb (htp, "^/update-blks-aj/.*", update_blks_ajax_cb, NULL); */
- /* evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL); */
+ evhtp_callback_set_hook(cb, evhtp_hook_on_headers, upload_headers_cb, NULL); + evhtp_callback_set_hook(cb, evhtp_hook_on_headers, upload_headers_cb, NULL);
/* cb = evhtp_set_regex_cb (htp, "^/update-blks-aj/.*", update_blks_ajax_cb, NULL); */
/* evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL); */
cb = evhtp_set_regex_cb (htp, "^/update-aj/.*", update_ajax_cb, NULL); cb = evhtp_set_regex_cb (htp, "^/update-aj/.*", update_ajax_cb, NULL);
- evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL); - evhtp_set_hook(&cb->hooks, evhtp_hook_on_headers, upload_headers_cb, NULL);
+ evhtp_callback_set_hook(cb, evhtp_hook_on_headers, upload_headers_cb, NULL); + evhtp_callback_set_hook(cb, evhtp_hook_on_headers, upload_headers_cb, NULL);