[Zope] Getting Postgres and exUserFolder to work with Zope

Heimo Laukkanen huima@fountainpark.org
Sun, 21 Oct 2001 05:24:05 +0300


Hi,

I spent a couple of hours trying to get Zope to work with postgres.
There simply was not one good guide or howto available, all the rigth
info was avaialble -- but on different mailinglists. Here is what I did,
hope it helps someone else -- or perhaps someone will get a spark from
this and write a decent howto. 

Atleast after this mail people will find the info from one place.

Using: 
Zope Zope 2.3.2
Python 1.52
ExUserFolder 0-8-0
psycopg-0.99.6
postgresql-7.1.3
egenix-mx-base-2.0.2


1) Getting all the pieces together

Postgresql - http://www.postgresql.org/

ExUserFolder - http://exuserfolder.sourceforge.net/

psycopg (Postgres database adapter ) -
http://www.zope.org/Members/fog/psycopg

egenix mx Extensions -
http://www.lemburg.com/files/python/eGenix-mx-Extensions.html


2 ) Installing Postgres

Downloaded source-distribution and unpacked it to my tmp. cd to the
postgres directory.

Read from the manual how to install. Here is it snipped in short form.

./configure 
gmake 
gmake install 
adduser postgres 
mkdir /usr/local/pgsql/data 
chown postgres /usr/local/pgsql/data 
su - postgres 
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data 
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 & 
/usr/local/pgsql/bin/createdb test 
/usr/local/pgsql/bin/psql test 

After this make sure that the lib-files are in a place that Zope can
find them!

3 ) Install egenix mx Extensions

Downloaded source-distribution, since only that has the header-files we
need while compiling psycopg. Unpack into temp. cd to the directory.

python setup.py install


4) Installing psycopg

Unpack to the temp. cd to the directory. Make sure you know where your
egenix-sources are, postgres lib-files and postgres includes. Then give
then in config. Example below.

./configure
--with-mxdatetime-includes=../egenix-mx-base-2.0.2/mx/DateTime/mxDateTime/
--with-postgres-libraries=/usr/local/pgsql/lib
--with-postgres-includes=/usr/local/pgsql/include

make
make install

5) Copying files to rigth places 

This part was frustrating and propably has had everyone wondering for
some time. I found this thing to be helpful, tip was also found on
different mailing lists.

copy mxDateTime.so 
from:       .../python1.5/site-packages/mx/DateTime/mxDateTime.so
to:         .../python1.5/site-packages/mxDateTime.so

so that psycopgmodule.so can find it when zope is started up.

And similarly make sure that the psycopgmodule is located in 
the psycopgmodule.so got placed in
 
 .../python1.5/site-packages/psycopgmodule.so

6) Installing exUserFolder

Just unpack it and copy to zope/Products - where ever you have it.

7) Create database table for authentication

Within the exUserFolder distribution comes a file pgAndreasScheme.sql.
>From that we will use only one table for now.

This is just for testing purposes. 

su postgres

psql template1

CREATE TABLE "passwd" (
        "username" character varying(64) UNIQUE NOT NULL,
        "password" character varying(64) NOT NULL,
        "roles" character varying(255),
        Constraint "passwd_pkey" Primary Key ("username")
);

\q

You have created your table.

8) Restart zope

9) Go into management interface

You should see Z psycopg Database connection in the list available for
selection. If not, go to the control panel and product management and
see what is the traceback on that product. Propably some of the modules
is not found - which can be because you lib-files are somewhwere whwre
they should not be ,-)

Try to add Z psycopg Database connection.

For connection string use:
dbname = template1 user = postgres

Ok.

Everything should work.

You can test it by clicking the test-tab in Z psycopg and trying
following sql-query: select * from passwd;

10) Add exUserFolder

Warning. Don't do this on the root folder!

Select postgres authentication source.

And select rest as you like. Click next.

For authentication properties write:

Table Name: passwd
Username Column: username
Password column: password
Roles Column: roles

Etc.

Have fun. Hope this helps.

-huima