Skip to content

Latest commit

 

History

History
executable file
·
432 lines (371 loc) · 12.7 KB

3-build.adoc

File metadata and controls

executable file
·
432 lines (371 loc) · 12.7 KB

3. 从源码构建 / Build from Source

3.1 构建 / Build

Manticore 支持多种操作系统,包括 Linux、FreeBSD、MacOS、Windows 等。

考虑到系统的实际运行环境,下面以 Ubuntu 20.04LTS 为例,介绍如何从源码构建系统。

下面假设工作的目录为 $(WSPACE)

  1. git clone 或解压源码包到 $(WSPACE)/manticoresearch

  2. 将依赖的第三方源码包 复制到 $(WSPACE)/manticore_bundle, 包括

    • galera-cmake-3.x-5.7.zip

    • googletestmaster.zip

    • icu4c-65_1-src.tgz

    • libstemmer_c.tgz

    • master.zip

    • re2_master.zip

Tip
其中 master.zip 与 re2_master.zip 是一个文件
  1. 创建 编译使用的目录 mkdir -p $(WSPACE)/build && cd $(WSPACE)/build

  2. 确保编译所需的系统库存在

     sudo apt install build-essential libssl-dev \
         libmysqlclient-dev flex bison libpcre3-dev \
         libzstd-dev
  1. 构建

     cmake ../manticoresearch -DLIBS_BUNDLE=../manticore_bundle \
     -DWITH_ICONV=OFF -DWITH_RE2=1 -DWITH_MYSQL=1 \
     -DCMAKE_BUILD_TYPE=DEBUG -DBoost_NO_SYSTEM_PATHS=TRUE -DBoost_NO_BOOST_CMAKE=TRUE \
     -DCMAKE_CXX_FLAGS="-Wno-error=stringop-truncation -Wno-error=deprecated-copy"
Tip
以上命令编译出来是调试版本的,如果是发行版本,应该用 -DCMAKE_BUILD_TYPE=Release-DCMAKE_BUILD_TYPE=RelWithDebInfo

TIPS: 这个配置中,关闭了 ICONV,启用了 RE2,启用了 MySQL DataSource

3.1.1 为 Windows 构建 / Build for Windows

  1. Windows 上需要手动安装 Python3 和 Git

  2. 需要 bison 和 flex,目前无法在 Windows 上生成正确的 c 文件,需要在 Linux 上生成完毕后再到 Windows 上构造;另外一个可选方式是通过 https://github.com/lexxmark/winflexbison 未测试。

  3. 需要 VC BuildTools, 2019 版本已经自带 Cmake

  4. 执行构建指令

     cmake ../manticoresearch -DLIBS_BUNDLE=../manticore_bundle \
     -DWITH_ICONV=OFF -DWITH_RE2=1 -DWITH_MYSQL=0 \
     -DCMAKE_BUILD_TYPE=DEBUG

假设 Windows 版本放弃 MySQL 支持,如果启用需要额外配置 MySQL Client 的库。

3.2 调试 / Debug

为了调试 Sphinx, 应使用 Debug 或 RelWithDebInfo 进行构建。

Sphinx 采用了多线架构(历史上是多进程,但是目前版本已经默认是多现成),而且其使用由 master 进程的 Fork 的 worker进程来对外提供服务,默认情况下,直接使用 gdb 将挂在到 worker 进程导致端点失效。

对于大部分场景不需要调试 Sphinx 有关并发的逻辑,此时需要在启动 searchd 时额外提供 --console 参数,在此模式下, master 进程将不会 fork worker 进程,转而自行对外提供服务。

推荐使用 SourceTrail 阅读代码 ,需要增加 cmake 参数 -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -G Ninja

3.3 源码文件 / Files

├── README.md
├── TESTING.md
├── api
│   ├── java
│   ├── libsphinxclient
│   ├── ruby
│   ├── sphinxapi.py
│   ├── test.php
│   ├── test.py
│   ├── test2.php
│   └── test2.py
├── cmake
├── debian
├── dist
├── doc
├── docker-compose-test.yml
├── docs
├── libicu
│   └── CMakeLists.txt
├── libre2
│   ├── CMakeLists.txt
│   └── libre2.patch
├── libstemmer_c
│   ├── CMakeLists.txt
│   └── README
├── manticore.conf.in
├── misc
│   ├── ctest
│   ├── dockerfiles
│   ├── junit
│   ├── manticore.natvis
│   ├── manticore_lldb.py
│   ├── raminfo.py
│   ├── resolve.py
│   ├── search_json_pretty.php
│   ├── stopwords
│   ├── suggest
│   │   ├── README
│   │   ├── suggest.conf
│   │   └── suggest.php
│   └── wordbreak.pl
├── mysqlse
│   ├── CMakeLists.txt
│   ├── INSTALL
│   ├── Makefile.am
│   ├── gen_data.php
│   ├── ha_sphinx.cc
│   ├── ha_sphinx.h
│   ├── make-patch.sh
│   ├── plug.in
│   ├── snippets_udf.cc
│   ├── sphinx.5.0.22.diff
│   ├── sphinx.5.0.27.diff
│   ├── sphinx.5.0.37.diff
│   └── sphinx.5.0.91.diff
├── smoke.sh
├── sphinxrev.cmake
├── src
│   ├── CMakeLists.txt
│   ├── accumulator.h
│   ├── attribute.cpp
│   ├── attribute.h
│   ├── charsets
│   │   ├── cjk.txt
│   │   ├── english.txt
│   │   ├── globalaliases.h.in
│   │   ├── non_cjk.txt
│   │   └── russian.txt
│   ├── coreseek
│   │   ├── zmemorypool.cpp
│   │   └── zmemorypool.h
│   ├── datareader.cpp
│   ├── datareader.h
│   ├── ddl.l
│   ├── ddl.y
│   ├── docstore.cpp
│   ├── docstore.h
│   ├── event.h
│   ├── fileutils.cpp
│   ├── fileutils.h
│   ├── global_idf.cpp
│   ├── global_idf.h
│   ├── gtests
│   ├── http
│   │   ├── http_parser.c
│   │   └── http_parser.h
│   ├── icu.cpp
│   ├── icu.h
│   ├── index_converter.cpp
│   ├── indexcheck.cpp
│   ├── indexcheck.h
│   ├── indexer.cpp
│   ├── indexformat.cpp
│   ├── indexformat.h
│   ├── indexsettings.cpp
│   ├── indexsettings.h
│   ├── indextool.cpp
│   ├── json
│   │   ├── cJSON.c
│   │   └── cJSON.h
│   ├── killlist.cpp
│   ├── killlist.h
│   ├── literal.h.in
│   ├── loop_profiler.h
│   ├── lz4
│   │   ├── lz4.c
│   │   ├── lz4.h
│   │   ├── lz4hc.c
│   │   └── lz4hc.h
│   ├── net_action_accept.cpp
│   ├── net_action_accept.h
│   ├── netreceive_api.cpp
│   ├── netreceive_api.h
│   ├── netreceive_http.cpp
│   ├── netreceive_http.h
│   ├── netreceive_httpcommon.h
│   ├── netreceive_https.cpp
│   ├── netreceive_https.h
│   ├── netreceive_ql.cpp
│   ├── netreceive_ql.h
│   ├── netstate_api.cpp
│   ├── netstate_api.h
│   ├── networking_daemon.cpp
│   ├── networking_daemon.h
│   ├── optional.h
│   ├── replication
│   │   ├── CMakeLists.txt
│   │   ├── COPYING
│   │   ├── README.md
│   │   ├── wsrep.xcf
│   │   ├── wsrep_api.h
│   │   ├── wsrep_api_stub.h
│   │   ├── wsrep_dummy.c
│   │   ├── wsrep_gtid.c
│   │   ├── wsrep_listener.c
│   │   ├── wsrep_loader.c
│   │   └── wsrep_uuid.c
│   ├── reserved.py
│   ├── searchd.cpp
│   ├── searchdaemon.cpp
│   ├── searchdaemon.h
│   ├── searchdconfig.cpp
│   ├── searchdconfig.h
│   ├── searchdddl.cpp
│   ├── searchdddl.h
│   ├── searchdexpr.cpp
│   ├── searchdexpr.h
│   ├── searchdfields.cpp
│   ├── searchdha.cpp
│   ├── searchdha.h
│   ├── searchdhttp.cpp
│   ├── searchdreplication.cpp
│   ├── searchdreplication.h
│   ├── searchdsql.cpp
│   ├── searchdsql.h
│   ├── searchdssl.cpp
│   ├── searchdssl.h
│   ├── searchdtask.cpp
│   ├── searchdtask.h
│   ├── searchnode.cpp
│   ├── searchnode.h
│   ├── secondaryindex.cpp
│   ├── secondaryindex.h
│   ├── snippetfunctor.cpp
│   ├── snippetfunctor.h
│   ├── snippetindex.cpp
│   ├── snippetindex.h
│   ├── snippetstream.cpp
│   ├── snippetstream.h
│   ├── spelldump.cpp
│   ├── sphinx.cpp
│   ├── sphinx.h
│   ├── sphinxaot.cpp
│   ├── sphinxexcerpt.cpp
│   ├── sphinxexcerpt.h
│   ├── sphinxexpr.cpp
│   ├── sphinxexpr.h
│   ├── sphinxexpr.y
│   ├── sphinxfilter.cpp
│   ├── sphinxfilter.h
│   ├── sphinxint.h
│   ├── sphinxjson.cpp
│   ├── sphinxjson.h
│   ├── sphinxjson.l
│   ├── sphinxjson.y
│   ├── sphinxjsonquery.cpp
│   ├── sphinxjsonquery.h
│   ├── sphinxmetaphone.cpp
│   ├── sphinxplugin.cpp
│   ├── sphinxplugin.h
│   ├── sphinxpq.cpp
│   ├── sphinxpq.h
│   ├── sphinxqcache.cpp
│   ├── sphinxqcache.h
│   ├── sphinxql.l
│   ├── sphinxql.y
│   ├── sphinxquery.cpp
│   ├── sphinxquery.h
│   ├── sphinxquery.y
│   ├── sphinxrt.cpp
│   ├── sphinxrt.h
│   ├── sphinxsearch.cpp
│   ├── sphinxsearch.h
│   ├── sphinxselect.y
│   ├── sphinxsort.cpp
│   ├── sphinxsoundex.cpp
│   ├── sphinxstd.cpp
│   ├── sphinxstd.h
│   ├── sphinxstem.h
│   ├── sphinxstemar.cpp
│   ├── sphinxstemcz.cpp
│   ├── sphinxstemen.cpp
│   ├── sphinxstemru.cpp
│   ├── sphinxstemru.inl
│   ├── sphinxudf.c
│   ├── sphinxudf.h
│   ├── sphinxutils.cpp
│   ├── sphinxutils.h
│   ├── sphinxversion.cpp
│   ├── sphinxversion.h.in
│   ├── taskflushattrs.cpp
│   ├── taskflushattrs.h
│   ├── taskflushbinlog.cpp
│   ├── taskflushbinlog.h
│   ├── taskflushmutable.cpp
│   ├── taskflushmutable.h
│   ├── taskglobalidf.cpp
│   ├── taskglobalidf.h
│   ├── taskmalloctrim.cpp
│   ├── taskmalloctrim.h
│   ├── taskoptimize.cpp
│   ├── taskoptimize.h
│   ├── taskping.cpp
│   ├── taskping.h
│   ├── taskpreread.cpp
│   ├── taskpreread.h
│   ├── tasksavestate.cpp
│   ├── tasksavestate.h
│   ├── testrt.conf.in
│   ├── testrt.cpp
│   ├── tests.cpp
│   ├── threadutils.cpp
│   ├── threadutils.h
│   ├── udfexample.c
│   └── wordbreaker.cpp
└── test
    ├ ...
    ├── test_icu.conf
    ├── test_odbc.conf
    ├── test_re.conf
    ├── ubertest.php
    ├── ubertest.php.in
    ├── valgrind.supp
    └── wordforms.txt

413 directories, 1545 files

Coreseek / Manticore 中提供了如下的源码文件/目录,具体用途如下(一些约定俗成,通过名字可知的文件略过):

目录 用途

api

API 模式访问 Sphinx 客户端库

cmake

cmake 构建用到的文件

debian

作为 deb 包 要求存在的文件

dist

构造 deb 和 rpm 包依赖的其他文件

doc

构建文档所需要的工具

docs

实际文档的原始文件

libicu

libicu 的 cmake 构建文件

libre2

libre2 的 cmake 构建文件

libstremmer_c

libstremmer_c 的 cmake 构建文件

misc

其他杂项文件,包括 停止词、lldb 的适配、docker、natvis 的配置、stopword,搜索建议功能的演示配置等

mysqlse

MySql SE 的接口文件,用于作为存储引擎与 MySQL集成

src

主体源代码

src/charsets

预制的字符集, cjk,英文, 俄文

src/coreseek

支持 spdz 所需要的文件,基于 zstd 的内存池访问机制

src/http

http api 依赖的文件

src/json

处理 json 解析

src/lz4

lz4 算法,用于 docstore 压缩

src/replication

多主的复制机制,基于 galera

test

单元测试

在源代码目录中,与 Schema On Read 和 索引压缩相关的文件用途说明如下。

文件 用途

sphinxint.h

Cell in column 2, row 1

sphinx.h

Cell in column 2, row 1

sphinx.cpp

Cell in column 2, row 1

sphinxutils.*

Cell in column 2, row 1

sphinxexpr.*

Cell in column 2, row 1

searchdexpr.*

Cell in column 2, row 1