воскресенье, 11 октября 2020 г.

Пересборка ClickHouse для процессоров без поддержки SSE 4.2

В официальных репозиториях Debian Buster появились пакеты с сервером и клиентом Clickhouse. По умолчанию сервер Clickhouse собран с использованием процессорных инструкций SSE 4.2, т.к. именно такие системные требования указаны на официальной странице проекта.

Для проверки, поддерживает ли процессор SSE 4.2, можно воспользоваться следующей командой:
$ grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
При попытке запустить сервер ClickHouse на процессоре, не поддерживающем этот набор инструкций, в журнале /var/log/messages можно будет обнаружить сообщения следующего вида:
Aug  9 18:33:45 buster kernel: [    7.571795] traps: clickhouse-serv[257] trap invalid opcode ip:7f89f23 sp:7ffda2789a98 error:0 in clickhouse[400000+f8a5000]
Мой домашний компьютер не отличается новизной, поэтому для экспериментов дома мне пришлось пересобрать пакеты с Clickhouse. Сборочные скрипты автоматически определяют поддержку инструкций SSE 4.2 и при её отсутствии выполняют сборку так, чтобы пакеты работали без них.

Впишем в файл /etc/apt/sources.list дополнительные репозитории с исходными текстами:
deb-src http://mirror.yandex.ru/debian/ buster main contrib non-free
deb-src http://mirror.yandex.ru/debian/ buster-updates main contrib non-free
deb-src http://mirror.yandex.ru/debian/ buster-proposed-updates main contrib non-free
deb-src http://mirror.yandex.ru/debian-security/ buster/updates main contrib non-free
Обновим список пакетов, доступных через репозитории:
# apt-get update
Установим пакеты, которые потребуются нам для сборки ClickHouse из исходных текстов:
# apt-get build-dep clickhouse
И скачаем пакет с исходными текстами:
$ apt-get source clickhouse
Переходим в каталог с распакованными исходными текстами, запускаем dch и описываем изменения.
$ cd clickhouse-18.16.1+ds
$ dch -i
В открывшемся редакторе дописываем к номеру версии fix1 и описываем изменения:
clickhouse (18.16.1+ds-4fix1) UNRELEASED; urgency=medium

  * Version with no need CPU with support SSE4.2 instruction set..

 -- Vladimir Stupin <vladimir@stupin.su>  Tue, 14 Jan 2020 11:28:11 +0500
Собираем пакет:
$ debuild -us -uc
Для сборки потребуется довольно много оперативной памяти. Я пытался собрать пакет на виртуальной машине с 2 гигабайтами оперативной памяти, потом увеличил до 3 и до 4, но этого объёма оказывалось по-прежнему недостаточно для того, чтобы собрать библиотеку libclickhouse.so из объектных файлов. Вернул виртуальной машине 2 гигабайта оперативной памяти и подключил раздел подкачки размером 8 гигабайт. Сборка шла долго, но всё-таки завершилась успешно.

Если сборка завершается неудачно, а в тексте ошибки имеются такие строки:
CMake Error: Error: generator : Unix Makefiles
Does not match the generator used previously: Ninja
Either remove the CMakeCache.txt file and CMakeFiles directory or choose a different binary directory.
То можно попробовать удалить пакет ninja-build:
# apt-get purge ninja-build
Затем можно попробовать запустить сборку пакета снова.

После успешной сборки можно будет выйти из сборочного каталога и установить появившиеся рядом с ним двоичные пакеты:
# dpkg -i clickhouse-server_18.16.1+ds-4fix1_amd64.deb clickhouse-client_18.16.1+ds-4fix1_amd64.deb clickhouse-common_18.16.1+ds-4fix1_amd64.deb
Или можно воспользоваться утилитой aptly, чтобы создать собственный репозиторий и поместить в него эти пакеты. В таком случае для установки пакетов в систему будет достаточно:
  1. подключить этот репозиторий в файле /etc/apt/sources.list,
  2. обновить список пакетов, доступных через репозитории, командой apt-get update,
  3. поставить пакеты, например, командой apt-get install clickhouse-server clickhouse-client

3 комментария:

Ильдар комментирует...

Здравствуйте! Устанавливаю по инструкции и после фразы apt-get build-dep clickhouse
выдает ошибку

Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
builddeps:clickhouse : Depends: python-requests but it is not installable
Depends: python-termcolor but it is not installable
E: Unable to correct problems, you have held broken packages.

Установка пакетов apt-get python-requests и apt-get python-termcolor не дает никаких результатов:

Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package python-requests

В чем может быть дело?

Анонимный комментирует...

Спаисбо за команду с Ninja - помогло!

Анонимный комментирует...

Через pip установить.