Установка генератора тайлов Mapnik на Kubuntu, Debian
Первоначально опробовано на Kubuntu 13.10 + Python 2.7.5 (при написании статьи). В дальнейшем работало на Debian 8 + Python 2.7.9 с небольшими отличиями про которые я упомянул в статье.
При написании использовался как источник:
http://habrahabr.ru/post/144675/
Я постарался дополнить его информацией которая в нём отсутствует, полученной от собственного опыта установки Mapnik на домашнем компьютере.
А также http://vladimir-stupin.blogspot.com/2012/07/mapnik_29.html
без которого бы у меня не получилось распутать все хитросплетения описанные в первом источнике.
Указанные версии программного обеспечения (postgresql 9.1, postgis-1.5.4 и Python 2.7.5) использовались именно такими поскольку были актуальными для репозитория Kubuntu 13.10 на момент написания статьи. Я не сомневаюсь что всё будет работать и на более новых версиях, возможно с некоторыми изменениями.
Профессионалов и гуру прошу не ругать меня за содержание статьи. Она писалась новичком для новичков. И Вам здесь читать нечего.
Статья отражает мой собственный опыт установки и настройки мапника.
Ставим базу данных PostgreSQL:
$ sudo apt-get install postgresql
Ставим утилиту поиска файлов, которая нам далее очень пригодится:
$ sudo apt-get install findutils locate
Далее нам необходимо узнать расположение файла pg_hba.conf
$ sudo updatedb
$ locate pg_hba.conf
В моём случае он расположен в /etc/postgresql/9.1/main/pg_hba.conf
Открываем его в любом текстовом редакторе для правки:
$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf
Находим строку
local all all peer
и заменяем peer на password (для домашнего пользования не обязателен высокий уровень безопасности), сохраняем файл и выходим из редактора
Далее перезапускаем PostgreSQL:
$ sudo /etc/init.d/postgresql restart
Заменяем пароль пользователя postgres, созданного автоматически при установке PostgreSQL на свой собственный (чтобы не забыть :-)):
$ sudo passwd postgres
<мой_пароль>
<повторяем мой_пароль>
Заходим в консоль управления PostgreSQL и создаём пользователя и базу с доступом через обычный пароль :
$ su postgres
<мой_пароль>
$ psql
postgres=# CREATE ROLE osm WITH SUPERUSER PASSWORD 'мой_пароль' LOGIN;
CREATE ROLE
Обратите внимание на одинарные кавычки в которые взят пароль в них может скрываться ошибка при копировании со строки браузера. Наберите их вручную. Продолжаем:
postgres=# CREATE DATABASE osm;
CREATE DATABASE
postgres=# \q
Проверяем работоспособность нового пользователя:
$ psql -U osm -d osm -W
<мой_пароль>
osm=#
Если удачно вошли в консоль psql под пользователем osm, то всё в порядке. Снова выходим из консоли и из режима пользователя postgres:
osm=# \q
$ exit
Установка osm2pgsql:
Это пункт, выполняемый в одну команду:
$ sudo apt-get install osm2pgsql
Установка PostGIS из исходных кодов:
Этот раздел, связанный с установкой PostGIS из исходных кодов, требуется выполнять только если на компьютере отсутствуют файлы: postgis.sql или 900913.sql. Их можно найти с помощью утилиты locate:
$ sudo updatedb
$ locate postgis.sql
$ locate 900913.sql
Проверяем наличие этих файлов на компьютере. Если они есть - пропускаем этот пункт. Если их нет - устанавливаем postgis из исходных кодов. Версия postgis не обязательно должна быть 1.5.4, подойдёт и более новая, но та где имеются два указанных выше скрипта.
Собственно PostGIS уже установилась когда мы ставили osm2pgsql. Но та версия нам категорически не подходит. Не подходит она по причине отсутствия в ней скриптов postgis.sql и 900913.sql. Как не хотелось этого делать, но эту программу пришлось компилировать из исходных кодов. Иначе нельзя. Потому как в родных репозиториях (Kubuntu 13.10) недостаёт нужных нам файлов. Скачиваем программу с помощью wget и распаковываем с помощью tar:
$ wget http://postgis.refractions.net/download/postgis-1.5.4.tar.gz
$ tar xvfz ./postgis-1.5.4.tar.gz
Переходим в папку с исходниками и конфигурируем их. Это самое нудное занятие, поскольку приходится ставить отсутствующие в системе пакеты в ответ на возникающие при конфигурировании ошибки. Это пакеты «development» с приставкой -dev. На моей системе это были пакеты: libpq-dev, postgresql-server-dev-9.1, libxml2-dev, libgeos-dev, libproj-dev.
Итак переходим в папку со скачанной и распакованной postgis:
$ cd postgis-1.5.4
Запускаем конфигурирование:
$ sudo ./configure
К сожалению этот пункт самый сложный для выполнения новичками. Придётся фактически догадываться как называется недостающий пакет. Читаем ошибки возникающие при конфигурировании, ищем приблизительное название недостающего пакета. Открываем менеджер пакетов (в моей Debian это Apper), вводим приблизительное название недостающего пакета, осуществляем его поиск среди всех доступных для скачивания пакетов. Пробегаем глазами по названиям пакетов в результатах поиска. Ищем пакет максимально похожий по названию на искомый пакет, но при этом с приставкой (окончанием) -dev. Устанавливаем этот пакет. Повторяем попытку конфигурации, снова читаем сообщения об ошибках, ищем следующий недостающий пакет. И так далее. Я как новичок не знаю другого способа.
Если добились PostGIS is now configured for... то:
$ sudo make install
Выполнение скриптов postgis.sql и 900913.sql:
Подразумевается что PostGIS уже установлен в системе на этапе установки osm2pgsql и в системе имеются postgis.sql и 900913.sql.
Устанавливаем специальный язык в базу osm:
$ createlang plpgsql osm -U osm -W
С помощью locate находим два файла postgis.sql и 900913.sql
У меня они находятся по адресу:
/usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql
и
/usr/share/osm2pgsql/900913.sql
Не забываем перед поиском выполнить $ sudo updatedb Далее выполняем от пользователя postgres:
$ su postgres
<мой_пароль>
$ psql -U osm -d osm -W -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql
$ psql -U osm -d osm -W -f /usr/share/osm2pgsql/900913.sql
Если выдаёт ошибки типа ERROR: type «geometry» does not exist выполните $ sudo ldconfig и снова повторите выполнение файлов. Если выдаёт что-то типа ERROR: current transaction is aborted, проверте наличие пакета postgresql-9.1-postgis-1.5 или аналогичного для более новых версий приложений
Выходим из под пользователя postgres:
$ exit
$ cd ..