Changes between Initial Version and Version 1 of PackagingInstructions


Ignore:
Timestamp:
Jun 3, 2008, 8:11:39 AM (16 years ago)
Author:
warmerdam
Comment:

preliminary copy from wiki.

Legend:

Unmodified
Added
Removed
Modified
  • PackagingInstructions

    v1 v1  
     1This page describes techniques used for preparing OSGeo4W packages.
     2
     3= General =
     4
     5OSGeo4W packages are each bzip2 compressed .tar files intended to be unpacked in the OSGeo4W root directory.  They come with setup.hint files designed to describe dependencies and a package description.
     6
     7= Package Directory Layout =
     8
     9The installed OSGeo4W directory tree is described in DirectoryLayout.
     10
     11OSGeo4W packages are generally structured like packages for Cygwin as described at http://cygwin.com/setup.html .
     12
     13Packages prepared for OSGeo4W are currently uploaded to:
     14
     15 upload.osgeo.org:/osgeo/download/osgeo4w/release/<package>
     16
     17This tree can be reviewed at: http://download.osgeo.org/osgeo4w/release
     18
     19Each package directory should have a single setup.hint file, and one or more versions of that package as a .tar.bz2 file.  These should normally have names like gdal-1.5.0-1.tar.bz2 where "1.5.0" is the version of GDAL that was packaged, and "-1" indicates the version of the packaging attempt.  The directory can also contain corresponding source snapshots named like gdal-1.5.0-1-src.tar.bz2.   Note that the basename should exactly match the directory in which the package is found.  So the "gdal" directory has gdal-<version>-<revision>.tar.bz2 package files. 
     20
     21Sometimes a single project is packaged as several packages. In this case component packages are normally created as subdirectories of the primary directory. So, for instance the Oracle 10g driver for GDAL is kept in the release/gdal/gdal-oracle10g directory and packaged as gdal-oracle10g-1.5.0-1.tar.bz2.
     22
     23= Web Application Package Guidelines =
     24
     25Here are some important guidelines:
     26
     27 * the /osgeo4w/apps/ directory exists to hold applications.  Your application must be installed in a subdirectory of the /osgeo4w/apps/ directory, preferably with a meaningful name (in lowercase).
     28 * the Apache alias "/ms_tmp/" exists to access temporary web-accessible files, which points to the directory /osgeo4w/tmp/ms_tmp/
     29 * the Apache alias "/cgi-bin/" points to the /osgeo4w/bin/ folder.  e.g. mapserv.exe lives in the /bin folder.
     30 * the /osgeo4w/httpd.d/ directory exists to hold Apache Alias Files.  This directory is automatically scanned by Apache when it starts.  The following is an alias example for an application named 'foobar':
     31
     32{{{
     33  Alias /foobar/ @osgeo4w@/apps/foobar/htdocs/
     34    AllowOverride None
     35    Options Indexes FollowSymLinks Multiviews
     36    Order allow,deny
     37    Allow from all 
     38}}}
     39
     40The name of the file is very important.  Apache will only load files that match the following pattern:
     41{{{
     42           httpd_*.conf
     43}}}
     44Normally, you would replace * with your application name.  In the above example, the application would use httpd_foobar.conf in the /OSGEO4W/httpd.d/ directory.  This would allow the user to connect to http://localhost/foobar/
     45to access the application.
     46
     47 * All web applications should include a small .pkg file in the /osgeo4w/apache/htdocs/ folder so that a link to the application is displayed on the OSGeo4W index page (localhost).  This 'Index Package File' provides a small HTML snippet that is automatically included in the OSGeo4W index page.  This HTML snippet should provide a brief description of your application and provide links to access the aliases you have provided via the Apache Alias File.  The Index Package File follows a strict naming convention:
     48{{{
     49   packagename.pkg.html
     50}}}
     51Only files that end in .pkg.html will be included in the index page.  Here is an example of a .pkg file (named 'foobar.pkg.html):
     52{{{
     53   <pre><h3>Foobar Application</h3>
     54   <blockquote><p><a href="/foobar/">Foobar demo</a></p></pre>
     55}}}
     56= setup.hint =
     57
     58Each package directory has a setup.hint file which normally contains the short and long description for the package, and the list of other packages on which it depends.  Note that there is normally only one setup.hint file for a package even if several versions of the package exist.  A normal setup.hint file might look like::
     59{{{
     60 sdesc: "The Libgeotiff library, commandline tools and supporting tables."
     61 ldesc: "The Libgeotiff library, commandline tools and supporting tables.
     62 Used for manipulating GeoTIFF files."
     63 category: Libs Commands
     64 requires: msvcrt libtiff
     65}}}
     66This indicates the short and long description for the package, the list of categories it will appear in for the installer user interface, and the package it requires.
     67
     68= Post-Install Actions =
     69
     70Packages may take post-install actions by including a .bat file in the /etc/postinstall directory as part of the package.  The filename should be named etc/postinstall/<package>.bat.  The bat file will be run with the environment variables OSGEO4W_HOME and OSGEO4W_HOME_MSYS defined, and with OSGEO4W_HOME/bin already in the path.
     71
     72One very common thing to do in postinstall actions is to insert/update configuration files to include the installed path to the OSGeo4W tree.  This is normally done with a postinstall file, and here are 2 examples::
     73
     74== !TextReplace Example #1 ==
     75
     76 * hardcoded paths exist in the /httpd.d/httpd_gmap.conf file of the gmap package:
     77{{{
     78  Alias /gmap/ "C:/mypath/apps/gmap/htdocs/"
     79  <Directory "C:/mypath/apps/gmap/htdocs/">
     80    AllowOverride None
     81    Options Indexes FollowSymLinks Multiviews
     82    Order allow,deny
     83    Allow from all
     84  </Directory>
     85}}}
     86 * the first step is to replace the hardcoded path in the file with the ''@osgeo4w@'' variable, in your favourite text editor.  For example the above file would then look like:
     87{{{
     88  Alias /gmap/ "@osgeo4w@/apps/gmap/htdocs/"
     89  <Directory "@osgeo4w@/apps/gmap/htdocs/">
     90    AllowOverride None
     91    Options Indexes FollowSymLinks Multiviews
     92    Order allow,deny
     93    Allow from all
     94  </Directory>
     95}}}
     96 * the second step is to create a postinstall script named gmap.bat (that lives at /etc/postinstall/ of the gmap package) to replace that variable with the actual user's install path:
     97{{{
     98  textreplace -sf httpd.d/httpd_gmap.conf -df httpd.d/httpd_gmap.conf -map @osgeo4w@ %OSGEO4W_ROOT%
     99}}}
     100
     101== !TextReplace Example #2 ==
     102
     103{{{
     104  textreplace -sf bin/gdal-config.tmpl -df bin/gdal-config \
     105    -map @osgeo4w@ "%OSGEO4W_ROOT%"  \
     106    -map @osgeo4w_msys@ "%OSGEO4W_ROOT_MSYS%"
     107}}}
     108Both examples use the bin/textreplace program (part of the msvcrt package).  The second example uses it with source file bin/gdal-config.tmpl and destination file bin/gdal-config and replaces occurances of @osgeo4w@ with the value of the OSGEO4W_ROOT environment variable, and @osgeo4w_msys@ with the value of the OSGEO4W_ROOT_MSYS environment variable.  The pattern of processing a file from a .tmpl version is sufficiently common that textreplace supports this short form for the same action:
     109{{{
     110 textreplace -std -t bin/gdal-config
     111}}}
     112This applies the "standard" conversions to file bin/gdal-config.tmpl and puts the results in bin/gdal-config
     113
     114= Creating Shortcuts =
     115
     116Another postinstall task that packages might do is to create shortcuts that will be available to launch a certain command. As its is the case for the textreplace executable, there is an utility binary xxmklink.exe that is available in the installer (part of the msvcrt package). By typing xxmklink, you can see all the options supported by this utility. Here are some examples on how it can be used in a post install file:
     117{{{
     118  mkdir "%ALLUSERSPROFILE%\start menu\Programs\OSGeo4W"
     119  mkdir "%ALLUSERSPROFILE%\start menu\Programs\OSGeo4W\Apache"
     120  xxmklink "%ALLUSERSPROFILE%\start menu\Programs\OSGeo4W\Apache\OSGEO4W-Apache-Install.lnk"
     121    %OSGEO4W_ROOT%\Apache\bin\httpd.exe " -k install -n \"Apache OSGEO4W Web Server\""
     122}}}
     123Using icons:
     124{{{
     125  xxmklink "%ALLUSERSPROFILE%\start menu\Programs\OSGeo4W\ttt.lnk" cmd.exe "" . "my_desc" 1
     126    "%OSGEO4W_ROOT%\OSGeo4W.ico"
     127}}}
     128A Desktop icon:
     129{{{
     130  xxmklink "%ALLUSERSPROFILE%\Desktop\OpenEV.lnk" "%OSGEO4W_ROOT%\bin\openev.bat"
     131     " " \ "OSGeo4W OpenEV" 1 "%OSGEO4W_ROOT%\apps\openev\icon.ico"
     132}}}
     133
     134The postinstall scripts can run any DOS command or installed binary with desired arguments.
     135
     136= Shell Initialization =
     137
     138Some packages need to set particular environment variables.  For the OSGeo4W command shell this can be
     139accomplished by adding an initialization file in etc/ini.  A typical example looks like::
     140{{{
     141 SET GDAL_DATA=%OSGEO4W_ROOT%\share\gdal
     142}}}
     143These scripts are run in random order by %OSGEO4W_ROOT%\OSGeo4W.bat when establishing the environment for the OSGeo4W shell.  The OSGEO4W_ROOt environment variable will always be set on the way in.
     144
     145= Setup.ini =
     146
     147The Cygwin Setup.exe actually downloads the [http://download.osgeo.org/osgeo4w/setup.ini setup.ini] file with a list of all packages each time it is run.  This file should be recreated on the server by running the script /osgeo/download/osgeo4w/regen.sh (normally as user frankw) each time packages are uploaded.