Компиляция PostgreSQL + PostGIS + WKT Raster в Windows

PostGIS в какой-то степени является свободной альтернативой ArcSDE, но до недавнего времени ему не хватало функционала для работы с растровыми данными. Не так давно начались работы над WKT Raster — расширением, обеспечивающим поддержку растровых данных. Возможно, в ближайшем будущем PostGIS сможет предоставить своим пользователям функционал, сравнимый с ArcSDE.

На ГИС-Лабе возникла идея провести сравнение скорости загрузки большого растра в ArcSDE и PostGIS. Так как готовых бинарных сборок WTK Raster на сегодняшний день не существует, прежде чем проводить тестирование нужно собрать и настроить связку PostgreSQL + PostGIS + WKT Raster.

Подготовка

При описании действий предполагается, что MinGW и MSYS установлены в каталоги, предлагаемые по умолчанию (C:\MinGW и C:\MSYS\1.0 соответственно), а исходные тексты располагаются на диске D:\ в подкаталогах папки src (например, D:\src\libtool-2.2).

Установка MinGW

MinGW (Minimalist GNU for Windows, бывший mingw32) — порт компилятора GNU Compiler Collection (GCC) для Microsoft Windows включающий набор свободных библиотек и заголовочных файлов для Windows API. MinGW позволят разработчикам создавать приложения Microsoft Windows. В MinGW включены расширения для Microsoft Visual C++ runtime library поддерживающие C99 (современный диалект C).

Скачайте MinGW Installer (на момент написания поста актуальная версия 5.1.4). Не удивляетесь малому размеру полученного файла — это онлайн-установщик, размер полной установки составит около 170 Мб.

  1. запустите установку
  2. выберите пункт «Download and Install»
  3. когда дойдете до выбора компонент — выбирайте все, кроме Ады. Хотя Аду тоже можно установить, вреда не будет

Устанавливать лучше в каталог предлагаемый по умолчанию (C:\MinGW). В дальнейшем будем предполагать, что MinGW установлен именно так.

Установка MSYS

MSYS (Minimal SYStem). Предоставляет пользователю POSIX-совместимую среду и набор консольных утилит, использующихся при сборке UNIX-программ. Изначально MSYS была разработана чтобы сделать возможным выполнение скриптов конфигурации и сборки (Makefiles), используемых при компиляции ПО с открытым кодом. Позже многие стали использовать ее как альтернативу интерфейсу командной строки Windows cmd.exe.

MSYS

Загрузить Msys Installer можно здесь.

  1. запускаем установку и следуем указаниям мастера
  2. каталог назначения (C:\msys\1.0) оставляем без изменений
  3. после установки появится окно с предложением провести послеустановочную настройку — соглашаемся
  4. на вопрос о наличии MinGW отвечаем положительно
  5. указываем каталог MinGW (если вы не меняли предлагаемые по умолчанию пути, пишите c:/mingw)

MSYS DTK

Далее скачиваем и устанавливаем стабильную сборку MSYS Development Toolkit. Установка не должна вызвать вопросов, просто следуем указаниям мастера.

MSYS Core

Кроме того, нужно скачать пакет MSYS Core 1.0.11. Архив распаковываем в C:\msys\1.0 с заменой файлов.

Дополнительные пакеты GnuWin32

Полный перечень пакетов можно посмотреть на странице gnuwin32.sourceforge.net/packages.html. Нам же для успешной компиляции необходимо скачать и установить только:

  • bison — парсер-генератор общего назначения, конвертирующий аннотированное контекстно-независимое описание в LALR- или GLR-парсер этого описания. Bison может использоваться для широкого круга языковых парсеров, начиная с простых для настольных калькуляторов и заканчивая языками программирования;
  • zlib — свободнораспространяемая, zip-совместимая библиотека компрессии общего назначения;
  • flex — быстрый лексический анализатор-генератор. Flex является инструментом для разработки программ осуществляющих поиск по шаблонам текста. Существует множество применений Flex, включая написание компиляторов совместно с Bison;
  • gettext — набор инструментов для облегчения интернационализации приложений;
  • libiconv — библиотека обеспечивающая конвертацию текстов в различные кодировки.

При установке этих пакетов в качестве каталога назначения указываем C:\MinGW.

Пару слов про libiconv

Aвторы англоязычной инструкции по компиляции PostGIS рекомендуют не ставить бинарный пакет, а собирать libiconv из исходников. Однако никаких проблем при использовании бинарного пакета я не заметил. Если есть желание — можете скачать исходники этой библиотеки (я брал версию 1.13.1), распаковать во временную папку (например, D:\src\libiconv-1.13.1) и собрать ее самостоятельно. Для этого:

  1. открываем консоль MSYS используя ярлык на рабочем столе или пункт в меню «Пуск»
  2. последовательно вводим команды, завершая каждую из них нажатием клавиши Enter
    cd /d/src/libiconv-1.13.1
    ./configure --prefix=/c/mingw && make && make install
    

Макропроцессор m4

Как показала практика, макропроцессор из состава MSYS довольно старый. Для успешной сборки его необходимо обновить. Поэтому скачиваем m4-1.4.7-MSYS.tar.bz2, распаковываем архив в папку исходников и копируем файл m4.exe в C:\msys\1.0\bin.

Переменные окружения

Чтобы командный интерпретатор знал где искать инструменты из состава MinGW и/или GnuWin32, необходимо обновить переменные окружения. Процедура эта не обязательная и направлена исключительно на повышение удобства работы.

  1. щёлкните правой кнопкой мыши по значку «Мой компьютер» и выберите «Свойства»
  2. откройте вкладку «Дополнительно», нажмите кнопку «Переменные среды»
  3. в списке «Системные переменные» найдите строку PATH и двойным щелчком на ней начните редактирование
  4. появится диалоговое окошко с двумя поля ввода, в нижнем поле содержится значение переменной. Будьте осторожны, не удаляйте существующие записи. Перейдите в конец строки и добавьте ;C:\MinGW\bin. Не забудьте начальную точку с запятой — она там не для красоты стоит. После окончания редактирования нажмите OK
  5. создайте переменную HOME. Для этого нажмите на кнопку «Создать», в верхнее поле введите HOME, а в нижнее — C:\msys\1.0\home
  6. закройте все окна последовательно нажимая OK

Пакет autotools

Широко используется разработчиками и включает в себя autoconf, automake и libtool. Выкачиваем исходники с сервера gnu.org

Архивы распаковываем в каталог исходных текстов, каждый в отдельную папку. Запускаем консоль MSYS, если она еще не запущена, и по очереди собираем

cd /d/src/autoconf-2.63
configure --prefix=/c/mingw && make && make install
cd /d/src/automake-1.9
configure --prefix=/c/mingw && make && make install
cd /d/src/libtool-2.2
configure --prefix=/c/mingw && make && make install

Компиляция

Подготовка окончена, приступаем к тому, ради чего все это затевалось — сборке PostgreSQL и пространственных расширений. Сначала компилируется PostgreSQL, затем PostGIS и WKT Raster.

Собираем PostgeSQL

Скачиваем исходные тексты последней стабильной версии PostgreSQL с http://www.postgresql.org/ftp/source/. Распаковав архив в D:\src\postrgesql, обнаружим в нем три папки: backend, postgresql-8.3.7 и src. Для успешной компиляции необходимо из папки D:\src\postgresql\backend\utils\mb\conversion_procs\euc_jis_2004_and_shift_jis_2004\ перенести единственный лежащий там файл в D:\src\postgresql\postgresql-8.3.7\src\backend\utils\mb\conversion_procs\euc_jis_2004_and_shift_jis_2004\. Таким же образом поступаем и с папкой src: переносим файлы из D:\src\postgresql\src\backend\utils\mb\conversion_procs\utf8_and_shift_jis_2004\ в D:\src\postgresql\postgresql-8.3.7\src\backend\utils\mb\conversion_procs\utf8_and_shift_jis_2004\. Теперь можно компилировать. Запускаем MSYS и выполняем

cd /d/src/postgresql/postgresql-8.3.7
./configure --prefix=/c/postgres && make && make install

По окончанию процесса PostgreSQL будет находиться в C:\postgres.

Собираем GEOS

GEOS (Geometry Engine — Open Source) — порт на язык C++ пакета топологии Java — Java Topology Suite (JTS). GEOS предоставляет доступ к функциональности JTS с помощью C++. Это включает пространственные функции операторы определенные спецификацией OpenGIS Simple Features для SQL, а также специфические функции работы с топологией JTS.

Скачиваем последнюю версию GEOS с сервера trac.osgeo.org/geos/, и разворачиваем архив в каталог исходных текстов. В консоли MSYS переходим в созданный каталог и выполняем

cd /d/src/geos-3.1.0
configure --prefix=/c/postgres && make && make install

При желании можно удалить отладочную информацию из скомпилированной библиотеки командой

strip /c/postgres/bin/libgeos-3-1-1.dll

Собираем Proj

Proj — свободная библиотека и набор инструментов, являющихся де-факто стандартом в области трансформации координат и проекционных преобразований.

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

cd /d/src/proj-4.6.1
configure --prefix=/c/postgres && make && make install

Собираем PostGIS

Компилировать будем версию из svn, графическую оболочку для shp2pgsql собирать не будем. Загружаем архив PostGIS-1.4.0SVN.tar.gz, распаковываем его содержимое в каталог исходных текстов, открываем консоль MSYS и выполняем

cd /d/src/postgis-1.4.0SVN
configure \
  --prefix=/c/postgres \
  --with-pgconfig=/c/postgres/bin/pg_config \
  --with-geosconfig=/c/postgres/bin/geos-config \
  --with-projdir=/c/postgres
make && make install

Собираем WKT Raster

Скачиваем архив с последней svn версией, распаковываем в D:\src\wktraster-0.1.6SVN, открываем окно MSYS и выполняем

cd /d/src/wktraster-0.1.6SVN
./configure \
  --with-postgis-sources=/d/src/postgis-1.4.0SVN \
  --with-pgconfig=/c/postgres/bin/pg_config \
  --with-geosconfig=/c/postgres/bin/geos-config
make && make install

Настройка и использование

Самое сложное позади, осталось скопировать все dll файлы из папки C:\postgres\lib в C:\postgres\bin, добавить C:\postgres\bin в переменную PATH и можно приступать к настройке сервера.

Прежде всего необходимо создать пользователя, от имени которого будет стартовать сервер PostgreSQL. Правой кнопкой мыши щелкаем по значку «Мой компьютер», выбираем «Управление», открываем раздел «Служебные программы → Локальные пользователи и группы → Пользователи». Создаем пользователя postgres и задаем ему пароль.

Открываем командную строку Windows «Пуск → Выполнить» в окне вводим текст

runas /user:postgres cmd.exe

и дальнейшие действия выполняем в открывшемся окне консоли.

rem инициализируем каталог баз данных (кодировку и путь указывайте по своему усмотрению)
initdb -E win1251 -D:\pg_data
rem запускаем сервер, после старта он откроется в отдельном окне
postmaster -D:\pg_data
rem оздаем базу данных postgis
createdb -U postgres postgis
rem включаем поддержку процедурного языка PL/pgSQL
createlang plpgsql -U postgres -D:\pg_data
rem загружаем функции и объекты, необходимые для работы с пространственными данными
createlang plpgsql -U postgres -D:\pg_data
rem загружаем описания систем координат
psql -а c:\postgres\share\contrib\spatial_ref_sys.sql -U postgres -d postgis
rem загружаем функции и объекты, необходимые для работы растровыми данными
psql -а c:\postgres\share\contrib\rtpostgis.sql -U postgres -d postgis

Остановить сервер можно выполнив от имени пользователя postgres

pg_ctl.exe stop -D D:\pg_data

При желании можно настроить запуск сервера в качестве службы. Для этого:

  1. останавливаем сервер, если он запущен
    pg_ctl.exe stop -D D:\pg_data
  2. регистрируем службу
    pg_ctl.exe register -N "PostgreSQL_8.3.7" -U postgres -D:\pg_data
  3. правой кнопкой мыши щелкаем по значку «Мой компьютер», выбираем «Управление», открываем раздел «Службы и приложения → Службы», двойным кликом по названию только что созданной службы открываем ее свойства, закладка «Вход в систему»
  4. задаем имя пользователя .\postgres
  5. в окне ввода пароля указываем правильный пароль, жмем «Применить»
  6. получаем сообщение, что пользователю postgres разрешен вход в качестве службы, закрываем окно свойств и стартуем службу

Созданная в процессе сборки среда MSYS/MinGW может использоваться и в дальнейшем, например, при обновлении или для сборки другого ПО. Если же вы не планируете еще что-либо собирать или обновляться по мере выхода новых версий — можно смело удалить каталоги D:\src, c:\MinGW и C:\MSYS, для функционирования собранных нами компонент они уже не нужны.

Дополнительные материалы

Мітки:

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

*