Add sip and z39.40 chapters. Add requirements-configuration chapter to admin.
authorRobert Soulliere <rsoulliere@libdog.mohawkcollege.ca>
Tue, 17 Aug 2010 21:54:40 +0000 (17:54 -0400)
committerRobert Soulliere <rsoulliere@libdog.mohawkcollege.ca>
Tue, 17 Aug 2010 21:54:40 +0000 (17:54 -0400)
Add intro, and starting reporter chapters to reports part.

1.6/admin/requirements-configuration.xml
1.6/admin/sip.xml [new file with mode: 0644]
1.6/admin/z3950.xml [new file with mode: 0644]
1.6/reports/report-intro.xml [new file with mode: 0644]
1.6/reports/report-startingreporter.xml [new file with mode: 0644]
1.6/root.xml

index d10a83c..c31a4d1 100644 (file)
@@ -2,7 +2,7 @@
 <chapter xml:id="requirements" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
     xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
     <info>\r
-        <title>System Requirements and Recommended Configurations</title>\r
+        <title>System Requirements and Hardware Configurations</title>\r
     </info>\r
 \r
     <para>Evergreen is extremely scalable and can serve the need of a large range of libraries. The specific requirements and configuration of your system should be determined based on your \r
@@ -12,8 +12,6 @@
                <info>\r
                    <title>Server Minimum Requirements</title>\r
                </info> \r
-              \r
-               <simplesect>\r
                         <para>The following are the base requirements setting Evergreen up on a test server:</para>\r
                        <itemizedlist>\r
                                <listitem><para>An available desktop, server or virtual image</para></listitem>\r
                        </itemizedlist>\r
                        <tip><para>Debian and Ubuntu are the most widely used Linux distributions for installing Evergreen and most development takes place on Debian based systems. If you are new \r
                        to Linux, it is strongly recommended that you install Evergreen on the latest stable server edition of Debian (<ulink url="http://www.debian.org/">http://www.debian.org/</ulink>)\r
-                       or Ubuntu 10.04 Server(<ulink url="http://www.ubuntu.com/">http://www.ubuntu.com/</ulink>) since the installation instructions have been tested on these distributions. Debian and                              Ubuntu are free distributions of Linux.</para></tip>  \r
-               </simplesect> \r
-               <simplesect>\r
+                       or Ubuntu 10.04 Server(<ulink url="http://www.ubuntu.com/">http://www.ubuntu.com/</ulink>) since the installation instructions have been tested on these distributions. Debian and                              Ubuntu are free distributions of Linux.</para></tip>\r
+               </section>        \r
+               <section xml:id="hardwareconfigurations">\r
                        <info>\r
-                               <title>Server Network Configurations</title>\r
+                               <title>Server Hardware Configurations and Clustering</title>\r
                        </info>\r
                        <para>As apparent in the previous section, the base hardware requirements for running a functional Evergreen server are extremely minimal. It is also possible\r
-                       to scale up your evergreen configuration to be spread your Evergreen resources and services over many servers in a clustered approach. This allows very large consortia to share \r
-                       one Evergreen system with hundreds of libraries with millions of records and millions of users making the scalability of Evergreen almost infinite.</para>\r
-                       <para>Here are some example scenarios for a server network configuration:</para>\r
+                       to scale up your evergreen configuration to be spread your Evergreen resources and services over several or even many servers in a clustered approach for the purpose \r
+                       of system redundancy, load balancing and downtime reduction. This allows very large \r
+                       consortia to share one Evergreen system with hundreds of libraries with millions of records and millions of users, making the scalability of Evergreen almost infinite.</para>\r
+                       <para>Here are some example scenarios for networked server configurations:</para>\r
                        <itemizedlist>\r
-                               <listitem><para>A small public library or school library with 1 location, under 25,000 items and a few thousand users could easily run Evergreen on a single server \r
+                               <listitem><para>A small library library with 1 location, under 25,000 items and a few thousand users could easily run Evergreen on a single server \r
                                (1 machine).</para></listitem>\r
                                <listitem><para>A college or university with 1 million items and 20,000 users could run an Evergreen system using several servers balancing the load on their \r
-                               system by spreading services over multiple servers. It could also run  \r
-                               PostgreSQL on a separate server. They could also cluster the Evergreen services in a way to minimize or eliminate any necessary downtown when upgrading Evergreen, \r
-                               the operating system or the database software.</para></listitem>                        \r
+                               system by spreading services over multiple servers. It should host their PostgreSQL database on a separate server. They could also cluster the Evergreen services       \r
+                               strategically to minimize or eliminate any necessary downtown when upgrading Evergreen or other server software. Moreover, system redundancy will reduce the chance of \r
+                               unplanned catastrophic downtime caused by system failure since Evergreen will be running over several machines.</para></listitem>                       \r
                                <listitem><para>A large library consortium with several public library systems and/or academic libraries with millions of users and items could run an Evergreen \r
-                               system over many servers, balancing the load on the system while sharing resource costs. At the same time, it gives users searching capabilities to search \r
-                               several library systems simultaneously.</para></listitem>\r
+                               system over many servers with clusters for Evergreen services as well as a cluster for the Postgresql Database.</para></listitem>\r
                        </itemizedlist>\r
                        <para>The key to Evergreen scalability is in the openSRF configuration files <filename>/openils/conf/opensrf.xml</filename> and \r
                        <filename>/openils/conf/opensrf_core.xml</filename>. \r
-                       By editing these files an administrator could quickly cluster evergreen services over multiple servers, change the server running a specific service \r
-                       or change the server of the postgreSQL database.</para> \r
+                       By configuring these files, an administrator could cluster evergreen services over multiple hosts, change the host running a specific service \r
+                       or change the host of the postgreSQL database.</para> \r
 \r
                        <note><para>The default configuration of Evergreen in the installation instructions assumes a single <emphasis>localhost</emphasis> server setup. For more complex \r
-                       multi-server configurations, some server administration and database administration experience or knowledge may be required.</para></note>              \r
-               </simplesect>    \r
-       </section>\r
-       <section xml:id="requirements_staffclient">\r
-               <info>\r
-                   <title>Staff Client Requirements</title>\r
-               </info>\r
-       \r
-               <para> Staff terminals connect to the central database using the Evergreen staff client, available for download from <link xlink:href="http://www.open-ils.org/downloads.php">The Evergreen \r
-               download page</link>. The staff client must be installed on each staff workstation and requires at minimum: </para>\r
-               <itemizedlist>\r
-                       <listitem><para>Windows (XP, Vista, or 7), Mac OS X, or Linux operating system</para></listitem>\r
-                       <listitem><para>a reliable high speed internet connection</para></listitem>\r
-                       <listitem><para>512Mb of RAM</para></listitem>\r
-               </itemizedlist>\r
-               <simplesect>\r
-                       <info>\r
-                               <title>Barcode Scanners</title>   \r
-                       </info>\r
-                               <para>Evergreen will work with virtually any barcode scanner – if it worked with your legacy system it should work on Evergreen.</para>\r
-               </simplesect>\r
-               <simplesect>\r
+                       multi-server clustered configurations, some server administration and database administration experience or knowledge will be required.</para></note>           \r
+               </section>    \r
+       \r
+               <section xml:id="requirements_staffclient">\r
                        <info>\r
-                               <title>Printers</title>\r
+                           <title>Staff Client Requirements</title>\r
                        </info>\r
-                       <para>Evergreen can use any printer configured for your terminal to print receipts, check-out slips, holds\r
-                       lists, etc. The single exception is spine label printing, which is still under development. Evergreen\r
-                       currently formats spine labels for output to a label roll printer. If you do not have a roll printer\r
-                        manual formatting may be required.  For more on configuring receipt printers, see <link linkend="lsa-printer">Printer Settings</link>.</para>    \r
-               </simplesect>    \r
-       </section>\r
+       \r
+                       <para> Staff terminals connect to the central database using the Evergreen staff client, available for download from \r
+                       <link xlink:href="http://www.open-ils.org/downloads.php">The Evergreen download page</link>. The staff client must be installed on each staff workstation and requires at \r
+                       minimum: </para>\r
+                       <itemizedlist>\r
+                               <listitem><para>Windows (XP, Vista, or 7), Mac OS X, or Linux operating system</para></listitem>\r
+                               <listitem><para>a reliable high speed internet connection</para></listitem>\r
+                               <listitem><para>512Mb of RAM</para></listitem>\r
+                       </itemizedlist>\r
+                       <simplesect>\r
+                               <info>\r
+                                       <title>Barcode Scanners</title>   \r
+                               </info>\r
+                                       <para>Evergreen will work with virtually any barcode scanner – if it worked with your legacy system it should work on Evergreen.</para>\r
+                       </simplesect>\r
+                       <simplesect>\r
+                               <info>\r
+                                       <title>Printers</title>\r
+                               </info>\r
+                               <para>Evergreen can use any printer configured for your terminal to print receipts, check-out slips, holds\r
+                               lists, etc. The single exception is spine label printing, which is still under development. Evergreen\r
+                               currently formats spine labels for output to a label roll printer. If you do not have a roll printer\r
+                                manual formatting may be required.  For more on configuring receipt printers, see <link linkend="lsa-printer">Printer Settings</link>.</para>    \r
+                       </simplesect>    \r
+               </section>\r
 </chapter>\r
diff --git a/1.6/admin/sip.xml b/1.6/admin/sip.xml
new file mode 100644 (file)
index 0000000..8877939
--- /dev/null
@@ -0,0 +1,525 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<chapter xml:id="sipserver" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
+    xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
+       <info>\r
+               <title>SIP Server</title>\r
+       </info>\r
+       <para>SIP, standing for Standard Interchange Protocol, was developed by the 3M corporation to be a common protocol for data transfer between ILS' \r
+       (referred to in SIP as an <emphasis>ACS</emphasis>, or <emphasis>Automated Circulation System</emphasis>) and a third party device. Originally, the protocol was developed for \r
+       use with 3M SelfCheck (often abbreviated SC, not to be confused with Staff Client) systems, but has since expanded to other companies and devices. It is now common to find \r
+       SIP in use in several other vendors' SelfCheck systems, as well as other non-SelfCheck devices. Some examples include:</para>\r
+       <itemizedlist>\r
+               <listitem>Patron Authentication (computer access, subscription databases)</listitem>\r
+               <listitem>Automated Material Handling (AMH) - The automated sorting of items, often to bins or book carts, based on shelving location or other programmable criteria</listitem>\r
+       </itemizedlist>\r
+   \r
+       <section xml:id="Installing_SIP_Server">\r
+               <info>\r
+               <title>Installing the SIP Server</title>\r
+               </info>\r
+                 <para>This is a rough intro to installing the SIP server for Evergreen.</para>\r
+               <simplesect xml:id="Gettingthecode">\r
+                           <title>Getting the code</title>\r
+                               <para>Current SIP code lives at github:</para>\r
+                               <screen>cd /opt</screen>\r
+                               <screen>git clone git://github.com/atz/SIPServer.git SIPServer</screen>\r
+                               <para>Or use the old style:</para>\r
+                               <screen>$ cd /opt</screen>\r
+                               <screen>$ sudo cvs -d:pserver:anonymous@openncip.cvs.sourceforge.net:/cvsroot/openncip login</screen>\r
+                               <screen># when prompted for the CVS password, just hit Enter (sudo password may be req'd)</screen>\r
+                               <screen>$ sudo cvs -z3 -d:pserver:anonymous@openncip.cvs.sourceforge.net:/cvsroot/openncip co -P SIPServer</screen>\r
+                                                        \r
+               </simplesect>\r
+               <simplesect xml:id="Configuring_Server">\r
+                       <title>Configuring the Server</title>\r
+                       <procedure>\r
+                       <step>\r
+                               <para>Type the following commands from the command prompt:</para>\r
+                               <screen>$ sudo su opensrf</screen>\r
+                               <screen>$ cd /openils/conf</screen>\r
+                               <screen>$ cp oils_sip.xml.example oils_sip.xml</screen>\r
+                       </step>\r
+                       <step>\r
+                               <para>Edit oils_sip.xml. Change the commented out &lt;server-params&gt; section to this:</para>\r
+                               <screen>&lt;server-params</screen>\r
+                               <screen>min_servers='1'</screen>\r
+                               <screen>min_spare_servers='0'</screen>\r
+                               <screen>max_servers='25'</screen>\r
+                               <screen>/&gt;</screen>\r
+                       </step>\r
+                       <step>\r
+                               <para> max_servers will directly correspond to the number of allowed SIP clients. Set the number accordingly, but bear in mind that too many connections can \r
+                               exhaust memory. On a 4G RAM/4 CPU server (that is also running evergreen), I would recommend not exceeding 100 SIP client connections, \r
+                               give or take.</para>                            \r
+                       </step>\r
+                       </procedure>             \r
+               </simplesect>\r
+               <simplesect xml:id="Adding_SIP_users">\r
+                       <title>Adding SIP Users</title>\r
+                       <procedure>\r
+                               <step>\r
+                                       <para>Type the following commands from the command prompt:</para>\r
+                                       <screen>$ sudo su opensrf</screen>\r
+                                       <screen>$ cd /openils/conf</screen>\r
+                                       <screen>$ cp oils_sip.xml.example oils_sip.xml</screen>\r
+                               </step>\r
+                               <step>\r
+                                       <para> in the &lt;accounts&gt; section, add SIP client login information. Make sure that all &lt;logins&gt; use the same institution attribute, and make \r
+                                       sure the institution is listed in &lt;institutions&gt;. All attributes in the &lt;login&gt; section will be used by the SIP client.</para>\r
+                               \r
+                               </step>\r
+                               <step>\r
+                                       <para> In Evergreen, create a new profile group called SIP. This group should be a sub-group of Users (not Staff or Patrons). \r
+                                       Set Editing Permission as <emphasis>group_application.user.sip_client</emphasis> and give the group the following permissions:</para>\r
+                                       <literallayout>\r
+                                       COPY_CHECKIN\r
+                                       COPY_CHECKOUT\r
+                                       RENEW_CIRC      \r
+                                       VIEW_CIRCULATIONS\r
+                                       VIEW_COPY_CHECKOUT_HISTORY      \r
+                                       VIEW_PERMIT_CHECKOUT\r
+                                       VIEW_USER\r
+                                       VIEW_USER_FINES_SUMMARY\r
+                                       VIEW_USER_TRANSACTIONS\r
+                                       </literallayout>\r
+                                       <para>OR use SQL like:</para>\r
+                                       <screen>INSERT INTO permission.grp_tree (id,name,parent,description,application_perm)</screen> \r
+                                       <screen>VALUES (8, 'SIP', 1, 'SIP2 Client Systems', 'group_application.user.sip_client');</screen>\r
+                                       <screen></screen>\r
+                                       <screen>INSERT INTO permission.grp_perm_map (grp,perm,depth) </screen>\r
+                                       <screen>VALUES (8,15,0),(8,16,0),(8,17,0),(8,31,0),(8,32,0),(8,48,0),(8,54,0),(8,75,0),(8,82,0);</screen>\r
+                                       \r
+                                       <para>Verify:</para>\r
+                                       <screen>SELECT *</screen>\r
+                                       <screen>FROM permission.grp_perm_map JOIN permission.perm_list ON</screen> \r
+                                       <screen>permission.grp_perm_map.perm=permission.perm_list.id</screen> \r
+                                       <screen>WHERE grp=8;</screen>\r
+                                       \r
+                                       <para>Keep in mind that the id (8) may not necessarily be available on your system.</para>                              \r
+                               </step>\r
+                               <step>\r
+                                       <para>For each account created in the &lt;login&gt; section of oils_sip.xml, create a user (via the staff client user editor) that has the same username \r
+                                       and password and put that user into the SIP group.</para>\r
+                                       <note><para>The expiration date will affect the SIP users' connection, you might want to make a note of \r
+                                       this somewhere. </para></note>  \r
+                               </step>\r
+                       </procedure>             \r
+               </simplesect>\r
+               <simplesect xml:id="Running_SIP_server">\r
+                       <title>Running the server</title>\r
+                               <para>To start the SIP server type the following commands from the command prompt:</para>\r
+                               <screen>$ sudo su opensrf</screen>\r
+                               <screen>$ oils_ctl.sh -d /openils/var/run -s /openils/conf/oils_sip.xml -a [start|stop|restart]_sip</screen>    \r
+               </simplesect>\r
+               <simplesect xml:id="Logging-SIP">\r
+                       <title>Logging-SIP</title>\r
+                       <simplesect>\r
+                               <title>Syslog</title>\r
+                               <para>It is useful to log SIP requests to a separate file especially during initial setup by modifying your syslog config file.</para>\r
+                               <procedure>\r
+                                       <step>\r
+                                               <para>Edit syslog.conf.</para>\r
+                                               <screen>$ sudo vi /etc/syslog.conf  # maybe /etc/rsyslog.conf</screen>  \r
+                                       </step>\r
+                                       <step>\r
+                                               <para>Add this:</para>\r
+                                               <screen>local6.*                -/var/log/SIP_evergreen.log</screen>    \r
+                                       </step>\r
+                                       <step>\r
+                                               <para>Syslog expects the logfile to exist so create the file.</para>\r
+                                               <screen>$ sudo touch /var/log/SIP_evergreen.log</screen>        \r
+                                       </step>\r
+                                       <step>\r
+                                               <para>Restart sysklogd.</para>\r
+                                               <screen>$ sudo /etc/init.d/sysklogd restart</screen>    \r
+                                       </step>\r
+                               </procedure>            \r
+                       </simplesect>\r
+                       <simplesect>\r
+                               <title>Syslog-NG</title>\r
+                               \r
+                               <procedure>\r
+                                       <step>\r
+                                               <para>Edit logging config.</para>\r
+                                               <screen>sudo vi /etc/syslog-ng/syslog-ng.conf</screen>  \r
+                                       </step>\r
+                                       <step>\r
+                                               <para>Add:</para>\r
+                                               <screen># SIP2 for Evergreen</screen>   \r
+                                               <screen>filter    f_eg_sip { level(warn, err, crit) and facility(local6); };</screen>   \r
+                                               <screen>destination eg_sip { file("/var/log/SIP_evergreen.log"); };</screen>    \r
+                                               <screen>log { source(s_all); filter(f_eg_sip); destination(eg_sip); };</screen> \r
+                                       </step>\r
+                                       <step>\r
+                                               <para>Syslog-ng expects the logfile to exist so create the file.</para>\r
+                                               <screen>$ sudo touch /var/log/SIP_evergreen.log</screen>        \r
+                                       </step>\r
+                                       <step>\r
+                                               <para>Restart syslog-ng</para>\r
+                                               <screen>$ sudo /etc/init.d/syslog-ng restart\r
+                                               </screen>       \r
+                                       </step>\r
+                               </procedure>            \r
+                       </simplesect>\r
+               </simplesect>   \r
+               <simplesect xml:id="Testing_SIP_Connection">\r
+                       <title>Testing Your SIP Connection</title>\r
+                       <itemizedlist>\r
+                               <listitem>\r
+                                       <para>In the top level CVS checkout of the SIPServer code.</para>\r
+                                       <screen>$ cd SIPServer/t</screen>\r
+                               </listitem>\r
+                               <listitem>\r
+                                       <para> Edit SIPtest.pm, change the $instid, $server, $username, and $password variables. This will be enough to test connectivity. \r
+                                       To run all tests, you'll need to change all the variables in the Configuration section.</para>\r
+                                       <screen>$ PERL5LIB=../ perl 00sc_status.t</screen>\r
+                                       <para>This should produce something like:</para>\r
+                                       <screen>1..4</screen>\r
+                                       <screen>ok 1 - Invalid username</screen>\r
+                                       <screen>ok 2 - Invalid username</screen>\r
+                                       <screen>ok 3 - login</screen>\r
+                                       <screen>ok 4 - SC status</screen>\r
+                               </listitem>     \r
+                               <listitem>\r
+                                       <para> Don't be dismayed at “Invalid Username”. That's just one of the many tests that are run.</para>\r
+                               </listitem>                                             \r
+                       </itemizedlist>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP-More_Testing">\r
+                       <title>More Testing</title>\r
+                       <procedure>\r
+                               <step>\r
+                                       <para>Once you have opened up either the SIP OR SIP2 ports to be accessible from outside you can do some testing via telnet. You can try this with localhost \r
+                                       if you so wish, but we want to prove that SIP2 works from non-localhost. Replace $instid, $server, $barcode, $username, and $password variables below as \r
+                                       necessary.</para>\r
+                                       <note><para>We are using 6001 here which is associated with SIP2 as per our configuration.</para></note>\r
+                                       <screen>$ telnet $server 6001</screen>\r
+                                       <screen>Connected to $server.</screen>\r
+                                       <screen>Escape character is '^]'.</screen>\r
+                                       <screen>9300CN**$username**|CO**$password**|CP**$instid**</screen>                                      \r
+                                       <para>You should get back.</para>\r
+                                       <screen>941</screen>\r
+                               </step>\r
+                               <step>\r
+                                       <para>Now just copy in the following line (with variables replaced) you don't need to hit enter, just paste!</para>\r
+                                       <screen>2300120080623    172148AO**$instid**|AA**$barcode**|AC$password|AD**$password**</screen>\r
+                                       <para>You will get back the patron information for $barcode (something similar to the what's below).</para>\r
+                                       <screen>24  Y           00120100113    170738AEFirstName MiddleName LastName|AA**$barcode**|BLY|CQY|BHUSD|BV0.00|AFOK|AO**$instid**|</screen>\r
+                                       <para>The response declares it is a valid patron <emphasis>(BLY)</emphasis> with a valid password <emphasis>(CQY)</emphasis> and shows the user's <emphasis>$name</emphasis>.</para>\r
+                               </step>\r
+                       </procedure>\r
+               </simplesect>\r
+       </section>\r
+       <section xml:id="SIP_Communication">\r
+               <info>\r
+                       <title>SIP Communication</title>\r
+               </info>\r
+               <para>SIP generally communicates over a TCP connection (either raw sockets or over telnet), but can also communicate via serial connections and other methods. In Evergreen, \r
+               the most common deployment is a RAW socket connection on port 6001.</para>\r
+               <para>SIP communication consists of strings of messages, each message request and response begin with a 2-digit <quote>command</quote> - Requests usually being an odd \r
+               number and responses usually increased by 1 to be an even number. The combination numbers for the request command and response is often referred to as a \r
+               <emphasis>Message Pair</emphasis> (for example, a 23 command is a request for patron status, a 24 response is a patron status, and the message pair 23/24 is \r
+               patron status message pair). The table in the next section shows the message pairs and a description of them.</para>\r
+               <para>For clarification, the <quote>Request</quote> is from the device (selfcheck or otherwise) to the ILS/ACS. The response is… the response \r
+               to the request ;).</para>\r
+               <para>Within each request and response, a number of fields (either a fixed width or separated with a '|' [pipe symbol] and preceeded with a 2-character field identifier) \r
+               are used. The fields vary between message pairs.</para>\r
+               <informaltable>\r
+                       <tgroup cols="4">\r
+                               <thead>\r
+                                       <row>\r
+                                               <entry>Pair</entry>\r
+                                               <entry>Name</entry>\r
+                                               <entry>Supported?</entry>\r
+                                               <entry>Details</entry>\r
+                                       </row>\r
+                               </thead>\r
+                               <tbody>\r
+                                       <row>\r
+                                               <entry>01</entry>\r
+                                               <entry>Block Patron</entry>\r
+                                               <entry>Yes</entry>\r
+                                               <entry><link linkend='SIP_Block_Patron'>01_Block_Patron</link> - ACS responds with 24 Patron Status Response</entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>09/10</entry>\r
+                                               <entry>Checkin</entry>\r
+                                               <entry>Yes (with extensions)</entry>\r
+                                               <entry><link linkend='SIP_Checkin'>09/10_Checkin</link></entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>11/12</entry>\r
+                                               <entry>Checkout</entry>\r
+                                               <entry>Yes (no renewals)</entry>\r
+                                               <entry><link linkend='SIP_Checkout'>11/12_Checkout</link></entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>15/16</entry>\r
+                                               <entry>Hold</entry>\r
+                                               <entry>No</entry>\r
+                                               <entry><link linkend='SIP_Hold'>15/16_Hold</link></entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>17/18</entry>\r
+                                               <entry>Item Information</entry>\r
+                                               <entry>Yes (no extensions)</entry>\r
+                                               <entry><link linkend='SIP_Item_Information'>17/18_Item_Information</link></entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>19/20</entry>\r
+                                               <entry>Item Status Update</entry>\r
+                                               <entry>No</entry>\r
+                                               <entry><link linkend='SIP_Item_Status_Update'>19/20_Item_Status_Update</link> - Returns Patron Enable response, but doesn't make any changes in EG</entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>23/24</entry>\r
+                                               <entry>Patron Status</entry>\r
+                                               <entry>Yes</entry>\r
+                                               <entry><link linkend='SIP_Patron_Status'>23/24_Patron_Status</link> - 63/64 <quote>Patron Information</quote> preferred</entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>25/26</entry>\r
+                                               <entry>Patron Enable</entry>\r
+                                               <entry>No</entry>\r
+                                               <entry><link linkend='SIP_Patron_Enable'>25/26_Patron_Enable</link> - Used during system testing and validation</entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>29/30</entry>\r
+                                               <entry>Renew</entry>\r
+                                               <entry>NO (maybe?)</entry>\r
+                                               <entry><link linkend='SIP_Renew'>29/30_Renew</link></entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>35/36</entry>\r
+                                               <entry>End Session</entry>\r
+                                               <entry>Yes</entry>\r
+                                               <entry><link linkend='SIP_End_Session'>35/36_End_Session</link></entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>37/38</entry>\r
+                                               <entry>Fee Paid</entry>\r
+                                               <entry>No</entry>\r
+                                               <entry><link linkend='SIP_Fee_Paid'>37/38_Fee_Paid</link></entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>63/64</entry>\r
+                                               <entry>Patron Information</entry>\r
+                                               <entry>Yes (no extensions)</entry>\r
+                                               <entry><link linkend='SIP_Patron_Information'>63/64_Patron_Information</link></entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>65/66</entry>\r
+                                               <entry>Renew All</entry>\r
+                                               <entry>No</entry>\r
+                                               <entry><link linkend='SIP_Renew_All'>65/66_Renew_All</link></entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>93/94</entry>\r
+                                               <entry>Login</entry>\r
+                                               <entry>Yes</entry>\r
+                                               <entry><link linkend='SIP_Login'>93/94_Login</link> - Must be first command to Evergreen ACS (via socket) or SIP will terminate</entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>97/96</entry>\r
+                                               <entry>Resend last message</entry>\r
+                                               <entry>Yes</entry>\r
+                                               <entry><link linkend='SIP_Resend'>97/96_Resend</link></entry>\r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>99/98</entry>\r
+                                               <entry>SC/ACS Status</entry>\r
+                                               <entry>Yes</entry>\r
+                                               <entry><link linkend='SIP_SC_ACS_Status'>99/98_SC_and_ACS_Status</link></entry>\r
+                                       </row>\r
+                               </tbody>\r
+                       </tgroup>\r
+               </informaltable>\r
+               <simplesect xml:id="SIP_block_patron">\r
+                       <title>01 Block Patron</title>\r
+                       <para>A selfcheck will issue a Block Patron command if a patron leaves their card in a selfcheck machine or if the selfcheck detects tampering (such as attempts \r
+                       to disable multiple items during a single item checkout, multiple failed pin entries, etc).</para>\r
+                       <para>In Evergreen, this command does the following:</para>\r
+                               <itemizedlist>\r
+                                       <listitem>User alert message: 'CARD BLOCKED BY SELF-CHECK MACHINE' (this is independent of the AL 'Blocked Card Message' field).</listitem>\r
+                                       <listitem>Card is marked inactive.</listitem>\r
+                               </itemizedlist>\r
+                       <para>The request looks like:</para>\r
+                       <screen>01&lt;card retained&gt;&lt;date&gt;[fields AO, AL, AA, AC]</screen>\r
+                       <para><emphasis>Card Retained</emphasis>: A single character field of 'Y' or 'N' - tells the ACS whether the SC has retained the card (ex: left in the machine) or not.</para> \r
+                       <para><emphasis>Date</emphasis>: An 18 character field for the date/time when the block occurred.</para> \r
+                       <para><emphasis>Format</emphasis>: YYYYMMDDZZZZHHMMSS (ZZZZ being zone - 4 blanks when 'local time', ' Z' (3 blanks and a Z) represents UTC(GMT/Zulu)</para>\r
+                       <para><emphasis>Fields</emphasis>: See <link linkend='SIP_Fields'>Fields</link> for more details.</para>\r
+                       <para>The response is a 24 “Patron Status Response” with the following:</para>\r
+                       <itemizedlist>\r
+                                       <listitem>Charge privileges denied</listitem>\r
+                                       <listitem>Renewal privileges denied</listitem>\r
+                                       <listitem>Recall privileges denied (hard-coded in every 24 or 64 response)</listitem>\r
+                                       <listitem>hold privileges denied</listitem>\r
+                                       <listitem>Screen Message 1 (AF): 'blocked'</listitem>\r
+                                       <listitem>Patron</listitem>\r
+\r
+                       </itemizedlist>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_Checkin">\r
+                       <title>09/10 Checkin</title>\r
+                       <para>The request looks like:</para>\r
+                       <screen>09&lt;No block (Offline)&gt;&lt;xact date&gt;&lt;return date&gt;[Fields AP,AO,AB,AC,CH,BI]</screen>\r
+                       <para><emphasis>No Block (Offline)</emphasis>: A single character field of 'Y' or 'N' - Offline transactions are not currently supported so send 'N'.</para> \r
+                       <para><emphasis>xact date</emphasis>: an 18 character field for the date/time when the checkin occurred. Format: YYYYMMDDZZZZHHMMSS (ZZZZ being zone - \r
+                       4 blanks when 'local time', ' Z' (3 blanks and a Z) represents UTC(GMT/Zulu)</para> \r
+                       <para><emphasis>Fields</emphasis>: See <link linkend='SIP_Fields'>Fields</link> for more details.</para>\r
+                       <para>The response is a 10 <quote>Checkin Response</quote> with the following:</para>\r
+                       <screen>10&lt;resensitize>&lt;magnetic media&gt;&lt;alert&gt;&lt;xact date&gt;[Fields AO,AB,AQ,AJ,CL,AA,CK,CH,CR,CS,CT,CV,CY,DA,AF,AG]</screen>\r
+                       <para>Example (with a remote hold):</para>\r
+                       <screen>09N20100507    16593720100507    165937APCheckin Bin 5|AOBR1|AB1565921879|ACsip_01|</screen>\r
+                       <screen>101YNY20100623    165731AOBR1|AB1565921879|AQBR1|AJPerl 5 desktop reference|CK001|CSQA76.73.P33V76 1996|CTBR3|CY373827|DANicholas Richard Woodard|CV02|</screen>\r
+                       <para>Here you can see a hold alert for patron (CY) 373827, named (DA) Nicholas Richard Woodard, to be picked up at (CT) BR3. Since the transaction is happening \r
+                       at (AO) BR1, the alert type (CV) is 02 for “hold at remote library”. The possible values for CV are:</para>\r
+                       <itemizedlist>\r
+                                       <listitem>00: unknown</listitem>\r
+                                       <listitem>01: local hold</listitem>\r
+                                       <listitem>02: remote hold</listitem>\r
+                                       <listitem>03: ILL transfer (not used by EG)</listitem>\r
+                                       <listitem>04: transfer</listitem>\r
+                                       <listitem>99: other</listitem>\r
+                       </itemizedlist>\r
+                       <note>\r
+                               <para>the logic for EG to determine the content is magnetic_media comes from either legacy circ scripts or search_config_circ_modifier. The default is non-magnetic. \r
+                               The same is true for media_type (default 001). EG does not populate the collection_code because it does not really have any, but it will provide the call_number where \r
+                               available.</para>\r
+                               <para>Unlike the item_id (barcode), the title_id is actually a title string, unless the configuration forces the return of the bib ID.</para>\r
+                               <para>Don't be confused by the different branches that can show up in the same response line.</para>\r
+                               <itemizedlist>\r
+                                       <listitem>AO is where the transaction took place,</listitem>\r
+                                       <listitem>AQ is the <quote>permanent location</quote>, and</listitem>\r
+                                       <listitem>CT is the <quote>destination location</quote> (i.e., pickup lib for a hold or target lib for a transfer).</listitem>\r
+                               </itemizedlist>\r
+                       </note>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_Checkout">\r
+                       <title>11/12 Checkout</title>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_Hold">\r
+                       <title>15/16 Hold</title>\r
+                       <para>Not yet supported.</para>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_Item_Information">\r
+                       <title>17/18 Item Information</title>\r
+                       <para>The request looks like:</para>\r
+                       <screen>17&lt;xact_date&gt;[fields: AO,AB,AC]</screen>\r
+                       <para>The request is very terse. AC is optional.</para>\r
+                       <para>The following response structure is for SIP2. (Version 1 of the protocol had only 6 total fields.)</para>\r
+                       <screen>18&lt;circulation_status&gt;&lt;security_marker&gt;&lt;fee_type&gt;&lt;xact_date&gt;[fields: CF,AH,CJ,CM,AB,AJ,BG,BH,BV,CK,AQ,AP,CH,AF,AG,+CT,+CS]</screen>\r
+                       <para>Example:</para>\r
+                       <screen>1720060110    215612AOBR1|ABno_such_barcode|</screen>\r
+                       <screen>1801010120100609    162510ABno_such_barcode|AJ|</screen>\r
+                       <screen>1720060110    215612AOBR1|AB1565921879|</screen>\r
+                       <screen>1810020120100623    171415AB1565921879|AJPerl 5 desktop reference|CK001|AQBR1|APBR1|BGBR1|CTBR3|CSQA76.73.P33V76 1996|</screen>\r
+                       <para>The first case is with a bogus barcode. The latter shows an item with a circulation_status of <emphasis>10</emphasis> for <emphasis>in transit between libraries</emphasis>. \r
+                       The known values of circulation_status are enumerated in the spec.</para>\r
+                       <para>EXTENSIONS: The <emphasis>CT</emphasis> field for <emphasis>destination location</emphasis> and CS <emphasis>call number</emphasis> are used by Automated Material \r
+                       Handling systems.</para>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_Item_Status_Update">\r
+                       <title>19/20 Item Status Update</title>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_Patron_Status">\r
+                       <title>23/24 Patron Status</title>\r
+                       <para>Example:</para>\r
+                       <screen>2300120060101    084235AOUWOLS|AAbad_barcode|ACsip_01|ADbad_password|</screen>\r
+                       <screen>24YYYY          00120100507    013934AE|AAbad_barcode|BLN|AOUWOLS|</screen>\r
+                       <screen>2300120060101    084235AOCONS|AA999999|ACsip_01|ADbad_password|</screen>\r
+                       <screen>24  Y           00120100507    022318AEDoug Fiander|AA999999|BLY|CQN|BHUSD|BV0.00|AFOK|AOCONS|</screen>\r
+                       <screen>2300120060101    084235AOCONS|AA999999|ACsip_01|ADuserpassword|LY|CQN|BHUSD|BV0.00|AFOK|AOCONS|</screen>\r
+                       <screen>24  Y           00120100507    022803AEDoug Fiander|AA999999|BLY|CQY|BHUSD|BV0.00|AFOK|AOCONS|</screen>\r
+                       <orderedlist>\r
+                               <listitem>The <emphasis>BL</emphasis> field (SIP2, optional) is <emphasis>valid patron</emphasis>, so the <emphasis>N</emphasis> value means \r
+                               <emphasis>bad_barcode</emphasis> doesn't match a patron, the <emphasis>Y</emphasis> value means 999999 does.</listitem>\r
+                               <listitem>The <emphasis>CQ</emphasis> field (SIP2, optional) is <emphasis>valid password</emphasis>, so the <emphasis>N</emphasis> \r
+                               value means <emphasis>bad_password</emphasis> doesn't match 999999's password, the <emphasis>Y</emphasis> means <emphasis>userpassword</emphasis> \r
+                               does.</listitem>\r
+                       </orderedlist>\r
+                       <para>So if you were building the most basic SIP2 authentication client, you would check for <emphasis>|CQY|</emphasis> in the response to know the user's barcode and password \r
+                       are correct (<emphasis>|CQY|</emphasis> implies <emphasis>|BLY|</emphasis>, since you cannot check the password unless the barcode exists). However, in practice, \r
+                       depending on the application, there are other factors to consider in authentication, like whether the user is blocked from checkout, owes excessive fines, reported their \r
+                       card lost, etc. These limitations are reflected in the 14-character <emphasis>patron status</emphasis> string immediately following the <emphasis>24</emphasis> code. \r
+                       See the field definitions in your copy of the spec.</para>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_Patron_Enable">\r
+                       <title>25/26 Patron Enable</title>\r
+                       <para>Not yet supported.</para>\r
+               </simplesect>\r
+               <simplesect xml:id="sip_Renew">\r
+                       <title>29/30 Renew</title>\r
+                       <para>EG ACS status message indicates Renew is supported.</para>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_End_Session">\r
+                       <title>35/36 End Session</title>\r
+                       <screen>3520100505    115901AOBR1|AA999999|</screen>\r
+                       <screen>36Y20100507    161213AOCONS|AA999999|AFThank you!|</screen>\r
+                       <para>The Y/N code immediately after the 36 indicates success/failure. Failure is not particularly meaningful or important in this context, and for evergreen it \r
+                       is hardcoded Y.</para>  \r
+               </simplesect>\r
+               <simplesect xml:id="SIP_Fee_Paid">\r
+                       <title>37/38 Fee Paid</title>\r
+                       <para>Not implemented.</para>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_Patron_Information">\r
+                       <title>63/64 Patron Information</title>\r
+                       <para>Attempting to retrieve patron info with a bad barcode:</para>\r
+                       <screen>6300020060329    201700          AOBR1|AAbad_barcode|</screen>\r
+                       <screen>64YYYY          00020100623    141130000000000000000000000000AE|AAbad_barcode|BLN|AOBR1|</screen>\r
+                       <para>Attempting to retrieve patron info with a good barcode (but bad patron password):</para>\r
+                       <screen>6300020060329    201700          AOBR1|AA999999|ADbadpwd|</screen>\r
+                       <screen>64  Y           00020100623    141130000000000000000000000000AA999999|AEDavid J. Fiander|BHUSD|BV0.00|BD2 Meadowvale Dr. St Thomas, ON Canada</screen>\r
+                       <screen>90210|BEdjfiander@somemail.com|BF(519) 555 1234|AQBR1|BLY|CQN|PB19640925|PCPatrons|PIUnfiltered|AFOK|AOBR1|</screen>\r
+                       <para>See <link linkend='SIP_Patron_Status'>23/24 Patron Status</link> for info on <emphasis>BL</emphasis> and <emphasis>CQ</emphasis> fields.</para>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_Renew_All">\r
+                       <title>65/66 Renew All</title>\r
+                       <para>Not yet supported.</para>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_Login">\r
+                       <title>93/94 Login</title>\r
+                       <para>Example:</para>\r
+                       <screen>9300CNsip_01|CObad_value|CPBR1|</screen>\r
+                       <screen>[Connection closed by foreign host.]</screen>\r
+                       <screen>...</screen>\r
+                       <screen>9300CNsip_01|COsip_01|CPBR1|</screen>\r
+                       <screen>941</screen>\r
+                       <para>941 means successful terminal login. 940 or getting dropped means failure.</para>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_Resend">\r
+                       <title>97/96 Resend</title>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_SC_ACS_Status">\r
+                       <title>99/98 SC and ACS Status</title>\r
+                       <screen>99&lt;status code&gt;&lt;max print width&gt;&lt;protocol version&gt;</screen>\r
+                       <para>All 3 fields are required:</para>\r
+                       <itemizedlist>\r
+                                       <listitem>status code - 1 character:</listitem>\r
+                                       <itemizedlist>\r
+                                               <listitem>0: SC is OK</listitem>\r
+                                               <listitem>SC is out of paper</listitem>\r
+                                               <listitem>SC shutting down</listitem>           \r
+                                       </itemizedlist>\r
+                                       <listitem>max print width - 3 characters - the integer number of characters the client can print</listitem>\r
+                                       <listitem>protocol version - 4 characters - x.xx</listitem>\r
+                       </itemizedlist>\r
+                       <screen>98&lt;on-line status&gt;&lt;checkin ok&gt;&lt;checkout ok&gt;&lt;ACS renewal policy&gt;&lt;status update ok&gt;&lt;offline ok&gt;&lt;timeout period&gt;</screen>\r
+                       <screen>&lt;retries allowed&gt;&lt;date/time sync&gt;&lt;protocol version&gt;&lt;institution id&gt;&lt;library name&gt;&lt;supported messages&gt;&lt;terminal</screen> \r
+                       <screen>location&gt;&lt;screen message&gt;&lt;print line&gt;</screen>\r
+                       <para>Example:</para>\r
+                       <screen>9910302.00</screen>\r
+                       <screen>98YYYYNN60000320100510    1717202.00AOCONS|BXYYYYYYYYYNYNNNYN|</screen>\r
+                       <para>The Supported Messages field <emphasis>(BX)</emphasis> appears only in SIP2, and specifies whether 16 different SIP commands are supported by the ACS or not.</para>\r
+               </simplesect>\r
+               <simplesect xml:id="SIP_Fields">\r
+                       <title>Fields</title>\r
+                       <para>All fixed-length fields in a communication will appear before the first variable-length field. This allows for simple parsing. Variable-length fields are by \r
+                       definition delimited, though there will not necessarily be an initial delimiter between the last fixed-length field and the first variable-length one. It would be \r
+                       unnecessary, since you should know the exact position where that field begins already.</para>\r
+               </simplesect>\r
+       </section>\r
+</chapter>\r
+\r
diff --git a/1.6/admin/z3950.xml b/1.6/admin/z3950.xml
new file mode 100644 (file)
index 0000000..ef5b6ed
--- /dev/null
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<chapter xml:id="z3950" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
+    xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
+    <info>\r
+        <title>SRU and Z39.50 Server</title>\r
+    </info>\r
+\r
+    <para>Evergreen is extremely scalable and can serve the need of a large range of libraries. The specific requirements and configuration of your system should be determined based on your \r
+       specific needs of your organization or consortium.</para>\r
+    \r
+       <section xml:id="Testing_SRU_yaz-client">\r
+               <info>\r
+                   <title>Testing SRU with yaz-client</title>\r
+               </info> \r
+                        <para>yaz-client is installed as a part of Index Data's YAZ software. Recent versions include support for querying SRU servers. Evergreen ships an SRU configuration \r
+                       that works out of the box. To search Evergreen with yaz-client, choose the <emphasis>GET</emphasis> query method and issue the <emphasis>find</emphasis> command. \r
+                       In the following example, we connect to the Evergreen test server <emphasis>dev.gapines.org</emphasis>; substitute this hostname with your own Evergreen server \r
+                       hostname:</para>\r
+                       <screen>\r
+                       $ yaz-client http://dev.gapines.org/opac/extras/sru\r
+                       Z> sru GET 1.1\r
+                       Z> find hemingway\r
+                       </screen>\r
+                        <para>If your database has records that match that term, you will get the corresponding MARCXML records in your response from yaz-client.</para>\r
+                        <para>Here's what the SRU request looks like as sent to the Evergreen web server:</para>\r
+                        <screen>GET /opac/extras/sru?version=1.1&amp;operation=searchRetrieve&amp;query=hemingway&amp;maximumRecords=0</screen>\r
+                       <para>You can see what the response looks like by hitting the same URL in your Web browser: \r
+                       <ulink url="http://dev.gapines.org/opac/extras/sru?version=1.1&amp;operation=searchRetrieve&amp;query=hemingway&amp;maximumRecords=0">\r
+                       http://dev.gapines.org/opac/extras/sru?version=1.1&amp;operation=searchRetrieve&amp;query=hemingway&amp;maximumRecords=0</ulink>\r
+                       CQL queries</para>\r
+                        <para>Evergreen supports some CQL index-sets for advanced queries such as a subset of Dublin Core (DC) elements. Those DC elements that are \r
+                       supported map to Evergreen default indexes as follows:</para>\r
+                       <informaltable xml:id="dc_elements">\r
+                       \r
+                       <tgroup cols="2">\r
+                               <thead>\r
+                                       <row>\r
+                                               <entry>DC element </entry>\r
+                                               <entry>Evergreen index</entry>\r
+                                               \r
+                                       </row>\r
+                               </thead>\r
+                               <tbody>\r
+                                       <row>\r
+                                               <entry>title</entry>\r
+                                               <entry>title</entry>                            \r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>creator </entry>\r
+                                               <entry>author</entry>                           \r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>contributor</entry>\r
+                                               <entry>author</entry>                           \r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>publisher</entry>\r
+                                               <entry>keyword</entry>                          \r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>subject</entry>\r
+                                               <entry>subject</entry>                          \r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>identifier</entry>\r
+                                               <entry>keyword</entry>                          \r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>type</entry>\r
+                                               <entry>none</entry>                             \r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>format</entry>\r
+                                               <entry>none</entry>                             \r
+                                       </row>\r
+                                       <row>\r
+                                               <entry>language</entry>\r
+                                               <entry>lang</entry>                             \r
+                                       </row>\r
+                               </tbody>\r
+                       </tgroup>\r
+                       </informaltable>\r
+                       <para>Here are a few examples of SRU searches against some of these indexes:</para>\r
+                       <itemizedlist>\r
+                               <listitem>dc.title all <quote>complete dinosaur</quote></listitem>\r
+                               <listitem>dc.subject all <quote>britain france</quote></listitem>\r
+                               <listitem>dc.title exact <quote>The Empire Strikes Back</quote></listitem>\r
+                               <listitem>dc.author=king and dc.title=zone</listitem>\r
+                       </itemizedlist>\r
+\r
+       </section>\r
+       <section xml:id="Z3950serversupport">\r
+               <info>\r
+                   <title>Setting up Z39.50 server support</title>\r
+               </info> \r
+\r
+                       <note><para>You must have Evergreen's SRU server running before you can enable Z39.50 server support.</para></note>                      \r
+                       <para>This support uses an Z39.50-to-SRU translator service supplied by the <emphasis>Net::Z3950::Simple2ZOOM</emphasis> Perl module to enable Evergreen to act as a Z39.50 server. \r
+                       You could run the Z39.50 server on a different machine. It just needs to be able to connect to the Evergreen SRU server.</para>\r
+                       <procedure>\r
+                               <title>Setting up the Z39.50 server</title>\r
+                               <step>\r
+                                       <para>Install a recent version of yaz (the Makefile.install should have installed a suitable version).</para></step>\r
+                               <step>\r
+                                       <para>Install Net::Z3950::Simple2ZOOM (sudo cpan Net::Z3950::Simple2ZOOM)</para></step>\r
+                               <step>\r
+                                       <para>Create a Simple2ZOOM configuration file. Something like the following is a good start, and is based on the Simple2ZOOM documentation example. \r
+                                       We'll name the file dgo.conf for our example:</para>    \r
+                                       <screen>\r
+                                       &lt;client&gt;\r
+                                               &lt;database name="gapines"&gt;\r
+                                                       &lt;zurl&gt;http://dev.gapines.org/opac/extras/sru&lt;/zurl&gt;\r
+                                                       &lt;option name="sru"&gt;get&lt;/option&gt;\r
+                                                       &lt;charset&gt;marc-8&lt;/charset&gt;\r
+                                                       &lt;search&gt;\r
+                                                               &lt;querytype&gt;cql&lt;/querytype&gt;\r
+                                                               &lt;map use="4"&gt;&lt;index&gt;eg.title&lt;/index&gt;&lt;/map&gt;\r
+                                                               &lt;map use="7"&gt;&lt;index&gt;eg.keyword&lt;/index&gt;&lt;/map&gt;\r
+                                                               &lt;map use="8"&gt;&lt;index&gt;eg.keyword&lt;/index&gt;&lt;/map&gt;\r
+                                                               &lt;map use="21"&gt;&lt;index&gt;eg.subject&lt;/index&gt;&lt;/map&gt;\r
+                                                               &lt;map use="1003"&gt;&lt;index&gt;eg.author&lt;/index&gt;&lt;/map&gt;\r
+                                                               &lt;map use="1018"&gt;&lt;index&gt;eg.publisher&lt;/index&gt;&lt;/map&gt;\r
+                                                               &lt;map use="1035"&gt;&lt;index&gt;eg.keyword&lt;/index&gt;&lt;/map&gt;\r
+                                                               &lt;map use="1016"&gt;&lt;index&gt;eg.keyword&lt;/index&gt;&lt;/map&gt;\r
+                                                       &lt;/search&gt;\r
+                                               &lt;/database&gt;\r
+                                       &lt;/client&gt;\r
+                                       </screen>\r
+                                       <para>You can have multiple &lt;database&gt; sections in a single file, each pointing to a different scope of your consortium. The name attribute on \r
+                                       the &lt;database&gt; element is used in your Z39.50 connection string to name the database. The &lt;zurl&gt; element must point to \r
+                                       <emphasis>http://hostname/opac/extras/sru</emphasis>. As of Evergreen 1.6, you can append an optional organization unit shortname for search \r
+                                       scoping purposes, and you can also append <emphasis>/holdings</emphasis> if you want to expose the holdings for any returned records. So your zurl \r
+                                       could be <emphasis>http://dev.gapines.org/opac/extras/sru/BR1/holdings</emphasis> to limit the search scope to BR1 and its children, and \r
+                                       to expose its holdings.</para>\r
+                               </step>\r
+                               <step>\r
+                                       <para>Run simple2ZOOM as a daemon, specifying the configuration files and one or more listener addresses that the Z39.50 server will be accessible on. \r
+                                       If you do not specify a port, it will automatically run on port 9999. In the following example, we tell it to listen both to localhost on port 2210, \r
+                                       and on dev.gapines.org on port 210:</para>\r
+                                       <screen>\r
+                                        &lt;yazgfs&gt;\r
+                                               &lt;server id="server1"&gt;\r
+                                                       &lt;retrievalinfo&gt;\r
+                                                               &lt;retrieval syntax="xml"/&gt;\r
+                                                               &lt;retrieval syntax="marc21"&gt;\r
+                                                               &lt;backend syntax="xml"&gt;\r
+                                                                       &lt;marc inputformat="xml" outputformat="marc" inputcharset="utf-8" outputcharset="marc-8"/&gt;\r
+                                                               &lt;/backend&gt;\r
+                                                               &lt;/retrieval&gt;\r
+                                                       &lt;/retrievalinfo&gt;\r
+                                               &lt;/server&gt;\r
+                                       &lt;/yazgfs&gt;\r
+                                       </screen>\r
+                               </step>\r
+                               <step>\r
+                                       <para>Run simple2ZOOM as a daemon, specifying the configuration files and one or more listener addresses that the Z39.50 server will be accessible on. \r
+                                       If you do not specify a port, it will automatically run on port 9999. In the following example, we tell it to listen both to localhost on port 2210, \r
+                                       and on dev.gapines.org on port 210:</para>\r
+                                       <command>simple2zoom -c dgo.conf -- -f xml2marc-yaz.cfg localhost:2210 dev.gapines.org:210</command>\r
+                               </step>                         \r
+                       </procedure>\r
+                       <para>To test the Z39.50 server, we can use yaz-client again:</para>]\r
+                       <screen>\r
+                       yaz-client\r
+                       Z&gt; open localhost:2210/gapines\r
+                       Connecting...OK.\r
+                       Sent initrequest.\r
+                       Connection accepted by v3 target.\r
+                       ID     : 81/81\r
+                       Name   : Simple2ZOOM Universal Gateway/GFS/YAZ\r
+                       Version: 1.03/1.128/3.0.34\r
+                       Options: search present delSet triggerResourceCtrl scan sort namedResultSets\r
+                       Elapsed: 0.010718\r
+                       Z&gt; format marcxml\r
+                       Z&gt; find <quote>dc.title=zone and dc.author=king</quote>\r
+                       Sent searchRequest.\r
+                       Received SearchResponse.\r
+                       Search was a success.\r
+                       Number of hits: 0, setno 4\r
+                       records returned: 0\r
+                       Elapsed: 0.611432\r
+                       Z&gt; find <quote>dead zone</quote>\r
+                       Sent searchRequest.\r
+                       Received SearchResponse.\r
+                       Search was a success.\r
+                       Number of hits: 4, setno 5\r
+                       records returned: 0\r
+                       Elapsed: 1.555461\r
+                       Z&gt; show 1\r
+                       Sent presentRequest (1+1).\r
+                       Records: 1\r
+                       []Record type: XML\r
+                       &lt;record xmlns:... (rest of record deliberately truncated)\r
+                       </screen>\r
+       </section>\r
+</chapter>\r
+\r
diff --git a/1.6/reports/report-intro.xml b/1.6/reports/report-intro.xml
new file mode 100644 (file)
index 0000000..b9e24ac
--- /dev/null
@@ -0,0 +1,3 @@
+<partintro xmlns:xl="http://www.w3.org/1999/xlink" xml:id="report_intro">\r
+       <para>Reports are a powerful tool in Evergreen and can be used for statistical comparisons or collection maintenance. The following part covers everything dealing with reports from starting the reporter daemon to viewing reports your library has created. The range of topics in this part is quite broad and different chapters will be useful to different roles in an Evergreen library system.</para>\r
+</partintro>\r
diff --git a/1.6/reports/report-startingreporter.xml b/1.6/reports/report-startingreporter.xml
new file mode 100644 (file)
index 0000000..d395609
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<chapter xml:id="report_starting_reporter_service" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="EN"\r
+    xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink">\r
+       <info>\r
+               <title>Starting and Stopping the Reporter Daemon</title>\r
+       </info>\r
+       <para>Before you can view reports, the Evergreen administrator must start the reporter daemon from the command line of the Evergreen server.</para>\r
+       <para>The reporter daemon periodically checks for requests for new reports or scheduled reports and gets them running.</para>\r
+       \r
+       <simplesect xml:id="startingreporter">\r
+               <title>Starting the Reporter Daemon</title>\r
+               <para>To start the reporter daemon, run the following command as the opensrf user:</para>\r
+               <screen>clark-kent.pl --daemon</screen>\r
+               <para>You can also specify other options:</para>\r
+               <itemizedlist>\r
+                       <listitem>sleep=interval : number of seconds to sleep between checks for new reports to run; defaults to 10</listitem>\r
+                       <listitem>lockfile=filename : where to place the lockfile for the process; defaults to /tmp/reporter-LOCK</listitem>\r
+                       <listitem>concurrency=integer : number of reporter daemon processes to run; defaults to 1</listitem>    \r
+                       <listitem>boostrap=filename : OpenSRF bootstrap configuration file; defaults to /openils/conf/opensrf_core.xml</listitem>       \r
+               </itemizedlist>\r
+               <note>\r
+                       <para>The open-ils.reporter process must be running and enabled on the gateway before the reporter daemon can be started.</para>\r
+                       <para>Remember that if the server is restarted, the reporter daemon will need to be restarted before you can view reports unless you have configured your server to start the daemon \r
+                       automatically at start up time.</para></note>\r
+       </simplesect>\r
+       <simplesect xml:id="stoppingreporter">\r
+               <title>Stopping the Reporter Daemon</title>\r
+               <para>To stop the reporter daemon, you have to kill the process and remove the lockfile. Assuming you're running just a single process and that the lockfile is \r
+               in the default location, perform the following commands as the opensrf user:</para>\r
+               <screen>kill `ps wax | grep "Clark Kent" | grep -v grep | cut -b1-6`</screen>\r
+               <screen>rm /tmp/reporter-LOCK</screen>\r
+       </simplesect>\r
+</chapter>\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
index 2824604..ab4cd09 100755 (executable)
@@ -5,6 +5,13 @@
       <info>\r
             <title>Evergreen 1.6 Documentation</title>\r
                <subtitle>Draft Version</subtitle>\r
+               <corpauthor>Documentation Interest Group</corpauthor>\r
+                <mediaobject>\r
+                       <imageobject>\r
+                       <imagedata scalefit="0" fileref="../media/main_logo.jpg"/>\r
+               </imageobject>\r
+               </mediaobject>\r
+\r
                <copyright>\r
                   <year>2010</year>\r
                   <holder>Evergreen Community</holder>\r
                <xi:include href="admin/admin-lsa.xml"/>\r
                <xi:include href="admin/Upgrading-Evergreen_1.6.xml"/>\r
                <xi:include href="admin/troubleshooting.xml"/>\r
+               <xi:include href="admin/z3950.xml"/>\r
+               <xi:include href="admin/sip.xml"/>\r
+       \r
        </part>\r
        <part xml:id="reports">\r
                <info>\r
                        <title>Reports</title>\r
                </info>\r
+               <xi:include href="reports/report-intro.xml"/>\r
+               <xi:include href="reports/report-startingreporter.xml"/>\r
                <xi:include href="reports/report-folder.xml"/>\r
                <xi:include href="reports/report-create-template.xml"/>\r
                <xi:include href="reports/report-generate-report.xml"/>\r
                <info>\r
                        <title>Appendices</title>\r
                </info>\r
-               <xi:include href="development/schema.xml"/>\r
+<!--           <xi:include href="development/schema.xml"/>-->\r
                <xi:include href="appendices/bookindex.xml"/>\r
        </part>\r
 </book>\r