GIS-LAB

Географические информационные системы и дистанционное зондирование

Создание пакета для OSGeo4W

Обсудить в форуме Комментариев — 0Редактировать в вики

Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/osgeo4w-packaging.html


Как создаются пакеты для OSGeo4W.

Это руководство объясняет основные этапы создания нового программного пакета для установщика OSGeo4W. По материалам OSGeo4W Wiki.

Общие сведения[править]

OSGeo4W — специальный установщик, ориентированный на распространение различного ПО для работы с пространственными данными для операционных систем семейства Windows (XP, Vista и др.). При помощи OSGeo4W можно установить GDAL/OGR, GRASS, MapServer, OpenEV, uDIG, QGIS а также множество других пакетов (ознакомиться с полным списком).

Установка ПО с OSGeo4W сводится к нескольким простым шагам:

  1. загрузить установщик. Для пользователей, у которых возникают проблемы с доступом к серверу download.osgeo.org, создан альтернативный установщик, работающий с зеркалом download2.osgeo.org
  2. запустить установщик
  3. выбрать пункт «Стандартная Desktop установка» и нажать «Далее»
  4. выбрать пакеты для установки и нажать «Далее»
  5. выбранные пакеты и необходимые зависимости будут загружены и установлены автоматически

После установки настольные приложения можно запустить выполнив «Пуск → Программы → OSGeo4W». Утилиты командной строки можно запускать из командной строки OSGeo4W Shell, а web-приложения будут доступны по адресу http://localhost/.

Ознакомиться с подробным описанием установки через OSGeo4W на примере QGIS можно в соответствующей статье.

Далее мы рассмотрим основные моменты, которые необходимо учитывать при создании нового пакета.

Подготовка к созданию пакета для OSGeo4W[править]

Каким бы большим ни был список пакетов OSGeo4W, всегда найдется что-то нужное и в то же время не представленное в этом списке. Так было с matplotlib и TinyOWS.

Итак, вы решили добавить новый пакет в OSGeo4W. Сначала необходимо получить разрешение от разработчиков. Как показывает практика, если предлагаемый к включению пакет не имеет особых зависимостей, является свободным ПО и вы готовы взять на себя поддержку, то возражений не возникает. После получения разрешения нужно сформировать пакет и загрузить его на сервер.

Формат пакета и структура каталогов[править]

Каждый пакет OSGeo4W представляет собой архив tar сжатый bzip2, который при установке разворачивается в корневой каталог OSGeo4W. Все пакеты имеют свой файл setup.hint с описанием и списком зависимостей.

Структура дерева каталогов установленного OSGeo4W описанa на специальной странице, приводить ее здесь мы не будем. Перед подготовкой пакета необходимо изучить структуру каталогов и определиться в каких каталогах должны быть ваши файлы. Соответственно, все пути в архиве должны задаваться относительно корневого каталога OSGeo4W.

Пакеты загружаются на сервер (в общем случае, один пакет — один каталог):

upload.osgeo.org:/osgeo/download/osgeo4w/release/<package>

Просмотреть текущее дерево каталогов.

Каждый пакет имеет свой каталог в котором находится файл setup.hint, а также одна или несколько версий пакета в виде архивов .tar.bz2. Имя архива должно соответствовать опеределенным требованиям: в начале идет базовое название пакета, затем через дефис версия упакованного ПО, и, наконец, тоже через дефис версия самого пакета.

Osgeo4w-packaging-01.png

Нужно помнить, что базовое имя пакета и название каталога в дереве OSGeo4W должны совпадать, т.е. в каталоге tinyows должны быть файлы tinyows-<версия>-<ревизия>.tar.bz2.

Иногда один программный комплекс разбивается на несколько пакетов (например, GDAL). В этом случае отдельные компоненты располагаются во вложенных папках базового каталога. Например, драйвер Oracle 10g для GDAL будет лежать в каталоге release/gdal/gdal-oracle10g, а пакет будет называться gdal-oracle10g-1.5.0-1.tar.bz2.

ВАЖНО! Для создания архива необходимо использовать tar и bzip2 из состава самого OSGeo4W (%OSGEO4W_ROOT%\apps\msys\bin) или «родные» tar/bzip2 в Linux. Архивы, созданные 7-zip, установщиком не распознаются, а созданные при помощи bzip2 из gnuwin32 и/или cygwin работают с переменным успехом.

В каталоге пакета обязательно должен присутствовать файл setup.hint с коротким и длинным описанием пакета, а также со списком зависимостей. Так выглядит setup.hint для TinyOWS:

sdesc: "High performance WFS-T server"
ldesc: "High performance Web Feature Service (WFS-T) server"
category: Web
requires: apache msvcrt iconv fcgi libxml2 regex

Пакетирование web-приложений[править]

При создании структуры каталогов пакета придерживаемся следующих рекомендаций:

  • приложения устанавливаются во вложенные папки каталога %OSGEO4W_ROOT%\apps\. Например, при создании пакета TinyOWS, в каталоге tinyows находится конфигурационный файл и папка schema с файлами схем
  • алиас "/cgi-bin/" сервера Apache указывает на каталог %OSGEO4W_ROOT%\bin\, поэтому файл tinyows.exe должен быть распакован именно туда
  • в каталоге %OSGEO4W_ROOT%\httpd.d\ находятся алиасы сервера Apache. Этот каталог сканируется при запуске сервера и найденные в нем файлы загружаются. Алиасы используются для настройки web-приложений, например, для TinуOWS в этом файле задается расположение файла конфигурации и каталог схем (назначение макроса @osgeo4w@ обясняется ниже)
    SetEnv TINYOWS_CONFIG_FILE "@osgeo4w@/apps/tinyows/config.xml"
    SetEnv TINYOWS_SCHEMA_DIR "@osgeo4w@/apps/tinyows/schema/"

    ВАЖНО! Имя файла должно соответствовать шаблону

    httpd_*.conf
    Символ «*» (звездочка) заменяется названием приложения, наш файл называется httpd_tinyows.conf
  • алиас "/ms_tmp/" сервера Apache указывает на каталог %OSGEO4W_ROOT%\tmp\ms_tmp\ и создан доступа к временным файлам web-приложений
  • web-приложения должны поставляться с файлом .pkg в каталоге %OSGEO4W_ROOT%\apache\htdocs\, чтобы ссылка на приложение отображалась на стартовой странице OSGeo4W. В этом файле (его еще называют Index Package File) должен находиться небольшой фрагмент HTML кода, который автоматически будет включен в код стартовой страницы. Код должен содержать краткое описание приложения и предоставлять ссылки для доступа к соответствующим псевдонимам сервера Apache. Ниже дается пример такого файла
    <h3>Foobar Application</h3>
    <p><a href="https://wiki.gis-lab.info/foobar/">Foobar demo</a></p>

    Имя файла должно соответствовать шаблону (обратите внимание на двойное расширение!)

    packagename.pkg.html

Послеустановочные действия[править]

Пакет может выполнять послеустановочные действия, чаще всего это необходимо для обновления конфигурационных файлов (актуализация путей относительно установочного каталога) и создания ярлыков. За выполнение послеустановочных действий отвечает .bat-файл, находящийся в каталоге /etc/postinstall пакета. Имя этого файла должно совпадать с именем пакета, например: /etc/postinstall/tinyows.bat. Командный файл будет запущен после распаковки архива с предустановленными переменными окружения OSGEO4W_STARTMENU, OSGEO4W_HOME и OSGEO4W_HOME_MSYS, а каталог OSGEO4W_HOME/bin будет включен в пременную PATH.

Замена текста[править]

Для примера рассмотрим корректировку путей в конфигурационном файле TinyOWS. Изначально файл apps/tinyows/config.xml выглядит так

<tinyows online_resource="http://127.0.0.1/cgi-bin/tinyows.exe"
	 schema_dir="D:/package/apps/tinyows/schema/">

  <pg host="127.0.0.1" user="postgres" password="postgres" dbname="tinyows_demo" port="5432"/>

  <metadata name="TinyOWS Server"
	    title="TinyOWS Server - Demo Service" />

  <layer retrievable="1"
	 writable="1"
	 ns_prefix="tows"
	 ns_uri="http://www.tinyows.org/"
         name="world"
         title="World Administrative Boundaries" />

  <layer retrievable="1"
	 writable="1"
	 ns_prefix="tows"
	 ns_uri="http://www.tinyows.org/"
         name="france"
         title="French Administrative Sub Boundaries (IGN - GeoFLA Departements)" />

</tinyows>

Видно, что путь в строке

schema_dir="D:/package/apps/tinyows/schema/"

задан жестко, и после установки будет указывать на несуществующий каталог. Чтобы после установки этот путь указывал на правильный каталог внутри папки OSGeo4W нужно:

  • заменить ту часть пути, которая может измениться, на переменную @osgeo4w@
    schema_dir="@osgeo4w@/apps/tinyows/schema/"
  • в файл etc/postinstall/tinyows.bat добавить строку
    textreplace -sf apps/tinyows/config.xml -df apps/tinyows/config.xml -map @osgeo4w@ %OSGEO4W_ROOT%

Формат команды замены следующий:

textreplace -sf исходный_файл -df файл_назначения -map найти_строку заменить

Аналогичным образом выполняется замена и в файле httpd.d/httpd_tinyows.conf

Примечание: с апреля 2008 года утилита textreplace умеет выполнять замену «на месте» и можно использовать новый синтаксис. Так, команда

textreplace -std -t apps/tinyows/config.xml

выполнить стандартную подстановку, заменив все вхождения @osgeo4w@ на реальный путь к корневому каталогу OSGeo4W.

При необходимости выполнять корректировку путей в коде на Python в начало файла postinstall.bat необходимо добавить следующую строку

set OSGEO4W_ROOT=%OSGEO4W_ROOT:\=\\%

Это заставит textreplace использовать двойные слеши, т.е. вместо C:\OSGeo4W будет подставлено C:\\OSGeo4W.

Создание ярлыков[править]

Еще одним послеустановочным действием является создание ярлыков для запуска ПО. Как и в случае с заменой строк, для этих целей существует утилита xxmklink.exe (входит в состав пакета msvcrt). Это консольное приложение, запустив его без параметров вы получите список всех опций. Ниже приводится несколько примеров использования.

Создание папки и ярлыка в меню «Пуск»

mkdir "%OSGEO4W_STARTMENU%"
mkdir "%OSGEO4W_STARTMENU%\Apache"
xxmklink "%OSGEO4W_STARTMENU%\Apache\OSGEO4W-Apache-Install.lnk" %OSGEO4W_ROOT%\Apache\bin\httpd.exe " -k install -n \"Apache OSGEO4W Web Server\""

Ярлык со специальной иконкой

xxmklink "%OSGEO4W_STARTMENU%\ttt.lnk" cmd.exe "" . "my_desc" 1 "%OSGEO4W_ROOT%\OSGeo4W.ico"

Ярлык на «Рабочем столе»

xxmklink "%ALLUSERSPROFILE%\Desktop\OpenEV.lnk" "%OSGEO4W_ROOT%\bin\openev.bat" " " \ "OSGeo4W OpenEV" 1 "%OSGEO4W_ROOT%\apps\openev\icon.ico"

Кроме обновления конфигурационных файлов и создания ярлыков из этих командных файлов можно запускать любую команду DOS и любое установленное приложение с нужными параметрами.

Переменные окружения и запуск[править]

Некоторым приложениям необходимо наличие определенных переменных окружения. Установка переменных окружения в командной строке OSGeo4W выполняется при помощи файла инициализации в /etc/ini. Это обычный .bat файл, в котором прописана установка необходимых переменных, например

SET GDAL_DATA=%OSGEO4W_ROOT%\share\gdal

Эти файлы выполняются в случайном порядке скриптом %OSGEO4W_ROOT%\OSGeo4W.bat, который отвечает за создание среды для командной строки OSGeo4W. Переменная OSGEO4W_ROOT устанавливается автоматически.

Для запуска приложений с определенным набором переменных окружения используются .bat файлы. Так, чтобы запустить приложение foo.exe со стандартным набором переменных окружения, необходимо создать командный файл foo.bat.tmpl следующего содержания

@echo off
SET OSGEO4W_ROOT=@osgeo4w@
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
start "Foo window title" /B "%OSGEO4W_ROOT%\bin\foo.exe" %*
@echo on

Это файл должен находиться в каталоге /bin пакета. А в файле postinstall.bat необходимо предусмотреть установку корректного пути для OSGEO4W_ROOT и переименование foo.bat.tmpl в foo.bat. За примерами можно обратиться к существующим пакетам, например, qgis.

Загрузка пакета на сервер и документирование[править]

После того, как структура каталогов пакета подготовлена и все файлы разложены на свои места, создаём архив

tar cjvf tinyows-1.0.0rc1-1.tar.bz2 apps/ bin/ etc/ httpd.d/

При помощи WinSCP или SSH подключаемся к серверу upload.osgeo.org (нужен OSGeo Id и соответсвующие права доступа), создаем каталог для нового пакета, копируем в него файл setup.hint и сам пакет.

Проверим, правильно ли мы сформировали пакет:

  • создаём тестовый setup.ini (файл со списком доступных пакетов):
    http://upload.osgeo.org/cgi-bin/osgeo4w-regen.sh
  • проверяем версии пакетов
    http://download.osgeo.org/osgeo4w/versions_test.html
  • тестируем установку, запуская установщик с параметром -t и тестовым ini-файлом
    osgeo4w-setup.exe -t http://download.osgeo.org/osgeo4w/setup_test.ini
  • если все установилось и работает правильно, переносим изменения в основной файл:
    http://upload.osgeo.org/cgi-bin/osgeo4w-promote.sh

Осталось добавить новый пакет в список пакетов и создать ссылку на страничку пакета, где должны быть:

  • краткое описание пакета
  • ссылка на сайт запакетированного ПО
  • имя ментейнера (ссылка на страницу с контактными данными)
  • дополнительная информация о том, как пакет интегрирован в OSGeo4W

Ссылки по теме[править]

Обсудить в форуме Комментариев — 0Редактировать в вики

Последнее обновление: 2014-05-14 22:15

Дата создания: 06.05.2011
Автор(ы): Александр Бруй