update to fedora guidelines and based on debian splits

This commit is contained in:
Neil Hanlon 2024-03-20 12:41:54 -04:00 committed by Neil Hanlon
parent 6f7bd36edf
commit 2c2386791f
Signed by: neil
GPG Key ID: 705BC21EC3C70F34
5 changed files with 663 additions and 84 deletions

View File

@ -1,84 +0,0 @@
%global project_owner MapServer
%global project_name mapcache
Name: mapcache
Version: 1.14.0
Release: 0%{?dist}
Summary: Caching server for WMS layers
Group: Development/Tools
%global dashver %(echo %version | sed 's|\\.|-|g')
License: MIT
URL: http://mapserver.org/trunk/en/mapcache/
Source: https://github.com/%{project_owner}/%{project_name}/releases/download/rel-%{dashver}/mapcache-%{version}.tar.gz
Requires: httpd
BuildRequires: chrpath
BuildRequires: cmake
BuildRequires: fcgi-devel
BuildRequires: gcc
BuildRequires: gdal-devel
BuildRequires: geos-devel
BuildRequires: httpd-devel
BuildRequires: libcurl-devel
BuildRequires: libjpeg-turbo-devel
BuildRequires: libmemcached-devel
BuildRequires: libpng-devel
BuildRequires: libtiff-devel
BuildRequires: pixman-devel
BuildRequires: proj-devel
BuildRequires: sqlite-devel
%global _description %{expand:
MapCache is a server that implements tile caching to speed up access to WMS layers.
The primary objectives are to be fast and easily deployable, while offering the
essential features (and more!) expected from a tile caching solution.}
%description %{_description}
%package devel
Summary: Development files for mapcache
%description devel %{_description}
Development files for mapcache; these files are needed when building binary packages
against libmapcache.
%prep
%autosetup
%build
#%cmake -DWITH_MEMCACHE=1 -DCMAKE_SKIP_BUILD_RPATH=TRUE .
%cmake -DCMAKE_INSTALL_LIBDIR=%{_lib} -DWITH_MEMCACHE=1 -DCMAKE_SKIP_BUILD_RPATH=TRUE .
%cmake_build
%install
%cmake_install
for f in \
%{buildroot}%{_bindir}/{mapcache_seed,mapcache.fcgi,mapcache_detail} \
%{buildroot}%{_libdir}/libmapcache.so* \
%{buildroot}%{_libdir}/httpd/modules/mod_mapcache.so;
do
chrpath --delete $f
done
# NOTE(neil): 2024-03-06 - Upstream tests require running httpd and loading module -- out of scope for %check but can (read: should) be implemented in tmt/zuul.
%files
%doc INSTALL.md README.md LICENSE.md
%{_bindir}/mapcache.fcgi
%{_bindir}/mapcache_detail
%{_bindir}/mapcache_seed
%{_libdir}/libmapcache.so.%{version}
%{_libdir}/libmapcache.so.1
%{_libdir}/httpd/modules/mod_mapcache.so
%files devel
%{_libdir}/libmapcache.so
%changelog
* Thu Feb 29 2024 Neil Hanlon <neil@shrug.pw>
- Initial package

3
mapcache.sysusers Normal file
View File

@ -0,0 +1,3 @@
g mapcache - -
u mapcache - "MapCache Service User" / - - - -

152
mapcache_detail.1.xml Normal file
View File

@ -0,0 +1,152 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
<refentry id='mapcache_detail'>
<refmeta>
<refentrytitle>mapcache_detail</refentrytitle>
<manvolnum>1</manvolnum>
</refmeta>
<refnamediv>
<refname>mapcache_detail</refname>
<refpurpose>coverage analysis tool for SQLite caches</refpurpose>
</refnamediv>
<refsynopsisdiv id='synopsis'>
<cmdsynopsis>
<command>mapcache_detail</command>
<arg choice='opt'><replaceable>options</replaceable></arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1 id='description'>
<title>DESCRIPTION</title>
<para>
<command>mapcache_detail</command> is a coverage analysis tool for SQLite caches.
</para>
</refsect1>
<refsect1 id='options'>
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term><option>-c</option></term>
<term><option>--config</option> <replaceable>file</replaceable></term>
<listitem>
<para>Configuration file (/path/to/mapcache.xml)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-D</option></term>
<term><option>--dimension</option> <replaceable>DIMENSION_NAME=VALUE</replaceable></term>
<listitem>
<para>Set the value of a dimension: format DIMENSIONNAME=VALUE. Can be used multiple times for multiple dimensions</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-t</option></term>
<term><option>--tileset</option> <replaceable>name</replaceable></term>
<listitem>
<para>Tileset to analyze</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-g</option></term>
<term><option>--grid</option> <replaceable>name</replaceable></term>
<listitem>
<para>Grid to analyze</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-e</option></term>
<term><option>--extent</option> <replaceable>minx,miny,maxx,maxy</replaceable></term>
<listitem>
<para>Extent to analyze: format minx,miny,maxx,maxy. Cannot be used with <option>--ogr-datasource</option></para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-d</option></term>
<term><option>--ogr-datasource</option> <replaceable>data source</replaceable></term>
<listitem>
<para>OGR data source to get features from. Cannot be used with <option>--extent</option>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-l</option></term>
<term><option>--ogr-layer</option> <replaceable>layer</replaceable></term>
<listitem>
<para>OGR layer inside OGR data source. Cannot be used with <option>--ogr-sql</option>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-w</option></term>
<term><option>--ogr-where</option> <replaceable>filter</replaceable></term>
<listitem>
<para>Filter to apply on OGR layer features. Cannot be used with <option>--ogr-sql</option>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-s</option></term>
<term><option>--ogr-sql</option> <replaceable>SQL query</replaceable></term>
<listitem>
<para>SQL query to filter inside OGR data source. Cannot be used with <option>--ogr-layer</option> or <option>--ogr-where</option>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-z</option></term>
<term><option>--zoom</option> <replaceable>minzoom,maxzoom</replaceable></term>
<listitem>
<para>Set min and max zoom levels to analyze, separated by a comma, eg: 12,15</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-q</option></term>
<term><option>--query</option> <replaceable>value</replaceable></term>
<listitem>
<para>Set query for counting tiles in a rectangle. Default value works with default schema of SQLite caches.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-o</option></term>
<term><option>--short-output</option></term>
<listitem>
<para>Only existing SQLite files are reported, missing SQLite files are still taken into account for level and global coverage.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 id='example'>
<title>EXAMPLE</title>
<informalexample>
<para>Analyze tile coverage of tileset osm with the g grid. Default extent is the whole world and default zoom level is 0:</para>
<screen>
mapcache_detail --config mapcache.xml --tileset osm --grid g
</screen>
</informalexample>
<informalexample>
<para>Same as beforehand, with explicit zoom levels 9 to 12 and explicit extent covering Switzerland:</para>
<screen>
mapcache_detail --config mapcache.xml --tileset osm --grid g --zoom 9,12 --extent 663000,5751230,1167680,6075050
</screen>
</informalexample>
</refsect1>
</refentry>

358
mapcache_seed.1.xml Normal file
View File

@ -0,0 +1,358 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
<refentry id='mapcache_seed'>
<refmeta>
<refentrytitle>mapcache_seed</refentrytitle>
<manvolnum>1</manvolnum>
</refmeta>
<refnamediv>
<refname>mapcache_seed</refname>
<refpurpose>generate tiles to seed mapcache</refpurpose>
</refnamediv>
<refsynopsisdiv id='synopsis'>
<cmdsynopsis>
<command>mapcache_seed</command>
<arg choice='plain'><option>-c</option> <replaceable>/path/to/mapcache.xml</replaceable></arg>
<arg choice='opt'><replaceable>options</replaceable></arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1 id='description'>
<title>DESCRIPTION</title>
<para>
<command>mapcache_seed</command> is an advanced seeding tool for mapcache, whose main features are:
<itemizedlist>
<listitem override='bullet'>configurable number of seeding threads, to speed up the rendering</listitem>
<listitem override='bullet'>ability to reseed tiles older than a certain timestamp</listitem>
<listitem override='bullet'>ability to seed tiles given a shapefile/OGR datasource</listitem>
</itemizedlist>
</para>
</refsect1>
<refsect1 id='options'>
<title>OPTIONS</title>
<variablelist>
<varlistentry>
<term><option>-c</option></term>
<term><option>--config</option> <replaceable>file</replaceable></term>
<listitem>
<para>Path to the mapcache.xml configuration file that contains the tilesets that need to be seeded.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-C</option></term>
<term><option>--cache</option> <replaceable>override</replaceable></term>
<listitem>
<para>Override cache used by selected tileset (useful for selectively seeding fallback/multitier caches).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-t</option></term>
<term><option>--tileset</option> <replaceable>name</replaceable></term>
<listitem>
<para>Name of the tileset that must be seeded.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-g</option></term>
<term><option>--grid</option> <replaceable>name</replaceable></term>
<listitem>
<para>Name of the grid that must be seeded (the selected tileset must reference the given grid).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-z</option></term>
<term><option>--zoom</option> <replaceable>minzoom,maxzoom</replaceable></term>
<listitem>
<para>(Optional) Start and end zoom levels that must be seeded, separated by a comma, e.g. 0,6.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-M</option></term>
<term><option>--metasize</option> <replaceable>width,height</replaceable></term>
<listitem>
<para>Override metatile size while seeding, e.g. 8,8.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-e</option></term>
<term><option>--extent</option> <replaceable>minx,miny,maxx,maxy</replaceable></term>
<listitem>
<para>(Optional) Bounding box of the area to seed.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-o</option></term>
<term><option>--older</option> <replaceable>timestamp|now</replaceable></term>
<listitem>
<para>
(Optional) Only seed tiles that are older than the given value.
The value can either be the string "now", or a date formatted
like year/month/day hour:minute, e.g.: "2011/01/31 20:45".
(Note that a full timestamp should be quoted).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-n</option></term>
<term><option>--nthreads</option> <replaceable>number</replaceable></term>
<listitem>
<para>
Number of parallel threads that should be used to request
tiles from the WMS source. The default is 1, but can be set higher
if the WMS server can withstand parallel requests (as a rule of thumb,
the value chosen here should never be much higher than the number
of cpus on the WMS server). (Incompatible with
<option>-p</option>/<option>--nprocesses</option>).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-p</option></term>
<term><option>--nprocesses</option> <replaceable>number</replaceable></term>
<listitem>
<para>
Number of parallel processes that should be used to request
tiles from the WMS source. (Incompatible with
<option>-n</option>/<option>--nthreads</option>).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-P</option></term>
<term><option>--precent</option> <replaceable>number</replaceable></term>
<listitem>
<para>Percent of failed requests allowed from the last 1000 before we abort (default: 1%, set to 0 to abort on first error).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-L</option></term>
<term><option>--log-failed</option> <replaceable>file</replaceable></term>
<listitem>
<para>Log failed tiles to <replaceable>file</replaceable>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-R</option></term>
<term><option>--retry-failed</option> <replaceable>file</replaceable></term>
<listitem>
<para>Rtry failed requests logged to <replaceable>file</replaceable> by <option>--log-failed</option>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-m</option></term>
<term><option>--mode</option> <replaceable>seed|delete|transfer</replaceable></term>
<listitem>
<para>Mode the utility will be running in: either seed (default), delete or transfer.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-x</option></term>
<term><option>--transfer</option> <replaceable>tileset</replaceable></term>
<listitem>
<para>Name of tileset to transfer.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-D</option></term>
<term><option>--dimension</option> <replaceable>DIMENSION=VALUE</replaceable></term>
<listitem>
<para>
Used to specify which dimension to use if the tileset supports
dimensions. Can be used multiple times to set multiple
dimensions, e.g. <option>-D</option> "DIM1=VAL1"
<option>-D</option> "DIM2=VAL2".
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-h</option></term>
<term><option>--help</option></term>
<listitem>
<para>Show help.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-q</option></term>
<term><option>--quiet</option></term>
<listitem>
<para>Don't print progress messages to the standard output.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-f</option></term>
<term><option>--force</option></term>
<listitem>
<para>Force tile recreation even if it already exists.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-v</option></term>
<term><option>--verbose</option></term>
<listitem>
<para>Print verbose debugging info (if compiled in).</para>
</listitem>
</varlistentry>
</variablelist>
<formalpara>
<title>Optional Commandline options when using OGR/GEOS</title>
</formalpara>
<para>
At compile time, if OGR and GEOS where found on the system, the seeder
tool supports additional options to seed only the tiles that cover an
arbitrary geographical area.
</para>
<para>
<emphasis>Important:</emphasis> Note that for the time being, the OGR
datasource should be in the same projection as the grid you are seeding,
as there is no automatic reprojection from the datasource projection to
the grid projection.
</para>
<variablelist>
<varlistentry>
<term><option>-d</option></term>
<term><option>--ogr-datasource</option> <replaceable>datasource</replaceable></term>
<listitem>
<para>
OGR connection to the spatial source. Consult the OGR documentation
for all that is supported. In the simplest case (e.g. a Shapefile),
this is just the full filename of the shapefile.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-l</option></term>
<term><option>--ogr-layer</option> <replaceable>layer</replaceable></term>
<listitem>
<para>
(Optional) For datasources that contain multiple layers (e.g. postgis,
with multiple tables), determines which layer will be used.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-s</option></term>
<term><option>--ogr-sql</option> <replaceable>SQL</replaceable></term>
<listitem>
<para>OGR sql expression that can be applied (see http://www.gdal.org/ogr/ogr_sql.html).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-w</option></term>
<term><option>--ogr-where</option> <replaceable>where</replaceable></term>
<listitem>
<para>
SQL "where" expression to filter out returned values. This would
typically be used to select only the geometry of a given country
if the datasource contains all the world contours.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 id='notes'>
<title>NOTES</title>
<para>
The seeding utility must be run under the same user account as the user
running the webserver. This is required so the permissions on the tiles
created by the seeder are accessible by the webserver, and conversely so
the seeder has the rights to write files to directories created by the
webserver.
</para>
<para>
A sample seeding session goes like this:
</para>
<informalexample>
<screen>
[user@host]$ sudo www-data
[www-data@host]$ mapcache_seed -c /path/to/www/conf/mapcache.xml [options]
[www-data@host]$ logout
[user@host]$
</screen>
</informalexample>
</refsect1>
<refsect1 id='example'>
<title>EXAMPLE</title>
<informalexample>
<para>Seed the "osm" tileset with the "g"(google/web-mercator) grid:</para>
<screen>
mapcache_seed -c mapcache.xml -t osm -g g
</screen>
</informalexample>
<informalexample>
<para>Seed levels 0 through 12:</para>
<screen>
mapcache_seed -c mapcache.xml -t osm -g g -z 0,12
</screen>
</informalexample>
<informalexample>
<para>
Given a shapefile that contains the world country contours, seed only
the areas that are covered by land (i.e. skip the oceans). Also use 4
request threads in parallel:
</para>
<screen>
mapcache_seed -c mapcache.xml -t osm -g g -z 0,12 -n 4 -d /path/to/seed.shp
</screen>
</informalexample>
<informalexample>
<para>
Same as beforehand, but only seed the USA (notice the quote usage,
required to create valid sql with a single-quoted 'US':
</para>
<screen>
mapcache_seed -c mapcache.xml -t osm -g g -z 0,12 -n 4 -d /path/to/seed.shp -w "FIPS_A2='US'"
</screen>
</informalexample>
<informalexample>
<para>
Reseed levels 0 to 12 (this could also be done by deleting the cache for
levels 0 to 12 and doing a classic seed, but doing so this way does not
slow down the access from web clients):
</para>
<screen>
mapcache_seed -c mapcache.xml -t osm -g g -z 0,12 -o now
</screen>
</informalexample>
</refsect1>
</refentry>

150
mod_mapcache.spec Normal file
View File

@ -0,0 +1,150 @@
%global project_owner MapServer
%global project_name mapcache
Name: mod_mapcache
Version: 1.14.0
Release: 1%{?dist}
Summary: Caching server for WMS layers
Group: Development/Tools
%global dashver %(echo %version | sed 's|\\.|-|g')
License: MIT
URL: http://mapserver.org/trunk/en/mapcache/
Source: https://github.com/%{project_owner}/%{project_name}/releases/download/rel-%{dashver}/mapcache-%{version}.tar.gz
Source: mapcache.sysusers
Source: https://salsa.debian.org/debian-gis-team/mapcache/-/raw/master/debian/man/mapcache_detail.1.xml
Source: https://salsa.debian.org/debian-gis-team/mapcache/-/raw/master/debian/man/mapcache_seed.1.xml
Requires: httpd
Requires: libmapcache%{?_isa} = %{version}-%{release}
BuildRequires: chrpath
BuildRequires: cmake
BuildRequires: fcgi-devel
BuildRequires: gcc
BuildRequires: gdal-devel
BuildRequires: geos-devel
BuildRequires: httpd-devel
BuildRequires: libcurl-devel
BuildRequires: libjpeg-turbo-devel
BuildRequires: libmemcached-devel
BuildRequires: libpng-devel
BuildRequires: libtiff-devel
BuildRequires: pixman-devel
BuildRequires: proj-devel
BuildRequires: sqlite-devel
BuildRequires: systemd-rpm-macros
%global _description %{expand:
MapCache is a server that implements tile caching to speed up access to WMS layers.
The primary objectives are to be fast and easily deployable, while offering the
essential features (and more!) expected from a tile caching solution.}
%description %{_description}
This is the MapCache module for the Apache web server implementing OGC web
services. An alternative mapcache FastCGI program is available in
libmapcache-fcgi.
%pre
%sysusers_create_compat %{SOURCE1}
%package -n libmapcache
Summary: The shared library for mapcache
%description -n libmapcache %{_description}
The shared library files for libmapcache
%package -n libmapcache-devel
Summary: Development files for mapcache
%description -n libmapcache-devel %{_description}
Development files for mapcache; these files are needed when building binary packages
against libmapcache.
%package -n libmapcache-doc
Summary: Documentation files for mapcache
BuildArch: noarch
%description -n libmapcache-doc %{_description}
Documentation files for mapcache.
%package -n libmapcache-fcgi
Summary: fcgi implementation for mapcache
Requires: libmapcache%{?_isa} = %{version}-%{release}
%description -n libmapcache-fcgi %{_description}
This package contains the mapcache FastCGI program, as alternative to the
Apache module available in mod_mapcache.
%package -n libmapcache-tools
Summary: tools for mapcache
%description -n libmapcache-tools %{_description}
Provides command-line utilities for mapcache
%prep
%autosetup -n %{project_name}-%{version}
%build
#%cmake -DWITH_MEMCACHE=1 -DCMAKE_SKIP_BUILD_RPATH=TRUE .
%cmake -DCMAKE_INSTALL_LIBDIR=%{_lib} -DWITH_MEMCACHE=1 -DCMAKE_SKIP_BUILD_RPATH=TRUE .
%cmake_build
%install
%cmake_install
for f in \
%{buildroot}%{_bindir}/{mapcache_seed,mapcache.fcgi,mapcache_detail} \
%{buildroot}%{_libdir}/libmapcache.so* \
%{buildroot}%{_libdir}/httpd/modules/mod_mapcache.so;
do
chrpath --delete $f
done
install -p -D -m 0644 mapcache.xml %{buildroot}%{_sysconfdir}/mapcache.xml
install -p -D -m 0644 mapcache.xml.sample %{buildroot}%{_datadir}/mapcache/mapcache.xml.sample
install -p -D -d -m 0755 %{buildroot}%{_localstatedir}/cache/mapcache/
install -p -D -m 0644 %{SOURCE1} %{buildroot}%{_sysusersdir}/mapcache.conf
install -p -D -m 0644 %{SOURCE2} %{buildroot}%{_mandir}/man1/mapcache_detail.1.xml
install -p -D -m 0644 %{SOURCE3} %{buildroot}%{_mandir}/man1/mapcache_seed.1.xml
%files
%doc INSTALL.md README.md LICENSE.md
%{_libdir}/httpd/modules/mod_mapcache.so
%config(noreplace) %{_sysconfdir}/mapcache.xml
%{_datadir}/mapcache/mapcache.xml.sample
%files -n libmapcache
%{_libdir}/libmapcache.so.%{version}
%{_libdir}/libmapcache.so.1
%{_localstatedir}/cache/mapcache
%{_sysusersdir}/mapcache.conf
%files -n libmapcache-doc
%doc INSTALL.md README.md LICENSE.md
%{_mandir}/man1/mapcache_seed.1*
%{_mandir}/man1/mapcache_detail.1*
%files -n libmapcache-devel
%{_libdir}/libmapcache.so
%files -n libmapcache-fcgi
%{_bindir}/mapcache.fcgi
%files -n libmapcache-tools
%{_bindir}/mapcache_detail
%{_bindir}/mapcache_seed
%changelog
* Mon Mar 11 2024 Neil Hanlon <neil@shrug.pw> - 1.14.0-1
- Include mapcache.xml
- split into subpackages following debian
* Thu Feb 29 2024 Neil Hanlon <neil@shrug.pw> - 1.14.0-0
- Initial package based on work from ElNinijo