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

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Эта страница опубликована в основном списке статей сайта
по адресу 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="/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

Ссылки по теме