-
Debian
- 11.0 (Bullseye)
- 12.0 (Bookworm)
- 13.0 (Trixie)
-
Ubuntu
- 18.04 (Bionic)
- 20.04 (Focal)
- 21.04 (Hirsute Hippo)
- 22.04 (Jammy)
- 24.04 (Noble)
-
Mint
- 19
- 20
- 21
Самый простой способ установить Manticore в Ubuntu/Debian/Mint — использовать наш репозиторий APT.
Установите репозиторий:
wget https://repo.manticoresearch.com/manticore-repo.noarch.deb
sudo dpkg -i manticore-repo.noarch.deb
sudo apt update
(установите wget, если он не установлен; установите gnupg2, если apt-key не работает).
Затем установите Manticore Search:
sudo apt install manticore manticore-extra
Если вы обновляетесь до Manticore 6 с более ранней версии, рекомендуется сначала удалить старые пакеты, чтобы избежать конфликтов, вызванных обновлённой структурой пакетов:
sudo apt remove manticore*
Это не удалит ваши данные и файл конфигурации.
Если вы предпочитаете версии "Nightly" (разработческие), выполните:
wget https://repo.manticoresearch.com/manticore-dev-repo.noarch.deb && \
sudo dpkg -i manticore-dev-repo.noarch.deb && \
sudo apt -y update && \
sudo apt -y install manticore manticore-extra manticore-common manticore-server manticore-server-core manticore-tools manticore-executor manticore-buddy manticore-backup manticore-columnar-lib manticore-server-core-dbgsym manticore-tools-dbgsym manticore-columnar-lib-dbgsym manticore-icudata-65l manticore-galera manticore-galera-dbgsym manticore-language-packs manticore-load
Чтобы скачать отдельные DEB-файлы из репозитория Manticore, следуйте инструкциям по адресу https://manticoresearch.com/install/.
Пакет Manticore зависит от библиотек zlib и ssl, больше ничего строго не требуется. Однако если вы планируете использовать indexer для создания таблиц из внешних хранилищ, вам нужно будет установить соответствующие клиентские библиотеки. Чтобы узнать, какие именно библиотеки требуются для indexer, запустите его и посмотрите начало вывода:
$ sudo -u manticore indexer
Manticore 3.5.4 13f8d08d@201211 release
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
Copyright (c) 2017-2020, Manticore Software LTD (https://manticoresearch.com)
Built by gcc/clang v 5.4.0,
Built on Linux runner-0277ea0f-project-3858465-concurrent-0 4.19.78-coreos #1 SMP Mon Oct 14 22:56:39 -00 2019 x86_64 x86_64 x86_64 GNU/Linux
Configured by CMake with these definitions: -DCMAKE_BUILD_TYPE=RelWithDebInfo -DDISTR_BUILD=xenial -DUSE_SSL=ON -DDL_UNIXODBC=1 -DUNIXODBC_LIB=libodbc.so.2 -DDL_EXPAT=1 -DEXPAT_LIB=libexpat.so.1 -DUSE_LIBICONV=1 -DDL_MYSQL=1 -DMYSQL_LIB=libmysqlclient.so.20 -DDL_PGSQL=1 -DPGSQL_LIB=libpq.so.5 -DLOCALDATADIR=/var/data -DFULL_SHARE_DIR=/usr/share/manticore -DUSE_ICU=1 -DUSE_BISON=ON -DUSE_FLEX=ON -DUSE_SYSLOG=1 -DWITH_EXPAT=1 -DWITH_ICONV=ON -DWITH_MYSQL=1 -DWITH_ODBC=ON -DWITH_POSTGRESQL=1 -DWITH_RE2=1 -DWITH_STEMMER=1 -DWITH_ZLIB=ON -DGALERA_SOVERSION=31 -DSYSCONFDIR=/etc/manticoresearch
Здесь вы можете видеть упоминания libodbc.so.2, libexpat.so.1, libmysqlclient.so.20 и libpq.so.5.
Ниже приведена таблица со списком всех клиентских библиотек для разных версий Debian/Ubuntu:
| Дистрибутив | MySQL | PostgreSQL | XMLpipe | UnixODBC |
|---|---|---|---|---|
| Ubuntu Trusty | libmysqlclient.so.18 | libpq.so.5 | libexpat.so.1 | libodbc.so.1 |
| Ubuntu Bionic | libmysqlclient.so.20 | libpq.so.5 | libexpat.so.1 | libodbc.so.2 |
| Ubuntu Focal | libmysqlclient.so.21 | libpq.so.5 | libexpat.so.1 | libodbc.so.2 |
| Ubuntu Hirsute | libmysqlclient.so.21 | libpq.so.5 | libexpat.so.1 | libodbc.so.2 |
| Ubuntu Jammy | libmysqlclient.so.21 | libpq.so.5 | libexpat.so.1 | libodbc.so.2 |
| Debian Jessie | libmysqlclient.so.18 | libpq.so.5 | libexpat.so.1 | libodbc.so.2 |
| Debian Buster | libmariadb.so.3 | libpq.so.5 | libexpat.so.1 | libodbc.so.2 |
| Debian Bullseye | libmariadb.so.3 | libpq.so.5 | libexpat.so.1 | libodbc.so.2 |
| Debian Bookworm | libmariadb.so.3 | libpq.so.5 | libexpat.so.1 | libodbc.so.2 |
Чтобы найти пакеты, которые содержат эти библиотеки, можно использовать, например, apt-file:
apt-file find libmysqlclient.so.20
libmysqlclient20: /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20
libmysqlclient20: /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20.2.0
libmysqlclient20: /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20.3.6
Обратите внимание, что вам нужны только библиотеки для тех типов хранилищ, которые вы собираетесь использовать. Если вы планируете создавать таблицы только из MySQL, возможно, достаточно установить только библиотеку MySQL (в приведённом выше примере libmysqlclient20).
В конце установите необходимые пакеты:
sudo apt-get install libmysqlclient20 libodbc1 libpq5 libexpat1
Если вы вообще не собираетесь использовать инструмент indexer, искать и устанавливать библиотеки не нужно.
Для поддержки токенизации CJK официальные пакеты содержат бинарники с встроенной библиотекой ICU и включают файл данных ICU. Они не зависят от каких-либо ICU runtime библиотек, которые могут быть установлены в вашей системе, и не могут быть обновлены.
Лемматизатор требует Python 3.9+. Убедитесь, что он установлен и сконфигурирован с --enable-shared.
Вот как установить Python 3.9 и украинский лемматизатор на Debian и Ubuntu:
# install Manticore Search and UK lemmatizer from APT repository
cd ~
wget https://repo.manticoresearch.com/manticore-repo.noarch.deb
sudo dpkg -i manticore-repo.noarch.deb
sudo apt -y update
sudo apt -y install manticore manticore-lemmatizer-uk
# install packages needed for building Python
sudo apt -y update
sudo apt -y install wget build-essential libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev
# download, build and install Python 3.9
cd ~
wget https://www.python.org/ftp/python/3.9.4/Python-3.9.4.tgz
tar xzf Python-3.9.4.tgz
cd Python-3.9.4
./configure --enable-optimizations --enable-shared
sudo make -j8 altinstall
# update linker cache
sudo ldconfig
# install pymorphy2 and UK dictionary
sudo LD_LIBRARY_PATH=~/Python-3.9.4 pip3.9 install pymorphy2[fast]
sudo LD_LIBRARY_PATH=~/Python-3.9.4 pip3.9 install pymorphy2-dicts-uk
brew install manticoresoftware/tap/manticoresearch manticoresoftware/tap/manticore-extra
Запустите Manticore как сервис brew:
brew services start manticoresearch
Файл конфигурации Manticore по умолчанию находится по пути /usr/local/etc/manticoresearch/manticore.conf или /opt/homebrew/etc/manticoresearch/manticore.conf.
Если вы планируете использовать indexer для получения данных из источников, таких как MySQL, PostgreSQL или другой базы данных через ODBC, возможно, потребуются дополнительные библиотеки, такие как mysql@5.7, libpq и unixodbc соответственно.
Если вы предпочитаете версии "Nightly" (разработческие), выполните:
brew tap manticoresoftware/tap-dev
brew install manticoresoftware/tap-dev/manticoresearch-dev manticoresoftware/tap-dev/manticore-extra-dev manticoresoftware/tap-dev/manticore-language-packs
brew services start manticoresearch-dev
Manticore можно установить на Windows несколькими способами. Мы рекомендуем использовать WSL (Подсистема Windows для Linux), поскольку она поддерживает репликацию и не требует Docker. Ниже приведены рекомендуемые и альтернативные методы.
Для установки Manticore Search на Windows сначала необходимо включить Подсистему Windows для Linux. WSL2 позволяет запускать Linux-бинарники нативно на Windows. Для работы этого метода требуется Windows 10 версии 2004 и выше или Windows 11.
Следуйте официальному руководству Microsoft для пошаговой инструкции по установке WSL2.
Для установки Manticore на Windows через WSL2 обратитесь к разделу Установка на Debian и Ubuntu.
ПРИМЕЧАНИЕ: Установка Manticore через WSL2 — рекомендованный метод, так как он обеспечивает лучшую совместимость по сравнению с использованием нативных Windows-пакетов.
В качестве альтернативы вы можете установить Manticore в виде нативных бинарников Windows, которые требуют Docker для Manticore Buddy, выполнив следующие шаги:
- Установите Docker Desktop и запустите его.
- Скачайте установщик Manticore Search (ссылка доступна на странице установки) и запустите его. Следуйте инструкциям установки.
- Выберите директорию для установки.
- Выберите компоненты, которые хотите установить. Мы рекомендуем установить все.
- Manticore поставляется с предварительно настроенным файлом
manticore.confв RT режиме. Дополнительная настройка не требуется.
ПРИМЕЧАНИЕ: Нативные бинарники Windows не поддерживают репликацию.
Для установки сервера Manticore Search как службы Windows выполните:
\path\to\searchd.exe --install --config \path\to\config --servicename Manticore
Обязательно используйте полный путь к файлу конфигурации, иначе searchd.exe не сможет его найти при запуске в качестве службы.
После установки службу можно запустить через оснастку Службы (Services) в Microsoft Management Console.
После запуска вы можете получить доступ к Manticore через интерфейс командной строки MySQL:
mysql -P9306 -h127.0.0.1
Обратите внимание, что во многих примерах в данном руководстве используется -h0 для подключения к локальному хосту, но в Windows необходимо явно использовать localhost или 127.0.0.1.
Компиляция Manticore Search из исходных кодов позволяет использовать пользовательские конфигурации сборки, такие как отключение определенных функций или добавление новых патчей для тестирования. Например, вы можете захотеть скомпилировать из исходных кодов и отключить встроенный ICU, чтобы использовать другую версию, установленную в вашей системе, которую можно обновлять независимо от Manticore. Это также полезно, если вы заинтересованы в участии в проекте Manticore Search.
Для подготовки официальных релизных и development пакетов мы используем Docker и специальный образ для сборки. Этот образ включает в себя необходимые инструменты и предназначен для использования с внешними sysroot, поэтому один контейнер может собирать пакеты для всех операционных систем. Вы можете собрать образ, используя Dockerfile и README, или использовать образ из Docker Hub. Это самый простой способ создания бинарных файлов для любой поддерживаемой операционной системы и архитектуры. Вам также потребуется указать следующие переменные окружения при запуске контейнера:
DISTR: целевая платформа:bionic,focal,jammy,buster,bullseye,bookworm,rhel7,rhel8,rhel9,rhel10,macos,windows,freebsd13arch: архитектура:x86_64,x64(для Windows),aarch64,arm64(для Macos)SYSROOT_URL: URL для архивов системных корней. Вы можете использовать https://repo.manticoresearch.com/repository/sysroots, если не собираете sysroot самостоятельно (инструкции можно найти здесь).- Используйте файлы CI workflow в качестве справочника, чтобы найти другие переменные окружения, которые могут вам понадобиться:
Чтобы найти возможные значения для DISTR и arch, вы можете использовать каталог https://repo.manticoresearch.com/repository/sysroots/roots_with_zstd/ в качестве справочника, так как он включает sysroot для всех поддерживаемых комбинаций.
После этого сборка пакетов внутри Docker-контейнера так же проста, как вызов:
cmake -DPACK=1 /path/to/sources
cmake --build .
Например, чтобы создать пакет для Ubuntu Jammy, аналогичный официальной версии, предоставляемой Manticore Core Team, вы должны выполнить следующие команды в каталоге, содержащем исходные коды Manticore Search. Этот каталог является корнем клонированного репозитория из https://github.com/manticoresoftware/manticoresearch:
docker run -it --rm \
-e CACHEB="../cache" \
-e DIAGNOSTIC=1 \
-e PACK_ICUDATA=0 \
-e NO_TESTS=1 \
-e DISTR=jammy \
-e boost=boost_nov22 \
-e sysroot=roots_nov22 \
-e arch=x86_64 \
-e CTEST_CMAKE_GENERATOR=Ninja \
-e CTEST_CONFIGURATION_TYPE=RelWithDebInfo \
-e WITH_COVERAGE=0 \
-e SYSROOT_URL="https://repo.manticoresearch.com/repository/sysroots" \
-e HOMEBREW_PREFIX="" \
-e PACK_GALERA=0 \
-e UNITY_BUILD=1 \
-v $(pwd):/manticore_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \
manticoresearch/external_toolchain:vcpkg331_20250114 bash
# following is to be run inside docker shell
cd /manticore_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/
mkdir build && cd build
cmake -DPACK=1 ..
export CMAKE_TOOLCHAIN_FILE=$(pwd)/dist/build_dockers/cross/linux.cmake
cmake --build .
# or if you want to build packages:
# cmake --build . --target package
Длинный путь к исходному каталогу необходим, иначе сборка исходных кодов может завершиться неудачей в некоторых случаях (например, Centos).
Таким же образом вы можете собирать бинарные файлы или пакеты не только для популярных дистрибутивов Linux, но и для FreeBSD, Windows и macOS.
Вы также можете использовать тот же специальный docker-образ для сборки SRPM:
docker run -it --rm \
-e CACHEB="../cache" \
-e DIAGNOSTIC=1 \
-e PACK_ICUDATA=0 \
-e NO_TESTS=1 \
-e DISTR=rhel8 \
-e boost=boost_rhel_feb17 \
-e sysroot=roots_nov22 \
-e arch=x86_64 \
-e CTEST_CMAKE_GENERATOR=Ninja \
-e CTEST_CONFIGURATION_TYPE=RelWithDebInfo \
-e WITH_COVERAGE=0 \
-e SYSROOT_URL="https://repo.manticoresearch.com/repository/sysroots" \
-e HOMEBREW_PREFIX="" \
-e PACK_GALERA=0 \
-e UNITY_BUILD=1 \
-v $(pwd):/manticore_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \
manticoresearch/external_toolchain:vcpkg331_20250114 bash
# following is to be run inside docker shell
cd /manticore_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/
mkdir build && cd build
cmake -DPACK=1 ..
export CMAKE_TOOLCHAIN_FILE=$(pwd)/../dist/build_dockers/cross/linux.cmake
# The CPackSourceConfig.cmake file is now generated in the build directory
cpack -G RPM --config ./CPackSourceConfig.cmake
Это создаст Source RPM (файл .src.rpm), содержащий весь исходный код.
После того как вы создали SRPM, вы можете использовать его для сборки полного набора бинарных RPM-пакетов:
# Install build tools and dependencies
dnf install -y rpm-build cmake gcc-c++ boost-devel epel-release
# Install SRPM dependencies automatically
dnf builddep -y manticore-*.src.rpm
# Build all binary RPMs from the SRPM
rpmbuild --rebuild manticore-*.src.rpm
# Find the generated packages
ls ~/rpmbuild/RPMS/*/manticore*
ПРИМЕЧАНИЕ: Для сборки RPM из SRPM необходимо убедиться, что все зависимости, перечисленные в SRPM, полностью установлены, что может быть сложной задачей. SRPM все еще может быть полезен для:
- Аудита процесса сборки или проверки исходных и spec-файлов
- Внесения пользовательских изменений или патчей в сборку
- Понимания того, как были созданы бинарные файлы
- Выполнения требований соответствия лицензиям с открытым исходным кодом
Компиляция Manticore без использования Docker для сборки не рекомендуется, но если вам нужно это сделать, вот что вам может понадобиться знать:
- Компилятор C++
- В Linux - можно использовать GNU (4.7.2 и выше) или Clang
- В Windows - Microsoft Visual Studio 2019 и выше (достаточно community edition)
- На macOS - Clang (из инструментов командной строки XCode, используйте
xcode-select --installдля установки).
- Bison, Flex - в большинстве систем они доступны в виде пакетов, в Windows они доступны в рамках cygwin.
- Cmake - используется на всех платформах (требуется версия 3.19 или выше)
Исходный код Manticore размещен на GitHub.
Чтобы получить исходный код, клонируйте репозиторий, а затем переключитесь на нужную ветку или тег. Ветка master представляет основную ветку разработки. При выпуске релиза создается версионный тег, например 3.6.0, и начинается новая ветка для текущего релиза, в данном случае manticore-3.6.0. Голова версионной ветки после всех изменений используется в качестве источника для сборки всех бинарных релизов. Например, чтобы взять исходные коды версии 3.6.0, вы можете выполнить:
git clone https://github.com/manticoresoftware/manticoresearch.git
cd manticoresearch
git checkout manticore-3.6.0
Вы можете скачать нужный код с GitHub, используя кнопку "Download ZIP". Подходят как формат .zip, так и .tar.gz.
wget -c https://github.com/manticoresoftware/manticoresearch/archive/refs/tags/3.6.0.tar.gz
tar -zxf 3.6.0.tar.gz
cd manticoresearch-3.6.0
Manticore использует CMake. Предполагая, что вы находитесь в корневом каталоге клонированного репозитория:
mkdir build && cd build
cmake ..
CMake проверит доступные функции и настроит сборку в соответствии с ними. По умолчанию все функции считаются включенными, если они доступны. Скрипт также загружает и собирает некоторые внешние библиотеки, предполагая, что вы хотите их использовать. Неявно вы получаете поддержку максимального количества функций.
Вы также можете явно настроить сборку с помощью флагов и опций. Чтобы включить функцию FOO, добавьте -DFOO=1 к вызову CMake.
Чтобы отключить её, используйте -DFOO=0. Если не указано явно, включение функции, которая недоступна (например, WITH_GALERA в сборке для MS Windows), приведет к ошибке конфигурации. Отключение функции, помимо исключения её из сборки, также отключает её проверку в системе и отключает загрузку/сборку любых связанных внешних библиотек.
- USE_SYSLOG - позволяет использовать
syslogв логировании запросов. - WITH_GALERA -Включает поддержку репликации в демоне поиска. Поддержка будет настроена при сборке, а исходники библиотеки Galera будут загружены, собраны, и включены в дистрибутив/установку. Обычно безопасно собирать с Galera, но не распространять саму библиотеку (т.е. без модуля Galera, без репликации). Однако иногда может потребоваться явное отключение, например если нужно собрать статичный бинарник, который по замыслу не может загружать никакие библиотеки, так что даже присутствие вызова функции 'dlopen' внутри демона приведёт к ошибке на этапе линковки.
- WITH_RE2 - Сборка с использованием библиотеки регулярных выражений RE2. Это необходимо для функций вроде REGEX(), и для regexp_filter функциональности.
- WITH_RE2_FORCE_STATIC - Загружает исходники RE2, компилирует их и статически линкует, так что итоговые бинарные файлы не будут зависеть от наличия общей
RE2библиотеки в вашей системе. - WITH_STEMMER - Сборка с использованием библиотеки Snowball для стемминга.
- WITH_STEMMER_FORCE_STATIC - Загружает исходники Snowball, компилирует их и статически линкует, так что итоговые бинарные файлы не будут зависеть от наличия общей
libstemmerбиблиотеки в вашей системе. - WITH_ICU - Сборка с библиотекой ICU (International Components for Unicode). Она используется для сегментации китайского текста. Применяется при установке morphology=
icu_chinese. - WITH_JIEBA - Сборка с использованием инструмента сегментации китайского текста Jieba. Он используется для сегментации китайского текста. Применяется при установке morphology=
jieba_chinese. - WITH_ICU_FORCE_STATIC - Загружает исходники ICU, компилирует их и статически линкует, так что итоговые бинарные файлы не будут зависеть от наличия общей
icuбиблиотеки в вашей системе. Также включает файл данных ICU в установку/дистрибутив. Цель статической связи ICU — иметь библиотеку известной версии, чтобы поведение было определено и не зависело от системных библиотек. Скорее всего, вы предпочтёте использовать системную ICU, так как она может обновляться со временем без необходимости перекомпиляции демона Manticore. В этом случае нужно явно отключить эту опцию. Это также сэкономит место, занимаемое файлом данных ICU (примерно 30M), так как он не будет включён в дистрибутив. - WITH_SSL - Используется для поддержки HTTPS, а также зашифрованных подключений MySQL к демону. Системная библиотека OpenSSL будет связана с демоном. Это означает, что для запуска демона потребуется OpenSSL. Это обязательно для поддержки HTTPS, но не строго обязательно для сервера (т.е. отсутствие SSL означает невозможность подключения по HTTPS, но остальные протоколы будут работать). Библиотеки SSL версий от 1.0.2 до 1.1.1 могут использоваться Manticore, однако обратите внимание, что ради безопасности настоятельно рекомендуется использовать самую свежую SSL библиотеку. Пока что поддерживается только v1.1.1, остальные устарели ( см. стратегию выпусков openssl
- WITH_ZLIB - используется индексером для работы с сжатыми столбцами из MySQL. Используется демоном для поддержки сжатого протокола MySQL.
- WITH_ODBC - используется индексером для поддержки индексирования источников из провайдеров ODBC (обычно это UnixODBC и iODBC). В MS Windows ODBC является правильным способом работы с источниками MS SQL, поэтому индексирование
MSSQLтакже подразумевает этот флаг. - DL_ODBC - не линкуется с библиотекой ODBC. Если ODBC связана, но недоступна, вы не сможете запустить инструмент indexer даже если хотите обработать что-то не связанное с ODBC. Этот параметр заставляет indexer загружать библиотеку во время выполнения только тогда, когда вы хотите работать с источником ODBC.
- ODBC_LIB - имя файла библиотеки ODBC. Indexer будет пытаться загрузить этот файл, когда вы захотите обработать источник ODBC. Этот параметр автоматически определяется на основе исследования доступных общих библиотек ODBC. Вы также можете переопределить это имя во время выполнения, задав переменную окружения
ODBC_LIBс правильным путем к альтернативной библиотеке перед запуском indexer. - WITH_EXPAT - используется индексером для поддержки индексирования источников xmlpipe.
- DL_EXPAT - не линкуется с библиотекой EXPAT. Если EXPAT связана, но недоступна, вы не сможете запустить инструмент
indexerдаже если хотите обработать что-то не связанное с xmlpipe. Этот параметр заставляет indexer загружать библиотеку во время выполнения только тогда, когда вы хотите работать с источником xmlpipe. - EXPAT_LIB - имя файла библиотеки EXPAT. Indexer попытается загрузить этот файл, когда вы захотите обработать источник xmlpipe. Этот параметр автоматически определяется из анализа доступных общих библиотек EXPAT. Вы также можете переопределить это имя во время выполнения, задав переменную окружения EXPAT_LIB с правильным путем к альтернативной библиотеке перед запуском indexer.
- WITH_ICONV - для поддержки различных кодировок при индексировании источников xmlpipe с помощью indexer.
- DL_ICONV - не линкуется с библиотекой iconv. Если iconv связана, но недоступна, вы не сможете запустить инструмент
indexerдаже если хотите обработать что-то не связанное с xmlpipe. Этот параметр заставляет indexer загружать библиотеку во время выполнения только тогда, когда вы хотите работать с источником xmlpipe. - ICONV_LIB - имя файла библиотеки iconv. Indexer попытается загрузить этот файл, когда вы захотите обработать источник xmlpipe. Этот параметр автоматически определяется из анализа доступных общих библиотек iconv. Вы также можете переопределить это имя во время выполнения, задав переменную окружения
ICONV_LIBс правильным путем к альтернативной библиотеке перед запуском indexer. - WITH_MYSQL - используется индексером для поддержки индексирования источников MySQL.
- DL_MYSQL - не линкуется с библиотекой MySQL. Если MySQL связана, но недоступна, вы не сможете запустить инструмент
indexerдаже если хотите обработать что-то не связанное с MySQL. Этот параметр заставляет indexer загружать библиотеку во время выполнения только тогда, когда вы хотите работать с источником MySQL. - MYSQL_LIB -- имя файла библиотеки MySQL. Indexer будет пытаться загрузить этот файл, когда вы захотите обработать источник MySQL. Этот параметр автоматически определяется из анализа доступных общих библиотек MySQL. Вы также можете переопределить это имя во время выполнения, задав переменную окружения
MYSQL_LIBс правильным путем к альтернативной библиотеке перед запуском indexer. - WITH_POSTGRESQL - используется индексером для поддержки индексирования источников PostgreSQL.
- DL_POSTGRESQL - не линкуется с библиотекой PostgreSQL. Если PostgreSQL связана, но недоступна, вы не сможете запустить инструмент
indexerool даже если хотите обработать что-то не связанное с PostgreSQL. Этот параметр заставляет indexer загружать библиотеку во время выполнения только тогда, когда вы хотите работать с источником PostgreSQL. - POSTGRESQL_LIB - имя файла библиотеки postgresql. Indexer будет пытаться загрузить указанный файл библиотеки postgresql при обработке источника postgresql. Этот параметр автоматически определяется из анализа доступных общих библиотек postgresql. Вы также можете переопределить это имя во время выполнения, задав переменную окружения
POSTGRESQL_LIBс правильным путем к альтернативной библиотеке перед запуском indexer. - LOCALDATADIR - путь по умолчанию, где демон хранит binlogs. Если этот путь не задан или явно отключен в runtime-конфигурации демона (т.е. файл
manticore.conf, который не связан с этой конфигурацией сборки), binlogs будут помещены в этот путь. Обычно это абсолютный путь, однако он не обязан быть таковым, допускаются и относительные пути. Скорее всего, вам не потребуется изменять значение по умолчанию, определённое конфигурацией, которое, в зависимости от целевой системы, может быть чем-то вроде/var/data,/var/lib/manticore/dataили/usr/local/var/lib/manticore/data. - FULL_SHARE_DIR - путь по умолчанию, где хранятся все ресурсы. Он может быть переопределён переменной окружения
FULL_SHARE_DIRперед запуском любого инструмента, использующего файлы из этой папки. Это важный путь, так как там по умолчанию ожидается найти множество вещей. Сюда входят предопределённые таблицы кодировок, стоп-слова, модули manticore и файлы данных icu, все помещённые в эту папку. Скрипт конфигурации обычно определяет этот путь как что-то вроде/usr/share/manticoreили/usr/local/share/manticore. - DISTR_BUILD - ярлык для опций создания пакетов. Это строковое значение с названием целевой платформы. Оно может использоваться вместо ручной настройки всех опций. В Debian и Redhat Linux значение по умолчанию может быть определено путём лёгкой инспекции и установлено как обобщённое 'Debian' или 'RHEL'. В противном случае значение не определяется.
- PACK - ещё более удобный ярлык. Он читает переменную окружения
DISTR, присваивает её параметру DISTR_BUILD и затем работает как обычно. Это очень полезно при сборке в подготовленных системах сборки, таких как контейнеры Docker, где переменнаяDISTRзадаётся на уровне системы и отражает целевую систему, для которой предназначен контейнер. - CMAKE_INSTALL_PREFIX (path) - путь, куда предполагается установить Manticore. Сборка не выполняет установку, но подготавливает правила установки, которые выполняются при запуске команды
cmake --installили при создании пакета и последующей его установке. Префикс может быть изменён в любой момент, даже во время установки, вызовомcmake --install . --prefix /path/to/installation. Однако на этапе конфигурирования эта переменная используется для инициализации значений по умолчанию дляLOCALDATADIRиFULL_SHARE_DIR. Например, установка её в/my/customна этапе конфигурирования приведёт к тому, чтоLOCALDATADIRбудет жёстко задан как/my/custom/var/lib/manticore/data, аFULL_SHARE_DIRкак/my/custom/usr/share/manticore. - BUILD_TESTING (bool) нужна ли поддержка тестирования. Если включено, после сборки вы можете запустить 'ctest' и протестировать сборку. Обратите внимание, что тестирование подразумевает дополнительные зависимости, такие как наличие PHP cli, Python и доступного сервера MySQL с тестовой базой. По умолчанию этот параметр включён. Поэтому для 'просто сборки' вы можете отключить опцию, явно указав значение 'off'.
- BUILD_SRPMS (bool) показывать ли инструкции по сборке Source RPMs (SRPMs). Из-за ограничений CPack при компонентном упаковке SRPMs не могут быть сгенерированы напрямую вместе с бинарными RPM. При включении система сборки будет выводить инструкции по правильной генерации SRPM с использованием метода конфигурирования исходников. По умолчанию этот параметр выключен.
- LIBS_BUNDLE - путь к папке с различными библиотеками. Это в основном актуально для сборки в Windows, но может быть полезно и в других случаях, чтобы не загружать сторонние исходники каждый раз. По умолчанию этот путь не меняется скриптом конфигурации; вы должны вручную помещать всё туда. Когда, скажем, нужна поддержка стеммера, исходники будут загружены с сайта Snowball, затем распакованы, сконфигурированы, собраны и т.д. Вместо этого вы можете поместить оригинальный архив исходников (который имеет имя
libstemmer_c.tgz) в эту папку. В следующий раз при сборке с нуля скрипт конфигурации сначала проверит бандл, и если найдёт там стеммер, он не загрузит его снова из интернета. - CACHEB - путь к папке со сохранёнными сборками сторонних библиотек. Обычно такие компоненты, как galera, re2, icu и т.д., сначала загружаются или берутся из бандла, затем распаковываются, собираются и устанавливаются во временную внутреннюю папку. При сборке manticore эта папка затем используется как место, где располагаются необходимые для поддержки запрошенной функции элементы. В конце они либо линкуются с manticore (если это библиотека), либо идут прямо в дистрибутив/установку (например, galera или данные icu). Когда CACHEB задана либо как параметр конфигурации cmake, либо как переменная окружения, она используется в качестве целевой папки для этих сборок. Эту папку можно сохранять между сборками, чтобы расположенные там библиотеки больше не пересобирались, что значительно сокращает время всей сборки.
Обратите внимание, что некоторые опции организованы в тройки: WITH_XXX, DL_XXX и XXX_LIB — например, поддержка mysql, odbc и т.д. WITH_XXX определяет, будут ли действовать следующие две. Т.е., если вы установите WITH_ODBC в 0 — нет смысла указывать DL_ODBC и ODBC_LIB, и эти две опции не будут иметь эффекта, если вся функция отключена. Также XXX_LIB не имеет смысла без DL_XXX, потому что если вам не нужна опция DL_XXX, динамическая загрузка использоваться не будет, и имя, указанное в XXX_LIB, бесполезно. Это используется при интроспекции по умолчанию.
Также, использование библиотеки iconv предполагает наличие expat и бесполезно, если последний отключен.
Кроме того, некоторые библиотеки могут быть всегда доступны, и поэтому нет смысла избегать линковки с ними. Например, в Windows это ODBC. В macOS это Expat, iconv и, возможно, другие. Интроспекция по умолчанию определяет такие библиотеки и фактически выдает только WITH_XXX для них, без DL_XXX и XXX_LIB, что упрощает ситуацию.
При использовании некоторых опций конфигурация может выглядеть так:
mkdir build && cd build
cmake -DWITH_MYSQL=1 -DWITH_RE2=1 ..
Помимо общих значений конфигурации, вы также можете изучить файл CMakeCache.txt, который остается в папке сборки сразу после запуска конфигурации. Любые значения, определенные там, могут быть переопределены явно при запуске cmake. Например, вы можете запустить cmake -DHAVE_GETADDRINFO_A=FALSE ..., и эта конфигурация не будет использовать исследованное значение этой переменной, а будет использовать предоставленное вами.
Переменные окружения полезны для предоставления некоторых глобальных настроек, которые хранятся отдельно от конфигурации сборки и всегда присутствуют. Для постоянства их можно установить глобально в системе разными способами — например, добавив их в файл .bashrc, или встроив в Dockerfile, если вы создаете систему сборки на основе Docker, или записав их в переменные окружения системных настроек в Windows. Также вы можете установить их на короткое время, используя export VAR=value в оболочке. Или даже короче, добавив значения перед вызовом cmake, например, CACHEB=/my/cache cmake ... — таким образом, это будет работать только при этом вызове и не будет видно при следующем.
Некоторые из таких переменных, как известно, используются в целом cmake и некоторыми другими инструментами. Это такие вещи, как CXX, который определяет текущий компилятор C++, или CXX_FLAGS для предоставления флагов компилятора и т.д.
Однако у нас есть некоторые переменные, специфичные для конфигурации Manticore, которые были придуманы исключительно для наших сборок.
- CACHEB — то же, что опция конфигурации CACHEB
- LIBS_BUNDLE — то же, что опция конфигурации LIBS_BUNDLE
- DISTR — используется для инициализации опции
DISTR_BUILD, когда используется-DPACK=1. - DIAGNOSTIC — делает вывод конфигурации cmake гораздо более подробным, объясняя все происходящее
- WRITEB — предполагает LIBS_BUNDLE и, если установлено, будет загружать архивные файлы исходного кода для различных инструментов в папку LIBS_BUNDLE. То есть, если выходит новая версия стеммера — вы можете вручную удалить libstemmer_c.tgz из бандла, а затем запустить одноразовый
WRITEB=1 cmake ...— он не найдет исходники стеммера в бандле и затем загрузит их с сайта поставщика в бандл (без WRITEB он загрузит их во временную папку внутри сборки, и они исчезнут, когда вы очистите папку сборки).
В конце конфигурации вы можете увидеть, что доступно и будет использовано, в списке, подобном этому:
-- Enabled features compiled in:
* Galera, replication of tables
* re2, a regular expression library
* stemmer, stemming library (Snowball)
* icu, International Components for Unicode
* OpenSSL, for encrypted networking
* ZLIB, for compressed data and networking
* ODBC, for indexing MSSQL (windows) and generic ODBC sources with indexer
* EXPAT, for indexing xmlpipe sources with indexer
* Iconv, for support of different encodings when indexing xmlpipe sources with indexer
* MySQL, for indexing MySQL sources with indexer
* PostgreSQL, for indexing PostgreSQL sources with indexer
cmake --build . --config RelWithDebInfo
Для установки выполните:
cmake --install . --config RelWithDebInfo
чтобы установить в пользовательскую (не по умолчанию) папку, выполните
cmake --install . --prefix path/to/build --config RelWithDebInfo
Для сборки пакета используйте цель package. Она соберет пакет в соответствии с выбором, предоставленным опцией -DDISTR_BUILD. По умолчанию это будет простой архив .zip или .tgz со всеми бинарными файлами и дополнительными файлами.
cmake --build . --target package --config RelWithDebInfo
Если вы не меняли путь к исходникам и сборке, просто перейдите в папку сборки и выполните:
cmake .
cmake --build . --clean-first --config RelWithDebInfo
Если по какой-либо причине это не работает, вы можете удалить файл CMakeCache.txt, расположенный в папке сборки. После этого шага вам придется снова запустить cmake, указав папку с исходниками и настроив опции.
Если это тоже не помогает, просто очистите папку сборки и начните с нуля.
Кратко — просто используйте --config RelWithDebInfo, как написано выше. Это не даст ошибиться.
Мы используем два типа сборки. Для разработки это Debug — он назначает флаги компилятора для оптимизации и другие вещи таким образом, что это очень удобно для разработки, подразумевая отладку с пошаговым выполнением. Однако полученные бинарные файлы довольно большие и медленные для производства.
Для выпуска релизов мы используем другой тип — RelWithDebInfo — что означает 'сборка релиза с отладочной информацией'. Он производит бинарные файлы для производства со встроенной отладочной информацией. Последняя затем отделяется в отдельные пакеты debuginfo, которые хранятся отдельно от релизных пакетов и могут быть использованы в случае некоторых проблем, таких как сбои — для расследования и исправления ошибок. Cmake также предоставляет Release и MinSizeRel, но мы их не используем. Если тип сборки недоступен, cmake выполнит сборку noconfig.
Существует два типа генераторов: одноконфигурационные и многоконфигурационные.
- Одноконфигурационным требуется тип сборки, предоставленный во время конфигурации, через параметр
CMAKE_BUILD_TYPE. Если он не определен, сборка вернется к типуRelWithDebInfo, который подходит, если вы просто хотите собрать Manticore из исходников и не участвовать в разработке. Для явных сборок вы должны предоставить тип сборки, например,-DCMAKE_BUILD_TYPE=Debug. - Многоконфигурационный выбирает тип сборки во время сборки. Он должен быть предоставлен с опцией
--config, иначе он соберет что-то вродеnoconfig, что нежелательно. Поэтому вы всегда должны указывать тип сборки, например,--config Debug.
Если вы хотите указать тип сборки, но не хотите заботиться о том, является ли генератор 'single' или 'multi' config - просто укажите необходимые ключи в обоих местах. Т.е., настройте с помощью -DCMAKE_BUILD_TYPE=Debug, а затем соберите с --config Debug. Просто убедитесь, что оба значения одинаковы. Если целевой сборщик является single-config, он будет использовать параметр конфигурации. Если он multi-config, параметр конфигурации будет проигнорирован, но правильная конфигурация сборки будет выбрана с помощью ключа --config.
Если вам нужен RelWithDebInfo (т.е. просто сборка для продакшена) и вы знаете, что находитесь на платформе с single-config (это все, кроме Windows) - вы можете опустить флаг --config при вызове cmake. Тогда будет настроен и использован параметр по умолчанию CMAKE_BUILD_TYPE=RelWithDebInfo. Все команды для 'сборки', 'установки' и 'создания пакета' станут короче.
Cmake - это инструмент, который сам по себе не выполняет сборку, а генерирует правила для локальной системы сборки.
Обычно он хорошо определяет доступную систему сборки, но иногда вам может потребоваться явно указать генератор. Вы
можете запустить cmake -G и просмотреть список доступных генераторов.
- В Windows, если у вас установлено более одной версии Visual Studio, вам может потребоваться указать, какую из них использовать,
например:
cmake -G "Visual Studio 16 2019" .... - На всех других платформах - обычно используются Unix Makefiles, но вы можете указать другой, например, Ninja или Ninja Multi-Config, как:
Multi-Config`, как:
cmake -GNinja ...или
cmake -G"Ninja Multi-Config" ...Ninja Multi-Config довольно полезен, так как он действительно 'multi-config' и доступен на Linux/macOS/BSD. С этим генератором вы можете перенести выбор типа конфигурации на время сборки, а также вы можете собрать несколько конфигураций в одной и той же папке сборки, меняя только параметр
--config.
- Если вы в итоге хотите собрать полнофункциональный RPM-пакет, путь к директории сборки должен быть достаточно длинным, чтобы корректно собрать отладочные символы.
Например,
/manticore012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789. Это потому, что инструменты RPM изменяют путь в скомпилированных бинарниках при сборке отладочной информации, и они могут просто перезаписать существующее пространство, не выделяя дополнительного. Упомянутый длинный путь содержит 100 символов, и этого вполне достаточно для такого случая.
Некоторые библиотеки должны быть доступны, если вы хотите их использовать.
- Для индексации (инструмент
indexer):expat,iconv,mysql,odbc,postgresql. Без них можно обрабатывать только источникиtsvиcsv. - Для обработки запросов (демон
searchd): может потребоватьсяopenssl. - Для всего (обязательно, обязательно!) нам нужна библиотека Boost. Минимальная версия - 1.61.0, однако мы собираем бинарники с более свежей версией 1.75.0. Еще более новые версии (например, 1.76) также должны подойти. В Windows вы можете скачать предварительно собранный Boost с их сайта (boost.org) и установить его в предлагаемый по умолчанию путь (т.е.
C:\\boost...). В MacOs подойдет версия, предоставляемая в brew. В Linux вы можете проверить доступную версию в официальных репозиториях, и если она не соответствует требованиям, вы можете собрать из исходников. Нам нужен компонент 'context', вы также можете собрать компоненты 'system' и 'program_options', они понадобятся, если вы также захотите собрать библиотеку Galera из исходников. Загляните вdist/build_dockers/xxx/boost_175/Dockerfileдля краткой самодокументированной инструкции о том, как это сделать.
В системе сборки вам необходимо установить 'dev' или 'devel' версии этих пакетов (т.е. - libmysqlclient-devel, unixodbc-devel и т.д. Посмотрите в наших docker-файлах на названия конкретных пакетов).
В системах выполнения эти пакеты должны присутствовать хотя бы в финальных (не-dev) вариантах. (devel варианты обычно больше, так как включают не только целевые бинарники, но и различные инструменты для разработки, такие как заголовочные файлы и т.д.).
Помимо необходимых предварительных условий, вам могут понадобиться предварительно собранные клиентские библиотеки expat, iconv, mysql и postgresql. Вам придется либо собрать их самостоятельно, либо связаться с нами, чтобы получить наш набор для сборки (простой zip-архив, в котором находится папка с этими целями).
- ODBC не нужен, так как это системная библиотека.
- OpenSSL можно собрать из исходников или скачать предварительно собранный с https://slproweb.com/products/Win32OpenSSL.html (как упоминается во внутреннем скрипте cmake в FindOpenSSL).
- Boost можно скачать предварительно собранный с https://www.boost.org/ релизов.
Запустите indexer -h. Это покажет, какие функции были настроены и собраны (неважно, явно они указаны или обнаружены):
Built on Linux x86_64 by GNU 8.3.1 compiler.
Configured with these definitions: -DDISTR_BUILD=rhel8 -DUSE_SYSLOG=1 -DWITH_GALERA=1 -DWITH_RE2=1 -DWITH_RE2_FORCE_STATIC=1
-DWITH_STEMMER=1 -DWITH_STEMMER_FORCE_STATIC=1 -DWITH_ICU=1 -DWITH_ICU_FORCE_STATIC=1 -DWITH_SSL=1 -DWITH_ZLIB=1 -DWITH_ODBC=1 -DDL_ODBC=1
-DODBC_LIB=libodbc.so.2 -DWITH_EXPAT=1 -DDL_EXPAT=1 -DEXPAT_LIB=libexpat.so.1 -DWITH_ICONV=1 -DWITH_MYSQL=1 -DDL_MYSQL=1
-DMYSQL_LIB=libmariadb.so.3 -DWITH_POSTGRESQL=1 -DDL_POSTGRESQL=1 -DPOSTGRESQL_LIB=libpq.so.5 -DLOCALDATADIR=/var/lib/manticore/data
-DFULL_SHARE_DIR=/usr/share/manticore