четверг, 6 августа 2015 г.

сборка couchbase

что нужно:
https://github.com/couchbase/tlm
Смотрим, ничего не понимаем, ужасаемся, читаем эту заметку.
Предварительно подключаем epel для centos.



гуглосинкер (repo)
http://source.android.com/source/initializing.html
http://source.android.com/source/downloading.html
Нужен, чтобы собрать всю эту кашу реп в подобие цельного решения, и чтобы это всё потом смогло собраться.

Самый простой вариант:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

тут выбрать нужную ветку
https://github.com/couchbase/manifest
4.x == sherlock, 4.5 == watson
при этом в released/ будут конкретные сборки

Также нужно доставить пакеты, как минимум make, cmake

Имеет смысл подготовить lsb_release, без него устанавливать зависимости - та ещё морока.
yum provides "*/lsb_release"
и как вариант
yum install redhat-lsb-core
(просто redhat-lsb поставит сотню пакетов, включая графику, что на сервере совсем не нужно)
Если уже запускали make - чистимся. rm -rf build или просто make clean уровнем выше build-а.

Если хочется самому возиться с версиями, ещё ставим
curl-devel, openssl-devel, libevent, libicu-devel, icu, snappy-devel.x86_64, v8-devel, golang, gperftools-libs.x86_64 (для 3- ветки, в 4 используется jemalloc)... Дальше был поднят lsb, он сам всё стянул.

Также были доставлены gcc 4.9 и python 2.7.
Активированы.

Дальше примерно так
$ mkdir couchbase
$ cd couchbase
$ repo init -u git://github.com/couchbase/manifest.git -m <branch_name>
в том числе именем бранча может быть released/4.1.1.xml
$ repo sync

$ make PREFIX=/opt/couchbase
или так, как пример кастомизации
make PREFIX=/opt/couchbase CMAKE_PREFIX_PATH="/opt/couchbase" EXTRA_CMAKE_OPTIONS='-D PRODUCT_VERSION="4.1.1-1"'
впрочем, PRODUCT_VERSION и так выносится на уровень PREFIX.

Как раз тот случай, когда компилировать и собирать нужно на отдельном сервере, от просто юзера, чтобы не словить потом на свою Ж проблем. Попытка сборки данного "поделия" выливается в массу радостей, примеры:

  • - хародкодед-пути. 

grep -rl "/home/builder/couchbase/" install/|wc -l
510

  • - невозможность сделать изолированный build dir, так как еще на стадии билда оно в PREFIX пишет вспомогательные утилиты
  • - make в корне одновременно делает и make install, молча и без спроса
  • - рекомендованный рецепт "cd build && cmake -D (...) .. && make" - просто не рабочий, так как после repo sync или make clean просто нет никакого build, а его сборка простым make даст все радости выше
  • - на любой чих крайне рекомендуется делать в корне make clean, иначе потом получается каша версий и настроек, плюс очищать каталог, который будет задан в PREFIX.


Как итог - компилируем через простой make в /opt/couchbase, выцепляем из старого пакета couchbase-init.d, всякие pre и post скрипты, также можно bin/install взять из готовой сборки. Тарим /opt/couchbase. Далее пишем спек, который просто распакует тар, добавит инит скрипт, сделает пре и пост стадии, пропишет файлы в систему. Всё.

pre и post выцепляется из готового пакета так:
$ rpm -q --scripts -p couchbase-server*.rpm

Ошибки


Для centos 6 будет ошибка
$ repo init
fatal: git 1.7.2 or later required
потому что штатно идёт 1.7.1, нужно обновить, например из rpmforge, оно же
http://pkgs.repoforge.org/git/
Если качать руками, то надо качать и ставить пакеты git perl-YAML subversion-perl perl-Git subversion


Может выпадать ошибка
-- Found v8 in /usr/include : /usr/lib64/libv8.so
CMake Error at tlm/cmake/Modules/FindCouchbaseV8.cmake:45 (MESSAGE):
  Failed to build and run program to check V8 version (exit code )
Call Stack (most recent call first):
  CMakeLists.txt:60 (INCLUDE)

Попробовать собрать более старую версию кауча или обновлять V8

Для сборки 4 ветки кауча вероятно требуется gcc >= 4.9 (проверить)


Если делать make test, то могут быть failed тесты, тогда поможет cd build/couchdb; ctest --verbose (для начала пересобрать всё с нуля при активированном python 2.7)


extracting debug info from /home/builder/rpmbuild/BUILDROOT/ringme-couchbase-server-4.1.1-1.el6.x86_64/opt/couchbase/bin/generate_cert
/usr/lib/rpm/debugedit: /home/builder/rpmbuild/BUILDROOT/ringme-couchbase-server-4.1.1-1.el6.x86_64/opt/couchbase/bin/generate_cert: Unknown debugging section .debug_gdb_scripts
*** ERROR: No build ID note found in /home/builder/rpmbuild/BUILDROOT/ringme-couchbase-server-4.1.1-1.el6.x86_64/opt/couchbase/bin/generate_cert

Комментариев нет:

Отправить комментарий