me.neoascetic

Установка Geocouch на Debian

Наиболее удобный (imho) способ установки geospatial-расширения Geocouch для CouchDB на Debian без захламливания системы зависимостями.

Много и долго пытался установить Geocouch на Debian, потому как пакеты в репе были только для CouchDB. Скомпилированный Couch работал на ура, а вот с Geocouch чего-то не хотел (возможно, потому что я использовал не стабильные версии, а транк), а в трейсе ошибок Er[r]langa черт ногу сломит. Я, во всяком случае, сломил.

После продолжительных поисков нашёл этот репозиторий. Удобство его заключается в том, что все зависимости он компилит самостоятельно, плюс может автоматом компилировать и любые плагины, которые могут храниться и в git-репозитории. Из недостатков большее время компиляции (Erlang/OTP без некоторых модулей, SpiderMonkey, libicu и что-то ещё), но оно не идёт ни в какое сравнение с временем, которое убил, пытаясь собрать все самостоятельно. На самом деле, есть возможность указать пути к готовым - установленным через пакетный менеджер, например - библиотекам и исполняемым файлам, но я не стал этим заниматься.

В ридми проекта уже все написано, в принципе, но повторю здесь на русском, благо что много плясать с бубном не надо. Все - для Debian-based систем, для остальных смотрим ридми.

# установим софт необходимый для компиляции:
sudo apt-get install make gcc zlib1g-dev libssl-dev rake
# клонируем реп
git clone git://github.com/iriscouch/build-couchdb
cd build-couchdb
# подтягиваем субмодули (зависимости)
git submodule init
git submodule update

Далее можно запускать компиляцию, выполнив rake, но нам необходима главным образом поддержка Geocouch, поэтому в качестве параметра plugin указываем путь к репозиторию Geocouch с необходимой веткой. Как сказано в ридми у Geocouch, его ветка master работает с веткой master CouchDB из репозитория Couchbase, а ветки 1.1.x, 1.2.x с соответствующими версиями CouchDB от Apache. Так как по умолчанию (на момент написания) используется версия 1.2.0, указываем соответствующую ветку.

Используем параметр install для указания директории, куда будет установлена CouchDB. Так как собранный софт будет вполне себе самодостаточным, я решил установить его в /opt/couchdb.

# вместо sudo можно просто сделать /opt/couchdb writeable для юзера
sudo rake plugin="git://github.com/couchbase/geocouch origin/couchdb1.2.x" install="/opt/couchdb"

По завершении в целевой директории будет весь набор необходимых файлов, но необходимо сделать ещё некоторые действия.

# создаем системного пользователя, от имени которого будет работать СУБД
sudo adduser --system --home /opt/couchdb/var/lib/couchdb --no-create-home --group couchdb
# меняем хозяина
sudo chown couchdb:couchdb -R /opt/couchdb
# опционально - делаем линк в /etc/init.d, дабы CouchDB можно было управлять, используя команду service
cd /etc/init.d
sudo ln -s /opt/couchdb/etc/init.d/couchdb .

Теперь - важный момент. Необходимо указать интерпретатору Erlang, где искать бинарники Geocouch. Делается это через переменную окружения ERL_FLAGS, которую нужно экспортировать перед запуском CouchDB. Не мудрствуя лукаво, я запихнул следующее выражение в /opt/couchdb/etc/init.d/couchdb:

# /opt/couchdb/etc/init.d/couchdb
export ERL_FLAGS="-pa /opt/couchdb/lib/couchdb/plugins/geocouch/ebin/"

Делаем рестарт базы, curl http://127.0.0.1:5984 - получаем {"couchdb":"Welcome","version":"1.2.0"}

Все работает, все довольны.