Особенности установки MongoDB под Solaris 11.1

Для Solaris уже есть готовые пакеты, которые можно скачать отсюда. После скачивания, создаём отдельную zfs для /opt/mongodb и распаковываем архив соответственно в /opt/mongodb. На самом деле, в архиве кроме бинарников mongodb и README — ничего нет. Остальное придёться создать самому. Создаём дополнительно такие папки (в корне папки /opt/mongodb): etc (для конфига), log (для логов), data (для баз), mongo-extra-64 (для дополнительных библиотек).

MongoDB требует специальную обновлённую либу libstdc++, поэтому её придёться скачать отдельно отсюда.  Если этого не сделать, то в момент запуска можем получить такое сообщение (и mongodb не запуститься):

ld.so.1: mongod: fatal: relocation error: file /opt/mongodb/bin/mongod: symbol _ZNSt8__detail15_List_node_base7_M_hookEPS0_: referenced symbol not found

На момент написания версии последняя была libstdc++6-4.8.0,REV=2013.04.15-SunOS5.10-i386-CSW.pkg.gz :

# wget http://mirror.opencsw.org/opencsw/allpkgs/libstdc%2b%2b6-4.8.0%2cREV%3d2013.04.15-SunOS5.10-i386-CSW.pkg.gz
# gunzip libstdc++6-4.8.0,REV=2013.04.15-SunOS5.10-i386-CSW.pkg.gz

Конвертируем пакет в системный формат:

# pkgtrans libstdc++6-4.8.0,REV=2013.04.15-SunOS5.10-i386-CSW.pkg /tmp

Появится уведомление

The following packages are available:
  1  CSWlibstdc++6     libstdc++6 - The GNU Compiler Collection, libstdc++.so.6 (i386) 4.8.0,REV=2013.04.15

  Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:

просто нажмите Enter
Скопируйте полученную библиотеку в папку /opt/mongodb/mongo-extra-64 :

# cp /tmp/CSWlibstdc++6/root/opt/csw/lib/amd64/libstdc++.so.6.0.18 /opt/mongodb/mongo-extra-64

Примечание.

1) В новых версиях возможно потребуется ещё одна либа libgcc_s.so.1, которую можно скачать оттуда же, что и предыдущую, так же распаковать и прописать в конфиге в LD_PRELOAD.

2) Ещё нужно будет сделать симлинк libstdc++.so.6.0.18 -> libstdc++.so.6, ибо бинарник ищет именно libstdc++.so.6, и соответственно подгружать libstdc++.so.6

Добавим юзера, группу от которого будет работать mongodb:

# groupadd mongodb
# useradd -g mongodb -d /opt/mongodb mongodb
# chown -R mongodb:mongodb /opt/mongodb

Создадим конфигурационный файл (/opt/mongodb/etc/mongodb.conf):

fork = true
quiet = true
logpath = /opt/mongodb/log/mongod.log
logappend = true
rest = true
bind_ip = 192.168.1.1
dbpath = /opt/mongodb/data
directoryperdb = true

Создадим стартовый скрипт, который будет подгружать нужную либу libstdc++, вместо базовой системной (/opt/mongodb/bin/mongodb-start)

#!/usr/bin/bash
su - mongodb -c "export LD_PRELOAD_64=/opt/mongodb/mongo-extra-64/libstdc++.so.6.0.18:/lib/amd64/libumem.so ; export LC_ALL=C ; /opt/mongodb/bin/mongod -f /opt/mongodb/etc/mongodb.conf"

# chmod +x /opt/mongodb/bin/mongodb-start

Осталось создать SMF скрипт для запуска. В Solaris 11.1 это сделать очень просто:

# svcbundle -i -s service-name=application/mongodb -s model=daemon -s start-method="/opt/mongodb/bin/mongodb-start"
# svcs | grep mongodb
online 18:25:08 svc:/application/mongodb:default

Особенности установки MongoDB под Solaris 11.1: 1 комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *