このページは OSGeo4W パッケージの作成に使用された手法を説明するものです。 [[TOC]] = 概要 = OSGeo4W パッケージは、それぞれ bzip2 圧縮された.tar ファイルであり、OSGeo4W ルートディレクトリで復元するよう意図されています。依存性とパッケージ説明を記述するようデザインされた setup.hint ファイルと一緒になっています。 == パッケージディレクトリのレイアウト == インストールされた OSGeo4W ディレクトリツリーは[wiki:OSGeo4W_jp/DirectoryLayout ディレクトリレイアウト]に記述されています。 通常、OSGeo4W パッケージは http://cygwin.com/setup.html で説明されている Cygwin のパッケージのように構築されています。 OSGeo4W 用のパッケージは現在次の場所にアップロードされています: upload.osgeo.org:/osgeo/download/osgeo4w/release/ このツリーは次でレビューが可能です: http://download.osgeo.org/osgeo4w/release [[Image(ticket:132:package-name.png, nolink,title="Osaka City University", right)]]各パッケージディレクトリは1つの setup.hint ファイルを所有しています。例えば、gdal-1.5.0-1.tar.bz2 の場合、.tar.bz2 ファイルはそのパッケージの1つまたはそれ以上のバージョンを所有しています。これらは通常、 "1.5.0" がパッケージされていた GDAL のバージョンで "-1" がパッケージを試みるバージョンを指す場所なので gdal-1.5.0-1.tar.bz2 のような名前になります。 ディレクトリはまた、gdal-1.5.0-1-src.tar.bz2 のように名付けられた、対応するソーススナップショットを含むことが可能です。ベースネームはパッケージが見つかったディレクトリと完全に一致していなければなりません。ですから "gdal" ディレクトリは gdal--.tar.bz2 パッケージファイルを持っていることになります。 1つのプロジェクトが複数のパッケージとしてまとめられている場合があります。このようなケースでは、パッケージは通常プライマリディレクトリのサブディレクトリとして作成されています。例えば、GDAL の Oracle 10g ドライバは release/gdal/gdal-oracle10g ディレクトリに保管され gdal-oracle10g-1.5.0-1.tar.bz2 としてパッケージされています。 '''注意:''' osgeo4w の msys (%OSGEO4W_ROOT%\apps\msys\bin) から `tar` と `bzip2` を使用してください。setup.exe は作成されるアーカイブを処理できないため、7zip は使用しないでください。Linux tar/bzip2 によって報告されている問題はありません。(チケット #101 を参照) == ウェブアプリケーションパッケージのガイドライン == 重要なガイドライン: * /osgeo4w/apps/ ディレクトリはアプリケーションを保管します。 なるべく意味のある名前(小文字で)を用いて /osgeo4w/apps/ ディレクトリのサブディレクトリにアプリケーションをインストールしてください。 * Apache エイリアス "/ms_tmp/" は、/osgeo4w/tmp/ms_tmp/ ディレクトリを指す一時的な web-accessible ファイルにアクセスします。 * Apache エイリアス "/cgi-bin/" は /osgeo4w/bin/ フォルダーを指しています。 例 mapserv.exe は /bin フォルダにあります。 * /osgeo4w/httpd.d/ ディレクトリは Apache エイリアスファイルを所有しています。このディレクトリは開始すると自動的にアパッチによってスキャンされます。 以下は、'foobar' という名前のアプリケーションのエイリアスの例です: {{{ Alias /foobar/ @osgeo4w@/apps/foobar/htdocs/ AllowOverride None Options Indexes FollowSymLinks Multiviews Order allow,deny Allow from all }}} ファイルの名前は非常に重要です。Apache は次のパターンに一致するファイルのみロードします: {{{ httpd_*.conf }}} 通常、* をアプリケーションの名前に置き換えます。上記の例では、アプリケーションは /OSGEO4W/httpd.d/ ディレクトリにおいて httpd_foobar.conf を使用しています。これはアプリケーションにアクセスするためユーザーの http://localhost/foobar/ への接続を可能にします。 * アプリケーションへのリンクが OSGeo4W インデックスページ (ローカルホスト) に表示されるよう、全てのウェブアプリケーションは小さい .pkg ファイルを /osgeo4w/apache/htdocs/ フォルダに含みます。  この 'Index Package File' は 自動的に OSGeo4W インデックスページに含まれる小さい HTML スニペット を提供します。この HTML スニペット はアプリケーションの短い説明と、 Apache エイリアスファイルを通じて提供しているエイリアスにアクセスするリンクを提供します。インデックスパッケージファイルは厳密な命名規則に従っています: {{{ packagename.pkg.html }}} .pkg.html で終わるファイルのみがインデックスページに含まれます。ここに .pkg ファイルの例があります ('foobar.pkg.html と名付けられています): {{{

Foobar Application

Foobar demo

}}} == setup.hint == 各パッケージディレクトリは通常、パッケージの長短の記述そして依存する他のパッケージのリストを含む setup.hint ファイルを所有しています。 パッケージにいくつかのバージョンがある場合でも、パッケージには setup.hint ファイルは通常1つのみです。通常の setup.hint ファイルは次のようになります:: {{{ sdesc: "The Libgeotiff library, commandline tools and supporting tables." ldesc: "The Libgeotiff library, commandline tools and supporting tables. Used for manipulating GeoTIFF files." category: Libs Commands requires: msvcrt libtiff }}} これはパッケージの長短の記述、インストーラーユーザーインターフェイスのためのカテゴリーのリスト、そして要求するパッケージを指しています。 == インストール後の動作 == パッケージは、/etc/postinstall ディレクトリにある .bat ファイルをパッケージの一部として含むことによってインストール後の動作をとることがあります。ファイル名は etc/postinstall/.bat. と名付けられます。この bat ファイルは 環境変数 OSGEO4W_STARTMENU、 OSGEO4W_HOME と OSGEO4W_HOME_MSYS 定義された, そしてすでにパスにある OSGEO4W_HOME/bin とともに実行されます。 インストール後の動作でよく行われることの1つが、OSGeo4W ツリーへのインストールされたパスを含むための設定ファイルの挿入/アップグレードです。これは普通 postintall ファイルと一緒に処理され、ここにその例が2つあります:: === !TextReplace 例 !#1 === * gmap パッケージの /httpd.d/httpd_gmap.conf ファイルにあるハードコードされたパス: {{{ Alias /gmap/ "C:/mypath/apps/gmap/htdocs/" AllowOverride None Options Indexes FollowSymLinks Multiviews Order allow,deny Allow from all }}} * まず始めに、ファイルにあるハードコードされたパスを好みのテキスト編集で ''@osgeo4w@'' 変数に置き換えます。例えば、上記のファイルは次のようになります: {{{ Alias /gmap/ "@osgeo4w@/apps/gmap/htdocs/" AllowOverride None Options Indexes FollowSymLinks Multiviews Order allow,deny Allow from all }}} * 次に、その変数を実際のユーザーのインストールパスと置き換えるため、gmap.bat (gmap パッケージの /etc/postinstall/ にあります) という名前の postinstall スクリプトを作成します: {{{ textreplace -sf httpd.d/httpd_gmap.conf -df httpd.d/httpd_gmap.conf -map @osgeo4w@ %OSGEO4W_ROOT% }}} === !TextReplace 例 !#2 === 2008年4月の時点で textreplace はファイルをアップデートするので、 infile/outfile シンタックスは不要になります: {{{ textreplace -std -t bin/o4w_env.bat }}} はスタンダードマッピングチェンジを適用します; これ: {{{ #!html
@echo off
set OSGEO4W_ROOT=@osgeo4w@
PATH=%OSGEO4W_ROOT%\bin;%PATH%
for %%f in ("%OSGEO4W_ROOT%"\etc\ini\*.bat) do call "%%f"
@echo on
}}} をこれに: {{{ #!html
@echo off
set OSGEO4W_ROOT=X:\Path\to\OSGeo4W
PATH=%OSGEO4W_ROOT%\bin;%PATH%
for %%f in ("%OSGEO4W_ROOT%"\etc\ini\*.bat) do call "%%f"
@echo on
}}} === textreplace および python === textreplace が二重のバックスラッシュを使用するように、postinstall bat のはじめに以下を追加してください。(`C:\OSGeo4W` は `C:\\OSGeo4W` となります): {{{ set OSGEO4W_ROOT=%OSGEO4W_ROOT:\=\\% }}} == ショートカットの作成 == パッケージが処理するもう1つの postinstall タスクは、特定のコマンドを起動するショートカットの作成です。テキスト置換実行ファイルの場合のように、インストーラにあるユーティリティバイナリ xxmklink.exe (msvcrt パッケージの一部) があります. xxmklink を入力することによって、このユーティリティがサポートしている全てのオプションを見ることができます。インストール後のファイルにおいての使用例をここにいくつか挙げておきます: {{{ 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" }}} postinstall スクリプトは いかなる DOS コマンドまたは指定した引数をもつインストールされたバイナリを実行することが可能です。 = シェルの初期化 = 特定の環境変数を設定する必要のあるパッケージもあります。OSGeo4W コマンドシェルにとって、これは etc/ini にある初期化ファイルを追加することによって達成されます。 以下は典型的な例です:: {{{ SET GDAL_DATA=%OSGEO4W_ROOT%\share\gdal }}} これらのスクリプトは、OSGeo4W シェルの環境構築の際に %OSGEO4W_ROOT%\OSGeo4W.bat によってランダムな順番で実行されます。 OSGEO4W_ROOt 環境変数は常に最初に設定されます。 = アプリケーションバッチファイルのテンプレート = 標準環境設定でのアプリケーション開始方法のサンプル。`foo.exe` をアプリケーション実行可能ファイルで置き換え、`foobar.bz2:bin/foo.bat.tmpl` として保存します。 [#Post-InstallActions Post-Install] は適切な OSGEO4W_ROOT を設定します。 {{{ @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 }}} == Setup.ini == Cygwin Setup.exe は、実行されるたびに[http://download.osgeo.org/osgeo4w/setup.ini setup.ini] ファイルを全パッケージのリストと一緒にダウンロードします。このファイルは、ウェブ上にある `osgeo4w-regen.sh` を呼び出すスクリプトの実行に伴い、パッケージのアップロードの度にサーバーに再作成されるべきです。これは、-t コマンドラインオプションをパスすることによってセットアッププログラムと一緒に使用可能なファイルのテストバージョンを作成します。一度テストが行われたら、一般のユーザーが利用できるようリンク `osgeo4w-promote.sh` を用いてこのファイルを setup.ini にコピーします。 * テストセットアップの生成: `http://upload.osgeo.org/cgi-bin/osgeo4w-regen.sh` * パッケージバージョンナンバーの立証 ([wiki:OSGeo4W_jp/PackageListing パッケージリスト]のトップ) * -t を セットアッププログラムにパスすることによるテスト ([http://download.osgeo.org/osgeo4w/osgeo-setup_test-ini.bat osgeo-setup_test-ini.bat]) * テストセットアップ実行の促進: `http://upload.osgeo.org/cgi-bin/osgeo4w-promote.sh` == 記録 == あなたのパッケージに関する情報を含む [wiki:OSGeo4W_jp/PackageListing パッケージリスト] とリンクしていない wiki ページを準備してください。ページは端末からサーバへのプロジェクトに戻るポインター、パッケージャーの名前 (パッケージャーのコンタクト情報が記載されているページへのリンク)、そして OSGeo4W 内での置き場所についての特別な注意書きを含みます。 == 共通の問題 == === 問題のあるパッケージのバージョン === 現在のバージョンとしてリストされていないパッケージが見つかるかもしれません。インストーラーはapache-2.2.8-3 が最新のバージョンとしていますが、apache-2.2.14 が正しい最新のバージョンである、という例が次にあります: {{{ apache-2.2.8-1.tar.bz2 apache-2.2.8-2.tar.bz2 apache-2.2.8-3.tar.bz2 apache-2.2.14-1.tar.bz2 }}} これを解決するため、次のようにsetup.hint ファイル (詳細は http://cygwin.com/setup.html#setup.hint を参照) で現在のバージョンと前のバージョンを明確にしてください: {{{ sdesc: "Apache Web Server" ldesc: "Apache Web Server" category: Web requires: msvcrt php curr: 2.2.14-1 prev: 2.2.8-3 }}} [wiki:OSGeo4W_jp 戻る]