root / pykota / trunk / docs / installation.sgml @ 2361

Revision 2361, 39.0 kB (checked in by jerome, 19 years ago)

Additionnal notes for LDAP
Severity: minor

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1<!-- $Id$ -->
2
3<chapter>
4  <title id="installation">Installation</title>
5 
6  <para>Last modified on $Date$</para>
7 
8  <para>
9    Before being able to use <application>PyKota</application>, you have of course to
10    install it first. But before installing, you must carefully plan your installation.
11  </para>
12 
13  <para>
14    First you have to determine which machine will be the <application>PyKota</application>
15    <firstterm>Storage Server</firstterm>. The Storage Server is the host responsible
16    for keeping a centralized database of print usage for all your printers, users and groups.
17  </para>
18 
19  <para>
20    Then you have to list all the <firstterm>Print Servers</firstterm> for which
21    you plan to use <firstterm>print quota</firstterm> facilities.
22  </para>
23 
24  <para>
25    Finally you have to download <application>PyKota</application>'s latest version
26    or buy an official package, from
27    <ulink url="http://www.librelogiciel.com/software/">http://www.librelogiciel.com/software/</ulink>.
28    If you've just bought an official package, then as soon as you've receive it you
29    have to decompress and visit its archive, to do so just type the following commands :
30    <screen>
31jerome@nordine:~$ tar -zxf pykota-1.22_official.tar.gz   
32jerome@nordine:~$ cd pykota-1.22_official
33jerome@nordine:~/pykota-1.22_official$
34    </screen>
35  </para>
36 
37  <para>
38    You can see many files in this directory, the first ones to read are <filename>README</filename>,
39    then <filename>COPYING</filename> and <filename>LICENSE</filename>. They will give you
40    basic installation instructions and explain the licensing terms under which
41    <application>PyKota</application> is distributed. Of course they are also mostly
42    boring to read ! Detailed installation and operating instructions are defined
43    in the <filename>./docs</filename> directory, in the form of <acronym>SGML</acronym>
44    documentation in the <ulink url="http://www.docbook.org">DocBook</ulink> format.
45    You have to compile these files into readable documentation like the <acronym>HTML</acronym>
46    or <acronym>PDF</acronym> formats, or buy an official <application>PyKota</application> package
47    which already contains these compiled forms of the documentation. Of course you already
48    know this because that's what you are currently reading !
49  </para>
50 
51  <para>
52    Now we will see what has to be done on each of the servers we are planning to use.
53    <note>
54      <title>Note</title>
55      <para>
56        Of course, depending on the size of your network, you may very well
57        use the same machine as both a Print Server and a Storage Server.
58        This is especially the case if you've got only one server.
59      </para>
60    </note> 
61  </para>
62 
63  <sect1>
64    <title>Storage Server Installation</title>
65   
66    <para>
67      Depending on <application>PyKota</application>'s version number, different
68      types of storage backends may be supported, so we will see for each one of
69      them how to configure it.
70    </para>
71   
72    <sect2>
73      <title>PostgreSQL</title>
74     
75      <para>
76        <application>PostgreSQL</application> is an <firstterm>Object Relationnal DataBase
77        Management System</firstterm> distributed under a <firstterm>Free Software</firstterm>
78        license from the
79        <ulink url="http://www.postgresql.org">http://www.postgresql.org</ulink>
80        web site. It certainely is the free <acronym>RDBMS</acronym> which has the most advanced
81        features, and is widely used all over the world.
82      </para>
83     
84      <para>
85        To configure your Storage Server, you must have PostgreSQL already working.
86        The complete installation of <application>PostgreSQL</application> is not covered by
87        the present manual, please refer to your system's documentation or to
88        <ulink url="http://www.postgresql.org">http://www.postgresql.org</ulink> for
89        details.
90      </para>
91     
92      <para>
93        One thing you have to check, though, is that every Print Server on which you
94        want to install the print quota mechanism, must be able to connect to the
95        <application>PostgreSQL</application> server. In the default installation of
96        <application>PostgreSQL</application> this may not be the case for security reasons, except if both
97        servers are in fact the same machine. In any case, it is recommended that you
98        check the <filename>/etc/postgresql/pg_hba.conf</filename> file and modify it if
99        needed. This file is self documented and its modification is straightforward.
100        You also have to make sure that <application>PostgreSQL</application> accepts <acronym>TCP/IP</acronym> connections.
101        To do so you either have to launch it with the <option>-i</option> option or
102        modify the <filename>/etc/postgresql/postgresql.conf</filename> file, which is
103        self documented and easy to modify too. Allowing <acronym>TCP/IP</acronym> connections
104        is not necessary though if your Quota Storage Server and your Print Server are
105        the very same host.
106      </para> 
107     
108      <para>
109        Here's an excerpt from a <filename>pg_hba.conf</filename> file. This one rejects all
110        connections to PyKota's database excepted when made from the same host by <application>PostgreSQL</application> users
111        <literal>pykotauser</literal> or <literal>pykotaadmin</literal> with the correct password.
112<screen>        
113        local all    postgres                              ident sameuser
114        local all    all                                   reject
115        host  pykota pykotauser  127.0.0.1 255.255.255.255 crypt
116        host  pykota pykotaadmin 127.0.0.1 255.255.255.255 crypt
117        host  pykota all         127.0.0.1 255.255.255.255 reject
118</screen>
119     </para>
120     
121     <para>
122        Of course if your print server and your database servers have different <acronym>IP</acronym>
123        addresses, you have to replace the <literal>127.0.0.1</literal> address above with your print
124        server's <acronym>IP</acronym> address. As an alternative, you could still keep these
125        lines and add similar lines with other <acronym>IP</acronym> addresses if you have several
126        print servers for which you want a single centralized database.
127        <tip>
128          <title>Tip</title>
129          <para>
130            Don't forget to restart <application>PostgreSQL</application> if you modify
131            any of its configuration files, in order for the changes to take effect.
132          </para>
133        </tip> 
134      </para>
135     
136      <para>
137        Be careful, you may be unable to connect from a Print Server to the <application>PostgreSQL</application>
138        server even if the configuration is correct. Sometimes your connections may be blocked by
139        one or more network firewalls along the route from one machine to the other. If this
140        is the case, then the best thing you can do is to ask your <firstterm>Network Administrator</firstterm>
141        to not filter the IP port used by <application>PostgreSQL</application>, which is
142        usually port <literal>5432/tcp</literal>.
143        <note>
144          <title>Note</title>
145          <para>
146            The TCP/IP network port used by PostgreSQL may be different. When in doubt, ask your
147            <firstterm>System Administrator</firstterm> for the correct value.
148          </para>
149        </note> 
150      </para>
151     
152      <para>
153        Now that your <application>PostgreSQL</application> server is up and running, and
154        is waiting for your connections, you have to create the Quota Storage DataBase.
155        To do so, you'll have to feed <application>PostgreSQL</application> with the
156        <filename>pykota-1.22/initscripts/postgresql/pykota-postgresql.sql</filename> file.
157        This file will create a Quota DataBase administrator in the <application>PostgreSQL</application> system, then create an empty
158        Quota DataBase and set some permissions on it. The Quota DataBase administrator
159        is the <application>PostgreSQL</application>'s user used to manage the Quota database.
160        The Quota DataBase Administrator is not present in the Quota Database
161        itself, he is only defined in <application>PostgreSQL</application> and don't
162        have to exist on any system, nor in the Quota DataBase. His default name
163        is <literal>pykotaadmin</literal>.
164        A Quota Storage read-only user is also created under the name of <literal>pykotauser</literal>.
165        This read-only user is used by <application>PyKota</application> to connect to the
166        Quota Storage when an user who is not a <application>PyKota</application> administrator
167        <footnote><para>a <application>PyKota</application> administrator is an user who can read the <filename>~pykota/pykotadmin.conf</filename> file.</para></footnote>
168        launches a pykota command. This prevents normal
169        users from being able to modify their own, or other users', quota information.
170        The database which will be created will be named <literal>pykota</literal> by default.
171        <note>
172          <title>Note</title>
173          <para>
174            You can choose other names if you want, just modify the
175            <filename>initscripts/postgresql/pykota-postgresql.sql</filename> file
176            accordingly, and report your changes into <application>PyKota</application>'s
177            configuration files.
178          </para>
179        </note> 
180      </para>
181     
182      <para>
183        To run this script, you can use the <command>psql</command> frontend to
184        <application>PostgreSQL</application>, but your priviledges must be sufficient
185        to be allowed to create users and databases. You can launch <command>psql</command>
186        as the <literal>postgres</literal> user which is <application>PostgreSQL</application>'s
187        default administrator, and connect to the default database named <literal>template1</literal>.
188        From a command line interpreter (i.e. shell), type the following commands :
189        <screen>
190jerome@nordine:~$ cd pykota-1.22_official/initscripts/postgresql
191jerome@nordine:~/pykota-1.22_official/initscripts$ psql -h localhost -U postgres template1
192Welcome to psql, the PostgreSQL interactive terminal.
193
194Type:  \copyright for distribution terms
195       \h for help with SQL commands
196       \? for help on internal slash commands
197       \g or terminate with semicolon to execute query
198       \q to quit
199
200template1=# \i pykota-postgresql.sql
201            ... a lot of output lines
202pykota=#       
203        </screen>
204        <note>
205          <title>Note</title>
206          <para>
207            If you use RPM or DEB packages, usually the
208            <filename>pykota-postgresql.sql</filename> file gets installed into the
209            <filename>/usr/share/pykota/postgresql</filename> directory, along
210            with a README file.
211          </para>
212        </note> 
213      </para>
214     
215      <para>
216        For security reasons, you may want to set passwords in
217        <application>PostgreSQL</application> for the
218        <literal>pykotaadmin</literal> and <literal>pykotauser</literal> users.
219        Otherwise any user able to connect to
220        <application>PostgreSQL</application> on your Quota Storage Server
221        could connect to the quota database, and either see it, or even modify it without problem.
222      </para>
223     
224      <para>
225        To do so, just type the following lines while still being at the <command>psql</command>
226        prompt (replace the password values by your own, and do the same for the <literal>pykotauser</literal> user) :
227        <screen>
228pykota=# ALTER USER pykotaadmin PASSWORD 'somepassword';
229ALTER USER
230pykota=# \q
231jerome@nordine:~/pykota-1.22_official/initscripts/postgresql$
232        </screen>
233      </para>
234     
235      <para>
236        The <literal>\q</literal> command above will quit the <command>psql</command>
237        program and return you to the shell's command line prompt.
238      </para>
239     
240      <para>
241        To improve security further, you could encrypt your database connections, or
242        take any other step as needed. Please refer to <application>PostgreSQL</application>'s
243        documentation for details.
244        <warning>
245          <title>Warning</title>
246          <para>
247            Defining passwords may not be sufficient if your database access rule is
248            set to <literal>trust</literal> in the <filename>/etc/postgresql/pg_hba.conf</filename>.
249            Again, please refer to <application>PostgreSQL</application>'s documentation
250            for details. Also, passwords will fly unencrypted over the network by default,
251            so be sure to take any necessary step to secure your database server from
252            unauthorized use. This has nothing to do with <application>PyKota</application>
253            though, it is just a general rule to keep in mind.
254          </para>
255        </warning> 
256      </para>
257     
258      <para>
259        If no error occured, then your Quota DataBase is ready to be used.
260        Now you can let the Quota Storage Server alone, the remaining work
261        will have to be done on each one of the print servers which will
262        use this particular Quota Storage Server.
263        <tip>
264          <title>Tip</title>
265          <para>
266            If an error occured, maybe your PostgreSQL version is too old, or
267            an unexpected problem (like a bug) happened. Please contact us via email so that we
268            can try to fix the problem. Thanks in advance.
269          </para>
270        </tip> 
271      </para>
272     
273    </sect2> 
274   
275    <sect2>
276      <title>LDAP</title>
277     
278      <para>
279        Any <acronym>LDAP</acronym> server, and particularly <application>OpenLDAP</application>, can be used
280        as a Quota Storage Backend.
281        Some other LDAP servers can be used, but this is currently untested in production.
282      </para>
283     
284      <para>
285        <application>OpenLDAP</application> is a Lightweight Directory Access Protocol server
286        implementation published as Free Software.
287        You can download it from <ulink url="http://www.openldap.org">http://www.openldap.org</ulink>.
288      </para>
289     
290      <para>
291        To use <application>OpenLDAP</application> as your Quota Storage Backend, you have to copy the
292        <filename>pykota/initscripts/ldap/pykota.schema</filename> into <application>OpenLDAP</application>'s
293        schemas directory.
294        Under Debian GNU/Linux, this is something like :
295        <screen>       
296$ cp pykota.schema /etc/ldap/schema
297        </screen>
298        <note>
299          <title>Note</title>
300          <para>
301            If you use RPM or DEB packages, the
302            <filename>pykota.schema</filename> file is usually installed into the
303            <filename>/usr/share/pykota/ldap</filename> directory, along
304            with a README file, and may also be installed automatically in
305            your <acronym>LDAP</acronym> server's schemas directory.
306          </para>
307        </note> 
308     </para>
309     <para>   
310       Then edit <filename>/etc/ldap/slapd.conf</filename> and add a line to   
311       include the PyKota schema. You should have something
312       like :
313       <screen>   
314# Schema and objectClass definitions
315include         /etc/ldap/schema/core.schema
316include         /etc/ldap/schema/cosine.schema
317include         /etc/ldap/schema/nis.schema
318include         /etc/ldap/schema/inetorgperson.schema
319include         /etc/ldap/schema/pykota.schema
320        </screen>       
321      </para>
322     
323      <para>
324        While this is not mandatory, it is recommended that you setup
325        some indexes for some often accessed PyKota attributes.
326        Here are the minimal indexes
327        lines you may want to put in <filename>slapd.conf</filename> :
328        <screen>
329# Indexes for PyKota
330index pykotaUserName pres,eq,sub
331index pykotaGroupName pres,eq,sub
332index pykotaPrinterName pres,eq,sub
333index pykotaBillingCode pres,eq,sub
334index pykotaLastJobIdent eq
335        </screen>
336      </para>
337     
338      <para>
339        Now you must ensure that the DNs you'll use to bind to   
340        your OpenLDAP server don't have search queries size limits,
341        which gives for example (OpenLDAP 2.1.x or above) :
342       
343<screen>        
344# No Limits for PyKota's administrator and read-only user
345limits dn="cn=RWadmin,dc=example,dc=com" size.soft=-1 size.hard=soft
346limits dn="cn=ROadmin,dc=example,dc=com" size.soft=-1 size.hard=soft
347</screen>       
348
349        Where RWadmin and ROadmin are the usernames used to bind to your
350        OpenLDAP server within PyKota, respectively in ReadWrite mode
351        (as set in pykotadmin.conf) and in ReadOnly mode (as set in pykota.conf).
352      </para>
353     
354      <para>
355        Finally, restart the <application>OpenLDAP</application> server :   
356        <screen>   
357$ /etc/init.d/slapd restart
358        </screen>
359      </para>
360     
361      <para>
362        With an <acronym>LDAP</acronym> backend, PyKota will need some branches
363        in your <acronym>LDAP</acronym> directory to put its own datas.
364        You can configure PyKota to either attach its datas to your existing
365        users and groups, or to put them in their own <literal>ou</literal>.
366        But some <literal>ou</literal>s dedicated to PyKota are needed in any case,
367        so the best bet may be to put all PyKota's datas below an <literal>ou=PyKota</literal>
368        branch. While this will separate these datas from your existing users and groups
369        entries, this may ease the maintainance.
370      </para>
371     
372      <para>
373        PyKota needs at least an <literal>ou</literal> for printers, for users quotas, for
374        groups quotas, for print jobs, for billing codes, and for pointers to the last job of each printer.
375        In the future, this last <literal>ou</literal> may disappear as its content
376        will probably be attached to each printer.
377      </para>
378     
379      <para>
380        Actually PyKota doesn't create these <literal>ou</literal>s for you, because it's
381        difficult to guess what is the best configuration for you. So you have to
382        create them by yourself, either directly with a text editor and the
383        <command>ldapadd</command> command, or with some specialized tool
384        like <command>gq</command>. You can look at the <filename>initscripts/ldap/pykota-sample.ldif</filename>
385        file to see which minimal branches are necessary.
386        <note>
387          <title>Note</title>
388          <para>
389            If you use RPM or DEB packages, usually the
390            <filename>pykota-sample.ldif</filename> file is installed into the
391            <filename>/usr/share/pykota/ldap</filename> directory, along
392            with a README file.
393          </para>
394        </note> 
395      </para>
396     
397      <para>
398        If no error occured, then your Quota DataBase is ready to be used.
399        Now you can let the Quota Storage Server alone, the remaining work
400        will have to be done on each one of the print servers which will
401        use this particular Quota Storage Server.
402        <tip>
403          <title>Tip</title>
404          <para>
405            If an error occured, maybe your OpenLDAP version is too old, or
406            an unexpected problem (like a bug) happened. Please contact us via email so that we
407            can try to fix the problem. Thanks in advance.
408          </para>
409        </tip> 
410      </para>
411    </sect2> 
412   
413    <sect2>
414      <title>MySQL</title>
415     
416      <para>
417        A <application>MySQL</application> Storage Backend is planned, but it actually
418        doesn't exist.
419      </para>
420    </sect2> 
421   
422    <sect2>
423      <title>Berkeley DB</title>
424     
425      <para>
426        A <application>Berkeley DB</application> Storage Backend is planned, but it actually
427        doesn't exist. It seems that remote storage won't be possible with such a backend,
428        so in other terms this means that you will have a different quota database on
429        each print server. This may still prove to be useful for small configurations.
430      </para>
431    </sect2> 
432  </sect1> 
433 
434  <sect1>
435    <title>Print Server Installation</title>
436   
437    <para>
438      For each Print Server on which you plan to implement the print quota
439      mechanism, you have, of course, to have an already working printing environment.
440      Currently <application>PyKota</application> works with either
441      <ulink url="http://www.cups.org"><application>CUPS</application></ulink>
442      or <ulink url="http://lprng.sourceforge.net"><application>LPRng</application></ulink>,
443      but more printing systems may be added in the future.
444    </para>
445   
446    <para>
447      Here's the list of software you have to install on each Print Server, version numbers
448      are given as an indication of which was successfully tested, but older versions may
449      work too.
450      <itemizedlist>
451        <listitem>
452          <para>
453            <application>CUPS</application> version 1.1.14 or above, or <application>LPRng</application>
454            version 3.8.27 or above (it probably works with older versions but this is untested).
455            You can download them from <ulink url="http://www.cups.org">http://www.cups.org</ulink>
456            or <ulink url="http://lprng.sourceforge.net">http://lprng.sourceforge.net</ulink>
457          </para>
458        </listitem> 
459        <listitem>
460          <para>
461            <application>Python</application> version 2.1 or above.
462            You can download it from <ulink url="http://www.python.org">http://www.python.org</ulink>.
463            While <application>PyKota</application> itself will try to preserve compatibility
464            with <application>Python</application> version 2.1 for the near future, some <application>Python</application>
465            modules which are needed by <application>PyKota</application> may mandate the use of a more recent version
466            of this language.
467          </para>
468        </listitem> 
469        <listitem>
470          <para>
471            Quota Storage client libraries, depending on your Quota Storage Backend :
472            <itemizedlist>
473              <listitem>
474                <para>
475                  PostgreSQL backend :
476                  <itemizedlist>
477                    <listitem>
478                      <para>
479                        <application>PostgreSQL</application> client libraries. They must match the <application>PostgreSQL</application>
480                        version used on your Quota Storage Server.
481                      </para>
482                    </listitem> 
483                    <listitem>
484                      <para>
485                        The <application>PygreSQL</application> python module.
486                        It must have been compiled against the same
487                        <application>PostgreSQL</application> client libraries.
488                        <application>PygreSQL</application> is normally included in
489                        <application>PostgreSQL</application>, but you may want to
490                        download it from <ulink url="http://www.pygresql.org">http://www.pygresql.org</ulink>
491                      </para>
492                    </listitem> 
493                  </itemizedlist> 
494                </para>
495              </listitem> 
496              <listitem>
497                <para>
498                  OpenLDAP backend :
499                  <itemizedlist>
500                    <listitem>
501                      <para>
502                        <application>OpenLDAP</application> client libraries. They must match
503                        the <application>OpenLDAP</application> version used on your Quota Storage Server.
504                      </para>
505                    </listitem> 
506                    <listitem>
507                      <para>
508                        The <application>Python-LDAP</application> python module.
509                        It must have been compiled against the same
510                        <application>OpenLDAP</application> client libraries.
511                        You may download this module from <ulink url="http://python-ldap.sourceforge.net">http://python-ldap.sourceforge.net</ulink>
512                      </para>
513                    </listitem> 
514                  </itemizedlist>
515                </para>
516              </listitem>
517              <listitem>
518                <para>
519                  MySQL backend : TODO
520                </para>
521              </listitem>
522              <listitem>
523                <para>
524                  Berkeley DB backend : TODO
525                </para>
526              </listitem>
527            </itemizedlist> 
528          </para>
529        </listitem> 
530        <listitem>
531          <para>
532            <application>ucd-snmp</application> or <application>net-snmp</application> tools, version 4.2.5 or above. You only need
533            the <command>snmpget</command> command.
534            You can download this software from <ulink url="http://www.sourceforge.net/projects/net-snmp/">http://www.sourceforge.net/projects/net-snmp/</ulink>.
535            You only need this if you plan to query your printers for their internal page counter via SNMP.
536          </para>
537        </listitem> 
538        <listitem>
539          <para>
540            <application>netatalk</application> version 1.6.1 or above. You only need
541            the <command>pap</command> command.
542            You can download this software from <ulink url="http://netatalk.sourceforge.net/">http://netatalk.sourceforge.net/</ulink>.
543            You only need this if you plan to query your printers for their internal page counter via AppleTalk.
544          </para>
545        </listitem> 
546        <listitem>
547          <para>
548            eGenix' mxDateTime Python module version 2.0.3 or above. It must match your default Python version.
549            You can download it from <ulink url="http://www.egenix.com">http://www.egenix.com</ulink>.
550          </para>
551        </listitem> 
552        <listitem>
553          <para>
554            The Python acccelerator <application>Psyco</application>. It must match your default Python version.
555            You can download it from <ulink url="http://psyco.sourceforge.net">http://psyco.sourceforge.net</ulink>.
556            You only need this if you run on the <literal>x86</literal> architecture because
557            <application>Psyco</application> doesn't yet exist on other architectures.
558          </para>
559        </listitem> 
560        <listitem>
561          <para>
562            The <application>pysnmp</application> Python module version 3.4.2 or 3.4.3 exclusively.
563            You can download it from <ulink url="http://pysnmp.sourceforge.net">http://pysnmp.sourceforge.net</ulink>.
564          </para>
565        </listitem> 
566        <listitem>
567          <para>
568            The <application>JAXML</application> Python module.
569            You can download it from <ulink url="http://www.librelogiciel.com/software/">http://www.librelogiciel.com/software/</ulink>.
570          </para>
571        </listitem> 
572        <listitem>
573          <para>
574            The <application>ReportLab</application> Toolkit Python module.
575            You can download it from <ulink url="http://www.reportlab.org">http://www.reportlab.org</ulink>.
576          </para>
577        </listitem> 
578        <listitem>
579          <para>
580            The <application>Python Imaging Library - PIL</application> module.
581            You can download it from <ulink url="http://www.pythonware.com">http://www.pythonware.com</ulink>.
582          </para>
583        </listitem> 
584        <listitem>
585          <para>
586            The <application>PyOSD</application> Python module.
587            You can download it from <ulink url="http://repose.cx/pyosd/">http://repose.cx/pyosd/</ulink>.
588          </para>
589        </listitem> 
590      </itemizedlist> 
591    </para>
592   
593    <para>
594      Instead of downloading all these programs' sources and compiling them, which really
595      is a boring task considering that many software are needed, you may prefer to look
596      into the packages included with your GNU/Linux distribution of choice (if you use
597      this operating system of course). Most, if not all, GNU/Linux distributions include
598      all the software mentionned above, in the form of packages which are easier to
599      install than sources tarballs. This is probably the same for the many *BSD
600      distributions.
601    </para>
602   
603    <para>
604       You can check that all needed software is installed by launching the <filename>checkdeps.py</filename>
605       command :
606      <screen>     
607$ python checkdeps.py     
608      </screen>
609    </para>
610   
611    <para>
612      Once all these software are installed, installing PyKota itself is a breeze.
613      PyKota being written entirely in the Python language, which is interpreted,
614      there's no need to compile anything. You just have to execute the installation
615      script :
616      <screen>     
617$ python setup.py install     
618      </screen>
619    </para>
620   
621    <para>
622      The setup script will automatically create the
623      <filename>/usr/share/pykota/conf</filename> directory and put the sample
624      configuration files <filename>conf/pykota.conf.sample</filename> and
625      <filename>conf/pykotadmin.conf.sample</filename> there, along with
626      a <filename>README</filename> file explaining their purpose.
627    </para>
628   
629    <para>
630      Now you have to create a <literal>pykota</literal> system user and group. The <application>PyKota</application>
631      software will automatically search its configuration files in user <literal>pykota</literal>'s
632      home directory. For example we could create the user and group, and set <filename>/etc/pykota</filename>
633      as the home directory, but any other home directory will do :
634<screen>      
635    adduser --system --group --home /etc/pykota --gecos PyKota pykota
636</screen>
637    </para>
638   
639    <para>
640      You now have to copy the sample configuration files into the <filename>~pykota</filename>
641      directory, under the respective names <filename>pykota.conf</filename> and
642      <filename>pykotadmin.conf</filename>. Once copied there, you just
643      have to modify these files to adapt them to your own setup.
644      These files are heavily commented, so you should have no problem.
645      Also their format is quite common, because it's the one used by
646      <application>Samba</application> for example, or by <literal>.ini</literal>
647      files under <application>MS-Windows</application>, so you may already
648      be familiar with this syntax.
649      In a future release, this documentation will include the complete
650      reference for all configuration fields available. Keep in mind that
651      <application>PyKota</application> can be really heavily customized, and can delegate some work
652      to any external command of your choice.
653    </para>
654   
655    <para>
656      Please create a backup copy of the <filename>~pykota</filename>
657      directory before modifying a working installation.
658    </para>
659   
660    <para>
661      PyKota features some interesting possibilities which allow you to
662      define options either globally so that they apply to all printers,
663      or on a per printer basis. Please see the sample configuration files
664      to see what I mean. In the simplest form, only a <literal>[global]</literal> section is
665      needed. In more complex configurations, you will have to create
666      one section per printer. Each section in the configuration files
667      begins with a name between square brackets <literal>[]</literal>.
668      The name to use to define a particular printer section is the name
669      of the print queue on which you want to set quotas.
670    </para>
671   
672    <para>
673      After you have modified <application>PyKota</application>'s configuration files, you have to
674      double check their permissions, otherwise your installation may be
675      insecure or may not work at all.
676      The main configuration file <filename>~pykota/pykota.conf</filename>
677      doesn't contain much sensitive information, so it can be made
678      readable by anyone. If normal users read this file, at best they
679      will learn the username and optional password of the read-only
680      database user. This means that beside being allowed to read all the contents of
681      the quota database, they won't be allowed to modify or delete it.
682      On the other hand, the <filename>~pykota/pykotadmin.conf</filename>
683      file contains the read-write user's identity and password. You must then
684      ensure that no normal user can read this file. It should only be readable
685      by the <literal>root</literal> user, which is always the case, and by
686      <application>PyKota</application> administrators. In addition, <application>LPRng</application>
687      users, or users for which <application>CUPS</application> doesn't run as user <literal>root</literal> will
688      have to ensure that the user their printing system is run as
689      can read both of these files. An easy way to do so is to put the <literal>lp</literal> user
690      (for example) into the <literal>pykota</literal> system group, then
691      to give the correct permissions to <application>PyKota</application>'s configuration files :
692      <screen>
693$ chown pykota.pykota ~pykota/pykota.conf     
694$ chmod 644 ~pykota/pykota.conf     
695$ chown pykota.pykota ~pykota/pykotadmin.conf     
696$ chmod 640 ~pykota/pykotadmin.conf     
697      </screen>
698     
699      <warning>
700        <title>Warning</title>
701        <para>
702          All the users allowed to read the <filename>~pykota/pykotadmin.conf</filename>
703          are considered to be <application>PyKota</application> administrators. So be
704          careful with these files permissions.
705        </para>
706      </warning>
707    </para>
708   
709    <para>
710      On some systems, you may be able to strenghten permissions like this :
711      <screen>
712$ chown pykota.pykota ~pykota/pykota.conf     
713$ chmod 640 ~pykota/pykota.conf     
714$ chown pykota.pykota ~pykota/pykotadmin.conf     
715$ chmod 600 ~pykota/pykotadmin.conf     
716      </screen>
717    </para>
718   
719    <para>
720      And on other ones, you may need to relax them, and change the files' owner :
721      <screen>
722$ chown lp.pykota ~pykota/pykota.conf     
723$ chmod 640 ~pykota/pykota.conf     
724$ chown lp.pykota ~pykota/pykotadmin.conf     
725$ chmod 640 ~pykota/pykotadmin.conf     
726      </screen>
727    </para>
728   
729    <para>
730      This all depends on the printing system you are using, and the user the
731      printing system is usually running as. You need to remember two things :
732     
733      <itemizedlist>
734        <listitem>
735          <para>
736            The user your printing system runs as MUST be allowed to read
737            both <application>PyKota</application>'s configuration files.
738          </para> 
739        </listitem> 
740        <listitem>       
741          <para>
742            Any user who can read <filename>pykotadmin.conf</filename>
743            is a <application>PyKota</application> administrator, and
744            can do whatever he wants to the print quota database.
745          </para>
746        </listitem>
747      </itemizedlist> 
748    </para>
749   
750    <para>
751      Don't forget to restart your print server sofware if you changed group membership for the user it runs
752      as, otherwise your change wouldn't be taken into account.
753    </para>
754   
755    <para>
756      Now depending on your printing system, the configuration to do is particular.
757      We will now see how to plug PyKota into your printing system.
758    </para>
759   
760    <sect2>
761      <title>With CUPS</title>
762     
763      <para>
764        From version 1.16alpha7 on, configuring <application>PyKota</application> to integrate
765        within <application>CUPS</application> is more than easy.
766      </para>
767     
768      <para>
769        You just have to create a symbolic link to the <filename>cupspykota</filename>
770        command in <application>CUPS</application>' backend directory :
771        <screen>       
772$ cd /usr/lib/cups/backend       
773$ ln -s /usr/share/pykota/cupspykota cupspykota
774        </screen>
775      </para>
776     
777      <para>
778        You have to restart <application>CUPS</application> for this modification to
779        take effect :
780        <screen>
781$ /etc/init.d/cupsys restart       
782        </screen>
783      </para>
784     
785      <para>
786        Now point your web browser to CUPS configuration page, usually at
787        <ulink url="http://localhost:631">http://localhost:631</ulink> on
788        your print server.
789      </para>
790     
791      <para>
792        Then when creating new printers or reconfiguring existing ones, just
793        choose devices which are <literal>PyKota managed</literal>
794        <footnote>
795          <para>
796            Debian 3.0 Woody is known to have problems : CUPS 1.1.14 doesn't automatically
797            detect <literal>PyKota managed</literal> devices. So you have to manually
798            modify CUPS' <filename>printers.conf</filename> file as explained in
799            PyKota's toplevel <filename>README</filename> file.
800          </para>
801        </footnote>
802        instead of
803        normal devices. You've got one <literal>PyKota managed</literal> device
804        for each regular device available from CUPS, so just choose the appropriate
805        one.
806      </para>
807     
808      <para>
809        Repeat the above procedure for each print queue on which you want to use
810        PyKota. That's all !
811      </para>
812     
813      <sect3>
814        <title>Troubleshooting</title>
815        <para>
816          In case of problem, the simplest way to solve it is currently
817          to ask on PyKota's mailing list, describing the symptoms, as
818          well as the hardware and software you use.
819          In a future release of this document, a section dedicated to
820          Frequently Asked Questions will be included.
821        </para>
822       
823        <para>
824          You can now also ask us questions on IRC :
825          <screen>
826/server irc.freenode.net         
827/join #pykota
828          </screen>
829        </para> 
830      </sect3> 
831     
832    </sect2>
833   
834    <sect2>
835      <title>With LPRng</title>
836     
837      <para>
838        For each printer on which you want to use <application>PyKota</application>, just modify the printer's
839        entry in <filename>/etc/printcap</filename> : you have to add
840        the three following lines :
841       
842<screen>        
843  :achk=true:\
844  :as=/usr/share/pykota/lprngpykota:\
845  :ae=/usr/share/pykota/lprngpykota:\
846</screen>         
847
848        This will tell <application>LPRng</application> to activate accounting, and use the <filename>lprngpykota</filename>
849        accounting filter both at the start and at the end of printing.
850      </para>
851     
852     
853      <para>
854        Repeat the above procedure for each print queue on which you want to use
855        PyKota. That's all !
856      </para>
857     
858      <para>
859        When all modifications are done, just save the <filename>/etc/printcap</filename> file
860        and restart <application>LPRng</application> for the changes to take effect :
861        <screen>
862$ /etc/init.d/lprng restart       
863        </screen>
864      </para>
865     
866      <sect3>
867        <title>Troubleshooting</title>
868        <para>
869          In case of problem, the simplest way to solve it is currently
870          to ask on PyKota's mailing list, describing the symptoms, as
871          well as the hardware and software you use.
872          In a future release of this document, a section dedicated to
873          Frequently Asked Questions will be included.
874        </para>
875       
876        <para>
877          You can now also ask us questions on IRC :
878          <screen>
879/server irc.freenode.net         
880/join #pykota
881          </screen>
882        </para>
883      </sect3> 
884     
885    </sect2>
886   
887  </sect1> 
888</chapter>
889
Note: See TracBrowser for help on using the browser.