More admin clean up...
authorRobert Soulliere <rsoulliere@libdog.mohawkcollege.ca>
Wed, 15 Sep 2010 17:44:30 +0000 (13:44 -0400)
committerRobert Soulliere <rsoulliere@libdog.mohawkcollege.ca>
Wed, 15 Sep 2010 17:44:30 +0000 (13:44 -0400)
1.6/admin/AdminMisc.xml
1.6/admin/Upgrading-Evergreen_1.6.xml
1.6/admin/sip.xml
1.6/admin/troubleshooting.xml
1.6/admin/z3950.xml

index 8811cf2..33f6f6e 100644 (file)
                        threshold of time or size has been reached and rotates the log files if a threshold condition has been met.</para>\r
                        <para>To teach <systemitem class="service">logrotate</systemitem> to rotate Evergreen logs on a weekly basis, or if they are > 50MB in size, \r
                        create a new file <filename>/etc/logrotate.d/evergreen</filename> with the following contents: </para>\r
-                       <programlisting>\r
-                       compress\r
-                       /openils/var/log/*.log {\r
-                       # keep the last 4 archived log files along with the current log file\r
                       # log log.1.gz log.2.gz log.3.gz log.4.gz\r
                       # and delete the oldest log file (what would have been log.5.gz)\r
-                       rotate 5\r
-                       # if the log file is > 50MB in size, rotate it immediately\r
-                       size 50M\r
                       # for those logs that don't grow fast, rotate them weekly anyway\r
-                         weekly\r
-                       }\r
-                       </programlisting>\r
+<programlisting>\r
+compress\r
+/openils/var/log/*.log {\r
+# keep the last 4 archived log files along with the current log file\r
+ # log log.1.gz log.2.gz log.3.gz log.4.gz\r
+ # and delete the oldest log file (what would have been log.5.gz)\r
+rotate 5\r
+# if the log file is > 50MB in size, rotate it immediately\r
+size 50M\r
+ # for those logs that don't grow fast, rotate them weekly anyway\r
+  weekly\r
+}\r
+</programlisting>\r
                </simplesect>\r
                <simplesect>\r
                        <title>Changing Logging Level for <application>Evergreen</application></title>\r
index 5b856c2..1ef3795 100644 (file)
                                for your distribution:</para>\r
                                <itemizedlist>\r
                                        <listitem>\r
-                                               <para><option>debian-etch</option> for <systemitem class="osname">Debian Etch (4.0)</systemitem><indexterm><primary>Linux</primary><secondary>Debian</secondary></indexterm></para>\r
+                                               <para><option>debian-etch</option> for <systemitem class="osname">Debian Etch (4.0)</systemitem>\r
+                                               <indexterm><primary>Linux</primary><secondary>Debian</secondary></indexterm></para>\r
                                        </listitem>\r
                                        <listitem>\r
                                                <para><option>debian-lenny</option> for <systemitem class="osname">Debian Lenny (5.0)</systemitem></para>\r
                                        </listitem>\r
                                        <listitem>\r
-                                       <para><option>ubuntu-hardy</option> for <systemitem class="osname">Ubuntu Hardy Heron (8.04)</systemitem><indexterm><primary>Linux</primary><secondary>Ubuntu</secondary></indexterm></para>\r
+                                       <para><option>ubuntu-hardy</option> for <systemitem class="osname">Ubuntu Hardy Heron (8.04)</systemitem>\r
+                                       <indexterm><primary>Linux</primary><secondary>Ubuntu</secondary></indexterm></para>\r
                                        </listitem>\r
                                        <listitem>\r
                                                <para><option>ubuntu-intrepid</option> for <systemitem class="osname">Ubuntu Intrepid Ibex \r
                        <step>\r
                                <para>Update the Evergreen database:</para>\r
                                <note><para>it is recommended that you <link linkend="backingup">back up your Evergreen database</link> in order to restore your data if anything goes wrong.</para></note>\r
-                               <screen><userinput>psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.4.0.5-1.6.0.0-upgrade-db.sql evergreen</userinput></screen>\r
-                               <screen><userinput>psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.0-1.6.0.1-upgrade-db.sql evergreen</userinput></screen> \r
-                               <screen><userinput>psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.1-1.6.0.2-upgrade-db.sql evergreen</userinput></screen> \r
-                               <screen><userinput>psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.2-1.6.0.3-upgrade-db.sql evergreen</userinput></screen> \r
-                               <screen><userinput>psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.3-1.6.0.4-upgrade-db.sql evergreen</userinput></screen> \r
-                               <screen><userinput>psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.4-1.6.0.5-upgrade-db.sql evergreen</userinput></screen>  \r
-                               <screen><userinput>psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.5-1.6.0.6-upgrade-db.sql evergreen</userinput></screen> \r
-                               <screen><userinput>psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.6-1.6.0.7-upgrade-db.sql evergreen</userinput></screen> \r
-                               <screen><userinput>psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.7-1.6.0.8-upgrade-db.sql evergreen</userinput></screen> \r
+<screen>\r
+<userinput>\r
+psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.4.0.5-1.6.0.0-upgrade-db.sql evergreen\r
+psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.0-1.6.0.1-upgrade-db.sql evergreen\r
+psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.1-1.6.0.2-upgrade-db.sql evergreen\r
+psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.2-1.6.0.3-upgrade-db.sql evergreen \r
+psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.3-1.6.0.4-upgrade-db.sql evergreen\r
+psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.4-1.6.0.5-upgrade-db.sql evergreen\r
+psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.5-1.6.0.6-upgrade-db.sql evergreen\r
+psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.6-1.6.0.7-upgrade-db.sql evergreen \r
+psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.7-1.6.0.8-upgrade-db.sql evergreen\r
+</userinput>\r
+</screen> \r
                                <para>Download and run the the billing view hot-fix script</para>                               \r
                                <screen><userinput>wget http://www.open-ils.org/downloads/1.6.0-mmbxs-cleanup.sql</userinput></screen>\r
                                <screen><userinput>psql -U evergreen -h localhost -f 1.6.0-mmbxs-cleanup.sql</userinput></screen>       \r
                        </step>\r
                        <step>                  \r
                                <para>Create an empty Evergreen database in postgresql 8.3 by issuing the following commands as the postgres user:</para>\r
-                               <screen><userinput>createdb -E UNICODE evergreen</userinput></screen>\r
-                               <screen><userinput>createlang plperl   evergreen</userinput></screen>\r
-                               <screen><userinput>createlang plperlu  evergreen</userinput></screen>\r
-                               <screen><userinput>createlang plpgsql  evergreen</userinput></screen>\r
-                               <screen><userinput>psql -f /usr/share/postgresql/8.3/contrib/tablefunc.sql evergreen</userinput></screen>\r
-                               <screen><userinput>psql -f /usr/share/postgresql/8.3/contrib/tsearch2.sql evergreen</userinput></screen>\r
-                               <screen><userinput>psql -f /usr/share/postgresql/8.3/contrib/pgxml.sql evergreen</userinput></screen>           \r
+<screen>\r
+<userinput>\r
+createdb -E UNICODE evergreen\r
+createlang plperl   evergreen\r
+createlang plperlu  evergreen\r
+createlang plpgsql  evergreen\r
+psql -f /usr/share/postgresql/8.3/contrib/tablefunc.sql evergreen\r
+psql -f /usr/share/postgresql/8.3/contrib/tsearch2.sql evergreen\r
+psql -f /usr/share/postgresql/8.3/contrib/pgxml.sql evergreen\r
+</userinput>\r
+</screen>              \r
                        </step>\r
                        <step>\r
                                <para>As the postgres user on the PostgreSQL server, create a PostgreSQL user named <systemitem class="username">evergreen</systemitem> for the database cluster:</para>\r
index 7e8d44d..1fde5ab 100644 (file)
                <simplesect xml:id="Gettingthecode">\r
                            <title>Getting the code</title>\r
                                <para>Current <systemitem class="protocol">SIP</systemitem> code lives at github:</para>\r
-                               <screen>cd /opt</screen>\r
-                               <screen>git clone git://github.com/atz/SIPServer.git SIPServer</screen>\r
+                               <screen><userinput>cd /opt</userinput></screen>\r
+                               <screen><userinput>git clone git://github.com/atz/SIPServer.git SIPServer</userinput></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
+                               <screen><userinput>$ cd /opt</userinput></screen>\r
+                               <screen><userinput>$ sudo cvs -d:pserver:anonymous@openncip.cvs.sourceforge.net:/cvsroot/openncip login</userinput></screen>\r
+                               <para>When prompted for the CVS password, just hit Enter (sudo password may be req'd)</para>\r
+                               <screen><userinput>$ sudo cvs -z3 -d:pserver:anonymous@openncip.cvs.sourceforge.net:/cvsroot/openncip co -P SIPServer</userinput></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
+                               <para>Type the following commands from the command prompt:</para><indexterm><primary>configuration files</primary><secondary>oils_sip.xml</secondary></indexterm>\r
+                               <screen><userinput>$ sudo su opensrf</userinput></screen>\r
+                               <screen><userinput>$ cd /openils/conf</userinput></screen>\r
+                               <screen><userinput>$ cp oils_sip.xml.example oils_sip.xml</userinput></screen>\r
                        </step>\r
                        <step>\r
-                               <para>Edit <filename>oils_sip.xml</filename><indexterm><primary>configuration files</primary><primary>oils_sip.xml</primary></indexterm>. \r
+                               <para>Edit <filename>oils_sip.xml</filename><indexterm><primary>configuration files</primary><secondary>oils_sip.xml</secondary></indexterm>. \r
                                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
+<programlisting>\r
+&lt;server-params\r
+min_servers='1'\r
+min_spare_servers='0'\r
+max_servers='25'\r
+/&gt;\r
+</programlisting>\r
                        </step>\r
                        <step>\r
                                <para> max_servers will directly correspond to the number of allowed <systemitem class="protocol">SIP</systemitem> clients. Set the number accordingly, but \r
                                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 \r
-                               <systemitem class="protocol">SIP</systemitem> client connections, \r
-                               give or take.</para>                            \r
+                               exhaust memory. On a 4G RAM/4 CPU server (that is also running evergreen), it is not recommended to exceed 100 \r
+                               <systemitem class="protocol">SIP</systemitem> client connections.</para>                                \r
                        </step>\r
                        </procedure>             \r
                </simplesect>\r
                        <title>Adding <systemitem class="protocol">SIP</systemitem> 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
+                                       <para>Type the following commands from the command prompt:</para><indexterm><primary>configuration files</primary><secondary>oils_sip.xml</secondary></indexterm>\r
+                                       <screen><userinput>$ sudo su opensrf</userinput></screen>\r
+                                       <screen><userinput>$ cd /openils/conf</userinput></screen>\r
+                                       <screen><userinput>$ cp oils_sip.xml.example oils_sip.xml</userinput></screen>\r
                                </step>\r
                                <step>\r
-                                       <para> in the &lt;accounts&gt; section, add <systemitem class="protocol">SIP</systemitem> client login information. Make sure that all &lt;logins&gt; use the \r
-                                       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 <systemitem class="protocol">SIP</systemitem> client.</para>\r
+                                       <para> in the &lt;accounts&gt; section, add <systemitem class="protocol">SIP</systemitem> client login information. Make sure that all \r
+                                       <varname>&lt;logins&gt;</varname> use the same institution attribute, and make \r
+                                       sure the institution is listed in <varname>&lt;institutions&gt;</varname>. All attributes in the <varname>&lt;login&gt;</varname> section will be \r
+                                       used by the <systemitem class="protocol">SIP</systemitem> client.</para>\r
                                \r
                                </step>\r
                                <step>\r
-                                       <para> In Evergreen, create a new profile group called <systemitem class="protocol">SIP</systemitem>. This group should be a sub-group of Users \r
-                                       (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
+                                       <para> In Evergreen, create a new profile group called <systemitem class="groupname">SIP</systemitem>. \r
+                                       This group should be a sub-group of <systemitem class="groupname">Users</systemitem> \r
+                                       (not <systemitem class="groupname">Staff</systemitem> or <systemitem class="groupname">Patrons</systemitem>). \r
+                                       Set Editing Permission as <emphasis role="bold">group_application.user.sip_client</emphasis> and give the group the following permissions:</para>\r
                                        <literallayout>\r
                                        COPY_CHECKIN\r
                                        COPY_CHECKOUT\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
+<screen>\r
+<userinput>\r
+INSERT INTO permission.grp_tree (id,name,parent,description,application_perm)\r
+VALUES (8, 'SIP', 1, 'SIP2 Client Systems', 'group_application.user.sip_client');\r
+\r
+INSERT INTO permission.grp_perm_map (grp,perm,depth) \r
+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);\r
+</userinput>\r
+</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
+<screen>\r
+<userinput>\r
+SELECT *\r
+FROM permission.grp_perm_map JOIN permission.perm_list ON\r
+permission.grp_perm_map.perm=permission.perm_list.id\r
+WHERE grp=8;\r
+</userinput>\r
+</screen>\r
                                        \r
-                                       <para>Keep in mind that the id (8) may not necessarily be available on your system.</para>                              \r
+                                       <para>Keep in mind that the id <emphasis role="bold">(8)</emphasis> 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 <systemitem class="protocol">SIP</systemitem> group.</para>\r
-                                       <note><para>The expiration date will affect the <systemitem class="protocol">SIP</systemitem> users' connection, you might want to make a note of \r
-                                       this somewhere. </para></note>  \r
+                                       <para>For each account created in the &lt;login&gt; section of <filename>oils_sip.xml</filename>, create a user (via the staff client user editor) \r
+                                       that has the same username \r
+                                       and password and put that user into the <systemitem class="groupname">SIP</systemitem> group.</para>\r
+                                       <note><para>The expiration date will affect the <systemitem class="groupname">SIP</systemitem> users' connection so 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 <systemitem class="protocol">SIP</systemitem> 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
+                               <screen><userinput>$ sudo su opensrf</userinput></screen>\r
+                               <screen><userinput>$ oils_ctl.sh -d /openils/var/run -s /openils/conf/oils_sip.xml -a [start|stop|restart]_sip</userinput></screen>     \r
                </simplesect>\r
                <simplesect xml:id="Logging-SIP">\r
-                       <title>Logging-SIP</title>\r
+                       <title>Logging-SIP</title><indexterm><primary>SIP</primary></indexterm>\r
                        <simplesect>\r
-                               <title>Syslog</title>\r
-                               <para>It is useful to log <systemitem class="protocol">SIP</systemitem> requests to a separate file especially during initial setup by modifying your syslog config file.</para>\r
+                               <title><systemitem class="service">Syslog</systemitem></title>\r
+                               <para>It is useful to log <systemitem class="protocol">SIP</systemitem> requests to a separate file especially during initial setup by modifying your \r
+                               syslog config file.</para><indexterm><primary>syslog</primary></indexterm>\r
                                <procedure>\r
                                        <step>\r
                                                <para>Edit syslog.conf.</para>\r
-                                               <screen>$ sudo vi /etc/syslog.conf  # maybe /etc/rsyslog.conf</screen>  \r
+                                               <screen><userinput>$ sudo vi /etc/syslog.conf  # maybe /etc/rsyslog.conf</userinput></screen>   \r
                                        </step>\r
                                        <step>\r
                                                <para>Add this:</para>\r
-                                               <screen>local6.*                -/var/log/SIP_evergreen.log</screen>    \r
+                                               <programlisting>local6.*                -/var/log/SIP_evergreen.log</programlisting>    \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
+                                               <para><systemitem class="service">Syslog</systemitem> expects the logfile to exist so create the file.</para>\r
+                                               <screen><userinput>$ sudo touch /var/log/SIP_evergreen.log</userinput></screen> \r
                                        </step>\r
                                        <step>\r
-                                               <para>Restart sysklogd.</para>\r
-                                               <screen>$ sudo /etc/init.d/sysklogd restart</screen>    \r
+                                               <para>Restart <systemitem class="service">sysklogd</systemitem>.</para>\r
+                                               <screen><userinput>$ sudo /etc/init.d/sysklogd restart</userinput></screen>     \r
                                        </step>\r
                                </procedure>            \r
                        </simplesect>\r
                        <simplesect>\r
-                               <title>Syslog-NG</title>\r
+                               <title><systemitem class="service">Syslog-NG</systemitem></title>\r
                                \r
                                <procedure>\r
                                        <step>\r
-                                               <para>Edit logging config.</para>\r
-                                               <screen>sudo vi /etc/syslog-ng/syslog-ng.conf</screen>  \r
+                                               <para>Edit logging config.</para><indexterm><primary>syslog-NG</primary></indexterm>\r
+                                               <screen><userinput>sudo vi /etc/syslog-ng/syslog-ng.conf</userinput></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
+<programlisting>\r
+# SIP2 for Evergreen\r
+filter    f_eg_sip { level(warn, err, crit) and facility(local6); };\r
+destination eg_sip { file("/var/log/SIP_evergreen.log"); };\r
+log { source(s_all); filter(f_eg_sip); destination(eg_sip); };\r
+</programlisting>      \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
+                                               <para><systemitem class="service">Syslog-ng</systemitem> expects the logfile to exist so create the file.</para>\r
+                                               <screen><userinput>$ sudo touch /var/log/SIP_evergreen.log</userinput></screen> \r
                                        </step>\r
                                        <step>\r
-                                               <para>Restart syslog-ng</para>\r
-                                               <screen>$ sudo /etc/init.d/syslog-ng restart\r
-                                               </screen>       \r
+                                               <para>Restart <systemitem class="service">syslog-ng</systemitem></para>\r
+                                               <screen><userinput>$ sudo /etc/init.d/syslog-ng restart</userinput></screen>    \r
                                        </step>\r
                                </procedure>            \r
                        </simplesect>\r
                </simplesect>   \r
                <simplesect xml:id="Testing_SIP_Connection">\r
-                       <title>Testing Your <systemitem class="protocol">SIP</systemitem> Connection</title>\r
+                       <title>Testing Your <systemitem class="protocol">SIP</systemitem> Connection</title><indexterm><primary>SIP</primary></indexterm>\r
                        <itemizedlist>\r
                                <listitem>\r
                                        <para>In the top level CVS checkout of the SIPServer code.</para>\r
-                                       <screen>$ cd SIPServer/t</screen>\r
+                                       <screen><userinput>$ cd SIPServer/t</userinput></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
+                                       <para> Edit <filename>SIPtest.pm</filename>, change the <varname>$instid</varname>, <varname>$server</varname>, <varname>$username</varname>, and \r
+                                       <varname>$password</varname> 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
+                                       <screen><userinput>$ PERL5LIB=../ perl 00sc_status.t</userinput></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
+<screen>\r
+1..4\r
+ok 1 - Invalid username\r
+ok 2 - Invalid username\r
+ok 3 - login\r
+ok 4 - SC status\r
+</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
+                                       <para> Don't be dismayed at <emphasis role="bold">Invalid Username</emphasis>. That's just one of the many tests that are run.</para>\r
                                </listitem>                                             \r
                        </itemizedlist>\r
                </simplesect>\r
                        <title>More Testing</title>\r
                        <procedure>\r
                                <step>\r
-                                       <para>Once you have opened up either the <systemitem class="protocol">SIP</systemitem> OR <systemitem class="protocol">SIP2</systemitem> 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 <systemitem class="protocol">SIP2</systemitem> 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 <systemitem class="protocol">SIP2</systemitem> 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>Once you have opened up either the <systemitem class="protocol">SIP</systemitem> OR <systemitem class="protocol">SIP2</systemitem> ports to be \r
+                                       accessible from outside you can do some testing via <systemitem class="protocol">telnet</systemitem>. You can try this with localhost \r
+                                       if you so wish, but we want to prove that <systemitem class="protocol">SIP2</systemitem> works from non-localhost. \r
+                                       Replace <varname>$instid</varname>, <varname>$server</varname>, <varname>$barcode</varname>, <varname>$username</varname>, \r
+                                       and <varname>$password</varname> variables below as necessary.</para>\r
+                                       <note><para>We are using <systemitem>6001</systemitem> here which is associated with <systemitem class="protocol">SIP2</systemitem> as per our configuration.</para></note><indexterm><primary>telnet</primary></indexterm>\r
+<screen>\r
+<userinput>$ telnet $server 6001</userinput>\r
+Connected to $server.\r
+Escape character is '^]'.\r
+<userinput>9300CN**$username**|CO**$password**|CP**$instid**</userinput>\r
+</screen>                                      \r
                                        <para>You should get back.</para>\r
                                        <screen>941</screen>\r
                                </step>\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
+                                       <para>The response declares it is a valid patron <varname>BLY</varname> with a valid password <varname>CQY</varname> and shows the user's \r
+                                       <varname>$name</varname>.</para>\r
                                </step>\r
                        </procedure>\r
                </simplesect>\r
        </section>\r
        <section xml:id="SIP_Communication">\r
                <info>\r
-                       <title><systemitem class="protocol">SIP</systemitem> Communication</title>\r
+                       <title><systemitem class="protocol">SIP</systemitem> Communication</title><indexterm><primary>SIP</primary></indexterm>\r
                </info>\r
-               <para><systemitem class="protocol">SIP</systemitem> 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
+               <para><systemitem class="protocol">SIP</systemitem> generally communicates over a <systemitem class="protocol">TCP</systemitem> connection (either raw sockets or over \r
+               <systemitem class="protocol">telnet</systemitem>), but can also communicate via serial connections and other methods. In Evergreen, \r
+               the most common deployment is a <systemitem class="protocol">RAW</systemitem> socket connection on port <systemitem>6001</systemitem>.</para>\r
+               <para><systemitem class="protocol">SIP</systemitem> communication consists of strings of messages, each message request and response begin with a 2-digit \r
+               <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
+               <para>Within each request and response, a number of fields (either a fixed width or separated with a <emphasis role="bold">|</emphasis> [pipe symbol] and preceeded with a \r
+               2-character field identifier) \r
                are used. The fields vary between message pairs.</para>\r
                <informaltable>\r
                        <tgroup cols="4">\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>A selfcheck will issue a <command>Block Patron</command> 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><indexterm><primary>SelfCheck</primary></indexterm>\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>User alert message: <emphasis>CARD BLOCKED BY SELF-CHECK MACHINE</emphasis> (this is independent of the AL \r
+                                       <emphasis>Blocked Card Message</emphasis> 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>Card Retained</emphasis>: A single character field of <emphasis>Y</emphasis> or <emphasis>N</emphasis> - tells the ACS whether the SC has \r
+                       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>Format</emphasis>: YYYYMMDDZZZZHHMMSS (ZZZZ being zone - 4 blanks when local time, <quote> Z</quote> (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
+                       <para>The response is a 24 <quote>Patron Status Response</quote> 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>Screen Message 1 (AF): <emphasis>blocked</emphasis></listitem>\r
                                        <listitem>Patron</listitem>\r
 \r
                        </itemizedlist>\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>No Block (Offline)</emphasis>: A single character field of <emphasis>Y</emphasis> or <emphasis>N</emphasis> - Offline transactions are not currently \r
+                       supported so send <emphasis>N</emphasis>.</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
+                       4 blanks when local time, <quote> Z</quote> (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
+                       <para>Here you can see a hold alert for patron <varname>CY</varname> <emphasis>373827</emphasis>, named <varname>DA</varname> <emphasis>Nicholas Richard Woodard</emphasis>, \r
+                       to be picked up at <varname>CT</varname> <quote>BR3</quote>. Since the transaction is happening \r
+                       at <varname>AO</varname> <quote>BR1</quote>, the alert type <varname>CV</varname> is 02 for <emphasis>hold at remote library</emphasis>. \r
+                       The possible values for <varname>CV</varname> are:</para>\r
                        <itemizedlist>\r
                                        <listitem>00: unknown</listitem>\r
                                        <listitem>01: local hold</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>the logic for Evergreen to determine the content is magnetic_media comes from either legacy circ scripts or search_config_circ_modifier. \r
+                               The default is non-magnetic.<indexterm><primary>magnetic media</primary></indexterm> \r
+                               The same is true for media_type (default 001). Evergreen does not populate the collection_code because it does not really have any, but it will provide the \r
+                               call_number where available.</para>\r
+                               <para>Unlike the <varname>item_id</varname> (barcode), the <varname>title_id</varname> is actually a title string, unless the configuration forces the return of \r
+                               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
+                                       <listitem><varname>AO</varname> is where the transaction took place,</listitem>\r
+                                       <listitem><varname>AQ</varname> is the <quote>permanent location</quote>, and</listitem>\r
+                                       <listitem><varname>CT</varname> is the <emphasis>destination location</emphasis> (i.e., pickup lib for a hold or target lib for a transfer).</listitem>\r
                                </itemizedlist>\r
                        </note>\r
                </simplesect>\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 request is very terse. <varname>AC</varname> is optional.</para>\r
                        <para>The following response structure is for <systemitem class="protocol">SIP2</systemitem>. (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|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
+                       The known values of <varname>circulation_status</varname> are enumerated in the spec.</para>\r
+                       <para>EXTENSIONS: The <varname>CT</varname> field for <emphasis>destination location</emphasis> and <varname>CS</varname> <emphasis>call number</emphasis> are used by \r
+                       Automated Material Handling systems.</para><indexterm><primary>Automated Material Handling (AMH)</primary></indexterm>\r
                </simplesect>\r
                <simplesect xml:id="SIP_Item_Status_Update">\r
                        <title>19/20 Item Status Update</title>\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 (<systemitem class="protocol">SIP2</systemitem>, optional) is <emphasis>valid patron</emphasis>, so the <emphasis>N</emphasis> value means \r
+                               <listitem>The <varname>BL</varname> field (<systemitem class="protocol">SIP2</systemitem>, optional) is <emphasis>valid patron</emphasis>, so the \r
+                               <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 (<systemitem class="protocol">SIP2</systemitem>, optional) is <emphasis>valid password</emphasis>, so the <emphasis>N</emphasis> \r
+                               <listitem>The <varname>CQ</varname> field (<systemitem class="protocol">SIP2</systemitem>, 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 <systemitem class="protocol">SIP2</systemitem> 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
+                       <para>So if you were building the most basic <systemitem class="protocol">SIP2</systemitem> authentication client, you would check for \r
+                       <emphasis>|CQY|</emphasis> in the response to know the user's barcode and password \r
+                       are correct (<varname>|CQY|</varname> implies <varname>|BLY|</varname>, 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_Renew">\r
                        <title>29/30 Renew</title>\r
-                       <para>EG ACS status message indicates Renew is supported.</para>\r
+                       <para>Evergreen ACS status message indicates <emphasis>renew</emphasis> 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
+                       <para>The <emphasis>Y/N</emphasis> code immediately after the 36 indicates <emphasis>success/failure</emphasis>. Failure is not particularly meaningful or \r
+                       important in this context, and for evergreen it is hardcoded <emphasis>Y</emphasis>.</para>     \r
                </simplesect>\r
                <simplesect xml:id="SIP_Fee_Paid">\r
                        <title>37/38 Fee Paid</title>\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
+                       <para>See <link linkend='SIP_Patron_Status'>23/24 Patron Status</link> for info on <varname>BL</varname> and <varname>CQ</varname> fields.</para>\r
                </simplesect>\r
                <simplesect xml:id="SIP_Renew_All">\r
                        <title>65/66 Renew All</title>\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
+                       <para><emphasis>941</emphasis> means successful terminal login. <emphasis>940</emphasis> or getting dropped means failure.</para>\r
                </simplesect>\r
                <simplesect xml:id="SIP_Resend">\r
                        <title>97/96 Resend</title>\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
+                                               <listitem>1: SC is out of paper</listitem>\r
+                                               <listitem>2: 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
                        <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 <systemitem class="protocol">SIP2</systemitem>, and specifies whether 16 different \r
+                       <para>The Supported Messages field <varname>BX</varname> appears only in <systemitem class="protocol">SIP2</systemitem>, and specifies whether 16 different \r
                        <systemitem class="protocol">SIP</systemitem>  commands are supported by the ACS or not.</para>\r
                </simplesect>\r
                <simplesect xml:id="SIP_Fields">\r
index a5e7aee..99b46c6 100644 (file)
@@ -17,11 +17,13 @@ xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="troubleshooting">
                        <para>Stop OpenSRF:</para><indexterm><primary>OpenSRF</primary></indexterm>\r
                        <screen><userinput>osrf_ctl.sh -l -a stop_all</userinput></screen>\r
                        <para>You should get either output simlar to this:</para>\r
-                       <screen>Stopping OpenSRF C process 12515...</screen>\r
-                       <screen>Stopping OpenSRF C process 12520...</screen>\r
-                       <screen>Stopping OpenSRF C process 12526...</screen>\r
-                       <screen>Stopping OpenSRF Perl process 12471...</screen>\r
-                       <screen>Stopping OpenSRF Router process 12466...</screen>\r
+<screen>\r
+Stopping OpenSRF C process 12515...\r
+Stopping OpenSRF C process 12520...\r
+Stopping OpenSRF C process 12526...\r
+Stopping OpenSRF Perl process 12471...\r
+Stopping OpenSRF Router process 12466...\r
+</screen>\r
                        <para>Or, if services have already been stopped, output may look like this:</para>\r
                        <screen>OpenSRF C not running</screen>\r
                        <screen>OpenSRF Perl not running</screen>\r
@@ -65,18 +67,18 @@ xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="troubleshooting">
                <indexterm><primary>OpenSRF</primary><secondary>services</secondary><tertiery>perl</tertiery></indexterm>\r
                        <screen><userinput>/openils/bin/osrf_ctl.sh -l -a start_perl</userinput></screen>\r
                        <para>You should see the output similar to the following:</para>\r
-                       <screen>\r
-                       Starting OpenSRF Perl\r
-                       * starting all services for ...\r
-                       * starting service pid=7484 opensrf.settings\r
-                       * starting service pid=7493 open-ils.cat\r
-                       * starting service pid=7495 open-ils.supercat\r
-                       * starting service pid=7497 open-ils.search\r
-                       * starting service pid=7499 open-ils.circ\r
-                       * starting service pid=7501 open-ils.actor\r
-                       * starting service pid=7502 open-ils.storage\r
-                       ...\r
-                       </screen>\r
+<screen>\r
+Starting OpenSRF Perl\r
+* starting all services for ...\r
+* starting service pid=7484 opensrf.settings\r
+* starting service pid=7493 open-ils.cat\r
+* starting service pid=7495 open-ils.supercat\r
+* starting service pid=7497 open-ils.search\r
+* starting service pid=7499 open-ils.circ\r
+* starting service pid=7501 open-ils.actor\r
+* starting service pid=7502 open-ils.storage\r
+...\r
+</screen>\r
                        <para>If the <systemitem class="service">perl</systemitem> services do not start correctly or you receive errors, search for errors \r
                        in the following log files:</para>\r
                        <itemizedlist>  \r
@@ -110,18 +112,18 @@ xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="troubleshooting">
                        <para>As user <systemitem class="username">opensrf</systemitem>, you invoke <command>autogen</command> with the command:</para>\r
                        <screen><userinput>/openils/bin/autogen.sh -c /openils/conf/opensrf_core.xml -u</userinput></screen>\r
                        <para>If Autogen completes successfully, the output will be:</para>\r
-                       <screen>\r
-                       Updating fieldmapper\r
-                       Updating web_fieldmapper\r
-                       Updating OrgTree\r
-                       removing OrgTree from the cache...\r
-                       Updating OrgTree HTML\r
-                       Updating locales selection HTML\r
-                       Updating Search Groups\r
-                       Refreshing proximity of org units\r
-                       Successfully updated the organization proximity\r
-                       Done\r
-                       </screen>\r
+<screen>\r
+Updating fieldmapper\r
+Updating web_fieldmapper\r
+Updating OrgTree\r
+removing OrgTree from the cache...\r
+Updating OrgTree HTML\r
+Updating locales selection HTML\r
+Updating Search Groups\r
+Refreshing proximity of org units\r
+Successfully updated the organization proximity\r
+Done\r
+</screen>\r
                        <para>If Autogen does not complete its task and you receive errors, use \r
                        <command>grep</command> to find errors in the log files:</para>  \r
                        <screen><userinput>grep ERR /openils/var/log/*.log</userinput></screen>\r
@@ -139,31 +141,31 @@ xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="troubleshooting">
                        <para>At the srfsh prompt, enter this command:</para>\r
                        <screen><userinput>login admin open-ils</userinput></screen>\r
                        <para>You should the request verification:</para>\r
-                       <screen>\r
-                       Received Data: "6f63ff5542da1fead4431c6c280efc75"\r
-                       ------------------------------------\r
-                       Request Completed Successfully\r
-                       Request Time in seconds: 0.018414\r
-                       ------------------------------------\r
-                       \r
-                       Received Data: {\r
-                       "ilsevent":0,\r
-                       "textcode":"SUCCESS",\r
-                       "desc":" ",\r
-                       "pid":7793,\r
-                       "stacktrace":"oils_auth.c:312",\r
-                       "payload":{\r
-                       "authtoken":"28804ebf99508496e2a4d2593aaa930e",\r
                       "authtime":420.000000\r
-                       }\r
-                       }\r
-                       \r
-                       ------------------------------------\r
-                       Request Completed Successfully\r
-                       Request Time in seconds: 0.552430\r
-                       ------------------------------------\r
-                       Login Session: 28804.  Session timeout: 420.000\r
-                       srfsh#</screen>        \r
+<screen>\r
+Received Data: "6f63ff5542da1fead4431c6c280efc75"\r
+------------------------------------\r
+Request Completed Successfully\r
+Request Time in seconds: 0.018414\r
+------------------------------------\r
+\r
+Received Data: {\r
+"ilsevent":0,\r
+"textcode":"SUCCESS",\r
+"desc":" ",\r
+"pid":7793,\r
+"stacktrace":"oils_auth.c:312",\r
+"payload":{\r
+"authtoken":"28804ebf99508496e2a4d2593aaa930e",\r
+ "authtime":420.000000\r
+}\r
+}\r
+\r
+------------------------------------\r
+Request Completed Successfully\r
+Request Time in seconds: 0.552430\r
+------------------------------------\r
+Login Session: 28804.  Session timeout: 420.000\r
+srfsh#</screen>        \r
                        <para>If you encounter errors or if you are unable to connect, you should consult the \r
                        <filename>srfsh.log</filename> file. The location of this file is configured in your <indexterm><primary>logs</primary><secondary>srfsh.log</secondary></indexterm>\r
                        <filename>.srfsh.xml</filename> configuration file and is \r
index f2d99dd..2f5b769 100644 (file)
@@ -2,44 +2,42 @@
 <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
+        <title><systemitem class="protocol">SRU</systemitem> and <systemitem class="protocol">Z39.50</systemitem> 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
-    \r
        <section xml:id="Testing_SRU_yaz-client">\r
                <info>\r
-                   <title>Testing SRU with yaz-client</title>\r
+                   <title>Testing SRU with yaz-client</title><indexterm><primary>yaz</primary></indexterm>\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
-                       <note><para>Some older versions of yaz-client have known issues with SRU. Ensure that you are using the latest edition of yaz from \r
+                        <para>yaz-client is installed as a part of Index Data's YAZ software. Recent versions include support for querying <systemitem class="protocol">SRU</systemitem> servers. \r
+                       Evergreen ships an <systemitem class="protocol">SRU</systemitem> configuration <indexterm><primary>SRU</primary></indexterm>\r
+                       that works out of the box. To search Evergreen with yaz-client, choose the <emphasis>GET</emphasis> query method and issue the <command>find</command> command. \r
+                       In the following example, we connect to the Evergreen test server <systemitem class="domainname">dev.gapines.org</systemitem> - substitute this hostname with your own \r
+                       Evergreen server hostname:</para>\r
+                       <note><para>Some older versions of yaz-client have known issues with <systemitem class="protocol">SRU</systemitem>. Ensure that you are using the latest edition of yaz from \r
                        <link xlink:href="http://www.indexdata.com/yaz">http://www.indexdata.com/yaz</link>.</para></note>\r
-                       <screen>$ yaz-client http://dev.gapines.org/opac/extras/sru</screen>\r
-                       <screen>Z> sru GET 1.1</screen>\r
-                       <screen>Z> find hemingway</screen>\r
+                       <screen><userinput>$ yaz-client http://dev.gapines.org/opac/extras/sru</userinput></screen>\r
+                       <screen><prompt>Z></prompt> <userinput>sru GET 1.1</userinput></screen>\r
+                       <screen><prompt>Z></prompt> <userinput>find hemingway</userinput></screen>\r
                        \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>If your database has records that match that term, you will get the corresponding <systemitem>MARCXML</systemitem> records \r
+                       in your response from yaz-client.</para><indexterm><primary>MARCXML</primary></indexterm>\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
+                        <screen><userinput>GET /opac/extras/sru?version=1.1&amp;operation=searchRetrieve&amp;query=hemingway&amp;maximumRecords=0</userinput></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
+                       <systemitem>CQL</systemitem> queries</para>\r
+                        <para>Evergreen supports some <systemitem>CQL</systemitem> <indexterm><primary>CQL</primary></indexterm> index-sets for advanced queries such as a subset of \r
+                       <systemitem>Dublin Core</systemitem> (DC) elements. Those DC elements that are \r
+                       supported map to Evergreen default indexes as follows:</para><indexterm><primary>Dublin Core</primary></indexterm>\r
+                       <informaltable xml:id="dc_elements">    \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
                                </tbody>\r
                        </tgroup>\r
                        </informaltable>\r
-                       <para>Here are a few examples of SRU searches against some of these indexes:</para>\r
+                       <para>Here are a few examples of <systemitem class="protocol">SRU</systemitem> 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
+                   <title>Setting up <systemitem class="protocol">Z39.50</systemitem> server support</title><indexterm><primary>Z39.50</primary></indexterm>\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
+                       <note><para>You must have Evergreen's <systemitem class="protocol">SRU</systemitem> server running before you can enable <systemitem>Z39.50</systemitem> server support.</para>\r
+                       </note>                  \r
+                       <para>This support uses an <systemitem class="protocol">Z39.50</systemitem>-to-<systemitem class="protocol">SRU</systemitem> translator service supplied \r
+                       by the <systemitem>Net::Z3950::Simple2ZOOM</systemitem><indexterm><primary>Simple2ZOOM</primary></indexterm> Perl module to enable Evergreen to act as a <systemitem                            class="protocol">Z39.50</systemitem> server. \r
+                       You could run the <systemitem class="protocol">Z39.50</systemitem> server on a different machine. It just needs to be able to connect to the \r
+                       Evergreen <systemitem class="protocol">SRU</systemitem> server.</para>\r
                        <procedure>\r
-                               <title>Setting up the Z39.50 server</title>\r
+                               <title>Setting up the <systemitem class="protocol">Z39.50</systemitem> 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
+                                       <para>Install <systemitem>Net::Z3950::Simple2ZOOM</systemitem> (<userinput>sudo cpan Net::Z3950::Simple2ZOOM</userinput>)</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
-                                       <programlisting>\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
-                                       </programlisting>\r
+                                       <para>Create a <systemitem class="daemon">Simple2ZOOM</systemitem> configuration file. Something like the following is a good start, and is \r
+                                       based on the <systemitem class="daemon">Simple2ZOOM</systemitem> \r
+                                       documentation example. We'll name the file <filename>dgo.conf</filename> for our example:</para>        \r
+<programlisting>\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
+</programlisting>\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
+                                       the &lt;database&gt; element is used in your <systemitem class="protocol">Z39.50</systemitem> connection string to name the database. The \r
+                                       <systemitem>&lt;zurl&gt;</systemitem>  element must point to \r
+                                       <uri>http://hostname/opac/extras/sru</uri>. 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
+                                       could be <uri>http://dev.gapines.org/opac/extras/sru/BR1/holdings</uri> to limit the search scope to <emphasis role="bold">BR1</emphasis> 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
-                                       <programlisting>\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
-                                       </programlisting>\r
+                                       <para>Run <systemitem class="daemon">simple2ZOOM</systemitem> as a daemon, specifying the configuration files and one or more listener addresses that the \r
+                                       <systemitem class="protocol">Z39.50</systemitem> server will\r
+                                        be accessible on. If you do not specify a port, it will automatically run on port <systemitem>9999</systemitem>. In the following example, \r
+                                       we tell it to listen both to localhost on port <systemitem>2210</systemitem>, and on <systemitem class="domainname">dev.gapines.org</systemitem> \r
+                                       n port <systemitem>210</systemitem>:</para>\r
+<programlisting>\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
+</programlisting>\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
+                                       <para>Run <systemitem class="daemon">simple2ZOOM</systemitem> as a daemon, specifying the configuration files and one or more listener addresses that \r
+                                       the <systemitem class="protocol">Z39.50</systemitem> server will be accessible on. \r
+                                       If you do not specify a port, it will automatically run on port <systemitem>9999</systemitem>. In the following example, we tell it to listen both to localhost on                                              port 2210, and on dev.gapines.org on port <systemitem>210</systemitem>:</para>\r
+                                       <screen><userinput>simple2zoom -c dgo.conf -- -f xml2marc-yaz.cfg localhost:2210 dev.gapines.org:210</userinput></screen>\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
+                       <para>To test the <systemitem class="protocol">Z39.50</systemitem> server, we can use <application>yaz-client</application> 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