use C4::Context;
- use C4::Context("/path/to/koha.xml");
+ use C4::Context("/path/to/koha-conf.xml");
$config_value = C4::Context->config("config_variable");
=head1 DESCRIPTION
When a Koha script runs, it makes use of a certain number of things:
-configuration settings in F</etc/koha.xml>, a connection to the Koha
+configuration settings in F</etc/koha/koha-conf.xml>, a connection to the Koha
databases, and so forth. These things make up the I<context> in which
the script runs.
the C<&set_context> and C<&restore_context> functions, below.
By default, C4::Context reads the configuration from
-F</etc/koha.xml>. This may be overridden by setting the C<$KOHA_CONF>
+F</etc/koha/koha-conf.xml>. This may be overridden by setting the C<$KOHA_CONF>
environment variable to the pathname of a configuration file to use.
=head1 METHODS
# config
# A reference-to-hash whose keys and values are the
# configuration variables and values specified in the config
-# file (/etc/koha.xml).
+# file (/etc/koha/koha-conf.xml).
# dbh
# A handle to the appropriate database for this context.
# dbh_stack
# Zconn
# A connection object for the Zebra server
-use constant CONFIG_FNAME => "/etc/koha.xml";
+# Koha's main configuration file koha-conf.xml
+# is searched for according to this priority list:
+#
+# 1. Path supplied via use C4::Context '/path/to/koha-conf.xml'
+# 2. Path supplied in KOHA_CONF environment variable.
+# 3. Path supplied in INSTALLED_CONFIG_FNAME, as long
+# as value has changed from its default of
+# '__KOHA_CONF_DIR__/koha-conf.xml', as happens
+# when Koha is installed in 'standard' or 'single'
+# mode.
+# 4. Path supplied in CONFIG_FNAME.
+#
+# The first entry that refers to a readable file is used.
+
+use constant CONFIG_FNAME => "/etc/koha/koha-conf.xml";
# Default config file, if none is specified
+
+my $INSTALLED_CONFIG_FNAME = '__KOHA_CONF_DIR__/koha-conf.xml';
+ # path to config file set by installer
+ # __KOHA_CONF_DIR__ is set by rewrite-confg.PL
+ # when Koha is installed in 'standard' or 'single'
+ # mode. If Koha was installed in 'dev' mode,
+ # __KOHA_CONF_DIR__ is *not* rewritten; instead
+ # developers should set the KOHA_CONF environment variable
$context = undef; # Initially, no context is set
@context_stack = (); # Initially, no saved contexts
Returns an object containing the configuration variables. The object's
structure is a bit complex to the uninitiated ... take a look at the
-koha.xml file as well as the XML::Simple documentation for details. Or,
+koha-conf.xml file as well as the XML::Simple documentation for details. Or,
here are a few examples that may give you what you need:
The simple elements nested within the <config> element:
=item new
$context = new C4::Context;
- $context = new C4::Context("/path/to/koha.xml");
+ $context = new C4::Context("/path/to/koha-conf.xml");
Allocates a new context. Initializes the context from the specified
file, which defaults to either the file given by the C<$KOHA_CONF>
-environment variable, or F</etc/koha.xml>.
+environment variable, or F</etc/koha/koha-conf.xml>.
C<&new> does not set this context as the new default context; for
that, use C<&set_context>.
{
# If the $KOHA_CONF environment variable is set, use
# that. Otherwise, use the built-in default.
- $conf_fname = $ENV{"KOHA_CONF"} || CONFIG_FNAME;
+ if (exists $ENV{"KOHA_CONF"} and $ENV{'KOHA_CONF'} and -e $ENV{"KOHA_CONF"} and -s $ENV{"KOHA_CONF"}) {
+ $conf_fname = $ENV{"KOHA_CONF"};
+ } elsif ($INSTALLED_CONFIG_FNAME !~ /__KOHA_CONF_DIR/ and -e $INSTALLED_CONFIG_FNAME and -s $INSTALLED_CONFIG_FNAME) {
+ # NOTE: be careful -- don't change __KOHA_CONF_DIR in the above
+ # regex to anything else -- don't want installer to rewrite it
+ $conf_fname = $INSTALLED_CONFIG_FNAME;
+ } elsif (-e CONFIG_FNAME and -s CONFIG_FNAME) {
+ $conf_fname = CONFIG_FNAME;
+ } else {
+ warn "unable to locate Koha configuration file koha-conf.xml";
+ return undef;
+ }
}
# Load the desired config file.
$self = read_config_file($conf_fname);
C<$self>
-C<$server> one of the servers defined in the koha.xml file
+C<$server> one of the servers defined in the koha-conf.xml file
C<$async> whether this is a asynchronous connection
Internal function. Creates a new database connection from the data given in the current context and returns it.
-C<$server> one of the servers defined in the koha.xml file
+C<$server> one of the servers defined in the koha-conf.xml file
C<$async> whether this is a asynchronous connection
=item C<input arg:>
* $query could be a simple keyword or a complete CCL query wich is depending on your ccl file.
- * @servers is optionnal. default one is read on koha.xml
+ * @servers is optionnal. default one is read on koha-conf.xml
=item C<Output arg:>
* $error is a string which containt the description error if there is one. Else it's empty.
# Current maintainer MJR http://mjr.towers.org.uk/
# See http://www.koha.org/wiki/?page=KohaInstaller
#
-# 2007-11-05 Corrected CGI copy to include entire 'installer' subdir structure. -fbcit
+
+use strict;
+use warnings;
use ExtUtils::MakeMaker;
use POSIX;
+use File::Spec;
+my $DEBUG = 0;
die "perl 5.6.1 or later required" unless ($] >= 5.006001);
+# Hash up directory structure & files beginning with the directory we were called from (should be the base of koha)...
+
+my $dirtree = hashdir('.');
+my %result = ();
+
=head1 NAME
Makefile.PL - Koha packager and installer
Hash of file mappings
-=head2 CONFIGURE
-
-Maybe use prompt() here in future to get configuration values
-interactively at installation time.
-
=head2 PL_FILES
This is a hash of PL scripts to run after installation and
=cut
-WriteMakefile(
+=head2 target_map
+
+This is a hash mapping directories and files in the
+source tree to installation target directories. The rules
+for this mapping are:
+
+=over 4
+
+=item If a directory or file is specified, it and its
+contents will be copied to the installation target directory.
+
+=item If a subdirectory of a mapped directory is specified,
+its target overrides the parent's target for that subdirectory.
+
+=item The value of each map entry may either be a scalar containing
+one target or a reference to a hash containing 'target' and 'trimdir'
+keys.
+
+=item Any files at the top level of the source tree that are
+not included in the map will not be installed.
+
+=item Any directories at the top level of the source tree
+that are not included in the map will be installed in
+INTRANET_CGI_DIR. This is a sensible default given the
+current organization of the source tree, but (FIXME) it
+would be better to reorganize the source tree to better
+match the installation system, to allow adding new directories
+without having to adjust Makefile.PL each time. The idea
+is to make the C<$target_map> hash as minimal as possible.
+
+=back
+
+The permitted installation targets are:
+
+=over 4
+
+=item INTRANET_CGI_DIR
+
+CGI scripts for intranet (staff) interface.
+
+=item INTRANET_TMPL_DIR
+
+HTML templates for the intranet interface.
+
+=item INTRANET_WWW_DIR
+
+HTML files, images, etc. for DocumentRoot for the intranet interface.
+
+=item OPAC_CGI_DIR
+
+CGI scripts for OPAC (public) interface.
+
+=item OPAC_TMPL_DIR
+
+HTML templates for the OPAC interface.
+
+=item OPAC_WWW_DIR
+
+HTML files, images, etc. for DocumentRoot for the OPAC interface.
+
+=item PERL_MODULE_DIR
+
+Perl modules (at present just the C4 modules) that are intimately
+tied to Koha. Depending on the installation options, these
+may or may not be installed one of the standard directories
+in Perl's default @LIB.
+
+=item KOHA_CONF_DIR
+
+Directory for Koha configuration files.
+
+=item ZEBRA_CONF_DIR
+
+Directory for Zebra configuration files.
+
+=item ZEBRA_LOCK_DIR
+
+Directory for Zebra's lock files.
+
+=item ZEBRA_DATA_DIR
+
+Directory for Zebra's data files.
+
+=item ZEBRA_RUN_DIR
+
+Directory for Zebra's UNIX-domain sockets.
+
+=item MISC_DIR
+
+Directory for for miscellaenous scripts, among other
+things the translation toolkit and RSS feed tools.
+
+=item SCRIPT_DIR
+
+Directory for command-line scripts and daemons.
+
+=item MAN_DIR
+
+Directory for man pages created from POD -- will mostly
+contain information of interest to Koha developers.
+
+=item DOC_DIR
+
+Directory for Koha documentation accessed from the
+command-line, e.g., READMEs.
+
+=item LOG_DIR
+
+Directory for Apache and Zebra logs produced by Koha.
+
+=item NONE
+
+This is a dummy target used to explicitly state
+that a given file or directory is not to be installed.
+This is used either for parts of the installer itself
+or for development tools that are not applicable to a
+production installation.
+
+=back
+
+=cut
+
+my $target_map = {
+ './about.pl' => 'INTRANET_CGI_DIR',
+ './acqui' => 'INTRANET_CGI_DIR',
+ './admin' => 'INTRANET_CGI_DIR',
+ './authorities' => 'INTRANET_CGI_DIR',
+ './C4' => 'PERL_MODULE_DIR',
+ './C4/SIP/t' => 'NONE',
+ './C4/SIP/koha_test' => 'NONE',
+ './C4/tests' => 'NONE',
+ './catalogue' => 'INTRANET_CGI_DIR',
+ './cataloguing' => 'INTRANET_CGI_DIR',
+ './changelanguage.pl' => 'INTRANET_CGI_DIR',
+ './check_sysprefs.pl' => 'NONE',
+ './circ' => 'INTRANET_CGI_DIR',
+ './edithelp.pl' => 'INTRANET_CGI_DIR',
+ './etc' => { target => 'KOHA_CONF_DIR', trimdir => -1 },
+ './etc/zebradb' => { target => 'ZEBRA_CONF_DIR', trimdir => -1 },
+ './help.pl' => 'INTRANET_CGI_DIR',
+ './installer-CPAN.pl' => 'NONE',
+ './installer' => 'INTRANET_CGI_DIR',
+ './koha-tmpl/errors' => {target => 'INTRANET_CGI_DIR', trimdir => 2},
+ './koha-tmpl/intranet-tmpl' => {target => 'INTRANET_TMPL_DIR', trimdir => -1},
+ './koha-tmpl/opac-tmpl' => {target => 'OPAC_TMPL_DIR', trimdir => -1},
+ './kohaversion.pl' => 'INTRANET_CGI_DIR',
+ './labels' => 'INTRANET_CGI_DIR',
+ './mainpage.pl' => 'INTRANET_CGI_DIR',
+ './Makefile.PL' => 'NONE',
+ './MANIFEST.SKIP' => 'NONE',
+ './members' => 'INTRANET_CGI_DIR',
+ './misc' => { target => 'SCRIPT_DIR', trimdir => -1 },
+ './misc/info' => { target => 'DOC_DIR', trimdir => 2 },
+ './misc/release notes' => { target => 'DOC_DIR', trimdir => 2 },
+ './misc/translator' => { target => 'MISC_DIR', trimdir => 2 },
+ './misc/installer_devel_notes' => 'NONE',
+ './opac' => 'OPAC_CGI_DIR',
+ './README.txt' => 'NONE',
+ './reports' => 'INTRANET_CGI_DIR',
+ './reserve' => 'INTRANET_CGI_DIR',
+ './reviews' => 'INTRANET_CGI_DIR',
+ './rewrite-config.PL' => 'NONE',
+ './reviews' => 'INTRANET_CGI_DIR',
+ './rss' => 'MISC_DIR',
+ './serials' => 'INTRANET_CGI_DIR',
+ './skel' => 'NONE',
+ './skel/var/log/koha' => { target => 'LOG_DIR', trimdir => -1 },
+ './skel/var/run/koha/zebradb' => { target => 'ZEBRA_RUN_DIR', trimdir => -1 },
+ './skel/var/lock/koha/zebradb/authorities' => { target => 'ZEBRA_LOCK_DIR', trimdir => 6 },
+ './skel/var/lib/koha/zebradb/authorities/key' => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
+ './skel/var/lib/koha/zebradb/authorities/register' => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
+ './skel/var/lib/koha/zebradb/authorities/shadow' => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
+ './skel/var/lib/koha/zebradb/authorities/tmp' => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
+ './skel/var/lock/koha/zebradb/biblios' => { target => 'ZEBRA_LOCK_DIR', trimdir => 6 },
+ './skel/var/lib/koha/zebradb/biblios/key' => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
+ './skel/var/lib/koha/zebradb/biblios/register' => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
+ './skel/var/lib/koha/zebradb/biblios/shadow' => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
+ './skel/var/lib/koha/zebradb/biblios/tmp' => { target => 'ZEBRA_DATA_DIR', trimdir => 6 },
+ './sms' => 'INTRANET_CGI_DIR',
+ './suggestion' => 'INTRANET_CGI_DIR',
+ './svc' => 'INTRANET_CGI_DIR',
+ './t' => 'NONE',
+ './tmp' => 'NONE', # FIXME need to determine whether
+ # Koha generates any persistent temp files
+ # that should go in /var/tmp/koha
+ './tools' => 'INTRANET_CGI_DIR',
+ './virtualshelves' => 'INTRANET_CGI_DIR',
+ # ignore files and directories created by the install itself
+ './pm_to_blib' => 'NONE',
+ './blib' => 'NONE',
+};
+
+=head1 CONFIGURATION OPTIONS
+
+The following configuration options are used by the installer.
+
+=over 4
+
+=item INSTALL_MODE
+
+Specifies whether installation will be FHS-compliant (default,
+assumes user has root), put everything under
+a single directory (for users installing on a web host
+that allows CGI scripts and a MySQL database but not root
+access), or development (for a developer who wants to run
+Koha from a git clone with no fuss).
+
+=item INSTALL_BASE
+
+Directory under which most components will go. Default
+value will vary depending on INSTALL_MODE.
+
+=item DB_TYPE
+
+Type of DBMS (e.g., mysql or Pg).
+
+=item DB_HOST
+
+Name of DBMS server.
+
+=item DB_PORT
+
+Port that DBMS server is listening on.
+
+=item DB_NAME
+
+Name of the DBMS database for Koha.
+
+=item DB_USER
+
+Name of DBMS user account for Koha's database.
+
+=item DB_PASS
+
+Pasword of DMBS user account for Koha's database.
+
+=item INSTALL_ZEBRA
+
+Whether to install Zebra configuration files and data
+directories.
+
+=item ZEBRA_MARC_FORMAT
+
+Specifies format of MARC records to be indexed by Zebra.
+
+=item ZEBRA_LANGUAGE
+
+Specifies primary language of records that will be
+indexed by Zebra.
+
+=item ZEBRA_USER
+
+Internal Zebra user account for the index.
+
+=item ZEBRA_PASS
+
+Internal Zebra user account's password.
+
+=item KOHA_USER
+
+System user account that will own Koha's files.
+
+=item KOHA_GROUP
+
+System group that will own Koha's files.
+
+=back
+
+=cut
+
+# default configuration options
+my %config_defaults = (
+ 'DB_TYPE' => 'mysql',
+ 'DB_HOST' => 'localhost',
+ 'DB_NAME' => 'koha',
+ 'DB_USER' => 'kohaadmin',
+ 'DB_PASS' => 'katikoan',
+ 'INSTALL_ZEBRA' => 'yes',
+ 'ZEBRA_MARC_FORMAT' => 'marc21',
+ 'ZEBRA_LANGUAGE' => 'en',
+ 'ZEBRA_USER' => 'kohauser',
+ 'ZEBRA_PASS' => 'zebrastripes',
+ 'KOHA_USER' => 'koha',
+ 'KOHA_GROUP' => 'koha',
+);
+
+# set some default configuratio options based on OS
+# more conditions need to be added for other OS's
+# this should probably also incorporate usage of Win32::GetOSName() and/or Win32::GetOSVersion()
+# to allow for more granular decisions based on which Win32 platform
+
+warn "Your platform appears to be $^O.\n" if $DEBUG;
+
+if ( $^O eq 'MSWin32' ) {
+ # Most Unix2Win32 ports seem to poke everything into the Program Files directory
+ # this could be changed to put some files (ie. libraries) into system32, etc.
+ $config_defaults{'INSTALL_MODE'} = 'single';
+ $config_defaults{'INSTALL_BASE'} = 'c:/progra~1/koha'; # Use 8.3 names to be safe...
+}
+elsif ( $^O eq 'cygwin' ) {
+ # Most Unix2Win32 ports seem to poke everything into the Program Files directory
+ # this could be changed to put some files (ie. libraries) into system32, etc.
+ $config_defaults{'INSTALL_MODE'} = 'single';
+ $config_defaults{'INSTALL_BASE'} = 'c:/progra~1/koha'; # Use 8.3 names to be safe...
+}
+else {
+ $config_defaults{'INSTALL_MODE'} = 'standard';
+ $config_defaults{'INSTALL_BASE'} = '/usr/share/koha';
+}
+
+# valid values for certain configuration options
+my %valid_config_values = (
+ 'INSTALL_MODE' => { 'standard' => 1, 'single' => 1, 'dev' => 1 },
+ 'DB_TYPE' => { 'mysql' => 1, 'Pg' => 1 },
+ 'INSTALL_ZEBRA' => { 'yes' => 1, 'no' => 1 },
+ 'ZEBRA_MARC_FORMAT' => { 'marc21' => 1, 'unimarc' => 1 }, # FIXME should generate from contents of distributation
+ 'ZEBRA_LANGUAGE' => { 'en' => 1, 'fr' => 1 }, # FIXME should generate from contents of distribution
+);
+
+my %config = get_configuration(\%config_defaults, \%valid_config_values);
+my ($target_directories, $skip_directories) = get_target_directories(\%config);
+display_configuration(\%config, $target_directories);
+my $file_map = {};
+get_file_map($target_map, $dirtree, $file_map, $config{'INSTALL_ZEBRA'} eq "yes" ? 1: 0);
+my $pl_files = {
+ 'rewrite-config.PL' => [
+ 'blib/KOHA_CONF_DIR/koha-conf.xml',
+ 'blib/KOHA_CONF_DIR/koha-httpd.conf'
+ ],
+ 'fix-perl-path.PL' => [ # this script ensures the correct shebang line for the platform installed on...
+ 'blib'
+ ]
+};
+
+if ($config{'INSTALL_ZEBRA'} eq "yes") {
+ push @{ $pl_files->{'rewrite-config.PL'} }, (
+ 'blib/ZEBRA_CONF_DIR/etc/passwd',
+ 'blib/ZEBRA_CONF_DIR/zebra-biblios.cfg',
+ 'blib/ZEBRA_CONF_DIR/zebra-authorities.cfg'
+ );
+}
+
+if ($config{'INSTALL_MODE'} ne "dev") {
+ push @{ $pl_files->{'rewrite-config.PL'} }, (
+ 'blib/PERL_MODULE_DIR/C4/Context.pm',
+ 'blib/SCRIPT_DIR/kohalib.pl'
+ );
+}
+
+WriteMakefile(
NAME => 'koha',
#VERSION => strftime('2.9.%Y%m%d%H',gmtime),
- VERSION_FROM => 'C4/Context.pm',
+ VERSION_FROM => 'kohaversion.pl',
ABSTRACT => 'Award-winning integrated library system (ILS) and Web OPAC',
AUTHOR => 'Koha Developers <koha-devel@nongnu.org>',
NO_META => 1,
PREREQ_PM => {
+'Algorithm::CheckDigits' => 0.48,
'Biblio::EndnoteStyle' => 0.05,
'CGI' => 3.15,
'CGI::Carp' => 1.29,
'Class::Accessor' => 0.30,
'DBD::mysql' => 3.0008,
'DBI' => 1.53,
+'Data::ICal' => 0.13,
'Data::Dumper' => 2.121_08,
'Date::Calc' => 5.4,
+'Date::ICal' => 1.72,
'Date::Manip' => 5.44,
'Digest::MD5' => 2.36,
'File::Temp' => 0.16,
'LWP::UserAgent' => 2.033,
'Lingua::Stem' => 0.82,
'List::Util' => 1.18,
+'List::MoreUtils' => 0.22,
'Locale::Language' => 2.07,
'MARC::Charset' => 0.98,
-'MARC::Crosswalk::DublinCore' => 0.03,
+'MARC::Crosswalk::DublinCore' => 0.02,
'MARC::File::XML' => 0.88,
'MARC::Record' => 2.00,
-'MARC::Crosswalk::DublinCore' => 0.02,
'MIME::Base64' => 3.07,
'MIME::QuotedPrint' => 3.07,
'Mail::Sendmail' => 0.79,
+'Net::LDAP' => 0.34,
+'Net::LDAP::Filter' => 0.34,
'Net::Z3950::ZOOM' => 1.16,
'PDF::API2' => 2.000,
'PDF::API2::Page' => 2.000,
'PDF::API2::Util' => 2.000,
'PDF::Reuse' => 0.33,
'PDF::Reuse::Barcode' => 0.05,
+'POE' => 0.9999,
'POSIX' => 1.09,
'Schedule::At' => 1.06,
'Term::ANSIColor' => 1.10,
},
# File tree mapping
- PM => map_tree(),
+ PM => $file_map,
- # disable tests
- 'test' => {TESTS => 't/dummy.t'},
+ # Man pages generated from POD
+ INSTALLMAN1DIR => File::Spec->catdir($target_directories->{'MAN_DIR'}, 'man1'),
+ INSTALLMAN3DIR => File::Spec->catdir($target_directories->{'MAN_DIR'}, 'man3'),
-# CONFIGURE => sub {
-# # Ask for options with prompt($question,$default) calls here?
-# return { macro => { 'export TEST' => '755' } }
-# },
+ PL_FILES => $pl_files,
- PL_FILES => { # generator => target(s)
- 'rewrite-config.PL' => [
- '$(PREFIX)/share/koha/etc/koha-conf.xml',
- '$(PREFIX)/share/koha/etc/koha-httpd.conf',
- '$(PREFIX)/share/koha/etc/zebradb/etc/passwd',
- '$(PREFIX)/share/koha/etc/zebradb/zebra-biblios.cfg',
- '$(PREFIX)/share/koha/etc/zebradb/zebra-authorities.cfg'
- ]
- }
-# 'opac/getfromintranet.PL' => ['$(INST_LIBDIR)/opac/cgi-bin/detail.pl','$(INST_LIBDIR)/opac/cgi-bin/moredetail.pl','$(INST_LIBDIR)/opac/cgi-bin/search.pl','$(INST_LIBDIR)/opac/cgi-bin/subjectsearch.pl','$(INST_LIBDIR)/opac/cgi-bin/logout.pl'],
-# 'misc/koha.conf.PL' => '$(INST_LIBDIR)/../etc/koha.conf',
-# 'misc/apache-koha.conf.PL' => '$(INST_LIBDIR)/../etc/apache-koha.conf',
-# 'misc/koha.sql.PL' => '$(INST_LIBDIR)/intranet/scripts/koha.sql',
-# 'z3950/z3950-daemon-options.PL' => '$(INST_LIBDIR)/intranet/scripts/z3950daemon/z3950-daemon-options',
-# # fake target to check permissions
-# 'misc/chmod.PL' => '$(INST_LIBDIR)/fake-target'
-# }
- # need to set ownerships
- # need to load koha.sql
- # need to link koha-httpd.conf
- # need to start z3950-daemon
);
=head1 FUNCTIONS
-=head2 map_tree
+=head2 hashdir
-This function lists all files and where to install each one.
-It returns a hash reference suitable for the PM variable above.
+This function recurses through the directory structure and builds
+a hash of hashes containing the structure with arrays holding filenames.
+This directory hashing routine was taken from BrowserUK @ http://www.perlmonks.org/?node_id=219919
=cut
-sub map_tree {
- my %result => ();
+sub hashdir{
+ my $dir = shift;
+ opendir my $dh, $dir or die $!;
+ my $tree = {}->{$dir} = {};
+ while( my $file = readdir($dh) ) {
+ next if $file =~ m/^\.{1,2}/ and $file !~ /^\.htaccess/; # .htaccess is a special case
+ my $path = $dir .'/' . $file;
+ $tree->{$file} = hashdir($path), next if -d $path;
+ push @{$tree->{'.'}}, $file;
+ }
+ return $tree;
+}
+
+=head2 get_file_map
+
+This function combines the target_map and file hash to
+map each source file to its destination relative to
+the set of installation targets.
-=pod
+Output will be a hash mapping from each source file
+to its destination value, like this:
-C4/*.pm is copied to perl's lib namespace.
+'mainpage.pl' => '$(INTRANET_CGI_DIR)/mainpage.pl'
=cut
- foreach my $src (glob("C4/*.pm")) {
- $result{$src} = '$(INST_LIBDIR)/'.$src;
- }
-=pod
+sub get_file_map {
+ my $target_map = shift;
+ my $dirtree = shift;
+ my $file_map = shift;
+ my $install_zebra = shift;
+ my $curr_path = @_ ? shift : ['.'];
-CGIs are copied to $(PREFIX)/lib/cgi-bin/koha/
-and other scripts to koha/
+ # Traverse the directory tree.
+ # For each file or directory, identify the
+ # most specific match in the target_map
+ foreach my $dir (sort keys %{ $dirtree }) {
+ if ($dir eq '.') {
+ # deal with files in directory
+ foreach my $file (sort @{ $dirtree->{$dir} }) {
+ my $targetdir = undef;
+ my $matchlevel = undef;
+ # first, see if there is a match on this specific
+ # file in the target map
+ my $filepath = join("/", @$curr_path, $file);
+ if (exists $target_map->{$filepath}) {
+ $targetdir = $target_map->{$filepath};
+ $matchlevel = scalar(@$curr_path) + 1;
+ } else {
+ # no match on the specific file; look for
+ # a directory match
+ for (my $i = scalar(@$curr_path) - 1; $i >= 0; $i--) {
+ my $dirpath = join("/", @$curr_path[0..$i]);
+ if (exists $target_map->{$dirpath}) {
+ $targetdir = $target_map->{$dirpath};
+ $matchlevel = $i + 1;
+ last;
+ }
+ }
+ }
+ if (defined $targetdir) {
+ _add_to_file_map($file_map, $targetdir, $curr_path, $file, $matchlevel, $install_zebra);
+ } else {
+ my $path = join("/", @$curr_path);
+ print "failed to map: $path/$file\n" if $DEBUG;
+ }
+ }
+ } else {
+ # dealing with subdirectory
+ push @$curr_path, $dir;
+ get_file_map($target_map, $dirtree->{$dir}, $file_map, $install_zebra, $curr_path);
+ pop @$curr_path;
+ }
+ }
+}
-=cut
- foreach my $src ("mainpage.pl","help.pl","kohaversion.pl",glob("*/*.pl"),glob("installer/*"),glob("installer/*/*/*/*"),glob("*/*/*.pl"),glob("*/*/*/*.pl")) {
- if ($src =~ /(misc|updater|rss)\//) {
- $result{$src} = '$(INST_LIBDIR)/koha/'.$src;
- } else {
- $result{$src} = '$(PREFIX)/lib/cgi-bin/koha/'.$src;
- }
- }
+sub _add_to_file_map {
+ my $file_map = shift;
+ my $targetdir = shift;
+ my $curr_path = shift;
+ my $file = shift;
+ my $matchlevel = shift;
+ my $install_zebra = shift;
+ my $dest_path = @_ ? shift : $curr_path;
+
+ # The target can be one of the following:
+ # 1. scalar representing target symbol
+ # 2. hash ref containing target and trimdir keys
+ #
+ # Consequently, this routine traverses this structure,
+ # calling itself recursively, until it deals with
+ # all of the scalar target symbols.
+ if (ref $targetdir eq 'HASH') {
+ my $subtarget = $targetdir->{target};
+ if (exists $targetdir->{trimdir}) {
+ # if we get here, we've specified that
+ # rather than installing the file to
+ # $(TARGET)/matching/dirs/subdirs/file,
+ # we want to install it to
+ # $(TARGET)/subdirs/file
+ #
+ # Note that this the only place where
+ # $matchlevel is used.
+ my @new_dest_path = @$dest_path;
+ if ($targetdir->{trimdir} == -1) {
+ splice @new_dest_path, 0, $matchlevel;
+ } else {
+ splice @new_dest_path, 0, $targetdir->{trimdir};
+ }
+ _add_to_file_map($file_map, $subtarget, $curr_path, $file, $matchlevel, $install_zebra, \@new_dest_path);
+ } else {
+ # actually getting here means that the
+ # target was unnecessarily listed
+ # as a hash, but we'll forgive that
+ _add_to_file_map($file_map, $subtarget, $curr_path, $file, $matchlevel, $install_zebra);
+ }
+ } elsif ($targetdir ne 'NONE' and $targetdir ne '') {
+ my $source = File::Spec->catfile(@$curr_path, $file);
+ my $destination = File::Spec->catfile('blib', $targetdir, @$dest_path, $file);
+ #print "$source => $destination\n"; # DEBUG
+ # quote spaces in file names
+ # FIXME: this is of questionable portability and
+ # probably depends on user's make recognizing this
+ # quoting syntax -- probably better to remove
+ # spaces and shell metacharacters from all file names
+ $source =~ s/ /\\ /g;
+ $destination =~ s/ /\\ /g;
+
+ $file_map->{$source} = $destination unless (!$install_zebra and $targetdir =~ /ZEBRA/);
+ }
+}
-=pod
+=head2 get_configuration_options
-Templates are copied to koha/templates,
+This prompts the user for various configuration options.
=cut
- foreach my $src (glob("koha-tmpl/*"),glob("koha-tmpl/intranet-tmpl/*/*/*"),glob("koha-tmpl/intranet-tmpl/*/*/*/*"),glob("koha-tmpl/intranet-tmpl/*/*/*/*/*"),glob("koha-tmpl/opac-tmpl/*/*/*"),glob("koha-tmpl/opac-tmpl/*/*/*/*"),glob("koha-tmpl/opac-tmpl/*/*/*/*/*")) {
-=pod
+sub get_configuration {
+ my $defaults = shift;
+ my $valid_values = shift;
+ my %config = ();
+
+ my $msg = q(
+By default, Koha can be installed in one of three ways:
+
+standard: Install files in conformance with the Filesystem
+ Hierarchy Standard (FHS). This is the default mode
+ and should be used when installing a production
+ Koha system. On Unix systems, root access is
+ needed to complete a standard installation.
+
+single: Install files under a single directory. This option
+ is useful for installing Koha without root access, e.g.,
+ on a web host that allows CGI scripts and MySQL databases
+ but requires the user to keep all files under the user's
+ HOME directory.
+
+dev: Create a set of symbolic links and configuration files to
+ allow Koha to run directly from the source distribution.
+ This mode is useful for developers who want to run
+ Koha from a git clone.
+
+Installation mode);
+ $msg .= _add_valid_values_disp('INSTALL_MODE', $valid_values);
+ $config{'INSTALL_MODE'} = _get_value('INSTALL_MODE', $msg, $defaults->{'INSTALL_MODE'}, $valid_values);
+
+ # set message and default value for INSTALL_BASE
+ # depending on value of INSTALL_MODE
+ my $install_base_default = $defaults->{'INSTALL_BASE'};
+ if ($config{'INSTALL_MODE'} eq 'dev') {
+ $msg = q(
+Please specify the directory in which to install Koha's
+active configuration files and (if applicable) the
+Zebra database. Koha's CGI scripts and templates will
+be run from the current directory.
-excluding non-files and whitespace in filenames.
+Configuration directory:);
+ # FIXME - home directory portability consideration apply
+ $install_base_default = (exists $ENV{'HOME'}) ? "$ENV{'HOME'}/koha-dev" : "$defaults->{'INSTALL_BASE'}-dev";
+ } elsif ($config{'INSTALL_MODE'} eq 'single') {
+ $msg = "\nPlease specify the directory in which to install Koha";
+ # FIXME -- we're assuming under a 'single' mode install
+ # that user will likely want to install under the home
+ # directory. This is OK in and of itself, but we should
+ # use File::HomeDir to locate the home directory portably.
+ # This is deferred for now because File::HomeDir is not yet
+ # core.
+ # --we must also keep this portable to the major OS's -fbcit
+ $install_base_default = (exists $ENV{'HOME'}) ? "$ENV{'HOME'}/koha" : $defaults->{'INSTALL_BASE'};
+ } else {
+ # must be standard
+ $msg = q(
+Please specify the directory under which most Koha files
+will be installed.
+
+Note that if you are planning in installing more than
+one instance of Koha, you may want to modify the last
+component of the directory path, which will be used
+as the package name in the FHS layout.
+
+Base installation directory);
+ }
+ $config{'INSTALL_BASE'} = _get_value('INSTALL_BASE', $msg, $install_base_default, $valid_values);
+
+ $config{'INSTALL_BASE'} = File::Spec->rel2abs($config{'INSTALL_BASE'});
+ print "INSTALL_BASE=$config{'INSTALL_BASE'}\r\n" if $DEBUG;
+ if ($config{'INSTALL_MODE'} eq "standard") {
+ $msg = q(
+Since you are using the 'standard' install
+mode, you should run 'make install' as root.
+However, it is recommended that a non-root
+user (on Unix and Linux platforms) have
+ownership of Koha's files, including the
+Zebra indexes if applicable.
+
+Please specify a user account. This
+user account does not need to exist
+right now, but it needs to exist
+before you run 'make install'. Please
+note that for security reasons, this
+user should not be the same as the user
+account Apache runs under.
+
+User account);
+ $config{'KOHA_USER'} = _get_value('KOHA_USER', $msg, $defaults->{'KOHA_USER'}, $valid_values);
+
+ $msg = q(
+Please specify the group that should own
+Koha's files. As above, this group need
+not exist right now, but should be created
+before you run 'make install'.
+
+Group);
+ $config{'KOHA_GROUP'} = _get_value('KOHA_GROUP', $msg, $defaults->{'KOHA_GROUP'}, $valid_values);
+ }
+
+ $msg = q(
+Please specify which database engine you will use
+to store data in Koha. The choices are MySQL and
+PostgreSQL; please note that at the moment
+PostgreSQL support is highly experimental.
+
+DBMS to use);
+ $msg .= _add_valid_values_disp('DB_TYPE', $valid_values);
+ $config{'DB_TYPE'} = _get_value('DB_TYPE', $msg, $defaults->{'DB_TYPE'}, $valid_values);
+
+ $msg = q(
+Please specify the name or address of your
+database server. Note that the database
+does not have to exist at this point, it
+can be created after running 'make install'
+and before you try using Koha for the first time.
+
+Database server);
+ $config{'DB_HOST'} = _get_value('DB_HOST', $msg, $defaults->{'DB_HOST'}, $valid_values);
+
+ $msg = q(
+Please specify the port used to connect to the
+DMBS);
+ my $db_port_default = $config{'DB_TYPE'} eq 'mysql' ? '3306' : '5432';
+ $config{'DB_PORT'} = _get_value('DB_PORT', $msg, $db_port_default, $valid_values);
+
+ $msg = q(
+Please specify the name of the database to be
+used by Koha);
+ $config{'DB_NAME'} = _get_value('DB_NAME', $msg, $defaults->{'DB_NAME'}, $valid_values);
+
+ $msg = q(
+Please specify the user that owns the database to be
+used by Koha);
+ $config{'DB_USER'} = _get_value('DB_USER', $msg, $defaults->{'DB_USER'}, $valid_values);
+
+ $msg = q(
+Please specify the password of the user that owns the
+database to be used by Koha);
+ $config{'DB_PASS'} = _get_value('DB_PASS', $msg, $defaults->{'DB_PASS'}, $valid_values);
+
+ $msg = q(
+Koha can use the Zebra search engine for high-performance
+searching of bibliographic and authority records. If you
+have installed the Zebra software and would like to use it,
+please answer 'yes' to the following question. Otherwise,
+Koha will default to using its internal search engine.
+
+Please note that if you choose *NOT* to install Zebra,
+koha-conf.xml will still contain some references to Zebra
+settings. Those references will be ignored by Koha.
+
+Install the Zebra configuration files?);
+ $msg .= _add_valid_values_disp('INSTALL_ZEBRA', $valid_values);
+ $config{'INSTALL_ZEBRA'} = _get_value('INSTALL_ZEBRA', $msg, $defaults->{'INSTALL_ZEBRA'}, $valid_values);
+
+ if ($config{'INSTALL_ZEBRA'} eq 'yes') {
+ $msg = q(
+Since you've chosen to use Zebra with Koha,
+you must specify the primary MARC format of the
+records to be indexed by Zebra.
+
+Koha provides Zebra configuration files for MARC 21
+and UNIMARC.
+
+MARC format for Zebra indexing);
+ $msg .= _add_valid_values_disp('ZEBRA_MARC_FORMAT', $valid_values);
+ $config{'ZEBRA_MARC_FORMAT'} = _get_value('ZEBRA_MARC_FORMAT', $msg, $defaults->{'ZEBRA_MARC_FORMAT'}, $valid_values);
+ $msg = q(
+Koha supplies Zebra configuration files tuned for
+searching either English (en) or French (fr) MARC
+records.
+
+Primary language for Zebra indexing);
+ $msg .= _add_valid_values_disp('ZEBRA_LANGUAGE', $valid_values);
+ $config{'ZEBRA_LANGUAGE'} = _get_value('ZEBRA_LANGUAGE', $msg, $defaults->{'ZEBRA_LANGUAGE'}, $valid_values);
+
+ $msg = q(
+Please specify Zebra database user);
+ $config{'ZEBRA_USER'} = _get_value('ZEBRA_USER', $msg, $defaults->{'ZEBRA_USER'}, $valid_values);
+
+ $msg = q(
+Please specify the Zebra database password);
+ $config{'ZEBRA_PASS'} = _get_value('ZEBRA_PASS', $msg, $defaults->{'ZEBRA_PASS'}, $valid_values);
+
+ }
+
+ print "\n\n";
+ return %config;
+}
+
+sub _add_valid_values_disp {
+ my $key = shift;
+ my $valid_values = shift;
+
+ my $disp = "";
+ if (exists $valid_values->{$key}) {
+ $disp = " (" . join(", ", sort keys %{ $valid_values->{$key} }) . ")";
+ }
+ return $disp;
+}
+
+sub _get_value {
+ my $key = shift;
+ my $msg = shift;
+ my $default = shift;
+ my $valid_values = shift;
+
+ # override default value from environment
+ if (exists $ENV{$key}) {
+ $default = $ENV{$key};
+ $msg .= " (default from environment)";
+ }
+
+ my $val = prompt($msg, $default);
+
+ while (exists $valid_values->{$key} and
+ $val ne $default and
+ not exists $valid_values->{$key}->{$val}) {
+ my $retry_msg = "Value '$val' is not a valid option.\n";
+ $retry_msg .= "Please enter a value";
+ $retry_msg .= _add_valid_values_disp($key, $valid_values);
+ $val = prompt($retry_msg, $default);
+ }
+ return $val;
+}
+
+=head2 get_target_directories
+
+Creates a hash mapping from symbols for installation target
+directories to actual directory paths.
+
+Also returns a hash indicating targets for which
+files need not be copied -- this is used for the 'dev'
+mode installation, where some files are installed in place.
=cut
- if ((-f $src) && ($src !~ /(\s)/)) {
- $result{$src} = '$(INST_LIBDIR)/koha/templates/'.$src;
+
+sub get_target_directories {
+ my $config = shift;
+
+ my $base = $config->{'INSTALL_BASE'};
+ my $mode = $config->{'INSTALL_MODE'};
+
+ # get last component of install base directory
+ # to treat as package name
+ my ($volume, $directories, $file) = File::Spec->splitpath($base, 1);
+
+ my @basedir = File::Spec->splitdir($directories);
+
+ # for Win32 we need to prepend the volume to the directory path
+ if ( $^O eq 'MSWin32' ) { shift @basedir; unshift @basedir, $volume; }
+ elsif ( $^O eq 'cygwin' ) { shift @basedir; unshift @basedir, 'c:'; } # in a cygwin environment, $volume is returned empty
+
+ my $package = pop @basedir;
+
+
+ my %dirmap = ();
+ my %skipdirs = ();
+ if ($mode eq 'single') {
+ $dirmap{'INTRANET_CGI_DIR'} = File::Spec->catdir(@basedir, $package, 'intranet', 'cgi-bin');
+ $dirmap{'INTRANET_TMPL_DIR'} = File::Spec->catdir(@basedir, $package, 'intranet', 'htdocs', 'intranet-tmpl');
+ $dirmap{'INTRANET_WWW_DIR'} = File::Spec->catdir(@basedir, $package, 'intranet', 'htdocs');
+ $dirmap{'OPAC_CGI_DIR'} = File::Spec->catdir(@basedir, $package, 'opac', 'cgi-bin');
+ $dirmap{'OPAC_TMPL_DIR'} = File::Spec->catdir(@basedir, $package, 'opac', 'htdocs', 'opac-tmpl');
+ $dirmap{'OPAC_WWW_DIR'} = File::Spec->catdir(@basedir, $package, 'opac', 'htdocs');
+ $dirmap{'PERL_MODULE_DIR'} = File::Spec->catdir(@basedir, $package, 'lib');
+ $dirmap{'KOHA_CONF_DIR'} = File::Spec->catdir(@basedir, $package, 'etc');
+ $dirmap{'ZEBRA_CONF_DIR'} = File::Spec->catdir(@basedir, $package, 'etc', 'zebradb');
+ $dirmap{'MISC_DIR'} = File::Spec->catdir(@basedir, $package, 'misc');
+ $dirmap{'SCRIPT_DIR'} = File::Spec->catdir(@basedir, $package, 'bin');
+ $dirmap{'MAN_DIR'} = File::Spec->catdir(@basedir, $package, 'man');
+ $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
+ $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'zebradb');
+ $dirmap{'LOG_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'log');
+ $dirmap{'ZEBRA_DATA_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
+ $dirmap{'ZEBRA_RUN_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
+ } elsif ($mode eq 'dev') {
+ my $curdir = File::Spec->rel2abs(File::Spec->curdir());
+ $dirmap{'INTRANET_CGI_DIR'} = File::Spec->catdir($curdir);
+ $skipdirs{'INTRANET_CGI_DIR'} = 1;
+ $dirmap{'INTRANET_TMPL_DIR'} = File::Spec->catdir($curdir, 'koha-tmpl', 'intranet-tmpl');
+ $skipdirs{'INTRANET_TMPL_DIR'} = 1;
+ $dirmap{'INTRANET_WWW_DIR'} = File::Spec->catdir($curdir, 'koha-tmpl');
+ $skipdirs{'INTRANET_WWW_DIR'} = 1;
+ $dirmap{'OPAC_CGI_DIR'} = File::Spec->catdir($curdir, 'opac');
+ $skipdirs{'OPAC_CGI_DIR'} = 1;
+ $dirmap{'OPAC_TMPL_DIR'} = File::Spec->catdir($curdir, 'koha-tmpl', 'opac-tmpl');
+ $skipdirs{'OPAC_TMPL_DIR'} = 1;
+ $dirmap{'OPAC_WWW_DIR'} = File::Spec->catdir($curdir, 'koha-tmpl');
+ $skipdirs{'OPAC_WWW_DIR'} = 1;
+ $dirmap{'PERL_MODULE_DIR'} = File::Spec->catdir($curdir);
+ $skipdirs{'PERL_MODULE_DIR'} = 1;
+ $dirmap{'KOHA_CONF_DIR'} = File::Spec->catdir(@basedir, $package, 'etc');
+ $dirmap{'ZEBRA_CONF_DIR'} = File::Spec->catdir(@basedir, $package, 'etc', 'zebradb');
+ $dirmap{'MISC_DIR'} = File::Spec->catdir(@basedir, $package, 'misc');
+ $dirmap{'SCRIPT_DIR'} = File::Spec->catdir(@basedir, $package, 'bin');
+ $skipdirs{'SCRIPT_DIR'} = 1;
+ $dirmap{'MAN_DIR'} = File::Spec->catdir(@basedir, $package, 'man');
+ $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
+ $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'zebradb');
+ $dirmap{'LOG_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'log');
+ $dirmap{'ZEBRA_DATA_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb');
+ $dirmap{'ZEBRA_RUN_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb');
+ } else {
+ # mode is standard, i.e., 'fhs'
+ $dirmap{'INTRANET_CGI_DIR'} = File::Spec->catdir(@basedir, $package, 'intranet', 'cgi-bin');
+ $dirmap{'INTRANET_TMPL_DIR'} = File::Spec->catdir(@basedir, $package, 'intranet', 'htdocs', 'intranet-tmpl');
+ $dirmap{'INTRANET_WWW_DIR'} = File::Spec->catdir(@basedir, $package, 'intranet', 'htdocs');
+ $dirmap{'OPAC_CGI_DIR'} = File::Spec->catdir(@basedir, $package, 'opac', 'cgi-bin');
+ $dirmap{'OPAC_TMPL_DIR'} = File::Spec->catdir(@basedir, $package, 'opac', 'htdocs', 'opac-tmpl');
+ $dirmap{'OPAC_WWW_DIR'} = File::Spec->catdir(@basedir, $package, 'opac', 'htdocs');
+ $dirmap{'PERL_MODULE_DIR'} = File::Spec->catdir(@basedir, $package, 'lib');
+ $dirmap{'KOHA_CONF_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'etc', $package);
+ $dirmap{'ZEBRA_CONF_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'etc', $package, 'zebradb');
+ $dirmap{'MISC_DIR'} = File::Spec->catdir(@basedir, $package, 'misc');
+ $dirmap{'SCRIPT_DIR'} = File::Spec->catdir(@basedir, $package, 'bin');
+ $dirmap{'MAN_DIR'} = File::Spec->catdir(@basedir, $package, 'man');
+ $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc');
+ $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lock', $package, 'zebradb');
+ $dirmap{'LOG_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'log', $package);
+ $dirmap{'ZEBRA_DATA_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lib', $package, 'zebradb');
+ $dirmap{'ZEBRA_RUN_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'run', $package, 'zebradb');
+ }
+
+ _get_env_overrides(\%dirmap);
+ _get_argv_overrides(\%dirmap);
+
+ return \%dirmap, \%skipdirs;
+}
+
+sub _get_env_overrides {
+ my $dirmap = shift;
+
+ foreach my $key (keys %$dirmap) {
+ if (exists $ENV{$key}) {
+ $dirmap->{$key} = $ENV{$key};
+ print "Setting $key from environment\n";
+ }
+ }
+}
+
+sub _get_argv_overrides {
+ my $dirmap = shift;
+
+ my @new_argv = ();
+ for (my $i = 0; $i <= $#ARGV; $i++) {
+ if ($ARGV[$i] =~ /^([^=]+)=([^=]+)$/ and exists $dirmap->{$1}) {
+ $dirmap->{$1} = $2;
+ } else {
+ push @new_argv, $ARGV[$i];
+ }
+ }
+ @ARGV = @new_argv;
+}
+
+sub display_configuration {
+ my $config = shift;
+ my $dirmap = shift;
+ print "\n\nKoha will be installed with the following configuration parameters:\n\n";
+ foreach my $key (sort keys %$config) {
+ print sprintf("%-25.25s%s\n", $key, $config->{$key});
+ }
+
+ print "\nand in the following directories:\n\n";
+ foreach my $key (sort keys %$dirmap) {
+ print sprintf("%-25.25s%s\n", $key, $dirmap->{$key});
+ }
+ print "\n\nTo change any configuration setting, please run\n";
+ print "perl Makefile.PL again. To override one of the target\n";
+ print "directories, you can do so on the command line like this:\n";
+ print "\nperl Makefile.PL PERL_MODULE_DIR=/usr/share/perl/5.8\n\n";
+ print "You can also set different default values for parameters\n";
+ print "or override directory locations by using environment variables.\n";
+ print "\nFor example:\n\n";
+ print "export DB_USER=my_koha\n";
+ print "perl Makefile.PL\n";
+ print "\nor\n\n";
+ print "DB_USER=my_koha DOC_DIR=/usr/local/info perl Makefile.PL\n\n";
+}
+
+package MY;
+
+# This will have to be reworked in order to accommodate Win32...
+
+sub test {
+ my $self = shift;
+ my $test = $self->SUPER::test(@_);
+ $test =~ s!\$\(INST_LIB\)!blib/PERL_MODULE_DIR!g;
+ return $test;
+}
+
+sub install {
+ my $self = shift;
+ my $install = "";
+ # NOTE: we're *not* doing this: my $install = $self->SUPER::install(@_);
+ # This means that we're completely overriding EU::MM's default
+ # installation and uninstallation targets.
+
+# If installation is on Win32, we need to do permissions different from *nix
+ if ( $^O =~ /linux|cygwin/ ) { # this value needs to be verified for each platform and modified accordingly
+ foreach my $key (sort keys %$target_directories) {
+ $install .= qq(
+KOHA_INST_$key = blib/$key
+KOHA_DEST_$key = $target_directories->{$key}
+) unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or exists $skip_directories->{$key};
}
- }
-=pod
+ $install .= qq(
+install :: all install_koha set_koha_ownership set_koha_permissions warn_koha_env_vars
+\t\$(NOECHO) \$(NOOP)
+);
+ $install .= "install_koha ::\n";
+ $install .= "\t\$(NOECHO) umask 022; \$(MOD_INSTALL) \\\n";
+ foreach my $key (sort keys %$target_directories) {
+ $install .= "\t\t\$(KOHA_INST_$key) \$(KOHA_DEST_$key) \\\n"
+ unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or exists $skip_directories->{$key};
+ }
+ $install .= "\t\t\$(INST_MAN1DIR) \$(DESTINSTALLMAN1DIR) \\\n";
+ $install .= "\t\t\$(INST_MAN3DIR) \$(DESTINSTALLMAN3DIR)\n";
-etc files are copied to /usr/share/koha/etc/
+ $install .= "\n";
+ $install .= "set_koha_ownership ::\n";
+ if ($config{'INSTALL_MODE'} eq 'standard' and $config{'KOHA_USER'} ne "root") {
+ foreach my $key (sort keys %$target_directories) {
+ $install .= "\t\$(NOECHO) chown -R $config{'KOHA_USER'}:$config{'KOHA_GROUP'} \$(KOHA_DEST_$key)\n"
+ unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or exists $skip_directories->{$key};
+ }
+ } else {
+ $install .= "\t\t\$(NOECHO) \$(NOOP)\n\n";
+ }
-=cut
- # Misc etc to koha/etc
- foreach my $src (glob("etc/zebradb/*/*/*"),glob("etc/zebradb/*/*"),glob("etc/zebradb/*"),glob("etc/*")) {
- if (-f $src) {
- $result{$src} = '$(PREFIX)/share/koha/'.$src;
+ $install .= "\n";
+ $install .= "set_koha_permissions ::\n";
+ # This is necessary because EU::MM installs files
+ # as either 0444 or 0555, and we want the owner
+ # of Koha's files to have write permission by default.
+ foreach my $key (sort keys %$target_directories) {
+ $install .= "\t\$(NOECHO) chmod -R u+w \$(KOHA_DEST_$key)\n"
+ unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or exists $skip_directories->{$key};
+ }
+ }
+ elsif ($^O eq 'MSWin32' ) { # On Win32, the install probably needs to be done under the user account koha will be running as...
+ # We can attempt some creative things with command line utils such as CACLS which allows permission
+ # management from Win32 cmd.exe, but permissions really only apply to NTFS.
+ foreach my $key (sort keys %$target_directories) {
+ $install .= qq(
+KOHA_INST_$key = blib/$key
+KOHA_DEST_$key = $target_directories->{$key}
+) unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or exists $skip_directories->{$key};
+ }
+ $install .= qq(
+install :: all install_koha warn_koha_env_vars
+\t\$(NOECHO) \$(NOOP)
+);
+ $install .= "install_koha ::\n";
+ $install .= "\t\$(MOD_INSTALL) \\\n";
+ foreach my $key (sort keys %$target_directories) {
+ $install .= "\t\t\$(KOHA_INST_$key) \$(KOHA_DEST_$key) \\\n"
+ unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or exists $skip_directories->{$key};
}
}
+ $install .= "\t\t\$(INST_MAN1DIR) \$(DESTINSTALLMAN1DIR) \\\n";
+ $install .= "\t\t\$(INST_MAN3DIR) \$(DESTINSTALLMAN3DIR)\n";
+
+ $install .= "\n";
+
+ $install .= "warn_koha_env_vars ::\n";
+ $install .= "\t\$(NOECHO) \$(ECHO)\n";
+ $install .= "\t\$(NOECHO) \$(ECHO) Koha\\'s files have now been installed. \n";
+ $install .= "\t\$(NOECHO) \$(ECHO)\n";
+ $install .= "\t\$(NOECHO) \$(ECHO) In order to use Koha\\'s command-line batch jobs,\n";
+ $install .= "\t\$(NOECHO) \$(ECHO) you should set the following environment variables:\n";
+ $install .= "\t\$(NOECHO) \$(ECHO)\n";
+ $install .= "\t\$(NOECHO) \$(ECHO) export KOHA_CONF=\$(KOHA_DEST_KOHA_CONF_DIR)/koha-conf.xml\n";
+ $install .= "\t\$(NOECHO) \$(ECHO) export PERL5LIB=$target_directories->{'PERL_MODULE_DIR'}\n";
+ $install .= "\t\$(NOECHO) \$(ECHO)\n";
+ $install .= "\t\$(NOECHO) \$(ECHO) If installing on a Win32 platform, be sure to use:\n";
+ $install .= "\t\$(NOECHO) \$(ECHO) 'dmake -x MAXLINELENGTH=300000'\n";
+ $install .= "\t\$(NOECHO) \$(ECHO)\n";
+ $install .= "\t\$(NOECHO) \$(ECHO) For other post-installation tasks, please consult the README.\n";
+ $install .= "\t\$(NOECHO) \$(ECHO)\n";
+
+ return $install;
+}
+
+sub postamble {
+ # put directory mappings into Makefile
+ # so that Make will export as environment
+ # variables -- this is for the use of
+ # rewrite-confg.PL
+ # quote '$' in the two password parameters
+ my %config = %config;
+ $config{'DB_PASS'} =~ s/\$/\$\$/g;
+ $config{'ZEBRA_PASS'} =~ s/\$/\$\$/g;
- return \%result;
+ # Hereagain, we must alter syntax per platform...
+ if ( $^O eq 'MSWin32' ) {
+ # NOTE: it is imperative that there be no whitespaces in ENV=value...
+ my $env = join("\n", map { "__${_}__=$target_directories->{$_}" } keys %$target_directories);
+ $env .= "\n\n";
+ $env .= join("\n", map { "__${_}__=$config{$_}" } keys %config);
+ return "$env\n";
+ }
+ else {
+ my $env = join("\n", map { "export __${_}__ := $target_directories->{$_}" } keys %$target_directories);
+ $env .= "\n\n";
+ $env .= join("\n", map { "export __${_}__ := $config{$_}" } keys %config);
+ return "$env\n";
+ }
}
+
__END__
ExtUtils::MakeMaker(3)
-=head1 AUTHOR
+=head1 AUTHORS
MJ Ray mjr at phonecoop.coop
+Galen Charlton galen.charlton at liblime.com
=cut
-
+FIXME: deal with .htaccess
MySQL 5: Create a database called 'koha,' owned by 'kohaadmin'
user, with a password set. Note: kohaadmin must have at least the
-following privileges: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP.
+following privileges: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,
+ALTER, and LOCK TABLES.
PostgreSQL 8.2.5: Create a database called 'koha,' owned by 'kohaadmin'
user, with a password set. Note: kohaadmin must be a superuser. You
Default installation instructions:
-0. export DB_PASS=thePasswordYouChose
1. perl Makefile.PL
+ (you will be prompted to answer a number of questions)
2. make
-3. sudo make install
-4. ln -s /usr/share/koha/etc/koha-httpd.conf /etc/apache2/sites-available/koha
-5. a2enmod rewrite
-6. a2ensite koha && /etc/init.d/apache2 reload
-7. zebrasrv -c /usr/share/koha/etc/koha-conf.xml
-8. Browse to http://servername:8080/ and answer the questions
+3.(optional) make test
+4. sudo make install
+5. ln -s /etc/koha/koha-httpd.conf /etc/apache2/sites-available/koha
+6. a2enmod rewrite
+7. a2ensite koha && /etc/init.d/apache2 reload
+8. zebrasrv -f /etc/koha/koha-conf.xml
+9. Browse to http://servername:8080/ and answer the questions
OR if you want to install all dependencies from CPAN and are root, you can
replace steps 1-3 with "perl install-CPAN.pl" but this is non-standard and
The defaults will install Koha to places that follow relevant standards,
such as the File Hierarchy Standard. If you want to install Koha to a
-different directory like /opt/koha, then replace step 1 with:
-1a. export PREFIX=/opt/koha
-1b. export CGI_DIR=/opt/koha/cgi
-1c. export LOG_DIR=/opt/koha/log
-1d. perl Makefile.PL PREFIX=/opt/koha
+different directory like /opt/koha, then replace step 1 with (for example):
+1. perl Makefile.PL INTRANET_CGI_DIR=/www/cgi-bin
You can change most of the defaults in a similar way, such as DB_HOST.
For full instructions on how to override the default settings, run
<!-- scheme: tcp, ssl, unix, http, sru -->
<!-- can run all servers on tcp, but the unix socket is faster -->
-<listen id="biblioserver" >unix:__BASE_DIR__/tmp/bibliosocket</listen>
-<listen id="authorityserver" >unix:__BASE_DIR__/tmp/authoritysocket</listen>
+<listen id="biblioserver" >unix:__ZEBRA_RUN_DIR__/bibliosocket</listen>
+<listen id="authorityserver" >unix:__ZEBRA_RUN_DIR__/authoritysocket</listen>
<!-- public server runs on tcp -->
<!-- <listen id="publicserver" >tcp:@:9999</listen> -->
<!-- BIBLIOGRAPHIC RECORDS -->
<server id="biblioserver" listenref="biblioserver">
- <directory>__BASE_DIR__/zebradb/biblios</directory>
- <config>__PREFIX__/share/koha/etc/zebradb/zebra-biblios.cfg</config>
- <cql2rpn>__PREFIX__/share/koha/etc/zebradb/pqf.properties</cql2rpn>
+ <directory>__ZEBRA_DATA_DIR__/biblios</directory>
+ <config>__ZEBRA_CONF_DIR__/zebra-biblios.cfg</config>
+ <cql2rpn>__ZEBRA_CONF_DIR__/pqf.properties</cql2rpn>
</server>
<serverinfo id="biblioserver">
- <ccl2rpn>__PREFIX__/share/koha/etc/zebradb/ccl.properties</ccl2rpn>
+ <ccl2rpn>__ZEBRA_CONF_DIR__/ccl.properties</ccl2rpn>
<user>__ZEBRA_USER__</user>
<password>__ZEBRA_PASS__</password>
</serverinfo>
<!-- AUTHORITY RECORDS -->
<server id="authorityserver" listenref="authorityserver" >
- <directory>__BASE_DIR__/zebradb/authorities</directory>
- <config>__PREFIX__/share/koha/etc/zebradb/zebra-authorities.cfg</config>
+ <directory>__ZEBRA_DATA_DIR__/authorities</directory>
+ <config>__ZEBRA_CONF_DIR__/zebra-authorities.cfg</config>
</server>
<serverinfo id="authorityserver">
- <ccl2rpn>__PREFIX__/share/koha/etc/zebradb/ccl.properties</ccl2rpn>
+ <ccl2rpn>__ZEBRA_CONF_DIR__/ccl.properties</ccl2rpn>
<user>__ZEBRA_USER__</user>
<password>__ZEBRA_PASS__</password>
</serverinfo>
<biblioservershadow>1</biblioservershadow>
<authorityserver>authorities</authorityserver>
<authorityservershadow>1</authorityservershadow>
- <intranetdir>__CGI_DIR__</intranetdir>
- <opacdir>__CGI_DIR__/opac</opacdir>
- <opachtdocs>__BASE_DIR__/templates/koha-tmpl/opac-tmpl</opachtdocs>
- <intrahtdocs>__BASE_DIR__/templates/koha-tmpl/intranet-tmpl</intrahtdocs>
- <includes>__BASE_DIR__/templates/koha-tmpl/intranet-tmpl/default/en/includes/</includes>
+ <intranetdir>__INTRANET_CGI_DIR__</intranetdir>
+ <opacdir>__OPAC_CGI_DIR__/opac</opacdir>
+ <opachtdocs>__OPAC_TMPL_DIR__</opachtdocs>
+ <intrahtdocs>__INTRANET_TMPL_DIR__</intrahtdocs>
+ <includes>__INTRANET_TMPL_DIR__/default/en/includes/</includes>
</config>
</yazgfs>
## OPAC
<VirtualHost __WEBSERVER_IP__:__WEBSERVER_PORT__>
ServerAdmin __WEBMASTER_EMAIL__
- DocumentRoot __BASE_DIR__/templates/koha-tmpl/
+ DocumentRoot __OPAC_WWW_DIR__
ServerName __WEBSERVER_HOST__
# ServerAlias opac.mydomain.com
- ScriptAlias /cgi-bin/koha/ "__CGI_DIR__/opac/"
- ScriptAlias /index.html "__CGI_DIR__/opac/opac-main.pl"
- ScriptAlias /opac-search.pl "__CGI_DIR__/opac/search"
- ScriptAlias /search "__CGI_DIR__/opac/search"
+ ScriptAlias /cgi-bin/koha/ "__OPAC_CGI_DIR__/opac/"
+ ScriptAlias /index.html "__OPAC_CGI_DIR__/opac/opac-main.pl"
+ ScriptAlias /opac-search.pl "__OPAC_CGI_DIR__/opac/search"
+ ScriptAlias /search "__OPAC_CGI_DIR__/opac/search"
ErrorLog __LOG_DIR__/koha-opac-error_log
# TransferLog __LOG_DIR__/koha-opac-access_log
- SetEnv KOHA_CONF "__PREFIX__/share/koha/etc/koha-conf.xml"
+ SetEnv KOHA_CONF "__KOHA_CONF_DIR__/koha-conf.xml"
+ SetEnv PERL5LIB "__PERL_MODULE_DIR__"
Options +FollowSymLinks
# Rewrite Rules
## Intranet
<VirtualHost __WEBSERVER_IP__:__WEBSERVER_PORT_LIBRARIAN__>
ServerAdmin __WEBMASTER_EMAIL__
- DocumentRoot __BASE_DIR__/templates/koha-tmpl/
+ DocumentRoot __INTRANET_WWW_DIR__
ServerName __WEBSERVER_HOST__:__WEBSERVER_PORT_LIBRARIAN__
# ServerAlias intranet.mydomain.com
- ScriptAlias /cgi-bin/koha/ "__CGI_DIR__/"
- ScriptAlias /index.html "__CGI_DIR__/mainpage.pl"
- ScriptAlias /search "__CGI_DIR__/search.pl"
+ ScriptAlias /cgi-bin/koha/ "__INTRANET_CGI_DIR__/"
+ ScriptAlias /index.html "__INTRANET_CGI_DIR__/mainpage.pl"
+ ScriptAlias /search "__INTRANET_CGI_DIR__/search.pl"
ErrorLog __LOG_DIR__/koha-error_log
# TransferLog __LOG_DIR__/koha-access_log
- SetEnv KOHA_CONF "__PREFIX__/share/koha/etc/koha-conf.xml"
+ SetEnv KOHA_CONF "__KOHA_CONF_DIR__/koha-conf.xml"
+ SetEnv PERL5LIB "__PERL_MODULE_DIR__"
Options +FollowSymLinks
RewriteEngine On
# Uncomment to turn on rewrite logging
+++ /dev/null
-# $Id: record_authorities_unimarc.abs,v 1.1.2.1 2006/11/28 10:11:56 tipaul Exp $
-
-# indexing rules. It
-# results in a server which provides a passable Bath level 0 and 1 service
-############################################################################
-# IMPORTANT : this file MUST be renamed record.abs : this name is "hardcoded" in zebra
-# the default record.abs is designed for MARC21.
-############################################################################
-# NOTE: This is designed to be used with the grs.marcxml input filter
-# for ISO2709 (ANSI Z39.2) or grs.xml for MARCXML-formatted records. It
-# won't work for the old grs.marc input filter, which yields a different
-# internal structure.
-
-encoding utf-8
-name authorities
-#attset auth1.att
-attset bib1.att
-esetname F @
-esetname B @
-
-marc usmarc.mar
-systag sysno rank
-xpath disable
-
-all any
-melm 001 Local-Number
-melm 152$b Authority/format-id
-#melm 005 Version-id
-#melm 015 IASDN
-
-
-########################
-# Coded fields
-########################
-#melm 100$a date-entered-on-file:n:range(data,0,8),date-entered-on-file:s:range(data,0,8),auth-status:n:range(data,8,1),auth-status:s:range(data,8,1),language:n:range(data,9,3),language:s:range(data,9,3),char-encoding:w:range(data,13,4),char-encoding:s:range(data,13,4),ff100-17:w:range(data,17,3),ff100-21:w:range(data,21,2),ff100-23:w:range(data,23,1)
-
-#melm 101$a Language
-#melm 102$a Country-heading
-# Subject-Heading
-#melm 106$a Vaut 0(inutilisable sujet-matiere),1 (utilisable sujet-matiere)ou 2(utilisable uniquement sujet-matiere)
-#melm 120$a Obligatoire sur Autorite NP : Sexe et discrimination
-#melm 123$a Obligatoire sur Autorite GEO : Localisation
-#melm 150$a Obligatoire sur Autorite CO : Type de collectivite
-# 4XX$3 5XX$3 7XX$3 authority number
-# 4XX$5 5XX$5 7XX$5 Linking type
-# 4XX$7 5XX$7 7XX$7 Script Cataloguing
-# 4XX$8 5XX$8 7XX$8 Language
-
-
-############ HEADINGS ##################
-melm 100$a Heading:w,Heading:p,Heading:s, personal-heading,personal-heading:w,personal-heading:s,personal-heading:p
-melm 110$a Heading:w,Heading:p,Heading:s,corporate-heading
-melm 110$a Heading:w,Heading:p,Heading:s,Conference-heading
-melm 115$a Heading:w,Heading:p,Heading:s,Name-geographic
-#melm 216 Name-corporate
-melm 120$a Heading:w,Heading:p,Heading:s,personal-heading,personal-heading:w,personal-heading:s,personal-heading:p
-melm 130$a Heading:w,Heading:p,Heading:s,Title-Uniform,Title-Uniform:w,Title-Uniform:s,Title-Uniform:p
-melm 135$a Heading:w,Heading:p,Heading:s,Title-Uniform,Title-Uniform:w,Title-Uniform:s,Title-Uniform:p
-melm 150$a Heading:w,Heading:p,Heading:s,Subject-heading, Subject-heading:w,Subject-heading:s,Subject-heading:p
-
-melm 100 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s, personal-Heading-Entity,personal-Heading-Entity:w,personal-Heading-Entity:s,personal-Heading-Entity:p
-melm 110 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,corporate-Heading-Entity
-melm 110 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,Conference-Heading-Entity
-melm 115 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,Name-geographic-Entity
-#melm 216 Name-corporate
-melm 120 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,personal-Heading-Entity,personal-Heading-Entity:w,personal-Heading-Entity:s,personal-Heading-Entity:p
-melm 130 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,Title-Uniform-entity,Title-Uniform-entity:w,Title-Uniform:s,Title-Uniform-entity:p
-melm 135 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,Title-Uniform-entity,Title-Uniform-entity:w,Title-Uniform:s,Title-Uniform-entity:p
-melm 150 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,Subject-Thesaurus
-
-#210 Heading - Corporate Body Name
-#215 Heading - Territorial or Geographical Name
-#216 Heading - Trademark
-#220 Heading - Family Name
-#230 Heading - Uniform Title
-#235 Heading - Collective Uniform Title
-#240 Heading - Name/Title
-#245 Heading - Name/Collective Uniform Title
-#250 Heading - Topical Subject
-#260 Heading - Place Access
-#280 Heading - Form, Genre or Physical Characteristics
-#melm 712 Author,Author:p,Author:s
-
-############# Rejected forms ##################
-#melm 400$a See, See:w,See:p,See:s,personal-see,personal-see:w,personal-see:s,personal-see:p
-#melm 410$a See, See:w,See:p,See:s,corporate-see
-#melm 410$a See, See:w,See:p,See:s,Conference-see
-#melm 415$a See, See:w,See:p,See:s,Name-geographic-see
-##melm 416 Name-corporate
-#melm 440$a See, See:w,See:p,See:s,personal-see,personal-see:w,personal-see:s,personal-see:p
-#melm 430$a See, See:w,See:p,See:s,Title-Uniform-see,Title-Uniform-see:w,Title-Uniform-see:s,Title-Uniform-see:p
-#melm 435$a See, See:w,See:p,See:s,Title-Uniform-see,Title-Uniform-see:w,Title-Uniform-see:s,Title-Uniform-see:p
-#melm 450$a See, See:w,See:p,See:s,Subject-see,Subject-see:w,Subject-see:s,Subject-see,:p
-#melm 400 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,personal-See-Entity,personal-See-Entity:w,personal-See-Entity:s,personal-See-Entity:p
-#melm 410 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,corporate-See-Entity
-#melm 410 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,Conference-See-Entity
-#melm 415 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,Name-geographic-See-Entity
-##melm 416 Name-corporate
-#melm 440 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,personal-See-Entity,personal-See-Entity:w,personal-See-Entity:s,personal-See-Entity:p
-#melm 430 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,Title-Uniform-See-Entity,Title-Uniform-See-Entity:w,Title-Uniform-See-Entity:s,Title-Uniform-See-Entity:p
-#melm 435 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,Title-Uniform-See-Entity,Title-Uniform-See-Entity:w,Title-Uniform-See-Entity:s,Title-Uniform-See-Entity:p
-#melm 450 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,Subject-See-Entity,Subject-See-Entity:w,Subject-See-Entity:s,Subject-See-Entity,:p
-#
-##410 Heading - Corporate Body Name
-##415 Heading - Territorial or Geographical Name
-##416 Heading - Trademark
-##440 Heading - Family Name
-##430 Heading - Uniform Title
-##435 Heading - Collective Uniform Title
-##440 Heading - Name/Title
-##445 Heading - Name/Collective Uniform Title
-##450 Heading - Topical Subject
-##460 Heading - Place Access
-##480 Heading - Form, Genre or Physical Characteristics
-##melm 714 Author,Author:p,Author:s
-#
-############# Related forms ##################
-#melm 500$a personal-see-also,personal-see-also:w,personal-see-also:s,personal-see-also:p
-#melm 510$a corporate-see-also
-#melm 510$a Conference-see-also
-#melm 515$a Name-geographic-see-also
-##melm 416 Name-corporate
-#melm 540$a personal-see-also,personal-see-also:w,personal-see-also:s,personal-see-also:p
-#melm 530$a Title-Uniform-see-also,Title-Uniform-see-also:w,Title-Uniform-see-also:s,Title-Uniform-see-also:p
-#melm 535$a Title-Uniform-see-also,Title-Uniform-see-also:w,Title-Uniform-see-also:s,Title-Uniform-see-also:p
-#melm 550$a Subject-see-also,Subject-see-also:w,Subject-see-also:s,Subject-see-also:p
-##510 Heading - Corporate Body Name
-##515 Heading - Territorial or Geographical Name
-##516 Heading - Trademark
-##550 Heading - Family Name
-##530 Heading - Uniform Title
-##535 Heading - Collective Uniform Title
-##540 Heading - Name/Title
-###545 Heading - Name/Collective Uniform Title
-##550 Heading - Topical Subject
-##560 Heading - Place Access
-##580 Heading - Form, Genre or Physical Characteristics
-##melm 714 Author,Author:p,Author:s
-#
-############# Parallel forms ##################
-#melm 700$a personal-parallel,personal-parallel:w,personal-parallel:s,personal-parallel:p
-#melm 710$a corporate-parallel
-#melm 710$a Conference-parallel
-#melm 715$a Name-geographic-parallel
-##melm 716 Name-corporate
-#melm 770$a personal-parallel,personal-parallel:w,personal-parallel:s,personal-parallel:p
-#melm 730$a Title-Uniform-parallel,Title-Uniform-parallel:w,Title-Uniform-parallel:s,Title-Uniform-parallel:p
-#melm 735$a Title-Uniform-parallel,Title-Uniform-parallel:w,Title-Uniform-parallel:s,Title-Uniform-parallel:p
-#melm 750$a Subject-parallel,Subject-parallel:w,Subject-parallel:s,Subject-parallel:p
-#
-########### NOTES #################
-#melm 300$a Note !:w,!:p
-#melm 301$a Note !:w,!:p
-#melm 302$a Note !:w,!:p
-#melm 303$a Note !:w,!:p
-#melm 304$a Note !:w,!:p
-#melm 305$a Note !:w,!:p
-#melm 306$a Note !:w,!:p
-#melm 307$a Note !:w,!:p
-#melm 308$a Note !:w,!:p
-#melm 310$a Note !:w,!:p
-#melm 311$a Note !:w,!:p
-#melm 312$a Note !:w,!:p
-#melm 313$a Note !:w,!:p
-#melm 314$a Note !:w,!:p
-#melm 315$a Note !:w,!:p
-#melm 316$a Note !:w,!:p
-#melm 317$a Note !:w,!:p
-#melm 318$a Note !:w,!:p
-#melm 320$a Note !:w,!:p
-#melm 321$a Note !:w,!:p
-#melm 322$a Note !:w,!:p
-#melm 323$a Note !:w,!:p
-#melm 324$a Note !:w,!:p
-#melm 325$a Note !:w,!:p
-#melm 326$a Note !:w,!:p
-#melm 327$a Note !:w,!:p
-#melm 328$a Note !:w,!:p
-#melm 330$a Note !:w,!:p
-#melm 332$a Note !:w,!:p
-#melm 333$a Note !:w,!:p
-#melm 336$a Note !:w,!:p
-#melm 337$a Note !:w,!:p
-#melm 345$a Note !:w,!:p
-#####
+++ /dev/null
-
-# indexing rules. It
-# results in a server which provides a passable Bath level 0 and 1 service
-############################################################################
-# IMPORTANT : this file MUST be renamed record.abs : this name is "hardcoded" in zebra
-# the default record.abs is designed for MARC21.
-############################################################################
-# NOTE: This is designed to be used with the grs.marcxml input filter
-# for ISO2709 (ANSI Z39.2) or grs.xml for MARCXML-formatted records. It
-# won't work for the old grs.marc input filter, which yields a different
-# internal structure.
-
-encoding utf-8
-name authorities
-attset auth1.att
-esetname F @
-esetname B @
-
-marc usmarc.mar
-systag sysno rank
-xpath disable
-
-all any
-melm 001 Local-Number
-melm 152$b Authority/format-id
-#melm 005 Version-id
-#melm 015 IASDN
-
-
-########################
-# Coded fields
-########################
-#melm 100$a date-entered-on-file:n:range(data,0,8),date-entered-on-file:s:range(data,0,8),auth-status:n:range(data,8,1),auth-status:s:range(data,8,1),language:n:range(data,9,3),language:s:range(data,9,3),char-encoding:w:range(data,13,4),char-encoding:s:range(data,13,4),ff100-17:w:range(data,17,3),ff100-21:w:range(data,21,2),ff100-23:w:range(data,23,1)
-
-#melm 101$a Language
-#melm 102$a Country-heading
-# Subject-Heading
-#melm 106$a Vaut 0(inutilisable sujet-matiere),1 (utilisable sujet-matiere)ou 2(utilisable uniquement sujet-matiere)
-#melm 120$a Obligatoire sur Autorite NP : Sexe et discrimination
-#melm 123$a Obligatoire sur Autorite GEO : Localisation
-#melm 150$a Obligatoire sur Autorite CO : Type de collectivite
-# 4XX$3 5XX$3 7XX$3 authority number
-# 4XX$5 5XX$5 7XX$5 Linking type
-# 4XX$7 5XX$7 7XX$7 Script Cataloguing
-# 4XX$8 5XX$8 7XX$8 Language
-
-
-############ HEADINGS ##################
-melm 200$a Heading,Heading-Entity,Heading:s,personal-heading
-melm 210$a Heading,Heading-Entity,Heading:s,corporate-heading,Conference-heading
-melm 215$a Heading,Heading-Entity,Heading:s,Name-geographic
-#melm 216 Name-corporate
-melm 220$a Heading,Heading-Entity,Heading:s,personal-heading
-melm 230$a Heading,Heading-Entity,Heading:s,Title-Uniform
-melm 235$a Heading,Heading-Entity,Heading:s,Title-Uniform
-melm 240$a Heading,Heading-Entity,Heading:s,Name-Title
-melm 250$a Heading,Heading-Entity,Heading:s,Subject-heading, Subject-heading:s
-
-melm 200 Heading-Entity,Heading-Entity:s, personal-Heading-Entity
-melm 210 Heading-Entity,Heading-Entity:s,corporate-Heading-Entity
-melm 210 Heading-Entity,Heading-Entity:s,Conference-Heading-Entity
-melm 215 Heading-Entity,Heading-Entity:s,Name-geographic-Entity
-#melm 216 Name-corporate
-melm 220 Heading-Entity,Heading-Entity:s,personal-Heading-Entity
-melm 230 Heading-Entity,Heading-Entity:s,Title-Uniform-entity
-melm 235 Heading-Entity,Heading-Entity:s,Title-Uniform-entity
-melm 240 Heading-Entity,Heading-Entity:s,Name-Title-entity
-melm 250 Heading-Entity,Subject-Thesaurus
-
-#210 Heading - Corporate Body Name
-#215 Heading - Territorial or Geographical Name
-#216 Heading - Trademark
-#220 Heading - Family Name
-#230 Heading - Uniform Title
-#235 Heading - Collective Uniform Title
-#240 Heading - Name/Title
-#245 Heading - Name/Collective Uniform Title
-#250 Heading - Topical Subject
-#260 Heading - Place Access
-#280 Heading - Form, Genre or Physical Characteristics
-#melm 712 Author,Author:p,Author:s
-
-############ Rejected forms ##################
-melm 400$a See, See:s,See-Entity, personal-see,personal-see:w,personal-see:s,personal-see:p
-melm 410$a See, See:s,See-Entity, corporate-see
-melm 410$a See, See:s,See-Entity, Conference-see
-melm 415$a See, See:s,See-Entity, Name-geographic-see
-#melm 416 Name-corporate
-melm 440$a See, See:s,See-Entity, personal-see,personal-see:s
-melm 430$a See, See:s,See-Entity, Title-Uniform-see,Title-Uniform-see:s
-melm 435$a See, See:s,See-Entity, Title-Uniform-see,Title-Uniform-see:s
-melm 450$a See, See:s,See-Entity, Subject-see,Subject-see:s
-melm 400 See-Entity, personal-See-Entity,personal-See-Entity:s
-melm 410 See-Entity, corporate-See-Entity
-melm 410 See-Entity, Conference-See-Entity
-melm 415 See-Entity, Name-geographic-See-Entity
-#melm 416 Name-corporate
-melm 440 See-Entity, personal-See-Entity
-melm 430 See-Entity, Title-Uniform-See-Entity
-melm 435 See-Entity, Title-Uniform-See-Entity
-melm 435 See-Entity, Name-Title-See-Entity
-melm 450 See-Entity,Subject-See-Entity
-
-#410 Heading - Corporate Body Name
-#415 Heading - Territorial or Geographical Name
-#416 Heading - Trademark
-#440 Heading - Family Name
-#430 Heading - Uniform Title
-#435 Heading - Collective Uniform Title
-#440 Heading - Name/Title
-#445 Heading - Name/Collective Uniform Title
-#450 Heading - Topical Subject
-#460 Heading - Place Access
-#480 Heading - Form, Genre or Physical Characteristics
-#melm 714 Author,Author:p,Author:s
-
-############ Related forms ##################
-melm 500$a personal-see-also,personal-see-also:w,personal-see-also:s,personal-see-also:p
-melm 510$a corporate-see-also
-melm 510$a Conference-see-also
-melm 515$a Name-geographic-see-also
-#melm 416 Name-corporate
-melm 540$a personal-see-also,personal-see-also:w,personal-see-also:s,personal-see-also:p
-melm 530$a Title-Uniform-see-also,Title-Uniform-see-also:w,Title-Uniform-see-also:s,Title-Uniform-see-also:p
-melm 535$a Title-Uniform-see-also,Title-Uniform-see-also:w,Title-Uniform-see-also:s,Title-Uniform-see-also:p
-melm 540$a Name-Title-see-also,Name-Title-see-also:w,Name-Title-see-also:s,Name-Title-see-also:p
-melm 550$a Subject-see-also,Subject-see-also:w,Subject-see-also:s,Subject-see-also:p
-#510 Heading - Corporate Body Name
-#515 Heading - Territorial or Geographical Name
-#516 Heading - Trademark
-#550 Heading - Family Name
-#530 Heading - Uniform Title
-#535 Heading - Collective Uniform Title
-#540 Heading - Name/Title
-#545 Heading - Name/Collective Uniform Title
-#550 Heading - Topical Subject
-#560 Heading - Place Access
-#580 Heading - Form, Genre or Physical Characteristics
-#melm 714 Author,Author:p,Author:s
-
-############ Parallel forms ##################
-melm 700$a personal-parallel,personal-parallel:w,personal-parallel:s,personal-parallel:p
-melm 710$a corporate-parallel
-melm 710$a Conference-parallel
-melm 715$a Name-geographic-parallel
-#melm 716 Name-corporate
-melm 770$a personal-parallel,personal-parallel:w,personal-parallel:s,personal-parallel:p
-melm 730$a Title-Uniform-parallel,Title-Uniform-parallel:w,Title-Uniform-parallel:s,Title-Uniform-parallel:p
-melm 735$a Title-Uniform-parallel,Title-Uniform-parallel:w,Title-Uniform-parallel:s,Title-Uniform-parallel:p
-melm 740$a Name-Title-parallel,Name-Title-parallel:w,Name-Title-parallel:s,Name-Title-parallel:p
-melm 750$a Subject-parallel,Subject-parallel:w,Subject-parallel:s,Subject-parallel:p
-
-########## NOTES #################
-melm 300$a Note
-melm 301$a Note
-melm 302$a Note
-melm 303$a Note
-melm 304$a Note
-melm 305$a Note
-melm 306$a Note
-melm 307$a Note
-melm 308$a Note
-melm 310$a Note
-melm 311$a Note
-melm 312$a Note
-melm 313$a Note
-melm 314$a Note
-melm 315$a Note
-melm 316$a Note
-melm 317$a Note
-melm 318$a Note
-melm 320$a Note
-melm 321$a Note
-melm 322$a Note
-melm 323$a Note
-melm 324$a Note
-melm 325$a Note
-melm 326$a Note
-melm 327$a Note
-melm 328$a Note
-melm 330$a Note
-melm 332$a Note
-melm 333$a Note
-melm 336$a Note
-melm 337$a Note
-melm 345$a Note
-
+++ /dev/null
-Zebra key dir
+++ /dev/null
-Zebra lock dir
+++ /dev/null
-Zebra register dir
+++ /dev/null
-Zebra shadow dir
+++ /dev/null
-Zebra tmp dir
+++ /dev/null
-# This is a fairly simple example of a set of MARC21 indexing rules. It
-# results in a server which provides a passable Bath level 0 and 1 service
-# (author, title, subject, keyword and exact services). Feel free to
-# elaborate on it, and if you do, please consider sharing your additions.
-# NOTE: This is designed to be used with the grs.marcxml input filter
-# for ISO2709 (ANSI Z39.2) or grs.xml for MARCXML-formatted records. It
-# won't work for the old grs.marc input filter, which yields a different
-# internal structure.
-encoding utf-8
-name marc21
-attset bib1.att
-attset gils.att
-esetname F @
-esetname B @
-
-marc usmarc.mar
-systag sysno rank
-xpath enable
-# Some notes:
-# pl = Published Place
-# ta = Target Audience 002/22
-# ff8-23
-# lf = Literary Form 008/33
-# bio = Biography 008/34
-# fmt = Format
-# ln = Language
-# ctype = Content type: review, catalog, encyclopedia, dictionary
-# pubdate Publication Date
-# rtype = Record type (leader 06)
-#
-# Date indexing in Koha 3.0 for MARC21:
-# Index Expected format Notes
-# date-entered-on-file [yymmdd] (008/0-5, indexed in word and sort indexes)
-# copydate [yyyy] (260$c, indexed in word and sort indexes)
-# acqdate [yyyy-mm-dd] (952$d, indexed in date,word,sort indexes)
-# pubdate [yyyy] (008/7-10, indexed in year,word,num,sort indexes)
-
-all any
-# melm 000 rtype:n:range(data,06,1),Bib-level:w:range(data,07,01)
-xelm /record/leader llength:w:range(data,0,5),rtype:w:range(data,6,1),Bib-level:w:range(data,7,1)
-# example: xelm /record/leader l1:w:range(data,0,5),l2:w:range(data,10,2)
-
-melm 001 Control-number
-melm 005 Date/time-last-modified
-melm 007 Microform-generation:n:range(data,11,1),Material-type,ff7-00:w:range(data,0,1),ff7-01:w:range(data,1,1),ff7-02:w:range(data,2,1),ff7-01-02:w:range(data,0,2)
-
-melm 008 date-entered-on-file:n:range(data,0,5),date-entered-on-file:s:range(data,0,5),pubdate:w:range(data,7,4),pubdate:n:range(data,7,4),pubdate:y:range(data,7,4),pubdate:s:range(data,7,4),pl:w:range(data,15,3),ta:w:range(data,22,1),ff8-23:w:range(data,23,1),ff8-29:w:range(data,29,1),lf:w:range(data,33,1),bio:w:range(data,34,1),ln:n:range(data,35,3),ctype:w:range(data,24,4),Record-source:w:range(data,39,0)
-
-melm 010 LC-card-number,Identifier-standard
-melm 011 LC-card-number,Identifier-standard
-melm 015 BNB-card-number,BGF-number,Number-db,Number-natl-biblio,Identifier-standard
-melm 017 Number-legal-deposit,Identifier-standard
-melm 018 Identifier-standard
-melm 020$a ISBN:w,Identifier-standard:w
-melm 020 ISBN,Identifier-standard
-melm 022$a ISSN:w,ISBN:w
-melm 022 ISSN,Identifier-standard
-melm 023 Identifier-standard
-melm 024 Identifier-standard
-melm 025 Identifier-standard
-melm 027 Report-number,Identifier-standard
-melm 028 Number-music-publisher,Identifier-standard
-melm 030 CODEN,Identifier-standard
-#melm 033 Date
-melm 034 Map-scale
-#melm 035 Local-number,Identifier-standard
-melm 037 Identifier-standard,Stock-number
-melm 040 Code-institution,Record-source
-melm 041 ln
-melm 043 Code-geographic
-#melm 046 pubdate
-melm 050$b LC-call-number:w, LC-call-number:p, LC-call-number:s
-melm 050 LC-call-number:w, LC-call-number:p, LC-call-number:s
-melm 052 Geographic-class
-melm 060 NLM-call-number
-melm 070 NAL-call-number
-melm 080 UDC-classification
-melm 082 Dewey-classification:w,Dewey-classification:s
-melm 086 Number-govt-pub
-#melm 942$k LC-card-number:s
-
-## KOHA SPECIFIC
-#melm 090$c Local-number:w
-#Identifier-standard:w
-
-melm 100$9 Cross-Reference:w,Koha-Auth-Number
-melm 100$a Author,Author:p,Author:s,Editor,Author-personal-bibliography,Author-personal-bibliography:p,Author-personal-bibliography:s
-melm 100 Author,Author-title,Author-name-personal,Name,Name-and-title,Personal-name
-melm 110$9 Koha-Auth-Number
-melm 110 Author,Author-title,Author-name-corporate,Name,Name-and-title,Corporate-name
-melm 111$9 Koha-Auth-Number
-melm 111 Author,Author-title,Author-name-corporate,Name,Name-and-title,Conference-name
-melm 130$n Thematic-number
-melm 130$r Music-key
-melm 130$9 Koha-Auth-Number
-melm 130 Title,Title-uniform
-
-melm 210 Title,Title-abbreviated
-melm 211 Title,Title-abbreviated
-melm 212 Title,Title-other-variant
-melm 214 Title,Title-expanded
-melm 222 Title,Title-key
-melm 240$r Music-key
-melm 240$n Thematic-number
-melm 240 Title:w,Title:p,Title-uniform
-melm 243$n Thematic-number
-melm 243$r Music-key
-melm 243 Title:w,Title:p,Title-collective
-melm 245$a Title-cover:w,Title-cover:p,Title-cover:s,Title:w,Title:p,Title:s
-melm 245$c Author,Author-in-order:w,Author-in-order:p,Author-in-order:s
-melm 245$9 Cross-Reference:w,Koha-Auth-Number
-melm 245 Title:w,Title:p
-melm 246 Title,Title:p,Title-abbreviated,Title-expanded,Title-former
-melm 247 Title,Title:p,Title-former,Title-other-variant,Related-periodical
-melm 260$a pl:w,pl:p
-melm 260$b Publisher:w,Publisher:p
-melm 260$c copydate,copydate:s
-melm 260 pl
-melm 300 Extent:w,Extent:p
-melm 400$a Name-and-title
-melm 400$t Author-title,Name-and-title,Title,Title-series
-melm 400$9 Koha-Auth-Number
-melm 400 Author,Author-name-personal,Name,Personal-name
-melm 410 Author,Corporate-name
-melm 410$a Name-and-title
-melm 410$t Author-title,Title,Title-series
-melm 410$9 Koha-Auth-Number
-melm 410 Author-name-corporate,Name
-melm 411 Author,Conference-name
-melm 411$a Name-and-title
-#melm 411$t title,author,Author-title,Title-series
-melm 411$t Author-title,Title-series
-#melm 411 author,Author-name-corporate,Name
-melm 411 Author-name-corporate,Name
-melm 440$a Title-series:w,Title-series:p
-melm 440$9 Koha-Auth-Number
-melm 440 Title-series:w,Title-series:p,Title,Title-series
-melm 490$a Title-series:w,Title-series:p
-melm 490 Title,Title-series
-melm 490$9 Koha-Auth-Number
-
-melm 502 Material-type
-melm 505 Note:w,Note:p
-melm 510 Indexed-by
-melm 520 Abstract:w,Abstract:p
-#melm 533$d pubdate,pubdate:s
-#melm 541$d Date-of-acquisition,Date-of-acquisition:s
-
-melm 600$a Name-and-title,Name,Personal-name,Subject-name-personal,Subject
-melm 600$t Name-and-title,Title,Subject
-melm 600$9 Koha-Auth-Number
-#melm 600 Name,Personal-name,Subject-heading,Subject-name-personal
-melm 600 Name,Personal-name,Subject-name-personal,Subject
-melm 610$a Name-and-title
-melm 610$t Name-and-title,Title
-melm 610$9 Koha-Auth-Number
-melm 610 Name,Subject,Corporate-name
-melm 611 Conference-name
-melm 611$a Name-and-title
-melm 611$t Name-and-title,Title
-melm 611$9 Koha-Auth-Number
-melm 611 Name,Subject
-melm 630$n Thematic-number
-melm 630$r Music-key
-melm 630$9 Koha-Auth-Number
-melm 630 Subject
-melm 650$9 Koha-Auth-Number
-melm 650 Subject,Subject:p
-melm 651$9 Koha-Auth-Number
-melm 651 Name-geographic,Subject,Subject:p
-melm 652$9 Koha-Auth-Number
-#melm 652 subject-heading,subject-heading:p
-melm 653$9 Koha-Auth-Number
-melm 653 Subject,Subject:p
-melm 654$9 Koha-Auth-Number
-melm 654 Subject
-melm 655$9 Koha-Auth-Number
-melm 655 Subject
-melm 656$9 Koha-Auth-Number
-melm 656 Subject
-melm 657$9 Koha-Auth-Number
-melm 657 Subject
-melm 690$9 Koha-Auth-Number
-melm 690 Subject,Subject:p
-
-melm 700$9 Cross-Reference,Koha-Auth-Number
-melm 700$a Author,Author:p
-melm 700$n Thematic-number
-melm 700$r Music-key
-#melm 700$t author,Author-title,Name-and-title,Title,Title-uniform
-melm 700$t Author-title,Name-and-title,Title,Title-uniform
-melm 700 Author,Author-name-corporate,Author-name-personal,Name,Editor,Personal-name
-melm 710 Author,Corporate-name
-#melm 710$t author,Author-title,Name-and-title,Title,Title-uniform
-melm 710$t Author-title,Name-and-title,Title,Title-uniform
-#melm 710$a author,author:p,Name-and-title
-melm 710$a Name-and-title
-melm 710$9 Koha-Auth-Number
-#melm 710 author,Name
-melm 710 Author,Name
-melm 711$a Name-and-title
-#melm 711$t author,Author-title,Title,Title-uniform
-melm 711$t Author-title,Title,Title-uniform
-melm 711$9 Koha-Auth-Number
-#melm 711 author,Author-name-corporate,Name,Conference-name
-melm 711 Author-name-corporate,Name,Conference-name
-melm 730$n Thematic-number
-melm 730$r Music-key
-melm 730$9 Koha-Auth-Number
-melm 730 Title,Title-uniform
-melm 740 Title,Title-other-variant
-melm 773$t Host-item
-melm 780 Title-former,Related-periodical
-melm 785 Related-periodical
-
-melm 800$a Name-and-title
-#melm 800$t author,Author-title,Name-and-title,Title,Title-series
-melm 800$t Author-title,Name-and-title,Title,Title-series
-melm 800$9 Koha-Auth-Number
-melm 800 Author,Author-name-personal,Name,Personal-name
-melm 810$a Name-and-title
-melm 810$t Author-title,Name-and-title,Title,Title-series
-melm 810$9 Koha-Auth-Number
-melm 810 Author,Corporate-name,Author-name-corporate,Name
-melm 811$a Name-and-title
-melm 811$9 Koha-Auth-Number
-#melm 811$t author,Author-title,Name-and-title,Title,Title-series
-melm 811$t Author-title,Name-and-title,Title,Title-series
-melm 811 Author,Author-name-corporate,Name,Conference-name
-melm 830$9 Koha-Auth-Number
-melm 830 Title,Title-series
-melm 840 Title,Title-series
-
-###############################
-# Koha Local-Use Biblio Indexes
-melm 999$c Local-Number:n,Local-Number:w,Local-Number:s
-melm 999$d biblioitemnumber:n,biblioitemnumber:w,biblioitemnumber:s
-melm 942$0 totalissues:n,totalissues:s
-melm 942$2 cn-bib-source
-melm 942$6 cn-bib-sort:n,cn-bib-sort:s
-melm 942$c itemtype:w
-melm 942$n Suppress:w,Suppress:n
-
-# need to check bib1
-melm 942$h cn-class
-melm 942$i cn-item
-melm 942$k cn-prefix
-melm 942$m cn-suffix
-
-# Items Indexes
-melm 952$0 withdrawn:n,withdrawn:w
-melm 952$1 lost,lost:n
-melm 952$2 classification-source
-melm 952$3 materials-specified
-melm 952$4 damaged:n,damaged:w
-melm 952$5 restricted:n,restricted:w
-melm 952$6 cn-sort:n,cn-sort:s
-melm 952$7 notforloan:n,notforloan:w
-melm 952$8 ccode
-melm 952$9 itemnumber:n,itemnumber:s
-melm 952$a homebranch
-melm 952$b holdingbranch
-melm 952$c location
-
-#dateaccessioned
-melm 952$d Date-of-acquisition,Date-of-acquisition:d,Date-of-acquisition:s
-melm 952$e acqsource
-melm 952$f coded-location-qualifier
-melm 952$g price
-#melm 952$h
-#melm 952$i
-melm 952$j stack:n,stack:w
-#melm 952$k
-melm 952$l issues:n,issues:w,issues:s
-melm 952$m renewals:n,renewals:w
-melm 952$n reserves:n,reserves:w
-melm 952$o Local-classification:w,Local-classification:p,Local-classification:s
-melm 952$p barcode,barcode:n
-melm 952$q onloan:n,onloan:w
-melm 952$r datelastseen
-melm 952$s datelastborrowed
-melm 952$t copynumber
-melm 952$u uri:u,url:w
-melm 952$v replacementprice
-melm 952$w replacementpricedate
-#melm 952$x
-melm 952$y itype:w
-#melm 952$z
+++ /dev/null
-# indexing rules. It
-# results in a server which provides a passable Bath level 0 and 1 service
-############################################################################
-# IMPORTANT : this file MUST be renamed record.abs : this name is "hardcoded" in zebra
-# the default record.abs is designed for MARC21.
-############################################################################
-# NOTE: This is designed to be used with the grs.marcxml input filter
-# for ISO2709 (ANSI Z39.2) or grs.xml for MARCXML-formatted records. It
-# won't work for the old grs.marc input filter, which yields a different
-# internal structure.
-
-encoding utf-8
-name marc21
-attset bib1.att
-attset gils.att
-esetname F @
-esetname B @
-
-marc usmarc.mar
-systag sysno rank
-xpath disable
-
-all any
-melm 001 Local-number,Local-number:n
-# Local-number (biblionumber can be either in 090$9 or, on some setup, on 001)
-melm 090$9 Local-number,Local-number:n
-
-melm 010$a ISBN:w
-# wrong ISBN
-melm 010$z ISBN:w,Identifier-standard:w
-melm 011$a ISSN:w,Identifier-standard:w
-# cancelled ISSN
-melm 011$y ISSN:w,Identifier-standard:w
-# wrong ISSN
-melm 011$z ISSN:w,Identifier-standard:w
-
-melm 200$b itype:w
-
-
-melm 100$a date-entered-on-file:n:range(data,0,8),date-entered-on-file:s:range(data,0,8),tpubdate:s:range(data,8,1),ta:w:range(data,17,1),ta:w:range(data,18,1),ta:w:range(data,19,1),Modified-code:n:range(data,21,1),ln:s:range(data,22,3),char-encoding:n:range(data,26,2),char-encoding:n:range(data,28,2),char-encoding:n:range(data,30,2),script-Title:n:range(data,34,2)
-melm 101 ln
-melm 102$a Country-heading
-
-#Field 105 Description
-#Illustration codes 4
-#Form of contents codes 4
-#Conference or meeting code 1
-#Festschrift indicator 1
-#Index indicator 1
-#Literature code 1
-#Biography code 1
-melm 105$a Illustration-code:w:range(data,0,4),Content-type:w:range(data,4,1),Content-type:w:range(data,5,1),Content-type:w:range(data,6,1),Content-type:w:range(data,7,1),Conference-code:w:range(data,8,1),Festschrift-indicator:w:range(data,9,1),Index-indicator:w:range(data,10,1),Literature-Code:w:range(data,11,1),Biography-Code:w:range(data,12,1)
-
-melm 106$a itype
-
-#Field 110 Description
-#Name of Data Element Number of characters Character Positions
-#Type of serial designator 1 0
-#Frequency of issue 1 1
-#Regularity 1 2
-#Type of material code 1 3
-#Nature of contents code 3 4-6
-#Conference publication indicator 1 7
-#Title page availability codes 1 8
-#Index availability code 1 9
-#Cumulative index availability code 1 10
-melm 110$a Type-Of-Serial:w:range(data,0,1),Frequency-code:w:range(data,1,1),Regularity-code:w:range(data,2,1),Content-type:w:range(data,3,1),Content-type:w:range(data,4,3),Conference-publication-Code:w:range(data,7,1),Title-Page-availability-Code:w:range(data,8,1),Index-availability-Code:w:range(data,9,1),Cumulative-Index-availability-Code:w:range(data,10,1)
-
-melm 115$a Video-mt:w:range(data,0,1)
-
-melm 116$a Graphics-type:w:range(data,0,1),Graphics-support:w:range(data,1,1),Graphics-support:w:range(data,2,1),
-
-
-melm 680$b LC-call-number:s
-melm 680 LC-call-number
-#melm 001 Identifier-standard:w
-
-melm 200$b itype
-
-#melm 100$9 Cross-Reference !:w
-
-############ AUTHORS ##################
-# main Author
-melm 200$f Author:w,Author:p
-# other Authors
-melm 200$g Author:w,Author:p
-# physical Author
-melm 700$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 700$a Author, Author-name-personal, Author:p, Author-name-personal:p, Author:s
-melm 700 Author,Author-name-personal,Author:p,Author-name-personal:p
-melm 701$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 701 Author,Author-name-personal,Author:p,Author-name-personal:p
-melm 702$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 702 Author,Author-name-personal,Author:p,Author-name-personal:p
-
-# collective Author
-melm 710$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 710 Author,Author-name-corporate,Author-name-conference,Corporate-name,Conference-name,Author:p,Author-name-corporate:p,Author-name-conference:p,Corporate-name:p,Conference-name:p
-melm 711$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 711 Author,Author-name-corporate,Author-name-conference,Corporate-name,Conference-name,Author:p,Author-name-corporate:p,Author-name-conference:p,Corporate-name:p,Conference-name:p
-
-melm 712$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 712 Author,Author-name-corporate,Author-name-conference,Corporate-name,Conference-name,Author:p,Author-name-corporate:p,Author-name-conference:p,Corporate-name:p,Conference-name:p
-
-############## TITLE ##################
-# main Title
-melm 200$a Title:w,Title:p,Title:s
-# Title 2
-melm 200$c Title:w,Title:p
-# // Title
-melm 200$d Title:w,Title:p
-# subTitle
-melm 200$e Title:w,Title:p
-
-melm 205 Title,Title:p
-
-melm 208 Serials,Serials:p
-melm 207 Printed-music,Printed-music:p
-
-
-
-melm 210$a pl,pl:p
-melm 210$c Publisher,Publisher:p
-melm 210$d pubdate:n,pubdate:s
-
-melm 215 Extent
-
-#Series
-melm 225$a Title-series,Title-series:p
-melm 225$d Title-series,Title-series:p
-#SubTitle
-melm 225$e Title-series,Title-series:p
-#Authors
-melm 225$f Author,Author:p,Name-and-title,Name-and-title:p
-#Part-Title
-melm 225$h Title-series,Title-series:p
-#Part Number
-melm 225$i Title-series,Title-series:p
-#Volume
-melm 225$v Title-series,Title-series:p
-melm 225$x ISSN
-
-melm 230$a Electronic-ressource
-
-########## NOTES #################
-melm 300$a Note,Note:p
-melm 301$a Note,Note:p
-melm 302$a Note,Note:p
-melm 303$a Note,Note:p
-melm 304$a Note,Note:p
-melm 305$a Note,Note:p
-melm 306$a Note,Note:p
-melm 307$a Note,Note:p
-melm 308 Note,Note:p
-melm 308$a Note,Note:p
-melm 310$a Note,Note:p
-melm 311$a Note,Note:p
-melm 312$a Note,Note:p
-melm 313$a Note,Note:p
-melm 314$a Note,Note:p
-melm 315$a Note,Note:p
-melm 316$a Note,Note:p
-melm 317$a Note,Note:p
-melm 318$a Note,Note:p
-melm 320$a Note,Note:p
-melm 321$a Note,Note:p
-melm 322$a Note,Note:p
-melm 323$a Note,Note:p
-melm 324$a Note,Note:p
-melm 325$a Note,Note:p
-melm 326$a Note,Note:p
-melm 327$a Note,Note:p
-melm 328 Note,Note:p
-melm 328$a Note,Note:p
-melm 330$a Abstract,Note:w,Abstract:p,Note:p
-melm 332$a Note,Note:p
-melm 333$a Note,Note:p
-melm 336$a Note,Note:p
-melm 337$a Note,Note:p
-melm 345$a Note,Note:p
-
-
-############## 4XX - LINKING ##################
-# Authorities Title,Title:p
-melm 400$t Title,Title:p
-melm 401$t Title,Title:p
-melm 403$t Title,Title:p,Title-Uniform,Title-Uniform:p
-melm 410$t Title,Title:p
-melm 412$t Title,Title:p
-melm 413$t Title,Title:p
-melm 414$t Title,Title:p
-melm 415$t Title,Title:p
-melm 416$t Title,Title:p
-melm 417$t Title,Title:p
-melm 418$t Title,Title:p
-melm 419$t Title,Title:p
-melm 420$t Title,Title:p
-melm 430$t Title,Title:p
-melm 431$t Title,Title:p
-melm 432$t Title,Title:p
-melm 440$t Title,Title:p
-melm 441$t Title,Title:p
-melm 445$t Title,Title:p
-melm 400$d pubdate:n
-melm 401$d pubdate:n
-melm 403$d pubdate:n
-melm 410$d pubdate:n
-melm 412$d pubdate:n
-melm 413$d pubdate:n
-melm 414$d pubdate:n
-melm 415$d pubdate:n
-melm 416$d pubdate:n
-melm 417$d pubdate:n
-melm 418$d pubdate:n
-melm 419$d pubdate:n
-melm 420$d pubdate:n
-melm 430$d pubdate:n
-melm 431$d pubdate:n
-melm 432$d pubdate:n
-melm 440$d pubdate:n
-melm 441$d pubdate:n
-melm 445$d pubdate:n
-
-# Authorities Title
-melm 500$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 501$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 503$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 510$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 512$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 513$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 514$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 515$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 516$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 517$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 518$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 519$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 520$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 530$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 531$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 532$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 540$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 541$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 545$9 Koha-Auth-Number,Koha-Auth-Number:n
-
-melm 500 Title,Title:p
-melm 501 Title,Title:p
-melm 503 Title,Title:p
-melm 510 Title,Title:p
-melm 512 Title,Title:p
-melm 513 Title,Title:p
-melm 514 Title,Title:p
-melm 515 Title,Title:p
-melm 516 Title,Title:p
-melm 517 Title,Title:p
-melm 518 Title,Title:p
-melm 519 Title,Title:p
-melm 520 Title,Title:p
-melm 530 Title,Title:p
-melm 531 Title,Title:p
-melm 532 Title,Title:p
-melm 540 Title,Title:p
-melm 541 Title,Title:p
-melm 545 Title,Title:p
-
-########### SUBJECTS (6xx) ##################
-melm 600$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 601$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 602$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 603$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 604$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 605$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 606$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 607$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 610$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 630$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 631$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 632$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 633$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 634$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 635$9 Koha-Auth-Number,Koha-Auth-Number:n
-melm 636$9 Koha-Auth-Number,Koha-Auth-Number:n
-
-melm 600$a Personal-name,Personal-name:p
-melm 600 Subject,Subject:p
-melm 601$a Corporate-name,Conference-name,Corporate-name:p,Conference-name:p
-melm 601 Subject,Subject:p
-melm 602$a Personal-name,Personal-name:p
-melm 602 Subject,Subject:p
-melm 604 Subject,Subject:p
-melm 605 Subject,Subject:p
-melm 606 Subject,Subject:p
-melm 607 Subject,Subject:p
-melm 630 Subject,Subject:p
-melm 631 Subject,Subject:p
-melm 632 Subject,Subject:p
-melm 633 Subject,Subject:p
-melm 634 Subject,Subject:p
-melm 635 Subject,Subject:p
-melm 636 Subject,Subject:p
-melm 610 Subject,Subject:p
-melm 640 Subject,Subject:p
-melm 641 Subject,Subject:p
-melm 642 Subject,Subject:p
-melm 643 Subject,Subject:p
-melm 644 Subject,Subject:p
-melm 645 Subject,Subject:p
-melm 646 Subject,Subject:p
-
-######################
-
-melm 676$a Dewey-classification:w,Dewey-classification:s
-
-#############"# item information (based on 995) ###############
-melm 995$a homebranch,Host-item
-melm 995$b homebranch,Host-item
-melm 995$c holdingbranch,Record-Source
-melm 995$d holdingbranch,Record-Source
-melm 995$e location
-melm 995$f barcode
-melm 995$j LC-card-number:s
-melm 995$k Call-Number,Local-Classification,lcn,Call-Number:p,Local-Classification:p,lcn:p
-melm 995$s popularity:n,popularity:s
-melm 995$n onloan:d,onloan:n,onloan:s
-melm 995$u Note, Note:p
-melm 995 item # just to index every subfield
+++ /dev/null
-Zebra key dir
+++ /dev/null
-Zebra lock dir
+++ /dev/null
-Zebra readme dir
+++ /dev/null
-Zebra tmp dir
+++ /dev/null
-# Generic character map.
-#
-# $Id: string.chr,v 1.4 1999/09/07 07:19:21 adam Exp $
-
-# Define the basic value-set. *Beware* of changing this without re-indexing
-# your databases.
-lowercase {0-9}{a-y}üzæäøöå
-uppercase {0-9}{A-Y}ÜZÆÄØÖÅ
-
-# Breaking characters
-
-space {\001-\040}!"#$%&'\()*+,-./:;<=>?@\[\\]^_`\{|}~
-
-# Characters to be considered equivalent for searching purposes.
-
-# equivalent æä(ae)
-# equivalent øö(oe)
-# equivalent å(aa)
-# equivalent uü
-
-# Supplemental mappings
-
-#map (ä) ä
-#map (æ) æ
-#map (ø) ø
-#map (å) å
-#map (ö) ö
-#map (Ä) Ä
-#map (&Aelig;) Æ
-#map (Ø) Ø
-#map (Å) Å
-#map (Ö) Ö
-
-#map éÉ e
-#map á a
-#map ó o
-#map í i
-
-#map (Aa) (AA)
-
-#map (aa) a
-map (^The\s) @
-map (^the\s) @
-map (^a\s) @
-map (^A\s) @
-map (^An\s) @
-map (^an\s) @
-
+++ /dev/null
-# Generic character map.
-#
-
-encoding utf-8
-
-# Define the basic value-set. *Beware* of changing this without re-indexing
-# your databases.
-lowercase {0-9}aæbcdefghijklmnopqrstuvwxyzø
-uppercase {0-9}AÆBCDEFGHIJKLMNOPQRSTUVWXYZØ
-
-# Breaking characters
-
-space {\001-\040}!"#$%&'\()*+,-/:;<=>?@\[\\]^_`\{|}~.
-
-# Characters to be considered equivalent for searching purposes.
-equivalent æä(ae)
-equivalent øö(oe)
-equivalent å(aa)
-#equivalent uü
-equivalent y(i)
-
-# Supplemental mappings
-
-map (ä) a
-map (æ) æ
-map (ø) ø
-map (å) a
-map (ö) o
-map (Ä) A
-map (&Aelig;) Æ
-map (Ø) Ø
-map (Å) A
-map (Ö) O
-
-map âàáäÂÀÂÄ a
-map êèéëÊÈÉË e
-map îïíÎÏ i
-map ôöóÔÖ o
-map ûùüÛÜÙ u
-map ç c
-#map y i
-
-map (^Le\s) @
-map (^La\s) @
-map (^Les\s) @
-map (^Un\s) @
-map (^Une\s) @
-map (^De\s) @
-map (^Des\s) @
-map (^L\s) @
-map (^D\s) @
--- /dev/null
+# Generic character map.
+#
+# $Id: string.chr,v 1.4 1999/09/07 07:19:21 adam Exp $
+
+# Define the basic value-set. *Beware* of changing this without re-indexing
+# your databases.
+lowercase {0-9}{a-y}üzæäøöå
+uppercase {0-9}{A-Y}ÜZÆÄØÖÅ
+
+# Breaking characters
+
+space {\001-\040}!"#$%&'\()*+,-./:;<=>?@\[\\]^_`\{|}~
+
+# Characters to be considered equivalent for searching purposes.
+
+# equivalent æä(ae)
+# equivalent øö(oe)
+# equivalent å(aa)
+# equivalent uü
+
+# Supplemental mappings
+
+#map (ä) ä
+#map (æ) æ
+#map (ø) ø
+#map (å) å
+#map (ö) ö
+#map (Ä) Ä
+#map (&Aelig;) Æ
+#map (Ø) Ø
+#map (Å) Å
+#map (Ö) Ö
+
+#map éÉ e
+#map á a
+#map ó o
+#map í i
+
+#map (Aa) (AA)
+
+#map (aa) a
+map (^The\s) @
+map (^the\s) @
+map (^a\s) @
+map (^A\s) @
+map (^An\s) @
+map (^an\s) @
+
--- /dev/null
+# Generic character map.
+#
+
+encoding utf-8
+
+# Define the basic value-set. *Beware* of changing this without re-indexing
+# your databases.
+lowercase {0-9}aæbcdefghijklmnopqrstuvwxyzø
+uppercase {0-9}AÆBCDEFGHIJKLMNOPQRSTUVWXYZØ
+
+# Breaking characters
+
+space {\001-\040}!"#$%&'\()*+,-/:;<=>?@\[\\]^_`\{|}~.
+
+# Characters to be considered equivalent for searching purposes.
+equivalent æä(ae)
+equivalent øö(oe)
+equivalent å(aa)
+#equivalent uü
+equivalent y(i)
+
+# Supplemental mappings
+
+map (ä) a
+map (æ) æ
+map (ø) ø
+map (å) a
+map (ö) o
+map (Ä) A
+map (&Aelig;) Æ
+map (Ø) Ø
+map (Å) A
+map (Ö) O
+
+map âàáäÂÀÂÄ a
+map êèéëÊÈÉË e
+map îïíÎÏ i
+map ôöóÔÖ o
+map ûùüÛÜÙ u
+map ç c
+#map y i
+
+map (^Le\s) @
+map (^La\s) @
+map (^Les\s) @
+map (^Un\s) @
+map (^Une\s) @
+map (^De\s) @
+map (^Des\s) @
+map (^L\s) @
+map (^D\s) @
--- /dev/null
+# $Id: record_authorities_unimarc.abs,v 1.1.2.1 2006/11/28 10:11:56 tipaul Exp $
+
+# indexing rules. It
+# results in a server which provides a passable Bath level 0 and 1 service
+############################################################################
+# IMPORTANT : this file MUST be renamed record.abs : this name is "hardcoded" in zebra
+# the default record.abs is designed for MARC21.
+############################################################################
+# NOTE: This is designed to be used with the grs.marcxml input filter
+# for ISO2709 (ANSI Z39.2) or grs.xml for MARCXML-formatted records. It
+# won't work for the old grs.marc input filter, which yields a different
+# internal structure.
+
+encoding utf-8
+name authorities
+#attset auth1.att
+attset bib1.att
+esetname F @
+esetname B @
+
+marc usmarc.mar
+systag sysno rank
+xpath disable
+
+all any
+melm 001 Local-Number
+melm 152$b Authority/format-id
+#melm 005 Version-id
+#melm 015 IASDN
+
+
+########################
+# Coded fields
+########################
+#melm 100$a date-entered-on-file:n:range(data,0,8),date-entered-on-file:s:range(data,0,8),auth-status:n:range(data,8,1),auth-status:s:range(data,8,1),language:n:range(data,9,3),language:s:range(data,9,3),char-encoding:w:range(data,13,4),char-encoding:s:range(data,13,4),ff100-17:w:range(data,17,3),ff100-21:w:range(data,21,2),ff100-23:w:range(data,23,1)
+
+#melm 101$a Language
+#melm 102$a Country-heading
+# Subject-Heading
+#melm 106$a Vaut 0(inutilisable sujet-matiere),1 (utilisable sujet-matiere)ou 2(utilisable uniquement sujet-matiere)
+#melm 120$a Obligatoire sur Autorite NP : Sexe et discrimination
+#melm 123$a Obligatoire sur Autorite GEO : Localisation
+#melm 150$a Obligatoire sur Autorite CO : Type de collectivite
+# 4XX$3 5XX$3 7XX$3 authority number
+# 4XX$5 5XX$5 7XX$5 Linking type
+# 4XX$7 5XX$7 7XX$7 Script Cataloguing
+# 4XX$8 5XX$8 7XX$8 Language
+
+
+############ HEADINGS ##################
+melm 100$a Heading:w,Heading:p,Heading:s, personal-heading,personal-heading:w,personal-heading:s,personal-heading:p
+melm 110$a Heading:w,Heading:p,Heading:s,corporate-heading
+melm 110$a Heading:w,Heading:p,Heading:s,Conference-heading
+melm 115$a Heading:w,Heading:p,Heading:s,Name-geographic
+#melm 216 Name-corporate
+melm 120$a Heading:w,Heading:p,Heading:s,personal-heading,personal-heading:w,personal-heading:s,personal-heading:p
+melm 130$a Heading:w,Heading:p,Heading:s,Title-Uniform,Title-Uniform:w,Title-Uniform:s,Title-Uniform:p
+melm 135$a Heading:w,Heading:p,Heading:s,Title-Uniform,Title-Uniform:w,Title-Uniform:s,Title-Uniform:p
+melm 150$a Heading:w,Heading:p,Heading:s,Subject-heading, Subject-heading:w,Subject-heading:s,Subject-heading:p
+
+melm 100 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s, personal-Heading-Entity,personal-Heading-Entity:w,personal-Heading-Entity:s,personal-Heading-Entity:p
+melm 110 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,corporate-Heading-Entity
+melm 110 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,Conference-Heading-Entity
+melm 115 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,Name-geographic-Entity
+#melm 216 Name-corporate
+melm 120 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,personal-Heading-Entity,personal-Heading-Entity:w,personal-Heading-Entity:s,personal-Heading-Entity:p
+melm 130 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,Title-Uniform-entity,Title-Uniform-entity:w,Title-Uniform:s,Title-Uniform-entity:p
+melm 135 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,Title-Uniform-entity,Title-Uniform-entity:w,Title-Uniform:s,Title-Uniform-entity:p
+melm 150 Heading-Entity:w,Heading-Entity:p,Heading-Entity:s,Subject-Thesaurus
+
+#210 Heading - Corporate Body Name
+#215 Heading - Territorial or Geographical Name
+#216 Heading - Trademark
+#220 Heading - Family Name
+#230 Heading - Uniform Title
+#235 Heading - Collective Uniform Title
+#240 Heading - Name/Title
+#245 Heading - Name/Collective Uniform Title
+#250 Heading - Topical Subject
+#260 Heading - Place Access
+#280 Heading - Form, Genre or Physical Characteristics
+#melm 712 Author,Author:p,Author:s
+
+############# Rejected forms ##################
+#melm 400$a See, See:w,See:p,See:s,personal-see,personal-see:w,personal-see:s,personal-see:p
+#melm 410$a See, See:w,See:p,See:s,corporate-see
+#melm 410$a See, See:w,See:p,See:s,Conference-see
+#melm 415$a See, See:w,See:p,See:s,Name-geographic-see
+##melm 416 Name-corporate
+#melm 440$a See, See:w,See:p,See:s,personal-see,personal-see:w,personal-see:s,personal-see:p
+#melm 430$a See, See:w,See:p,See:s,Title-Uniform-see,Title-Uniform-see:w,Title-Uniform-see:s,Title-Uniform-see:p
+#melm 435$a See, See:w,See:p,See:s,Title-Uniform-see,Title-Uniform-see:w,Title-Uniform-see:s,Title-Uniform-see:p
+#melm 450$a See, See:w,See:p,See:s,Subject-see,Subject-see:w,Subject-see:s,Subject-see,:p
+#melm 400 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,personal-See-Entity,personal-See-Entity:w,personal-See-Entity:s,personal-See-Entity:p
+#melm 410 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,corporate-See-Entity
+#melm 410 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,Conference-See-Entity
+#melm 415 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,Name-geographic-See-Entity
+##melm 416 Name-corporate
+#melm 440 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,personal-See-Entity,personal-See-Entity:w,personal-See-Entity:s,personal-See-Entity:p
+#melm 430 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,Title-Uniform-See-Entity,Title-Uniform-See-Entity:w,Title-Uniform-See-Entity:s,Title-Uniform-See-Entity:p
+#melm 435 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,Title-Uniform-See-Entity,Title-Uniform-See-Entity:w,Title-Uniform-See-Entity:s,Title-Uniform-See-Entity:p
+#melm 450 See-Entity, See-Entity:w,See-Entity:p,See-Entity:s,Subject-See-Entity,Subject-See-Entity:w,Subject-See-Entity:s,Subject-See-Entity,:p
+#
+##410 Heading - Corporate Body Name
+##415 Heading - Territorial or Geographical Name
+##416 Heading - Trademark
+##440 Heading - Family Name
+##430 Heading - Uniform Title
+##435 Heading - Collective Uniform Title
+##440 Heading - Name/Title
+##445 Heading - Name/Collective Uniform Title
+##450 Heading - Topical Subject
+##460 Heading - Place Access
+##480 Heading - Form, Genre or Physical Characteristics
+##melm 714 Author,Author:p,Author:s
+#
+############# Related forms ##################
+#melm 500$a personal-see-also,personal-see-also:w,personal-see-also:s,personal-see-also:p
+#melm 510$a corporate-see-also
+#melm 510$a Conference-see-also
+#melm 515$a Name-geographic-see-also
+##melm 416 Name-corporate
+#melm 540$a personal-see-also,personal-see-also:w,personal-see-also:s,personal-see-also:p
+#melm 530$a Title-Uniform-see-also,Title-Uniform-see-also:w,Title-Uniform-see-also:s,Title-Uniform-see-also:p
+#melm 535$a Title-Uniform-see-also,Title-Uniform-see-also:w,Title-Uniform-see-also:s,Title-Uniform-see-also:p
+#melm 550$a Subject-see-also,Subject-see-also:w,Subject-see-also:s,Subject-see-also:p
+##510 Heading - Corporate Body Name
+##515 Heading - Territorial or Geographical Name
+##516 Heading - Trademark
+##550 Heading - Family Name
+##530 Heading - Uniform Title
+##535 Heading - Collective Uniform Title
+##540 Heading - Name/Title
+###545 Heading - Name/Collective Uniform Title
+##550 Heading - Topical Subject
+##560 Heading - Place Access
+##580 Heading - Form, Genre or Physical Characteristics
+##melm 714 Author,Author:p,Author:s
+#
+############# Parallel forms ##################
+#melm 700$a personal-parallel,personal-parallel:w,personal-parallel:s,personal-parallel:p
+#melm 710$a corporate-parallel
+#melm 710$a Conference-parallel
+#melm 715$a Name-geographic-parallel
+##melm 716 Name-corporate
+#melm 770$a personal-parallel,personal-parallel:w,personal-parallel:s,personal-parallel:p
+#melm 730$a Title-Uniform-parallel,Title-Uniform-parallel:w,Title-Uniform-parallel:s,Title-Uniform-parallel:p
+#melm 735$a Title-Uniform-parallel,Title-Uniform-parallel:w,Title-Uniform-parallel:s,Title-Uniform-parallel:p
+#melm 750$a Subject-parallel,Subject-parallel:w,Subject-parallel:s,Subject-parallel:p
+#
+########### NOTES #################
+#melm 300$a Note !:w,!:p
+#melm 301$a Note !:w,!:p
+#melm 302$a Note !:w,!:p
+#melm 303$a Note !:w,!:p
+#melm 304$a Note !:w,!:p
+#melm 305$a Note !:w,!:p
+#melm 306$a Note !:w,!:p
+#melm 307$a Note !:w,!:p
+#melm 308$a Note !:w,!:p
+#melm 310$a Note !:w,!:p
+#melm 311$a Note !:w,!:p
+#melm 312$a Note !:w,!:p
+#melm 313$a Note !:w,!:p
+#melm 314$a Note !:w,!:p
+#melm 315$a Note !:w,!:p
+#melm 316$a Note !:w,!:p
+#melm 317$a Note !:w,!:p
+#melm 318$a Note !:w,!:p
+#melm 320$a Note !:w,!:p
+#melm 321$a Note !:w,!:p
+#melm 322$a Note !:w,!:p
+#melm 323$a Note !:w,!:p
+#melm 324$a Note !:w,!:p
+#melm 325$a Note !:w,!:p
+#melm 326$a Note !:w,!:p
+#melm 327$a Note !:w,!:p
+#melm 328$a Note !:w,!:p
+#melm 330$a Note !:w,!:p
+#melm 332$a Note !:w,!:p
+#melm 333$a Note !:w,!:p
+#melm 336$a Note !:w,!:p
+#melm 337$a Note !:w,!:p
+#melm 345$a Note !:w,!:p
+#####
--- /dev/null
+# This is a fairly simple example of a set of MARC21 indexing rules. It
+# results in a server which provides a passable Bath level 0 and 1 service
+# (author, title, subject, keyword and exact services). Feel free to
+# elaborate on it, and if you do, please consider sharing your additions.
+# NOTE: This is designed to be used with the grs.marcxml input filter
+# for ISO2709 (ANSI Z39.2) or grs.xml for MARCXML-formatted records. It
+# won't work for the old grs.marc input filter, which yields a different
+# internal structure.
+encoding utf-8
+name marc21
+attset bib1.att
+attset gils.att
+esetname F @
+esetname B @
+
+marc usmarc.mar
+systag sysno rank
+xpath enable
+# Some notes:
+# pl = Published Place
+# ta = Target Audience 002/22
+# ff8-23
+# lf = Literary Form 008/33
+# bio = Biography 008/34
+# fmt = Format
+# ln = Language
+# ctype = Content type: review, catalog, encyclopedia, dictionary
+# pubdate Publication Date
+# rtype = Record type (leader 06)
+#
+# Date indexing in Koha 3.0 for MARC21:
+# Index Expected format Notes
+# date-entered-on-file [yymmdd] (008/0-5, indexed in word and sort indexes)
+# copydate [yyyy] (260$c, indexed in word and sort indexes)
+# acqdate [yyyy-mm-dd] (952$d, indexed in date,word,sort indexes)
+# pubdate [yyyy] (008/7-10, indexed in year,word,num,sort indexes)
+
+all any
+# melm 000 rtype:n:range(data,06,1),Bib-level:w:range(data,07,01)
+xelm /record/leader llength:w:range(data,0,5),rtype:w:range(data,6,1),Bib-level:w:range(data,7,1)
+# example: xelm /record/leader l1:w:range(data,0,5),l2:w:range(data,10,2)
+
+melm 001 Control-number
+melm 005 Date/time-last-modified
+melm 007 Microform-generation:n:range(data,11,1),Material-type,ff7-00:w:range(data,0,1),ff7-01:w:range(data,1,1),ff7-02:w:range(data,2,1),ff7-01-02:w:range(data,0,2)
+
+melm 008 date-entered-on-file:n:range(data,0,5),date-entered-on-file:s:range(data,0,5),pubdate:w:range(data,7,4),pubdate:n:range(data,7,4),pubdate:y:range(data,7,4),pubdate:s:range(data,7,4),pl:w:range(data,15,3),ta:w:range(data,22,1),ff8-23:w:range(data,23,1),ff8-29:w:range(data,29,1),lf:w:range(data,33,1),bio:w:range(data,34,1),ln:n:range(data,35,3),ctype:w:range(data,24,4),Record-source:w:range(data,39,0)
+
+melm 010 LC-card-number,Identifier-standard
+melm 011 LC-card-number,Identifier-standard
+melm 015 BNB-card-number,BGF-number,Number-db,Number-natl-biblio,Identifier-standard
+melm 017 Number-legal-deposit,Identifier-standard
+melm 018 Identifier-standard
+melm 020$a ISBN:w,Identifier-standard:w
+melm 020 ISBN,Identifier-standard
+melm 022$a ISSN:w,ISBN:w
+melm 022 ISSN,Identifier-standard
+melm 023 Identifier-standard
+melm 024 Identifier-standard
+melm 025 Identifier-standard
+melm 027 Report-number,Identifier-standard
+melm 028 Number-music-publisher,Identifier-standard
+melm 030 CODEN,Identifier-standard
+#melm 033 Date
+melm 034 Map-scale
+#melm 035 Local-number,Identifier-standard
+melm 037 Identifier-standard,Stock-number
+melm 040 Code-institution,Record-source
+melm 041 ln
+melm 043 Code-geographic
+#melm 046 pubdate
+melm 050$b LC-call-number:w, LC-call-number:p, LC-call-number:s
+melm 050 LC-call-number:w, LC-call-number:p, LC-call-number:s
+melm 052 Geographic-class
+melm 060 NLM-call-number
+melm 070 NAL-call-number
+melm 080 UDC-classification
+melm 082 Dewey-classification:w,Dewey-classification:s
+melm 086 Number-govt-pub
+#melm 942$k LC-card-number:s
+
+## KOHA SPECIFIC
+#melm 090$c Local-number:w
+#Identifier-standard:w
+
+melm 100$9 Cross-Reference:w,Koha-Auth-Number
+melm 100$a Author,Author:p,Author:s,Editor,Author-personal-bibliography,Author-personal-bibliography:p,Author-personal-bibliography:s
+melm 100 Author,Author-title,Author-name-personal,Name,Name-and-title,Personal-name
+melm 110$9 Koha-Auth-Number
+melm 110 Author,Author-title,Author-name-corporate,Name,Name-and-title,Corporate-name
+melm 111$9 Koha-Auth-Number
+melm 111 Author,Author-title,Author-name-corporate,Name,Name-and-title,Conference-name
+melm 130$n Thematic-number
+melm 130$r Music-key
+melm 130$9 Koha-Auth-Number
+melm 130 Title,Title-uniform
+
+melm 210 Title,Title-abbreviated
+melm 211 Title,Title-abbreviated
+melm 212 Title,Title-other-variant
+melm 214 Title,Title-expanded
+melm 222 Title,Title-key
+melm 240$r Music-key
+melm 240$n Thematic-number
+melm 240 Title:w,Title:p,Title-uniform
+melm 243$n Thematic-number
+melm 243$r Music-key
+melm 243 Title:w,Title:p,Title-collective
+melm 245$a Title-cover:w,Title-cover:p,Title-cover:s,Title:w,Title:p,Title:s
+melm 245$c Author,Author-in-order:w,Author-in-order:p,Author-in-order:s
+melm 245$9 Cross-Reference:w,Koha-Auth-Number
+melm 245 Title:w,Title:p
+melm 246 Title,Title:p,Title-abbreviated,Title-expanded,Title-former
+melm 247 Title,Title:p,Title-former,Title-other-variant,Related-periodical
+melm 260$a pl:w,pl:p
+melm 260$b Publisher:w,Publisher:p
+melm 260$c copydate,copydate:s
+melm 260 pl
+melm 300 Extent:w,Extent:p
+melm 400$a Name-and-title
+melm 400$t Author-title,Name-and-title,Title,Title-series
+melm 400$9 Koha-Auth-Number
+melm 400 Author,Author-name-personal,Name,Personal-name
+melm 410 Author,Corporate-name
+melm 410$a Name-and-title
+melm 410$t Author-title,Title,Title-series
+melm 410$9 Koha-Auth-Number
+melm 410 Author-name-corporate,Name
+melm 411 Author,Conference-name
+melm 411$a Name-and-title
+#melm 411$t title,author,Author-title,Title-series
+melm 411$t Author-title,Title-series
+#melm 411 author,Author-name-corporate,Name
+melm 411 Author-name-corporate,Name
+melm 440$a Title-series:w,Title-series:p
+melm 440$9 Koha-Auth-Number
+melm 440 Title-series:w,Title-series:p,Title,Title-series
+melm 490$a Title-series:w,Title-series:p
+melm 490 Title,Title-series
+melm 490$9 Koha-Auth-Number
+
+melm 502 Material-type
+melm 505 Note:w,Note:p
+melm 510 Indexed-by
+melm 520 Abstract:w,Abstract:p
+#melm 533$d pubdate,pubdate:s
+#melm 541$d Date-of-acquisition,Date-of-acquisition:s
+
+melm 600$a Name-and-title,Name,Personal-name,Subject-name-personal,Subject
+melm 600$t Name-and-title,Title,Subject
+melm 600$9 Koha-Auth-Number
+#melm 600 Name,Personal-name,Subject-heading,Subject-name-personal
+melm 600 Name,Personal-name,Subject-name-personal,Subject
+melm 610$a Name-and-title
+melm 610$t Name-and-title,Title
+melm 610$9 Koha-Auth-Number
+melm 610 Name,Subject,Corporate-name
+melm 611 Conference-name
+melm 611$a Name-and-title
+melm 611$t Name-and-title,Title
+melm 611$9 Koha-Auth-Number
+melm 611 Name,Subject
+melm 630$n Thematic-number
+melm 630$r Music-key
+melm 630$9 Koha-Auth-Number
+melm 630 Subject
+melm 650$9 Koha-Auth-Number
+melm 650 Subject,Subject:p
+melm 651$9 Koha-Auth-Number
+melm 651 Name-geographic,Subject,Subject:p
+melm 652$9 Koha-Auth-Number
+#melm 652 subject-heading,subject-heading:p
+melm 653$9 Koha-Auth-Number
+melm 653 Subject,Subject:p
+melm 654$9 Koha-Auth-Number
+melm 654 Subject
+melm 655$9 Koha-Auth-Number
+melm 655 Subject
+melm 656$9 Koha-Auth-Number
+melm 656 Subject
+melm 657$9 Koha-Auth-Number
+melm 657 Subject
+melm 690$9 Koha-Auth-Number
+melm 690 Subject,Subject:p
+
+melm 700$9 Cross-Reference,Koha-Auth-Number
+melm 700$a Author,Author:p
+melm 700$n Thematic-number
+melm 700$r Music-key
+#melm 700$t author,Author-title,Name-and-title,Title,Title-uniform
+melm 700$t Author-title,Name-and-title,Title,Title-uniform
+melm 700 Author,Author-name-corporate,Author-name-personal,Name,Editor,Personal-name
+melm 710 Author,Corporate-name
+#melm 710$t author,Author-title,Name-and-title,Title,Title-uniform
+melm 710$t Author-title,Name-and-title,Title,Title-uniform
+#melm 710$a author,author:p,Name-and-title
+melm 710$a Name-and-title
+melm 710$9 Koha-Auth-Number
+#melm 710 author,Name
+melm 710 Author,Name
+melm 711$a Name-and-title
+#melm 711$t author,Author-title,Title,Title-uniform
+melm 711$t Author-title,Title,Title-uniform
+melm 711$9 Koha-Auth-Number
+#melm 711 author,Author-name-corporate,Name,Conference-name
+melm 711 Author-name-corporate,Name,Conference-name
+melm 730$n Thematic-number
+melm 730$r Music-key
+melm 730$9 Koha-Auth-Number
+melm 730 Title,Title-uniform
+melm 740 Title,Title-other-variant
+melm 773$t Host-item
+melm 780 Title-former,Related-periodical
+melm 785 Related-periodical
+
+melm 800$a Name-and-title
+#melm 800$t author,Author-title,Name-and-title,Title,Title-series
+melm 800$t Author-title,Name-and-title,Title,Title-series
+melm 800$9 Koha-Auth-Number
+melm 800 Author,Author-name-personal,Name,Personal-name
+melm 810$a Name-and-title
+melm 810$t Author-title,Name-and-title,Title,Title-series
+melm 810$9 Koha-Auth-Number
+melm 810 Author,Corporate-name,Author-name-corporate,Name
+melm 811$a Name-and-title
+melm 811$9 Koha-Auth-Number
+#melm 811$t author,Author-title,Name-and-title,Title,Title-series
+melm 811$t Author-title,Name-and-title,Title,Title-series
+melm 811 Author,Author-name-corporate,Name,Conference-name
+melm 830$9 Koha-Auth-Number
+melm 830 Title,Title-series
+melm 840 Title,Title-series
+
+###############################
+# Koha Local-Use Biblio Indexes
+melm 999$c Local-Number:n,Local-Number:w,Local-Number:s
+melm 999$d biblioitemnumber:n,biblioitemnumber:w,biblioitemnumber:s
+melm 942$0 totalissues:n,totalissues:s
+melm 942$2 cn-bib-source
+melm 942$6 cn-bib-sort:n,cn-bib-sort:s
+melm 942$c itemtype:w
+melm 942$n Suppress:w,Suppress:n
+
+# need to check bib1
+melm 942$h cn-class
+melm 942$i cn-item
+melm 942$k cn-prefix
+melm 942$m cn-suffix
+
+# Items Indexes
+melm 952$0 withdrawn:n,withdrawn:w
+melm 952$1 lost,lost:n
+melm 952$2 classification-source
+melm 952$3 materials-specified
+melm 952$4 damaged:n,damaged:w
+melm 952$5 restricted:n,restricted:w
+melm 952$6 cn-sort:n,cn-sort:s
+melm 952$7 notforloan:n,notforloan:w
+melm 952$8 ccode
+melm 952$9 itemnumber:n,itemnumber:s
+melm 952$a homebranch
+melm 952$b holdingbranch
+melm 952$c location
+
+#dateaccessioned
+melm 952$d Date-of-acquisition,Date-of-acquisition:d,Date-of-acquisition:s
+melm 952$e acqsource
+melm 952$f coded-location-qualifier
+melm 952$g price
+#melm 952$h
+#melm 952$i
+melm 952$j stack:n,stack:w
+#melm 952$k
+melm 952$l issues:n,issues:w,issues:s
+melm 952$m renewals:n,renewals:w
+melm 952$n reserves:n,reserves:w
+melm 952$o Local-classification:w,Local-classification:p,Local-classification:s
+melm 952$p barcode,barcode:n
+melm 952$q onloan:n,onloan:w
+melm 952$r datelastseen
+melm 952$s datelastborrowed
+melm 952$t copynumber
+melm 952$u uri:u
+melm 952$v replacementprice
+melm 952$w replacementpricedate
+#melm 952$x
+melm 952$y itype:w
+#melm 952$z
--- /dev/null
+
+# indexing rules. It
+# results in a server which provides a passable Bath level 0 and 1 service
+############################################################################
+# IMPORTANT : this file MUST be renamed record.abs : this name is "hardcoded" in zebra
+# the default record.abs is designed for MARC21.
+############################################################################
+# NOTE: This is designed to be used with the grs.marcxml input filter
+# for ISO2709 (ANSI Z39.2) or grs.xml for MARCXML-formatted records. It
+# won't work for the old grs.marc input filter, which yields a different
+# internal structure.
+
+encoding utf-8
+name authorities
+attset auth1.att
+esetname F @
+esetname B @
+
+marc usmarc.mar
+systag sysno rank
+xpath disable
+
+all any
+melm 001 Local-Number
+melm 152$b Authority/format-id
+#melm 005 Version-id
+#melm 015 IASDN
+
+
+########################
+# Coded fields
+########################
+#melm 100$a date-entered-on-file:n:range(data,0,8),date-entered-on-file:s:range(data,0,8),auth-status:n:range(data,8,1),auth-status:s:range(data,8,1),language:n:range(data,9,3),language:s:range(data,9,3),char-encoding:w:range(data,13,4),char-encoding:s:range(data,13,4),ff100-17:w:range(data,17,3),ff100-21:w:range(data,21,2),ff100-23:w:range(data,23,1)
+
+#melm 101$a Language
+#melm 102$a Country-heading
+# Subject-Heading
+#melm 106$a Vaut 0(inutilisable sujet-matiere),1 (utilisable sujet-matiere)ou 2(utilisable uniquement sujet-matiere)
+#melm 120$a Obligatoire sur Autorite NP : Sexe et discrimination
+#melm 123$a Obligatoire sur Autorite GEO : Localisation
+#melm 150$a Obligatoire sur Autorite CO : Type de collectivite
+# 4XX$3 5XX$3 7XX$3 authority number
+# 4XX$5 5XX$5 7XX$5 Linking type
+# 4XX$7 5XX$7 7XX$7 Script Cataloguing
+# 4XX$8 5XX$8 7XX$8 Language
+
+
+############ HEADINGS ##################
+melm 200$a Heading,Heading-Entity,Heading:s,personal-heading
+melm 210$a Heading,Heading-Entity,Heading:s,corporate-heading,Conference-heading
+melm 215$a Heading,Heading-Entity,Heading:s,Name-geographic
+#melm 216 Name-corporate
+melm 220$a Heading,Heading-Entity,Heading:s,personal-heading
+melm 230$a Heading,Heading-Entity,Heading:s,Title-Uniform
+melm 235$a Heading,Heading-Entity,Heading:s,Title-Uniform
+melm 240$a Heading,Heading-Entity,Heading:s,Name-Title
+melm 250$a Heading,Heading-Entity,Heading:s,Subject-heading, Subject-heading:s
+
+melm 200 Heading-Entity,Heading-Entity:s, personal-Heading-Entity
+melm 210 Heading-Entity,Heading-Entity:s,corporate-Heading-Entity
+melm 210 Heading-Entity,Heading-Entity:s,Conference-Heading-Entity
+melm 215 Heading-Entity,Heading-Entity:s,Name-geographic-Entity
+#melm 216 Name-corporate
+melm 220 Heading-Entity,Heading-Entity:s,personal-Heading-Entity
+melm 230 Heading-Entity,Heading-Entity:s,Title-Uniform-entity
+melm 235 Heading-Entity,Heading-Entity:s,Title-Uniform-entity
+melm 240 Heading-Entity,Heading-Entity:s,Name-Title-entity
+melm 250 Heading-Entity,Subject-Thesaurus
+
+#210 Heading - Corporate Body Name
+#215 Heading - Territorial or Geographical Name
+#216 Heading - Trademark
+#220 Heading - Family Name
+#230 Heading - Uniform Title
+#235 Heading - Collective Uniform Title
+#240 Heading - Name/Title
+#245 Heading - Name/Collective Uniform Title
+#250 Heading - Topical Subject
+#260 Heading - Place Access
+#280 Heading - Form, Genre or Physical Characteristics
+#melm 712 Author,Author:p,Author:s
+
+############ Rejected forms ##################
+melm 400$a See, See:s,See-Entity, personal-see,personal-see:w,personal-see:s,personal-see:p
+melm 410$a See, See:s,See-Entity, corporate-see
+melm 410$a See, See:s,See-Entity, Conference-see
+melm 415$a See, See:s,See-Entity, Name-geographic-see
+#melm 416 Name-corporate
+melm 440$a See, See:s,See-Entity, personal-see,personal-see:s
+melm 430$a See, See:s,See-Entity, Title-Uniform-see,Title-Uniform-see:s
+melm 435$a See, See:s,See-Entity, Title-Uniform-see,Title-Uniform-see:s
+melm 450$a See, See:s,See-Entity, Subject-see,Subject-see:s
+melm 400 See-Entity, personal-See-Entity,personal-See-Entity:s
+melm 410 See-Entity, corporate-See-Entity
+melm 410 See-Entity, Conference-See-Entity
+melm 415 See-Entity, Name-geographic-See-Entity
+#melm 416 Name-corporate
+melm 440 See-Entity, personal-See-Entity
+melm 430 See-Entity, Title-Uniform-See-Entity
+melm 435 See-Entity, Title-Uniform-See-Entity
+melm 435 See-Entity, Name-Title-See-Entity
+melm 450 See-Entity,Subject-See-Entity
+
+#410 Heading - Corporate Body Name
+#415 Heading - Territorial or Geographical Name
+#416 Heading - Trademark
+#440 Heading - Family Name
+#430 Heading - Uniform Title
+#435 Heading - Collective Uniform Title
+#440 Heading - Name/Title
+#445 Heading - Name/Collective Uniform Title
+#450 Heading - Topical Subject
+#460 Heading - Place Access
+#480 Heading - Form, Genre or Physical Characteristics
+#melm 714 Author,Author:p,Author:s
+
+############ Related forms ##################
+melm 500$a personal-see-also,personal-see-also:w,personal-see-also:s,personal-see-also:p
+melm 510$a corporate-see-also
+melm 510$a Conference-see-also
+melm 515$a Name-geographic-see-also
+#melm 416 Name-corporate
+melm 540$a personal-see-also,personal-see-also:w,personal-see-also:s,personal-see-also:p
+melm 530$a Title-Uniform-see-also,Title-Uniform-see-also:w,Title-Uniform-see-also:s,Title-Uniform-see-also:p
+melm 535$a Title-Uniform-see-also,Title-Uniform-see-also:w,Title-Uniform-see-also:s,Title-Uniform-see-also:p
+melm 540$a Name-Title-see-also,Name-Title-see-also:w,Name-Title-see-also:s,Name-Title-see-also:p
+melm 550$a Subject-see-also,Subject-see-also:w,Subject-see-also:s,Subject-see-also:p
+#510 Heading - Corporate Body Name
+#515 Heading - Territorial or Geographical Name
+#516 Heading - Trademark
+#550 Heading - Family Name
+#530 Heading - Uniform Title
+#535 Heading - Collective Uniform Title
+#540 Heading - Name/Title
+#545 Heading - Name/Collective Uniform Title
+#550 Heading - Topical Subject
+#560 Heading - Place Access
+#580 Heading - Form, Genre or Physical Characteristics
+#melm 714 Author,Author:p,Author:s
+
+############ Parallel forms ##################
+melm 700$a personal-parallel,personal-parallel:w,personal-parallel:s,personal-parallel:p
+melm 710$a corporate-parallel
+melm 710$a Conference-parallel
+melm 715$a Name-geographic-parallel
+#melm 716 Name-corporate
+melm 770$a personal-parallel,personal-parallel:w,personal-parallel:s,personal-parallel:p
+melm 730$a Title-Uniform-parallel,Title-Uniform-parallel:w,Title-Uniform-parallel:s,Title-Uniform-parallel:p
+melm 735$a Title-Uniform-parallel,Title-Uniform-parallel:w,Title-Uniform-parallel:s,Title-Uniform-parallel:p
+melm 740$a Name-Title-parallel,Name-Title-parallel:w,Name-Title-parallel:s,Name-Title-parallel:p
+melm 750$a Subject-parallel,Subject-parallel:w,Subject-parallel:s,Subject-parallel:p
+
+########## NOTES #################
+melm 300$a Note
+melm 301$a Note
+melm 302$a Note
+melm 303$a Note
+melm 304$a Note
+melm 305$a Note
+melm 306$a Note
+melm 307$a Note
+melm 308$a Note
+melm 310$a Note
+melm 311$a Note
+melm 312$a Note
+melm 313$a Note
+melm 314$a Note
+melm 315$a Note
+melm 316$a Note
+melm 317$a Note
+melm 318$a Note
+melm 320$a Note
+melm 321$a Note
+melm 322$a Note
+melm 323$a Note
+melm 324$a Note
+melm 325$a Note
+melm 326$a Note
+melm 327$a Note
+melm 328$a Note
+melm 330$a Note
+melm 332$a Note
+melm 333$a Note
+melm 336$a Note
+melm 337$a Note
+melm 345$a Note
+
--- /dev/null
+# indexing rules. It
+# results in a server which provides a passable Bath level 0 and 1 service
+############################################################################
+# IMPORTANT : this file MUST be renamed record.abs : this name is "hardcoded" in zebra
+# the default record.abs is designed for MARC21.
+############################################################################
+# NOTE: This is designed to be used with the grs.marcxml input filter
+# for ISO2709 (ANSI Z39.2) or grs.xml for MARCXML-formatted records. It
+# won't work for the old grs.marc input filter, which yields a different
+# internal structure.
+
+encoding utf-8
+name marc21
+attset bib1.att
+attset gils.att
+esetname F @
+esetname B @
+
+marc usmarc.mar
+systag sysno rank
+xpath disable
+
+all any
+melm 001 Local-number,Local-number:n
+# Local-number (biblionumber can be either in 090$9 or, on some setup, on 001)
+melm 090$9 Local-number,Local-number:n
+
+melm 010$a ISBN:w
+# wrong ISBN
+melm 010$z ISBN:w,Identifier-standard:w
+melm 011$a ISSN:w,Identifier-standard:w
+# cancelled ISSN
+melm 011$y ISSN:w,Identifier-standard:w
+# wrong ISSN
+melm 011$z ISSN:w,Identifier-standard:w
+
+melm 200$b itype:w
+
+
+melm 100$a date-entered-on-file:n:range(data,0,8),date-entered-on-file:s:range(data,0,8),tpubdate:s:range(data,8,1),ta:w:range(data,17,1),ta:w:range(data,18,1),ta:w:range(data,19,1),Modified-code:n:range(data,21,1),ln:s:range(data,22,3),char-encoding:n:range(data,26,2),char-encoding:n:range(data,28,2),char-encoding:n:range(data,30,2),script-Title:n:range(data,34,2)
+melm 101 ln
+melm 102$a Country-heading
+
+#Field 105 Description
+#Illustration codes 4
+#Form of contents codes 4
+#Conference or meeting code 1
+#Festschrift indicator 1
+#Index indicator 1
+#Literature code 1
+#Biography code 1
+melm 105$a Illustration-code:w:range(data,0,4),Content-type:w:range(data,4,1),Content-type:w:range(data,5,1),Content-type:w:range(data,6,1),Content-type:w:range(data,7,1),Conference-code:w:range(data,8,1),Festschrift-indicator:w:range(data,9,1),Index-indicator:w:range(data,10,1),Literature-Code:w:range(data,11,1),Biography-Code:w:range(data,12,1)
+
+melm 106$a itype
+
+#Field 110 Description
+#Name of Data Element Number of characters Character Positions
+#Type of serial designator 1 0
+#Frequency of issue 1 1
+#Regularity 1 2
+#Type of material code 1 3
+#Nature of contents code 3 4-6
+#Conference publication indicator 1 7
+#Title page availability codes 1 8
+#Index availability code 1 9
+#Cumulative index availability code 1 10
+melm 110$a Type-Of-Serial:w:range(data,0,1),Frequency-code:w:range(data,1,1),Regularity-code:w:range(data,2,1),Content-type:w:range(data,3,1),Content-type:w:range(data,4,3),Conference-publication-Code:w:range(data,7,1),Title-Page-availability-Code:w:range(data,8,1),Index-availability-Code:w:range(data,9,1),Cumulative-Index-availability-Code:w:range(data,10,1)
+
+melm 115$a Video-mt:w:range(data,0,1)
+
+melm 116$a Graphics-type:w:range(data,0,1),Graphics-support:w:range(data,1,1),Graphics-support:w:range(data,2,1),
+
+
+melm 680$b LC-call-number:s
+melm 680 LC-call-number
+#melm 001 Identifier-standard:w
+
+melm 200$b itype
+
+#melm 100$9 Cross-Reference !:w
+
+############ AUTHORS ##################
+# main Author
+melm 200$f Author:w,Author:p
+# other Authors
+melm 200$g Author:w,Author:p
+# physical Author
+melm 700$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 700$a Author, Author-name-personal, Author:p, Author-name-personal:p, Author:s
+melm 700 Author,Author-name-personal,Author:p,Author-name-personal:p
+melm 701$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 701 Author,Author-name-personal,Author:p,Author-name-personal:p
+melm 702$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 702 Author,Author-name-personal,Author:p,Author-name-personal:p
+
+# collective Author
+melm 710$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 710 Author,Author-name-corporate,Author-name-conference,Corporate-name,Conference-name,Author:p,Author-name-corporate:p,Author-name-conference:p,Corporate-name:p,Conference-name:p
+melm 711$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 711 Author,Author-name-corporate,Author-name-conference,Corporate-name,Conference-name,Author:p,Author-name-corporate:p,Author-name-conference:p,Corporate-name:p,Conference-name:p
+
+melm 712$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 712 Author,Author-name-corporate,Author-name-conference,Corporate-name,Conference-name,Author:p,Author-name-corporate:p,Author-name-conference:p,Corporate-name:p,Conference-name:p
+
+############## TITLE ##################
+# main Title
+melm 200$a Title:w,Title:p,Title:s
+# Title 2
+melm 200$c Title:w,Title:p
+# // Title
+melm 200$d Title:w,Title:p
+# subTitle
+melm 200$e Title:w,Title:p
+
+melm 205 Title,Title:p
+
+melm 208 Serials,Serials:p
+melm 207 Printed-music,Printed-music:p
+
+
+
+melm 210$a pl,pl:p
+melm 210$c Publisher,Publisher:p
+melm 210$d pubdate:n,pubdate:s
+
+melm 215 Extent
+
+#Series
+melm 225$a Title-series,Title-series:p
+melm 225$d Title-series,Title-series:p
+#SubTitle
+melm 225$e Title-series,Title-series:p
+#Authors
+melm 225$f Author,Author:p,Name-and-title,Name-and-title:p
+#Part-Title
+melm 225$h Title-series,Title-series:p
+#Part Number
+melm 225$i Title-series,Title-series:p
+#Volume
+melm 225$v Title-series,Title-series:p
+melm 225$x ISSN
+
+melm 230$a Electronic-ressource
+
+########## NOTES #################
+melm 300$a Note,Note:p
+melm 301$a Note,Note:p
+melm 302$a Note,Note:p
+melm 303$a Note,Note:p
+melm 304$a Note,Note:p
+melm 305$a Note,Note:p
+melm 306$a Note,Note:p
+melm 307$a Note,Note:p
+melm 308 Note,Note:p
+melm 308$a Note,Note:p
+melm 310$a Note,Note:p
+melm 311$a Note,Note:p
+melm 312$a Note,Note:p
+melm 313$a Note,Note:p
+melm 314$a Note,Note:p
+melm 315$a Note,Note:p
+melm 316$a Note,Note:p
+melm 317$a Note,Note:p
+melm 318$a Note,Note:p
+melm 320$a Note,Note:p
+melm 321$a Note,Note:p
+melm 322$a Note,Note:p
+melm 323$a Note,Note:p
+melm 324$a Note,Note:p
+melm 325$a Note,Note:p
+melm 326$a Note,Note:p
+melm 327$a Note,Note:p
+melm 328 Note,Note:p
+melm 328$a Note,Note:p
+melm 330$a Abstract,Note:w,Abstract:p,Note:p
+melm 332$a Note,Note:p
+melm 333$a Note,Note:p
+melm 336$a Note,Note:p
+melm 337$a Note,Note:p
+melm 345$a Note,Note:p
+
+
+############## 4XX - LINKING ##################
+# Authorities Title,Title:p
+melm 400$t Title,Title:p
+melm 401$t Title,Title:p
+melm 403$t Title,Title:p,Title-Uniform,Title-Uniform:p
+melm 410$t Title,Title:p
+melm 412$t Title,Title:p
+melm 413$t Title,Title:p
+melm 414$t Title,Title:p
+melm 415$t Title,Title:p
+melm 416$t Title,Title:p
+melm 417$t Title,Title:p
+melm 418$t Title,Title:p
+melm 419$t Title,Title:p
+melm 420$t Title,Title:p
+melm 430$t Title,Title:p
+melm 431$t Title,Title:p
+melm 432$t Title,Title:p
+melm 440$t Title,Title:p
+melm 441$t Title,Title:p
+melm 445$t Title,Title:p
+melm 400$d pubdate:n
+melm 401$d pubdate:n
+melm 403$d pubdate:n
+melm 410$d pubdate:n
+melm 412$d pubdate:n
+melm 413$d pubdate:n
+melm 414$d pubdate:n
+melm 415$d pubdate:n
+melm 416$d pubdate:n
+melm 417$d pubdate:n
+melm 418$d pubdate:n
+melm 419$d pubdate:n
+melm 420$d pubdate:n
+melm 430$d pubdate:n
+melm 431$d pubdate:n
+melm 432$d pubdate:n
+melm 440$d pubdate:n
+melm 441$d pubdate:n
+melm 445$d pubdate:n
+
+# Authorities Title
+melm 500$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 501$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 503$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 510$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 512$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 513$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 514$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 515$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 516$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 517$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 518$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 519$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 520$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 530$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 531$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 532$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 540$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 541$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 545$9 Koha-Auth-Number,Koha-Auth-Number:n
+
+melm 500 Title,Title:p
+melm 501 Title,Title:p
+melm 503 Title,Title:p
+melm 510 Title,Title:p
+melm 512 Title,Title:p
+melm 513 Title,Title:p
+melm 514 Title,Title:p
+melm 515 Title,Title:p
+melm 516 Title,Title:p
+melm 517 Title,Title:p
+melm 518 Title,Title:p
+melm 519 Title,Title:p
+melm 520 Title,Title:p
+melm 530 Title,Title:p
+melm 531 Title,Title:p
+melm 532 Title,Title:p
+melm 540 Title,Title:p
+melm 541 Title,Title:p
+melm 545 Title,Title:p
+
+########### SUBJECTS (6xx) ##################
+melm 600$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 601$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 602$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 603$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 604$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 605$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 606$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 607$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 610$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 630$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 631$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 632$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 633$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 634$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 635$9 Koha-Auth-Number,Koha-Auth-Number:n
+melm 636$9 Koha-Auth-Number,Koha-Auth-Number:n
+
+melm 600$a Personal-name,Personal-name:p
+melm 600 Subject,Subject:p
+melm 601$a Corporate-name,Conference-name,Corporate-name:p,Conference-name:p
+melm 601 Subject,Subject:p
+melm 602$a Personal-name,Personal-name:p
+melm 602 Subject,Subject:p
+melm 604 Subject,Subject:p
+melm 605 Subject,Subject:p
+melm 606 Subject,Subject:p
+melm 607 Subject,Subject:p
+melm 630 Subject,Subject:p
+melm 631 Subject,Subject:p
+melm 632 Subject,Subject:p
+melm 633 Subject,Subject:p
+melm 634 Subject,Subject:p
+melm 635 Subject,Subject:p
+melm 636 Subject,Subject:p
+melm 610 Subject,Subject:p
+melm 640 Subject,Subject:p
+melm 641 Subject,Subject:p
+melm 642 Subject,Subject:p
+melm 643 Subject,Subject:p
+melm 644 Subject,Subject:p
+melm 645 Subject,Subject:p
+melm 646 Subject,Subject:p
+
+######################
+
+melm 676$a Dewey-classification:w,Dewey-classification:s
+
+#############"# item information (based on 995) ###############
+melm 995$a homebranch,Host-item
+melm 995$b homebranch,Host-item
+melm 995$c holdingbranch,Record-Source
+melm 995$d holdingbranch,Record-Source
+melm 995$e location
+melm 995$f barcode
+melm 995$j LC-card-number:s
+melm 995$k Call-Number,Local-Classification,lcn,Call-Number:p,Local-Classification:p,lcn:p
+melm 995$s popularity:n,popularity:s
+melm 995$n onloan:d,onloan:n,onloan:s
+melm 995$u Note, Note:p
+melm 995 item # just to index every subfield
# $Id: zebra.cfg,v 1.1.2.2 2006/05/09 12:03:16 rangi Exp $
#
# Where are the config files located?
-profilePath:__PREFIX__/share/koha/etc/zebradb/authorities/etc:__PREFIX__/share/koha/etc/zebradb/etc
+profilePath:__ZEBRA_CONF_DIR__/authorities/etc:__ZEBRA_CONF_DIR__/etc:__ZEBRA_CONF_DIR__/marc_defs/__ZEBRA_MARC_FORMAT__/authorities:__ZEBRA_CONF_DIR__/lang_defs/__ZEBRA_LANGUAGE__
encoding: UTF-8
# modulePath - where to look for loadable zebra modules
# Lock File Area
-lockDir: __BASE_DIR__/zebradb/authorities/lock
+lockDir: __ZEBRA_LOCK_DIR__/authorities
perm.anonymous:r
perm.__ZEBRA_USER__:rw
-register: __BASE_DIR__/zebradb/authorities/register:4G
-shadow: __BASE_DIR__/zebradb/authorities/shadow:1G
+register: __ZEBRA_DATA_DIR__/authorities/register:4G
+shadow: __ZEBRA_DATA_DIR__/authorities/shadow:1G
# Temp File area for result sets
-setTmpDir: __BASE_DIR__/zebradb/authorities/tmp
+setTmpDir: __ZEBRA_DATA_DIR__/authorities/tmp
# Temp File area for index program
-keyTmpDir: __BASE_DIR__/zebradb/authorities/key
+keyTmpDir: __ZEBRA_DATA_DIR__/authorities/key
# Approx. Memory usage during indexing
memMax: 200M
# $Id: zebra.cfg,v 1.1.2.2 2006/05/09 12:03:16 rangi Exp $
#
# Where are the config files located?
-profilePath:__PREFIX__/share/koha/etc/zebradb/biblios/etc:__PREFIX__/share/koha/etc/zebradb/etc
+profilePath:__ZEBRA_CONF_DIR__/biblios/etc:__ZEBRA_CONF_DIR__/etc:__ZEBRA_CONF_DIR__/marc_defs/__ZEBRA_MARC_FORMAT__/biblios:__ZEBRA_CONF_DIR__/lang_defs/__ZEBRA_LANGUAGE__
# modulePath - where to look for loadable zebra modules
modulePath: /usr/lib/idzebra-2.0/modules
# Lock File Area
-lockDir: __BASE_DIR__/zebradb/biblios/lock
+lockDir: __ZEBRA_LOCK_DIR__/biblios
perm.anonymous:r
perm.__ZEBRA_USER__:rw
-register: __BASE_DIR__/zebradb/biblios/register:4G
-shadow: __BASE_DIR__/zebradb/biblios/shadow:4G
+register: __ZEBRA_DATA_DIR__/biblios/register:4G
+shadow: __ZEBRA_DATA_DIR__/biblios/shadow:4G
# Temp File area for result sets
-setTmpDir: __BASE_DIR__/zebradb/biblios/tmp
+setTmpDir: __ZEBRA_DATA_DIR__/biblios/tmp
# Temp File area for index program
-keyTmpDir: __BASE_DIR__/zebradb/biblios/key
+keyTmpDir: __ZEBRA_DATA_DIR__/biblios/key
# Approx. Memory usage during indexing
memMax: 500M
--- /dev/null
+#!/usr/bin/perl
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+# Suite 330, Boston, MA 02111-1307 USA
+#
+
+use strict;
+use ExtUtils::MakeMaker::Config;
+use Tie::File;
+
+my $basedir = (shift);
+my $DEBUG = exists $ENV{'DEBUG'} ? $ENV{'DEBUG'} : 0;
+
+$DEBUG = 1 if $basedir eq 'test';
+
+my $bindir = $Config{installbin};
+$bindir =~ s!\\!/!g; # make all directory separators uniform since Win32 does not care and *nix does...
+my $shebang = "#!$bindir\/perl";
+
+warn "Perl binary located in $bindir on this system.\n" if $DEBUG;
+warn "The shebang line for this sytems should be $shebang\n\n" if $DEBUG;
+
+die if $basedir eq 'test';
+
+=head1 NAME
+
+fix-perl-path.PL - A script to correct the shebang line to match the current platform
+
+=head1 SYNOPSIS
+
+=head2 BASIC USAGE
+
+ perl fix-perl-path.PL /absolute/path/to/foo
+
+=head1 DESCRIPTION
+
+This script should be run from the base of the directory
+structure which contains the file(s) that need the
+shebang line corrected. It will recurse through all
+directories below the one called from and modify all
+.pl files.
+
+=head2 fixshebang
+
+This sub will recurse through a given directory and its subdirectories checking for the existence of a shebang
+line in .pl files and replacing it with the correct line for the current OS if needed. It should be called
+in a manner similar to 'fixshebang (foodir)' but may be supplied with any directory.
+
+=cut
+
+sub fixshebang{
+ my $dir = shift;
+ opendir my $dh, $dir or die $!;
+ warn "Reading $dir contents.\n" if $DEBUG;
+ while( my $file = readdir($dh) ) {
+ # this may be used to exclude any desired files from the scan
+ # if ( $file =~ /foo/ ) { next; }
+ # handle files... other extensions could be substituted/added if needed
+ if ( $file =~ /\.pl$/ ) {
+ my @filearray;
+ my $pathfile =$dir . '/' . $file;
+ warn "Found a perl script named $pathfile\n" if $DEBUG;
+
+ # At this point, file is in 'blib' and by default
+ # has mode a-w. Therefore, must change permission
+ # to make it writable.
+ my $old_perm;
+ if ($^O ne 'MSWin32') {
+ $old_perm = (stat $pathfile)[2] & 07777;
+ my $new_perm = $old_perm | 0200;
+ chmod $new_perm, $pathfile;
+ }
+ tie @filearray, 'Tie::File', $pathfile or die $!;
+ warn "First line of $file is $filearray[0]\n\n" if $DEBUG;
+ if ( ( $filearray[0] =~ /#!.*perl/ ) && ( $filearray[0] !~ /$shebang|"$shebang -w"/ ) ) {
+ warn "\n\tRe-writing shebang line for $pathfile\n" if $DEBUG;
+ warn "\tOriginal shebang line: $filearray[0]\n" if $DEBUG;
+ $filearray[0] =~ /-w$/ ? $filearray[0] = "$shebang -w" : $filearray[0] = $shebang;
+ warn "\tNew shebang line is: $filearray[0]\n\n" if $DEBUG;
+ }
+ elsif ( $filearray[0] =~ /$shebang|"$shebang -w"/ ) {
+ warn "\n\tShebang line is correct.\n\n" if $DEBUG;
+ }
+ else {
+ warn "\n\tNo shebang line found in $pathfile\n\n" if $DEBUG;
+ }
+ untie @filearray;
+ if ($^O ne 'MSWin32') {
+ chmod $old_perm, $pathfile;
+ }
+ }
+ # handle directories
+ elsif ( -d ($dir . '/' . $file) && $file !~ /^\.{1,2}/ ) {
+ my $dirpath = $dir . '/' . $file;
+ warn "Found a subdir named $dirpath\n" if $DEBUG;
+ fixshebang ($dirpath);
+ }
+ }
+ closedir $dh;
+}
+
+fixshebang ($basedir);
+
my $grantaccess;
while ( my ($line) = $rq->fetchrow ) {
my $dbname = $info{dbname};
- if ( $line =~ m/$dbname/ || index( $line, '*.*' ) > 0 ) {
+ if ( $line =~ m/^GRANT (.*?) ON `$dbname`\.\*/ || index( $line, '*.*' ) > 0 ) {
$grantaccess = 1
if (
index( $line, 'ALL PRIVILEGES' ) > 0
<h3>Welcome to the Koha Web Installer</h3>
<p>Before we begin, please verify you have the correct credentials to continue. Please log in
with the username and password given to you by your systems administrator and located in your
-<code>koha.xml</code> configuration file.</p>
+<code>koha-conf.xml</code> configuration file.</p>
<p>Please enter your username and password:</p>
<p><label>Username:<br />
<input type="text" name="userid" id="userid" class="input" value="<!-- TMPL_VAR NAME="userid" -->" size="20" tabindex="1" /></label>
<div class="tip">
<ul>
<li>Check that your database is running.</li>
- <li>Check your database settings in <code>koha.xml</code>. </li>
- <li>Check the hostname setting in <code>koha.xml</code>.
+ <li>Check your database settings in <code>koha-conf.xml</code>. </li>
+ <li>Check the hostname setting in <code>koha-conf.xml</code>.
Some database servers require <code>127.0.0.1</code> rather than <code>localhost</code>.</li>
</div>
<p>Please correct these errors and <a href="/cgi-bin/koha/installer/install.pl">start the installer</a> again.
# used by developers when the database changes. updatedatabase take care of the changes itself
# and is automatically called by Auth.pm when needed.
+use strict;
+
sub kohaversion {
- return "3.00.00.035";
+ our $VERSION = "3.00.00.035";
+ # version needs to be set this way
+ # so that it can be picked up by Makefile.PL
+ # during install
+ return $VERSION;
}
1;
my ($bor)=GetMember($member);
if(( $member ne $loggedinuser ) && ($bor->{'category_type'} eq 'S' ) ) {
$errormsg = 'NOPERMISSION' unless($staffflags->{'superlibrarian'} || $staffflags->{'staffaccess'} );
- # need superlibrarian for koha.xml fakeuser.
+ # need superlibrarian for koha-conf.xml fakeuser.
}
my $newpassword = $input->param('newpassword');
my $minpw = C4::Context->preference('minPasswordLength');
#!/usr/bin/perl
+use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
use HTTPD::Bench::ApacheBench;
use C4::Context;
-use strict;
# 1st, find some maximal values
my $dbh=C4::Context->dbh();
# small script that import an iso2709 file into koha 2.0
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
# Koha modules used
use MARC::File::USMARC;
=cut
-
+use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
use C4::Context;
use MARC::File::XML;
use MARC::Record;
# small script that rebuilds the non-MARC DB
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
# Koha modules used
# use MARC::File::USMARC;
#!/usr/bin/perl
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
use C4::Context;
use C4::ImportBatch;
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
# Koha modules used
use C4::Context;
# small script that builds the tag cloud
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../kohalib.pl" };
+}
use C4::Koha;
use C4::Context;
-t TTT to define the MARC fields/subfield to use to fill the tag cloud. If not defined, the cloud table won't be filled.
example :
- export PERL5LIB=/path/to/koha;export KOHA_CONF=/etc/koha.xml;./build_browser_and_cloud.pl -b -f 676a -t 606 -c
+ export PERL5LIB=/path/to/koha;export KOHA_CONF=/etc/koha/koha-conf.xml;./build_browser_and_cloud.pl -b -f 676a -t 606 -c
EOF
;
exit;
#!/usr/bin/perl
#run nightly -- changes J to A on someone's 18th birthday
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../kohalib.pl" };
+}
+
use C4::Context;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
= localtime(time);
# 1.0.0 2004/04/01: original version
#-----------------------------------
-use lib '/usr/local/koha/intranet/modules/';
-
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../kohalib.pl" };
+}
use C4::Context;
my $dbh = C4::Context->dbh;
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../kohalib.pl" };
+}
use C4::Context;
use C4::Dates qw/format_date/;
use Mail::Sendmail; # comment out if not doing e-mail notices
# Suite 330, Boston, MA 02111-1307 USA
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../kohalib.pl" };
+}
use C4::Context;
use C4::Dates qw/format_date/;
use Mail::Sendmail; # comment out if not doing e-mail notices
# Suite 330, Boston, MA 02111-1307 USA
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../kohalib.pl" };
+}
use C4::Context;
use C4::Dates;
use Mail::Sendmail; # comment out if not doing e-mail notices
# 1.0.0 2004/02/22: original version
#-----------------------------------
-use lib '/usr/local/koha/intranet/modules/';
-
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../kohalib.pl" };
+}
use C4::Context;
use Date::Manip;
use Mail::Sendmail;
#run nightly -- resets the services throttle
use strict; use warnings;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../kohalib.pl" };
+}
use C4::Context;
my $dbh=C4::Context->dbh;
# $Id: sendoverdues.pl,v 1.1.2.1 2007/03/26 22:38:09 tgarip1957 Exp $
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../kohalib.pl" };
+}
+
use C4::Context;
use C4::Search;
use C4::Circulation;
#!/usr/bin/perl
use strict;
use warnings;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../kohalib.pl" };
+}
use C4::Context;
use C4::Biblio;
use MARC::Record;
# script that starts the zebraquee
# Written by TG on 01/08/2006
use strict;
-
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../kohalib.pl" };
+}
use C4::Context;
use C4::Biblio;
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
# Koha modules used
use MARC::File::USMARC;
#
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
require Exporter;
use C4::Auth;
# Suite 330, Boston, MA 02111-1307 USA
+use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
use C4::Context;
use C4::Circulation;
use C4::Overdues;
use Date::Manip qw/Date_DaysSince1BC/;
use C4::Biblio;
-use strict;
open (FILE,'>/tmp/fines') || die;
# FIXME
# Suite 330, Boston, MA 02111-1307 USA
+use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
+
use C4::Context;
use C4::Circulation;
use C4::Overdues;
use Date::Manip;
use C4::Biblio;
-use strict;
open (FILE,'>/tmp/fines') || die;
# FIXME
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright (C) 2007 LibLime
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+# Suite 330, Boston, MA 02111-1307 USA
+
+# This script is used by command-line utilities to set
+# @INC properly -- specifically, to point to the directory
+# containing the installed version of the C4 modules.
+#
+# This depends on the installer replacing the \_\_PERL_MODULE_DIR\_\_
+# string with the path to the Koha modules directory. This is done
+# only during a 'standard' or 'single' mode installation. If Koha
+# is being run from a git checkout (and thus installed in 'dev' mode),
+# this is a no-op.
+#
+# To use this script, a command-line utility should do the following before
+# 'use'ing any C4 modules.
+#
+# BEGIN {
+# use FindBin;
+# eval { require "$FindBin::Bin/kohalib.pl" };
+# # adjust path to point to kohalib.pl relative
+# # to location of script
+# }
+#
+
+use strict;
+
+my $module_dir;
+BEGIN {
+ $module_dir = '__PERL_MODULE_DIR__';
+ die if $module_dir =~ /^[_]{2}PERL_MODULE_DIR[_]{2}$/;
+}
+
+use lib $module_dir;
+
+1;
# script that correct the marcxml from in biblioitems
# Written by TG on 10/04/2006
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
# Koha modules used
# script that rebuild thesaurus from biblio table.
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
# Koha modules used
use MARC::File::USMARC;
# small script to convert mysql tables to utf-8
-use C4::Context;
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../../kohalib.pl" };
+}
+use C4::Context;
my $dbh=C4::Context->dbh();
#!/usr/bin/perl
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../../kohalib.pl" };
+}
use C4::Context;
#use MARC::File::XML(BinaryEncoding=>"utf8");
#use MARC::File::USMARC;
#!/usr/bin/perl
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../../kohalib.pl" };
+}
use C4::Context;
use MARC::File::XML(BinaryEncoding=>"utf8");
use MARC::Record;
# Written by TG on 01/10/2005
# Revised by Joshua Ferraro on 03/31/2006
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../../kohalib.pl" };
+}
# Koha modules used
# script to shift marc to biblioitems
# scraped from updatedatabase for dev week by chris@katipo.co.nz
-
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../../kohalib.pl" };
+}
use C4::Context;
use C4::AuthoritiesMarc;
use MARC::Record;
# script to shift marc to biblioitems
# scraped from updatedatabase for dev week by chris@katipo.co.nz
-
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../../kohalib.pl" };
+}
use C4::Context;
use C4::Biblio;
use MARC::Record;
}
}
return $record;
-}
\ No newline at end of file
+}
# Written by TG on 01/10/2005
# Revised by Joshua Ferraro on 03/31/2006
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../../kohalib.pl" };
+}
# Koha modules used
# Written by TG on 01/10/2005
# Revised by Joshua Ferraro on 03/31/2006
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../../kohalib.pl" };
+}
# Koha modules used
use strict;
# use warnings;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../kohalib.pl" };
+}
# Koha modules used
use MARC::File::USMARC;
# Written by TG on 01/10/2005
# Revised by Joshua Ferraro on 03/31/2006
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
# Koha modules used
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
use C4::Context;
use C4::Biblio;
# small script that rebuilds the non-MARC DB
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
# Koha modules used
# use MARC::File::USMARC;
## CONFIGURABLE VARIABLES ####################
##
- # Change this to where your Koha modules are (C4 directory)
-use lib '/usr/local/koha/intranet/modules/';
# These are the tags that have meaningful data
# for the databases I've worked with (MARC21 only)
# you may need to change them depending on your data
);
## Leave this next bit alone
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/../kohalib.pl" };
+}
use C4::Context;
##
# SUGGEST DATABASE INFO
#!/usr/bin/perl
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
use C4::Context;
use C4::ImportBatch;
#!/usr/bin/perl -w
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
use C4::Context;
use Getopt::Long;
# script that correct the marcxml from in biblioitems
# Written by TG on 10/04/2006
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
# Koha modules used
$timeneeded = gettimeofday - $starttime ;
print "$i records in $timeneeded s\n" ;
-END;
\ No newline at end of file
+END;
# daemon to watch the zebraqueue and update zebra as needed
use strict;
+BEGIN {
+ # find Koha's Perl modules
+ # test carefully before changing this
+ use FindBin;
+ eval { require "$FindBin::Bin/kohalib.pl" };
+}
use POE qw(Wheel::SocketFactory Wheel::ReadWrite Filter::Stream Driver::SysRW);
use Unix::Syslog qw(:macros);
The following configuration keywords are available:
PREFIX,
-BASE_DIR, CGI_DIR, LOG_DIR,
+BASE_DIR, CGI_DIR, LOG_DIR, INSTALL_BASE,
DB_TYPE, DB_HOST, DB_PORT, DB_NAME, DB_PASS, DB_USER, WEBMASTER_EMAIL, WEBSERVER_DOMAIN,
WEBSERVER_HOST, WEBSERVER_IP, WEBSERVER_PORT, WEBSERVER_PORT_LIBRARIAN, ZEBRA_PASS, ZEBRA_USER
$mydomain =~ s/^.*?\.//;
# This is set here to rescue systems with broken DNS
$myip = $ENV{'WEBSERVER_IP'} || inet_ntoa(scalar gethostbyname($myhost||'localhost')) || die "Cannot get our own IP address: DNS fault?";
-$prefix = $ENV{'PREFIX'} || "/usr/local";
+$prefix = $ENV{'INSTALL_BASE'} || "/usr";
# These are our configuration guesses
# Keys were extracted by
# <grep -o '__.*__' etc/* | cut -f2 -d: | sort -u | sed -e 's/^/ "/;s/$/" => "",/'
%configuration = (
- "__BASE_DIR__" => ($ENV{'INSTALLSITELIB'} || sprintf($prefix."/lib/perl/%vd",$^V))."/koha",
- # Corrected to match Debian Perl req's.... -fbcit
- "__CGI_DIR__" => $prefix."/lib/cgi-bin/koha",
"__LOG_DIR__" => "/var/log",
"__DB_TYPE__" => "mysql",
"__DB_NAME__" => "koha",
"__DB_PORT__" => "3306",
"__DB_USER__" => "kohaadmin",
"__DB_PASS__" => "katikoan",
- "__PREFIX__" => $prefix,
"__WEBMASTER_EMAIL__" => 'webmaster@'.$mydomain,
"__WEBSERVER_DOMAIN__" => $mydomain,
"__WEBSERVER_HOST__" => $myhost,
"__WEBSERVER_PORT_LIBRARIAN__" => "8080",
"__ZEBRA_PASS__" => "zebrastripes",
"__ZEBRA_USER__" => "kohauser",
- "__MARCFLAVOUR__" => "marc21",
+ '__INTRANET_CGI_DIR__' => "$prefix/intranet/cgi-bin",
+ '__INTRANET_TMPL_DIR__' => "$prefix/intranet/templates",
+ '__INTRANET_WWW_DIR__' => "$prefix/intranet/www",
+ '__OPAC_CGI_DIR__' => "$prefix/opac/cgi-bin",
+ '__OPAC_TMPL_DIR__' => "$prefix/opac/templates",
+ '__OPAC_WWW_DIR__' => "$prefix/opac/www",
+ '__PERL_MODULE_DIR__' => ($ENV{'INSTALLSITELIB'} || sprintf($prefix."/lib/perl5/site_perl/%vd",$^V))."/koha",
+ '__KOHA_CONF_DIR__' => "$prefix/etc/koha",
+ '__ZEBRA_CONF_DIR__' => "$prefix/etc/koha/zebradb",
+ '__MISC_DIR__' => "$prefix/misc",
+ '__SCRIPT_DIR__' => "$prefix/bin",
+ '__MAN_DIR__' => "$prefix/man",
+ '__DOC_DIR__' => "$prefix/doc",
+ '__ZEBRA_LOCK_DIR__' => "$prefix/var/lock/zebradb",
+ '__ZEBRA_DATA_DIR__' => "$prefix/var/lib/zebradb",
+ '__ZEBRA_RUN_DIR__' => "$prefix/var/run/zebradb",
+ '__ZEBRA_MARC_FORMAT__' => 'marc21',
+ '__ZEBRA_LANGUAGE__' => 'en',
);
# Override configuration from the environment
$fname = $ARGV[0];
$file = read_file($fname);
-$file =~ s/__.*?__/$configuration{$&}/seg;
+$file =~ s/__.*?__/exists $configuration{$&} ? $configuration{$&} : $&/seg;
chmod 0644, $fname;
open(OUTPUT,">$fname") || die "Can't open $fname for write: $!";
print OUTPUT $file;
--- /dev/null
+The skel directory contains placeholders
+for directories needed by the Zebra
+installation, and is used only by the installer.
+
+No files except for README placeholders
+used by make should be kept in this tree.
--- /dev/null
+Zebra authorities key dir
--- /dev/null
+Zebra authorities register dir
--- /dev/null
+Zebra authorities shadow dir
--- /dev/null
+Zebra authorities tmp dir
--- /dev/null
+Zebra biblios key dir
--- /dev/null
+Zebra biblios register dir
--- /dev/null
+Zebra biblios shadow dir
--- /dev/null
+Zebra biblios tmp dir
--- /dev/null
+Zebra authorities lock dir
--- /dev/null
+Zebra biblios lock dir
--- /dev/null
+Koha Apache logs
--- /dev/null
+Zebra Unix-domain sockets