Для 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”
Установили? Можете оптимизировать: http://plutov.by/post/mongodb_counters