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. -
participants (1)
-
Mark McEahern