2021SC@SDUSC
项目结构- seafile-server:seafile的服务端核心。
- seahub:seafile的Web前台,使用Django框架开发。
- seafdav:seafile的WebDav服务。
- seafevents:用于处理周期事件(包括建索引、杀毒、自动删除等)。
- seafes:ElasticSearch与seafile结合,对文件内容建立全文索引。
- seafobj:用于访问seafile数据模型。
我负责seafile-server的分析。以下是我对seafile-server项目的结构分析:
Seafile-Server结构以下内容为编译相关
-
autogen.sh
用于自动生成makefile、configure的脚本。
完整的工具链详见Wiki - GNU Autotools,流程图如下:
-
configure.ac
编译配置。
可以从中看到编译该项目所需的全部Makefile.am,进而确认哪些目录中的源代码需要被编译。
-
Makefile.am
编译规则。
该文件与configure.ac结合生成Makefile.in。在随后的过程中通过一系列步骤生成Makefile。
可以从中看到编译某部分内容所需要的所有源代码,以及该部分源代码的类型(库文件、头文件、源文件等)。
- m4
与autoconf有关。
以下内容为开源相关
-
LICENSE.txt
开源证书。
-
README.markdown
项目介绍与说明。
-
README.testing.md
测试说明。
-
run_tests.sh
测试脚本。(调用ci/run.py)
-
updateversion.sh
升级脚本。
- ci
持续集成(Continuous integration),利用的是Github Actions。(具体配置在“.github/workflows”下)
-
install-deps.sh
安装依赖项。
-
run.py
自动化安装、自动化测试。
-
serverctl.py
被run.py调用,自动化配置seafile-server。
-
utils.py
向前两者封装了所需的实用方法(主要是系统命令)。
从“.github/workflows/ci.yml”中可以得知CI的具体流程为:
- 进入工作目录
cd $GITHUB_WORKSPACE
- 安装依赖项
./ci/install-deps.sh
- 安装并测试。
./ci/run.py
-
- scripts
各种用于安装、配置、管理的脚本。
- doc
文档。
- tools
目前只有seafile-admin,一个协助安装与管理的工具。
以下内容为客户端源代码
- python
通过python实现了seafile服务端对应的的RPC客户端。
此子项目依赖pysearpc,一个Searpc的Python Binding(Python调用C库)。详见【libsearpc】。
-
seafile
初步实现了一个RPC客户端。可以连接到指定的RPC服务端。
-
seaserv
进一步封装RPC客户端,并加入了异常处理。可以通过环境变量以及配置文件来连接到指定的RPC服务端。
-
以下内容为C语言实现的服务端源代码
- lib
库文件。
- include
头文件。
- common
通用源文件。
- fuse
C实现的用户空间文件系统(Filesystem in Userspace)。
- server
C实现的服务端核心。分为Seaf API(RPC协议)和Http API(Http协议)。
其中Seaf API用于向Seahub提供文件访问服务,Http API用于向桌面客户端提供文件同步服务。
以下内容为Go实现的服务端源代码
- fileserver
Go实现的服务端核心,同样也分为Seaf API和Http API。同时还包含了Go实现的用户空间文件系统。
- controller
启动seafile-server、ccnet-server、seafile-monitor。修复seafile-server和ccnet-server的进程。
以下内容为测试脚本
- tests
通过python实现的RPC客户端进行功能测试。
由上述结构分析可见,seafile-server的核心代码主要在服务端核心这一部分,即lib,include,common,fuse,server以及fileserver中。此后我将重点分析C语言实现的服务端源代码,即lib,include,common,fuse,server中的内容。



