Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2013-03-18

64 vs 32

Страшная история

Кто бы мог подумать, что настроить совместную работу ArcGIS 10.1 с БД PostgreSQL будет так непросто. Времени ушло несколько часов, почти весь рабочий день.
Не так давно я уже рассказывал про грабли, разложенные на пути тех, кто хочет связку ArcGIS 10 + PostgreSQL, но то были цветочки. Теперь ESRI продает новую версию АркГИС — 10.1, в ней очень много изменений, даже по сравнению с 10.

Короче, ближе к телу. Мне понадобился ArcGIS Server 10.1 и БД обеспечивающая функциональность Feature Service. В качестве БД я выбрал PostgreSQL.
ArcGIS Server нынче существует только в версии x64, поэтому связка получилась такая
MS Windows 2008 x64; PostgreSQL 9.0.12 x64; ArcGIS Server 10.1 x64 + Web Adapter + SP1.
Все 64-битные.
Поставил эту троицу, читаю инструкцию по установке SDE. Там написано:

Before you install
You must install a database and create a geodatabase in it before you set up an ArcSDE service. Use the Create Enterprise Geodatabase geoprocessing tool, the Enable Enterprise Geodatabase geoprocessing tool, or a Python script to create a geodatabase before installing the application server and setting up a service. See the ArcGIS for Server or ArcGIS for Desktop documentation for instructions on creating a geodatabase.

Я это понял так, что перед установкой SDE мне надо «создать геодатабазу» внутри PostgreSQL. Для этого нужен либо ArcGIS Desktop либо некий скрипт Python. Поскольку мне понадобится потом ArcCatalog по любому, я решил, что следующий шаг будет — установка ArcGIS for Desktop.

ОК, установил ArcGIS Desktop, запустил ArcCatalog, нашел Toolbox tool «Create Enterprise Geodatabase».
Запускаю...
облом с сообщением типа:

Executing: CreateEnterpriseGeodatabase PostgreSQL localhost postgisdb DATABASE_AUTH postgres ***** SDE_SCHEMA sde ***** sdetabspace C:\ags101.ecp
error: Cannot connect to database because the database client software failed to load. Be sure the database client software is installed and configured correctly.
Failed to execute (CreateEnterpriseGeodatabase).

ArcCatalog не хватает библиотек для работы с PostgreSQL. Недолгое гугление выдало следующие статьи

Требования к базе данных PostgreSQL для ArcGIS 10.1 http://resources.arcgis.com/ru/help/system-requirements/10.1/index.html#//015100000075000000
Где написано, где искать эти библиотеки:

You can obtain DBMS client installations from the DBMS vendor or download them from the Esri Customer Care portal.

Одна затыка, на этот портал не пускают с обычной учетной записью ESRI.
Ладно, еще немного поисков и я знаю, о каких библиотеках идет речь:


The files are libeay32.dll, libintl.dll, libpq.dll, and ssleay32.dll

Эти файлы нашлись в папке bin внутри установленного PostgreSQL. Ну, думаю, дело в шляпе. Скопировал их куда надо — в папку bin внутре установленного ArcGIS Desktop, запускаю опять тулбокс...
Тот же облом — не находит клиентские либы.

На этом этапе я потерял очень много времени из-за ошибочного постулата by default. Я пихал в ArcGIS Desktop библиотеки из 64-битной версии PostgreSQL, предполагая по умолчанию, что раз уж у меня всё 64-битное, то и ArcGIS Desktop тоже 64-битный. Авотфиг. ArcGIS Desktop вполне себе 32-битный и библиотеки ему надо тоже 32-битные.

Пришлось на другой машине скачать PostgreSQL 9.0.12 уже 32-битный, поставить его и найти в нем файлы libeay32.dll, libintl.dll, libpq.dll, and ssleay32.dll
Нашел, скопировал, разместил в bin ArcGIS Desktop, запускаю тулбокс...
Опять облом. Вот тут я разозлился. Думаю, матьвашузаногу, чего еще вам, уродам из ESRI надо?
Короче, хоть я очень давно уже не сталкивался с проблемами dll hell, но вспомнил — есть прекрасная тулза - Dependency Walker http://www.dependencywalker.com/
С ее помощью я выяснил, от каких библиотек зависит 32-битная либа libpq.dll. Это оказались
libpq.dll
ssleay32.dll
libeay32.dll
libintl-8.dll
libiconv-2.dll

Видно разницу, да? 5 файлов а не 4, как сказано в документации. На этот раз, после докладывания недостающего файла, тулбокс сработал как положено.

Итак, совет — при установке ArcGIS Desktop 10.1 + PostgreSQL найдите в подходящем дистрибутиве (http://www.enterprisedb.com/products-services-training/pgdownload#windows) PostgreSQL x32 библиотеку libpq.dll и с помощью Dependency Walker найдите все ее зависимости.

Фух, пол дела сделано. Далее в инструкции (http://resources.arcgis.com/en/help/main/10.1/index.html#//002p00000001000000) написано:

Copy the st_geometry library to the PostgreSQL installation directory.
The st_geometry.dll file for use with PostgreSQL 9.0 can be found in the DatabaseSupport directory of your ArcGIS client installation directory. Move the st_geometry.dll file from the ArcGIS client to the PostgreSQL lib directory on your PostgreSQL server.

То есть, взять либу
c:\Program Files (x86)\ArcGIS\Desktop10.1\DatabaseSupport\PostgreSQL\Windows64\st_geometry.dll
и положить ее в папку
c:\Program Files\PostgreSQL\9.0\lib\
Тут, пока свежа память о поиске недостающих dll, я сразу применил Dependency Walker. Оказалось — не зря. Эта либа требует еще пачку:
msvcp90.dll
msvcr90.dll
msvcm90.dll
Microsoft.VC90.CRT.manifest

Благо, они нашлись где-то внутре системы и не пришлось их добывать из интернету.
Этот пакет я закинул, на всякий случай, не только в папку lib, но и в bin внутри PostgreSQL.

Далее, после того как создана геодатабаза, я сделал коннект к БД в ArcCatalog. Как описано тут:

Попытался скопировать данные слоя из файловой GDB в PostgreSQL, используя этот коннект... Обратно облом. Но на этот раз все оказалось проще. В контекстном меню ArcCatalog для этого коннекта нашелся пункт, забыл точное название, что-то вроде «Enable geodatabase» или вроде того. После его применения геобаза в PostgreSQL стала доступна для ArcCatalog и я смог скопировать в БД нужные слои.

На этом у меня кончился рабочий день и начались водопроводные работы. Кран у меня на кухне сломался, я его менял. Тоже не без приключений.
Так что, про ArcGIS 10.1 и PostgreSQL пока всё. Остальное, если будет нетривиально, напишу позже.

original post http://vasnake.blogspot.com/2013/03/64-vs-32.html

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) Java (22) humor (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)