4 FastDFS的构建脚本

4.1 下载、编译、安装FastDFS系统

Created with Raphaël 2.2.0https://github.com/happyfish100/fastdfs/releases~/Downloads/fastdfs-6.06.tar.gz

执行fastdfs-6.06目录下的make.sh脚本,将分别在tracker、storage、client及其中的test子目录下生成Makefile文件,并通过make命令构建跟踪服务器、存储服务器和客户机。如下图所示:

make.sh
tracker/Makefile
storage/Makefile
client/Makefile
test/Makefile

执行该脚本时若提供install参数,将会把跟踪服务器、存储服务器和客户机的可执行程序、用于重启和停止服务器的Shell脚本、系统服务脚本、配置文件模板、客户端库的头文件、库文件及测试程序等,拷贝到系统的特定目录下。如下图所示:

/
usr
bin
fdfs_trackerd
fdfs_storaged
fdfs_monitor
fdfs_test
fdfs_test1
fdfs_crc32
fdfs_upload_file
fdfs_download_file
fdfs_delete_file
fdfs_file_info
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_upload_appender
fdfs_regenerate_filename
restart.sh
stop.sh
include
fastdfs
mime_file_parser.h
trunk_shared.h
fdfs_define.h
fdfs_global.h
fdfs_shared_func.h
fdfs_http_shared.h
fdfs_server_id_func.h
fdfs_client.h
tracker_types.h
tracker_proto.h
tracker_client.h
storage_client.h
storage_client1.h
client_global.h
client_func.h
lib
libfdfsclient.so
lib64
libfdfsclient.so
etc
fdfs
tracker.conf.sample
storage_ids.conf.sample
storage.conf.sample
http.conf.sample
mime.types.sample
client.conf.sample
init.d
fdfs_trackerd
fdfs_storaged

4.2 项目构建安装脚本

fastdfs-6.06
make.sh

4.2.1 客户端库的形式

静态库形式的客户端库:libfdfsclient.a 共享库形式的客户端库:libfdfsclient.so

4.2.2 安装路径

/
usr
bin
15个可执行程序和分别用于重启停止服务器的两个Shell脚本
include
fastdfs
客户端库的15个C语言头文件
lib
客户端库的一个静态或共享库文件
lib64
客户端库的一个静态或共享库文件
etc
fdfs
六个配置文件模板
init.d
两个系统服务脚本

4.2.3 系统服务

一旦做成系统服务,即可通过如下命令,使跟踪服务器和存储服务器作为系统服务的一部分,在操作系统启动时自动启动:

以上两条命令中的fdfs_trackerd和fdfs_storaged,即位于/etc/init.d目录下的系统服务脚本。

4.2.4 调试模式

调试模式意味着使用以下三个编译选项:

而非调试模式则只使用-O3选项。

4.2.5 编译选项

关于GCC编译器的优化编译选项:

4.2.6 系统字长

/usr/include/fastcommon或/usr/local/include/fastcommon目录是libfastcommon库的头文件目录。位于该目录下的_os_define.h文件定义了一组与操作系统有关的宏,其中包括:

分别表示当前操作系统的字长是32位或64位。

以64位Ubuntu为例:

fgrep OS_BITS /usr/include/fastcommon/_os_define.h
awk '{print $NF;}'
64
/usr/include/fastcommon/_os_define.h
#define OS_BITS 64

4.2.7 系统名称

uname
Unix-like Operating System
Linux
FreeBSD
Darwin
SunOS
AIX
HP-UX
Ubuntu
FreeBSD
Mac OS X
Solaris
AIX
HP-UX

4.2.8 客户端库的库文件目录

一般情况下,客户端库的库文件,在32位系统上放在/usr/lib目录下,而在64位系统上则放在/usr/lib64目录下,但在苹果系统上,则无论32位还是64位,一律放在/usr/lib目录下。

4.2.9 链接选项

不同操作系统的链接选项LIBS、编译选项CFLAGS、可执行程序和客户端库目录前缀TARGET_PREFIX,以及CC环境变量,会有所不同。

4.2.10 线程选项

不同操作系统POSIX线程库的安装目录和文件名有所不同,若能找到,则将其添加到链接选项LIBS中。

4.2.11 附加模块

跟踪服务器和存储服务器的转储模块仅在调试模式下启用。

4.2.12 构建跟踪服务器

将编译选项(CFLAGS)、链接选项(LIBS)等变量的值,代入跟踪服务器构建脚本模板(tracker/Makefile.in)中的相应变量,生成跟踪服务器构建脚本(tracker/Makefile),执行make命令,得到跟踪服务器可执行程序(fdfs_trackerd),并在提供install参数情况下完成安装。如下图所示:

tracker
Makefile.in
Makefile
CFLAGS
LIBS
TARGET_PREFIX
TRACKER_EXTRA_OBJS
TARGET_CONF_PATH
make
fdfs_trackerd

4.2.13 构建存储服务器

将编译选项(CFLAGS)、链接选项(LIBS)等变量的值,代入存储服务器构建脚本模板(storage/Makefile.in)中的相应变量,生成存储服务器构建脚本(storage/Makefile),执行make命令,得到存储服务器可执行程序(fdfs_storaged),并在提供install参数情况下完成安装。如下图所示:

storage
Makefile.in
Makefile
CFLAGS
LIBS
TARGET_PREFIX
STORAGE_EXTRA_OBJS
TARGET_CONF_PATH
make
fdfs_storaged

4.2.14 构建客户机

将编译选项(CFLAGS)、链接选项(LIBS)等变量的值,代入客户机构建脚本模板(client/Makefile.in)中的相应变量,生成客户机构建脚本(client/Makefile),执行make命令,得到客户机可执行程序(fdfs_monitor、fdfs_test等)和客户端库文件(libfdfsclient.a和libfdfsclient.so),并在提供install参数情况下完成安装。如下图所示:

client
Makefile.in
Makefile
fdfs_link_library.sh.in
fdfs_link_library.sh
CFLAGS
LIBS
TARGET_PREFIX
LIB_VERSION
TARGET_CONF_PATH
ENABLE_STATIC_LIB
ENABLE_SHARED_LIB
make
fdfs_monitor
fdfs_test
fdfs_test1
fdfs_crc32
fdfs_upload_file
fdfs_download_file
fdfs_delete_file
fdfs_file_info
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_upload_appender
fdfs_regenerate_filename
libfdfsclient.a
libfdfsclient.so

4.2.15 客户端库测试程序

将编译选项(CFLAGS)、链接选项(LIBS)等变量的值,代入客户端库测试程序构建脚本模板(client/test/Makefile.in)中的相应变量,生成客户端库测试程序构建脚本(client/test/Makefile)。如下图所示:

test
Makefile.in
Makefile
CFLAGS
LIBS
TARGET_PREFIX
make
fdfs_monitor
fdfs_test
fdfs_test1

4.2.16 安装

在提供install参数的情况下执行项目构建安装脚本(make.sh),将安装分别用于重启和停止服务器的两个Shell脚本、六个配置文件模板和两个系统服务脚本。如下图所示:

/
usr
bin
restart.sh
stop.sh
etc
fdfs
tracker.conf.sample
storage_ids.conf.sample
storage.conf.sample
http.conf.sample
mime.types.sample
client.conf.sample
init.d
fdfs_trackerd
fdfs_storaged

而诸如跟踪服务器、存储服务器和客户机的可执行程序,客户端库的头文件、库文件和测试程序等,则依据它们各自的构建脚本(Makefile),在执行构建(make)的过程中完成安装。

4.3 跟踪服务器构建脚本模板

fastdfs-6.06
tracker
Makefile.in

4.3.1 可识别后缀

4.3.2 编译器

4.3.3 头文件和库

4.3.4 安装路径

4.3.5 目标模块

4.3.6 可执行程序

4.3.7 默认目标

4.3.8 链接目标

4.3.9 编译目标

跟踪服务器的构建结构如下图所示:

4.3.10 安装目标

跟踪服务器的目录结构如下图所示:

/
usr
bin
fdfs_trackerd
etc
fdfs
tracker.conf.sample
storage_ids.conf.sample

4.3.11 清除目标

4.4 存储服务器构建脚本模板

fastdfs-6.06
storage
Makefile.in

4.4.1 可识别后缀

4.4.2 编译器

4.4.3 头文件和库

4.4.4 安装路径

4.4.5 目标模块

4.4.6 可执行程序

4.4.7 默认目标

4.4.8 链接目标

4.4.9 编译目标

存储服务器的构建结构如下图所示:

4.4.10 安装目标

存储服务器的目录结构如下图所示:

/
usr
bin
fdfs_storaged
etc
fdfs
storage.conf.sample

4.4.11 清除目标

4.5 客户机构建脚本模板

fastdfs-6.06
client
Makefile.in

4.5.1 可识别后缀

4.5.2 编译器

4.5.3 头文件和库

4.5.4 安装路径

4.5.5 目标模块

4.5.6 可执行程序

4.5.7 客户端库

4.5.8 默认目标

4.5.9 链接目标

4.5.10 编译目标

客户机和客户端库的构建结构如下图所示:

4.5.11 安装目标

客户机和客户端库的目录结构如下图所示:

/
usr
bin
fdfs_monitor
fdfs_test
fdfs_test1
fdfs_crc32
fdfs_upload_file
fdfs_download_file
fdfs_delete_file
fdfs_file_info
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_upload_appender
fdfs_regenerate_filename
include
fastdfs
mime_file_parser.h
trunk_shared.h
fdfs_define.h
fdfs_global.h
fdfs_shared_func.h
fdfs_http_shared.h
fdfs_server_id_func.h
fdfs_client.h
tracker_types.h
tracker_proto.h
tracker_client.h
storage_client.h
storage_client1.h
client_global.h
client_func.h
lib
libfdfsclient.so
lib64
libfdfsclient.so
etc
fdfs
client.conf.sample

4.5.12 清除目标

4.6 客户端库测试程序构建脚本模板

fastdfs-6.06
client
test
Makefile.in

4.6.1 可识别后缀

4.6.2 编译器

4.6.3 头文件和库

4.6.4 安装路径

4.6.5 目标模块

4.6.6 可执行程序

4.6.7 默认目标

4.6.8 链接目标

4.6.9 编译目标

客户端库测试程序的构建结构如下图所示:

4.6.10 安装目标

客户端库测试程序的目录结构如下图所示:

/
usr
bin
fdfs_monitor
fdfs_test
fdfs_test1

4.6.11 清除目标


达内集团◇C++/嵌入式◇闵卫