33f6f6e264730a6668f0f654970e75d19dfd1653
[working/Evergreen.git] / 1.6 / admin / AdminMisc.xml
1 <?xml version='1.0' encoding='UTF-8'?>\r
2 <chapter xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"\r
3             xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:id="adminmisc">\r
4         <info>\r
5                 \r
6         <title>Server Operations and Maintenance</title>\r
7                 <abstract>\r
8                         <para>This chapter deals with basic server operations such as starting and stopping <application>Evergreen</application> as well wall \r
9                         security, backing up and troubleshooting <application>Evergreen</application>.</para>\r
10                 </abstract>\r
11         </info>    \r
12         <section xml:id="startingopensrf">\r
13                 <title>Starting, Stopping and Restarting</title>\r
14                 <para>Occasionally, you may need to restart <application>Evergreen</application>. It is imperative that you understand the basic \r
15                 commands to stop and start the <application>Evergreen</application> server. You can start and stop <application>Evergreen</application> from the command line of \r
16                 the server using the <command>osrf_ctl.sh</command> script located in the \r
17                 <filename class="directory">openils/bin</filename> directory.</para>   \r
18                 <note><para><command>The osrf_ctl.sh</command> command must be run as the <systemitem class="username">opensrf</systemitem> user.</para></note>\r
19                 <para>To view help on <command>osrf_ctl.sh</command> and get all of its options, run:</para>\r
20                 <screen><userinput>osrf_ctl.sh -h</userinput></screen>\r
21                 <para>To start Evergreen, run:</para>\r
22                 <screen><userinput>osrf_ctl.sh -l -a start_all</userinput></screen>\r
23                 <para>The <option>-l</option> flag is used to indicate that Evergreen is configured to use <systemitem class="domainname">localhost</systemitem> as \r
24                 the host. If you have configured <filename>opensrf.xml</filename> to use your real hostname, do not use the <option>-l</option> flag. The <option>-a</option> \r
25                 option is required and indicates the <emphasis>action</emphasis> of the command. In this case \r
26                 <option>start_all</option>.    \r
27                 </para> \r
28                 <note>\r
29                         <para>If you receive the error message: <errortext>osrf_ctl.sh: command not found</errortext>, then your environment variable \r
30                         <varname>PATH</varname><indexterm><primary>environment variable</primary><secondary>PATH</secondary></indexterm> does not include the \r
31                         <filename class="directory">/openils/bin</filename> directory. You can set it using the following command:</para>\r
32                         <screen><userinput>export <varname>PATH</varname>=$PATH:<filename class="directory">/openils/bin</filename></userinput></screen>\r
33                         <para>If you receive the error message <errortext>Can't locate OpenSRF/System.pm in @INC … BEGIN \r
34                         failed–compilation aborted</errortext>, then your environment variable <varname>PERL5LIB</varname><indexterm><primary>environment \r
35                         variable</primary><secondary>PERL5LIB</secondary></indexterm> does not \r
36                         include the <filename class="directory">/openils/lib/perl5</filename> directory.  You can set it \r
37                         using the following command:</para>\r
38                         <screen><userinput>export <varname>PERL5LIB</varname>=$PERL5LIB:<filename class="directory">/openils/lib/perl5</filename></userinput></screen>\r
39                 </note>         \r
40                 <para>It is also possible to start a specific service. For example:</para>\r
41                 <screen><userinput>osrf_ctl.sh -l -a start_router</userinput></screen>\r
42                 <para>will only start the <systemitem class="service">router</systemitem> service.</para>\r
43                 <caution>\r
44                         <para>If you decide to start each service individually, you need to start them in a specific order \r
45                         for Evergreen to start correctly. Run the commands in this exact order:</para>\r
46                         <screen><userinput>osrf_ctl.sh -l -a start_router</userinput></screen>\r
47                         <screen><userinput>osrf_ctl.sh -l -a start_perl</userinput></screen>\r
48                         <screen><userinput>osrf_ctl.sh -l -a start_c</userinput></screen>\r
49                 </caution>      \r
50                 <para>After starting or restarting Evergreen, it is also necessary to restart the <systemitem class="service">Apache web server</systemitem>\r
51                 <indexterm><primary>web server</primary><secondary>Apache</secondary></indexterm> for the OPAC to work correctly.</para>  \r
52                 <para>To stop <application>Evergreen</application>, run:</para>\r
53                 <screen><userinput>osrf_ctl.sh -l -a stop_all</userinput></screen>\r
54                 <para>As with starting, you can choose to stop one service</para>\r
55                 <para>To restart <application>Evergreen</application>, run:</para>\r
56                 <screen><userinput>osrf_ctl.sh -l -a restart_all</userinput></screen>\r
57         </section>\r
58         <section xml:id="backingup">\r
59                 <title>Backing Up</title>\r
60                 <para>Backing up your system files and data is a critical task for server and database administrators. \r
61                 Having a strategy for backing up and recovery could be the difference between a minor annoyance for users and\r
62                 a complete catastrophe.</para>   \r
63                 <simplesect>\r
64                         <title>Backing up the <application>Evergreen</application> Database</title><indexterm><primary>databases</primary></indexterm>\r
65                         <para>Most of the critical data for an <application>Evergreen</application> system – patrons, bibliographic records, holdings, \r
66                         transactions, bills – is stored in the <application>PostgreSQL</application><indexterm><primary>databases</primary>\r
67                         <secondary>PostgreSQL</secondary></indexterm>  database. You can therefore use normal \r
68                         <application>PostgreSQL</application> backup procedures to backup this data. For example, the simplest method of backing up the Evergreen\r
69                         database is to use the <command>pg_dump</command> command to create a live backup of the database without having to \r
70                         interrupt any Evergreen services:</para>\r
71                         <screen><userinput># pg_dump -U [username] -h [hostname] -f [output-file] [database-name]</userinput></screen> \r
72                         <screen><userinput>pg_dump -U evergreen -h localhost -f evergreen_db.backup evergreen</userinput></screen>\r
73                         <para>To restore the backed up database into a new database, create a new database using the \r
74                         template0 database template and the UTF8 encoding, and run the <command>psql</command> command, specifying the new \r
75                         database as your target:</para>\r
76                         <screen><userinput>createdb -T template0 -E UTF8 -U evergreen -h localhost new_evergreen</userinput></screen>\r
77                         <screen><userinput>psql -U evergreen -h localhost -f evergreen_db.backup new_evergreen</userinput></screen>\r
78                         <note>\r
79                                 <para>This method of backup is only suitable for small Evergreen instances. Larger sites \r
80                                 should consider implementing continuous archiving (also known as <quote>log shipping</quote>) to provide \r
81                                 more granular backups with lower system overhead. More information on backing up <application>PostgreSQL</application> \r
82                                 databases can be found in the official <link xl:href="http://www.postgresql.org/docs/"><application>PostgreSQL</application> documentation</link>.</para>\r
83                         </note>\r
84                 </simplesect>\r
85                 <simplesect>\r
86                         <title>Backing up Evergreen Files</title>\r
87                         <para>When you deploy Evergreen, you will probably customize many aspects of your system including \r
88                         the system configuration files, <application>Apache</application> configuration files, OPAC and Staff Client. In order to \r
89                         protect your investment of time, you should carefully consider the best approach to backing up \r
90                         files.</para>\r
91                         <para>There are a number of ways of tackling this problem. You could create a script that regularly \r
92                         creates a time-stamped tarball of all of these files and copies it to a remote server - but that \r
93                         would build up over time to hundreds of files. You could use <link xl:href="http://www.samba.org/rsync/"><application>rsync</application></link>\r
94                         <indexterm><primary>rsync</primary></indexterm> to ensure that the files of \r
95                         interest are regularly updated on a remote server - but then you would lose track of the changes to \r
96                         the files, should you make a change that introduces a problem down the road.</para>\r
97                         <para>Perhaps one of the best options is to use a version control system like <link xl:href="http://bazaar.canonical.com">\r
98                         <application>Bazaar</application></link><indexterm><primary>Version Control System</primary><secondary>Subversion</secondary></indexterm>, \r
99                         <link xl:href="http://git-scm.com/"><application>git</application></link><indexterm><primary>Version Control System</primary><secondary>git</secondary></indexterm> \r
100                         or <link xl:href="http://subversion.apache.org/"><application>Subversion</application></link><indexterm><primary>Version Control System</primary>\r
101                         <secondary>Subversion</secondary></indexterm> to regularly push updates of the files you care about to a repository on a \r
102                         remote server. This gives you the advantage of quickly being able to run through the history of the \r
103                         changes you made, with a commenting system that reminds you why each change was made, combined with \r
104                         remote storage of the pertinent files in case of disaster on site. In addition, your team can create \r
105                         local copies of the repository and test their own changes in isolation from the production \r
106                         system. Using a version control system also helps to recover system customizations after an \r
107                         upgrade.</para>\r
108                 </simplesect>\r
109                 <simplesect>\r
110                         <title>Full System Backup</title>\r
111                         <para>A full system backup archives every file on the file system. Some basic methods require you \r
112                         to shut down most system processes; other methods can use mirrored RAID<indexterm><primary>RAID</primary></indexterm> setups or \r
113                         SAN<indexterm><primary>SAN</primary></indexterm> storage to \r
114                         take <quote>snapshot</quote> backups of your full system while the system continues to run. The subject of how \r
115                         to implement full system backups is beyond the scope of this documentation.</para>\r
116                 </simplesect>\r
117         </section>\r
118         <section xml:id="security">\r
119                 <title>Security</title>\r
120                 <para>As with an ILS and resource accessible from the world wide web careful consideration needs to be \r
121                 given to the security of your <application>Evergreen</application> servers and database. While it is impossible to cover all aspects \r
122                 of security, it is important to take several precautions when setting up production <application>Evergreen</application> site.</para>\r
123                 <orderedlist>\r
124                         <listitem>\r
125                                 <para>Change the Evergreen <systemitem class="username">admin</systemitem> password and keep it secure. The \r
126                                 default admin password is known by anyone who has installed <application>Evergreen</application>. It is not a secret \r
127                                 and needs to be changed by the Administrator. It should also only be shared by those who \r
128                                 need the highest level of access to your system.</para>\r
129                         </listitem>\r
130                         <listitem>\r
131                                 <para>Create strong passwords using a combination of numerical and alphabetical characters \r
132                                 for all of the Administrative passwords including the <systemitem class="username">postgres</systemitem> and \r
133                                 <systemitem class="username">opensrf</systemitem> users</para>     \r
134                         </listitem>\r
135                         <listitem>\r
136                                 <para>Open ports in the firewall<indexterm><primary>firewall</primary></indexterm>  with caution - It is necessary to open some ports to the \r
137                                 server such as port 80 for <systemitem class="protocal">http</systemitem> <indexterm><primary>HTTP</primary></indexterm> and  443 \r
138                                 for <systemitem class="protocal">ssl</systemitem><indexterm><primary>SSL</primary></indexterm> , and it can be helpful to open ports for \r
139                                 remote access to the database or staff client. It is also critical for administrators to \r
140                                 understand the concepts of network security and take precautions to minimize vulnerabilities. \r
141                                 </para>\r
142                         </listitem>\r
143                         <listitem>\r
144                                 <para>Use permissions <indexterm><primary>permissions</primary></indexterm> and permission groups wisely - it is important to understand the \r
145                                 purpose of the permissions and to only give users the level of access that they require.\r
146                                 </para> \r
147                         </listitem>\r
148                                         </orderedlist>  \r
149         </section>\r
150         <section xml:id="logfiles">\r
151                 <title>Managing Log Files</title>\r
152                 <para><application>Evergreen</application> comes with a sophisticated logging system, but it is important to manage the <application>OpenSRF</application> \r
153                 and <application>Evergreen</application> logs. This section will provide a couple of log management techniques and tools.</para>        \r
154                 <simplesect>\r
155                         <title>Using the Log Rotate<indexterm><primary>logrotate</primary></indexterm> Utility to Manage Log Size</title> \r
156                          <para>Fortunately, this is not a new problem for <systemitem class="osname">Unix</systemitem> administrators, and there are a number of ways of keeping your logs under control. \r
157                         On <systemitem class="osname">Debian</systemitem> and <systemitem class="osname">Ubuntu</systemitem>, for example, \r
158                         the <systemitem class="service">logrotate</systemitem> utility controls when old log files are compressed and a new log file is started. \r
159                         <systemitem class="service">logrotate</systemitem> runs once a day and checks all log files that it knows about to see if a \r
160                         threshold of time or size has been reached and rotates the log files if a threshold condition has been met.</para>\r
161                         <para>To teach <systemitem class="service">logrotate</systemitem> to rotate Evergreen logs on a weekly basis, or if they are > 50MB in size, \r
162                         create a new file <filename>/etc/logrotate.d/evergreen</filename> with the following contents: </para>\r
163 <programlisting>\r
164 compress\r
165 /openils/var/log/*.log {\r
166 # keep the last 4 archived log files along with the current log file\r
167  # log log.1.gz log.2.gz log.3.gz log.4.gz\r
168  # and delete the oldest log file (what would have been log.5.gz)\r
169 rotate 5\r
170 # if the log file is > 50MB in size, rotate it immediately\r
171 size 50M\r
172  # for those logs that don't grow fast, rotate them weekly anyway\r
173   weekly\r
174 }\r
175 </programlisting>\r
176                 </simplesect>\r
177                 <simplesect>\r
178                         <title>Changing Logging Level for <application>Evergreen</application></title>\r
179                         <para>Change the Log Levels in your config files. Changing the level of logging will help \r
180                         narrow down errors.</para> \r
181                         <tip>\r
182                                 <para>A high logging level is not wise to do in a production environment since  it \r
183                                 will produce vastly larger log files and thus reduce server performance.</para>\r
184                         </tip>\r
185                         <para>Change logging levels by editing the configuration file \r
186                         <filename>/openils/conf/opensrf_core.xml</filename><indexterm><primary>configuration files</primary><secondary>opensrf_core.xml</secondary></indexterm></para>\r
187                         <para>you will want to search for lines containing &lt;loglevel&gt;.</para>\r
188                         <para> the default setting for loglevel is 3 which will log <emphasis>errors</emphasis>, \r
189                         <emphasis>warnings</emphasis> and <emphasis>information</emphasis>.</para>\r
190                         <para>The next level is 4 which is for debugging and provides additional information \r
191                         helpful for the debugging process.</para>\r
192                         <para>Thus, lines with:</para>\r
193                         <programlisting>&lt;loglevel&gt;3&lt;/loglevel&gt;</programlisting>\r
194                         <para>Should be changed to:</para>\r
195                         <programlisting>&lt;loglevel&gt;4&lt;/loglevel&gt;</programlisting>\r
196                         <para>to allow debugging level logging</para>\r
197                         <para>Other logging levels include <emphasis>0</emphasis> for no logging, \r
198                         <emphasis>1</emphasis> for logging errors and <emphasis>2</emphasis> for logging warnings \r
199                         and errors.</para>\r
200                 </simplesect>\r
201         </section>\r
202 </chapter>\r