Plone 3 en Ubuntu 10.04 (Update 3: FIXED)

Categorie: Plone, Linux, Coding and stuff
tags: 183

Ondanks eerder problemen hebben mijn collega en ik een oplossing gevonden. Zie Update #3.

Update #2

Er blijkt toch een probleem te zijn met de onderstaande oplossing. Een probleem waar ik nog niet uit ben: PIL. PIL lijkt goed te worden geïnstalleerd en aan te roepen, maar zodra Plone daadwerkelijk een item wil aanmaken met daarin een plaatje, loopt dit vast op "_imaging C":

Traceback (most recent call last):
File "<...>/eggs/Products.Archetypes-1.5.15-py2.4.egg/Products/Archetypes/Field.py", line 2404, in createScales
imgdata, format = self.scale(data, w, h)
File "<...>/eggs/Products.Archetypes-1.5.15-py2.4.egg/Products/Archetypes/Field.py", line 2453, in scale
image.thumbnail(size, self.pil_resize_algo)
File "<...>/eggs/PIL-1.1.6-py2.4-linux-i686.egg/PIL/Image.py", line 1522, in thumbnail
self.load()
File "<...>/eggs/PIL-1.1.6-py2.4-linux-i686.egg/PIL/ImageFile.py", line 155, in load
self.load_prepare()
File "<...>/eggs/PIL-1.1.6-py2.4-linux-i686.egg/PIL/ImageFile.py", line 223, in load_prepare
self.im = Image.core.new(self.mode, self.size)
File "<...>/eggs/PIL-1.1.6-py2.4-linux-i686.egg/PIL/Image.py", line 36, in __getattr__
raise ImportError("The _imaging C module is not installed")
ImportError: The _imaging C module is not installed

De volgende versie van Ubuntu komt met rasse schreden dichterbij. Eind volgende maand wordt de definitieve versie verwacht. En sinds vorige week is de eerste beta vrijgegeven. Een mooi moment om te gaan testen met dit nieuwe systeem. Aangezien dit weer een LTS versie wordt, is het van belang tijdig te gaan testdraaien. Toekomstige Ubuntu servers zullen met deze software worden uitgerust.

Geen Python 2.4

Voor de ontwikkeling van Plone 3 ontstaat er een probleem. Deze software maakt nog steeds direct en indirect (zope) gebruik van Python 2.4. En die versie van Python verdwijnt met de komst van Ubuntu 10.04.

Daar is op zich niets mis mee. Python2.4 is oud, heel erg oud. Allang vervangen door opvolgens 2.5, 2.6 en 3. Het is voor Ubuntu (en Debian) steeds lastiger om op een goede manier ondersteuning te blijven bieden voor deze oude versie. Er rest niets anders op dan zelf Python2.4 te installeren.

buildout.python

Om de buildout te kunnen draaien, is er wel wat extra's nodig op je machine. En in de toekomst wil je vast meer, dus even een paar producten binnenhalen met apt-get:

sudo apt-get install python-setuptools subversion bzr bzr-gtk meld build-essential g++ libssl-dev openssl libxml2-dev libxslt-dev

Python2.4 kan vanzelfsprekend met behulp van de downloads op python.org worden geïnstalleerd, maar waarom moeilijk doen als het makkelijker kan. De wens naar een non-system-python bestaat al langer. En deze wens is in een subversion project gegoten:

svn co https://svn.plone.org/svn/collective/buildout/python/ buildout.python

Waar je dit op je pc doet is geheel aan jezelf. Als je maar wel onthoudt waar het is. Straks, bij het draaien van je Plone buildout moet je het pad naar deze Python weten.

En dan is het tijd voor de buildout:

cd buildout.python; python bootstrap.py

Het is mogelijk om in buildout.cfg aan te geven welke versies van Python je wel of niet wilt. Er worden namelijk meerdere versies van Python geïnstalleerd: 2.4, 2.5, 2.6. Als je het product verder bekijkt zul je zien dat je nog meer versies kunt installeren.

Ga vervolgens over tot het bouwen:

./bin/buildout

Vanaf nu is het mogelijk om je 'oude' Plone 3 sites weer op de nieuwe Ubuntu te draaien. En het mooie van dit alles is, dat dit ook op oudere systemen werkt.

UPDATE #3

Helaas is gebleken dat er na het uitvoeren van bovenstaande stappen een probleem is met PIL en jpeg bestanden. Als je een instance vanuit debug draait, dan resulteert dit in de vele

ImportError: The _imaging C module is not installed

foutmeldingen. Dit is uiteindelijk terug te leiden tot de volgende constatering:

cd buildout.python/python-2.4/lib/python2.4/site-packages/PIL-1.1.6-py2.4-linux-i686.egg
ldd _imaging.so
	linux-gate.so.1 =>  (0xb776e000)
	libjpeg.so.7 => not found
	libz.so.1 => /lib/libz.so.1 (0xb76cd000)
	libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb76b3000)
	libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7559000)
	/lib/ld-linux.so.2 (0xb776f000)

Zoals je zult begrijpen is het stukje 'not found' niet helemaal gewenst. Uiteindelijk hebben we dit opgelost door domweg een symlink te maken zodat Ubuntu systemwide libjpeg.so.7 kan vinden:

cd /lib
sudo ln -s <pad-naar>/buildout.python/parts/opt/lib/libjpeg.so.7.0.0 libjpeg.so.7

Hierna krijgen we:

ldd _imaging.so 
	linux-gate.so.1 =>  (0xb776e000)
	libjpeg.so.7 => /usr/lib/libjpeg.so.7 (0xb76e2000)
	libz.so.1 => /lib/libz.so.1 (0xb76cd000)
	libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb76b3000)
	libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7559000)
	/lib/ld-linux.so.2 (0xb776f000)

Bronnen: Sapere aude!, Pareto intranet, 127.0.0.1, Jan Murre en Maurits van Rees.

Laadtijd: