[Zope] zeo : installing and configuring
Mark McEahern
mark@mceahern.com
Mon, 2 Sep 2002 14:01:25 -0500
Hi, I'm trying to install ZEO. Initially, I'd like to run ZEO on the same
server that I'm running Zope. I installed Zope and ZEO and placed a
custom_zodb.py in the Zope directory, but it is not getting accessed when
Zope starts. If I stop ZEO, Zope still runs, so I must not be doing
something right. I can't pinpoint what I'm doing wrong, though, since I've
never used ZEO before and I'm just learning it. I've appended to this
message fairly detailed instructions I've used to install Zope and ZEO. Can
anybody see anything obviously goofy about what I'm doing or give me other
hints on things to try doing differently?
Thanks,
// mark
Installing Zope via RPM
I'm trying to install Zope from RPMs based on these instructions:
http://www.zope.org/Members/dingo/Zope_RPMS
All of these commands are performed as a normal user--those commands
prefixed by sudo run as root and require configuring /etc/sudoers.
I started with a relatively clean vanilla Red Hat 7.3 install. The
only package I selected during installation of 7.3 were KDE and
Windows File Server. In addition, I've installed the Courier mail
server on this server.
1. I tried to download the Python RPMs for Python 2.1.3:
http://www.python.org/ftp/python/2.1.3/rpms/rh7.2/python2.1-2.1.3-1.i386.rpm
http://www.python.org/ftp/python/2.1.3/rpms/rh7.2/python2.1-devel-2.1.3-1.i3
86.rpm
I was worried that the RPMs for Python 2.1.3 would conflict with
Red Hat 7.3's Python 2, but they fail dependency checking:
$ rpm -Uvh --test python2.1-2.1.3-1.i386.rpm
error: failed dependencies:
libdb-3.2.so is needed by python2.1-2.1.3-1
so I decided to build my own RPMs for Python 2.1.3 on Red Hat 7.3
from the source RPM for Python 2.1.3.
2. Build the Python 2.1.3 RPMs from the SRPM.
Download the Python 2.1.3 SRPM to /var/tmp:
http://www.python.org/ftp/python/2.1.3/rpms/python2.1-2.1.3-1.src.rpm
Run this as a normal user (assumes SRPM is in /var/tmp):
$ buildrpm /var/tmp/python2.1-2.1.3-1.src.rpm
buildrpm is a bash shell script:
#!/bin/bash
# buildrpm
if [ -z "$1" ] ; then
echo "Usage: `basename $0` srpm"
exit 1
fi
srpm=$1
if [ ! -d $HOME/rpm ] ; then
mkdir $HOME/rpm
mkdir $HOME/rpm/SOURCES
mkdir $HOME/rpm/SPECS
mkdir $HOME/rpm/BUILD
mkdir $HOME/rpm/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386
fi
if [ ! -f $HOME/.rpmmacros ] ; then
echo "%_topdir $HOME/rpm" > $HOME/.rpmmacros
fi
rpmbuild --rebuild $srpm
3. Install the needed Python RPMs:
$ cd ~/rpm/RPMS/i386
$ sudo rpm -Uvh python2.1-2.1.3-1.i386.rpm
python2.1-devel-2.1.3-1.i386.rpm
4. Build the Zope RPM.
Download the Zope SRPM to /var/tmp:
http://www.zope.org/Members/dingo/Zope_RPMS/Zope-2.5.1-1.src.rpm
Run this as a normal user (assumes SRPM is in /var/tmp):
$ buildrpm /var/tmp/Zope-2.5.1-1.src.rpm
(Same buildrpm script from step 2.)
5. Install the Zope RPM:
$ cd ~/rpm/RPMS/i386
$ sudo rpm -Uvh Zope-2.5.1-1.i386.rpm
Zope-zserver-2.5.1-1.i386.rpm
6. Verify the new RPMs are installed:
$ rpm -qa | grep "python2.1"
python2.1-devel-2.1.3-1
python2.1-2.1.3-1
$ rpm -qa | grep "Zope"
Zope-2.5.1-1
Zope-zserver-2.5.1-1
7. Start Zope:
$ sudo /sbin/service zope start
8. Login:
http://localhost:8080/manage
Initial credentials (see README.Zope.RPM):
user: admin
pass: 123
9. Click Control_Panel | Database Management. The Database Location
is listed as:
/var/zope/var/Data.fs
Install ZEO
All of these commands are issued as a normal user--those prefixed by
sudo run as root and require configuring /etc/sudoers.
1. Install Zope (see above).
2. Make sure it's not running:
$ sudo /sbin/service zope stop
3. Download ZEO to /var/tmp:
http://www.zope.org/Products/ZEO/ZEO-2.0b1.tar.gz
4. Unpack the tarball:
$ cd /var/tmp
$ tar -zxvf ZEO-2.0b1.tar.gz
5. Run the unit tests.
The ZEO/docs/ZopeREADME.txt says:
"You can test ZEO before installing it with the test script."
I think what this means is that you can test it after you build it
but before you install it (python setup.py build)--however, that's
not clear.
So, first, build ZEO (from the installation directory created in
step 4):
$ python2.1 setup.py build
NOTE: Use of python 2.1 since that's the Python used by Zope.
Now we can try to run the tests (again, from the installation
directory created in step 4):
$ python2.1 test.py -v
This gives us an ImportError:
<output>
No module named zLOG
['lib.linux-i686-2.1', 'lib', '', '/usr/lib/python2.1',
'/usr/lib/python2.1/plat-linux2', '/usr/lib/python2.1/lib-tk',
'/usr/lib/python2.1/lib-dynload',
'/usr/lib/python2.1/site-packages']
Traceback (most recent call last):
File "test.py", line 255, in ?
File "test.py", line 209, in main
File "test.py", line 187, in runner
File "test.py", line 154, in get_suite
File "test.py", line 130, in package_import
File "lib/ZEO/tests/testStart.py", line 24, in ?
from ZEO.ClientStorage import ClientStorage
File "lib/ZEO/ClientStorage.py", line 25, in ?
from ZEO import ClientCache, ServerStub
File "lib/ZEO/ClientCache.py", line 84, in ?
import zLOG
ImportError: No module named zLOG
</output>
So, this time, we add the Zope libraries to the python search
path before running the tests:
$ export PYTHONPATH='/usr/share/zope/lib/python'
$ python2.1 test.py -v
This is always good to see:
..................................................................
.........................
----------------------------------------------------------------------
Ran 91 tests in 56.690s
OK
6. Run setup:
$ sudo python2.1 setup.py install --home=/usr/share/zope
If this generates:
warning: install: modules installed to
'/usr/share/zope/lib/python/', which is not in Python's module
search path (sys.path) -- you'll have to change the search path
yourself
remember to add the Zope libraries to Python's search path first:
$ export PYTHONPATH='/usr/share/zope/lib/python'
7. Select a port for ZEO:
To check which ports are in use:
sudo netstat -pantu
We'll use 9000
8. Start ZEO:
$ cd /usr/share/zope/
$ sudo python2.1 lib/python/ZEO/start.py -p 9000 -u zope
That fails:
$ Traceback (most recent call last):
File "lib/python/ZEO/start.py", line 248, in main
storages['1'] = FileStorage(fs or env.fs)
File "/home/mark/rpm/BUILD/Zope-2.5.1-src/lib/python/ZODB/
FileStorage.py", line 240, in __init__
IOError: [Errno 13] Permission denied:
'/usr/share/zope/var/Data.fs'
Here are the permission settings in /usr/share/zope/var/:
$ sudo ls -l /usr/share/zope/var/
total 164
-rw------- 1 root root 75448 Sep 2 12:54 Data.fs
-rw-r--r-- 1 root root 75448 Jan 20 2001 Data.fs.in
-rw-r--r-- 1 zope zope 5 Sep 2 13:15 Data.fs.lock
-rw-r--r-- 1 zope zope 0 Sep 2 13:15 Data.fs.tmp
Make the zope user the owner of the var directory and everything
in it:
$ sudo chown -R zope:zope /usr/share/zope/var
Try starting it again:
$ sudo python2.1 lib/python/ZEO/start.py -p 9000 -u zope
This time, it works. If we look in the /usr/share/zope/var
folder, there's a ZEO_SERVER.pid file:
$ cat /usr/share/zope/var/ZEO_SERVER.pid
12248 12249
We can see those processes are running:
$ ps -ax | grep 12248
12248 ? S 0:00 python2.1 lib/python/ZEO/start.py -p 9000 -u
zope
$ ps -ax | grep 12249
12249 ? S 0:00 /usr/bin/python2.1 lib/python/ZEO/start.py -p
9000 -u
9. Run Zope as a ZEO client:
sudo cp custom_zodb.py /usr/share/zope
custom_zodb.py looks like this:
# custom_zodb.py in Zope install directory (/usr/share/zope)
from ZEO.ClientStorage import ClientStorage
port = 9000
Storage = ClientStorage(('localhost', port))
10. Start Zope.
$ sudo /sbin/service zope start
Try to access Zope: http://localhost:8080/manage
Works.
11. Stop ZEO.
$ sudo kill `cat /usr/share/zope/var/ZEO_SERVER.pid`
12. Try to access Zope: http://localhost:8080/manage
Still works. Therefore, we must not be running ZEO. :(
13. Make sure Zope is reading custom_zodb.py:
$ sudo /sbin/service zope stop
$ ls -l --time=atime /usr/share/zope/custom_zodb.py
$ sudo /sbin/service zope start
$ ls -l --time=atime /usr/share/zope/custom_zodb.py
The time didn't change. So Zope must not be reading custom_zodb.py.
-