Buildout-Erweiterungen
Shell-Befehle, crontab-Einträge, Vorlagen erstellen etc.
extends
Im Buildout-Abschnitt können mit extends mehrere Konfigurationsdateien eingebunden werden. Auf diese Weise können dann auch umfangreiche Konfigurationen, wie z.B. die Installation der libxml2- und libxslt-Bibliotheken in eine eigene Konfigurationsdatei lxml.cfg mit folgendem Inhalt ausgelagert werden:
[lxml]
parts =
staticlxml
pylxml
[pylxml]
recipe=zc.recipe.egg
interpreter=pylxml
eggs=
lxml
[staticlxml]
recipe = z3c.recipe.staticlxml
egg = lxml
Anschließend kann diese Konfigurationsdatei mit all ihren Abschnitten in die buildout.cfg-Datei eingebunden werden mit:
[buildout]
extends =
lxml.cfg
parts =
${lxml:parts}
…
Es kann auch eine URL angegeben werden, also z.B.:
[buildout]
extends =
http://www.plone-entwicklerhandbuch.de/plone-entwicklerhandbuch/entwicklungsumgebung/lxml.cfg
Umgekehrt kann auch die buildout.cfg-Datei in eine andere Konfiguration übernommen werden, siehe hierzu Buildout für Produktivserver.
Shell-Befehle
Mit plone.recipe.command können Sie eigene Shell-Befehle während der Installation oder des Updates durchführen. Somit können Sie zum Beispiel der Zope-Instanz externe Methoden im Verzeichnis parts/instance/Extension zur Verfügung stellen:
[extensions]
recipe = plone.recipe.command
command =
ln -sf ${buildout:directory}/Extensions/* ${instance:location}/Extensions/
update-command =
${extensions:command}
User-crontab
Das Rezept z3c.recipe.usercrontab ändert die crontab-Einträge des Nutzers. So kann z.B. für den @reboot-Eintrag folgendes in der buildout.cfg-Datei angegeben werden:
[buildout]
…
parts =
…
crontab
[crontab]
recipe = z3c.recipe.usercrontab
times = @reboot
command = ${buildout:directory}/bin/instance start
Dabei kann eine Buildout-Konfigurationsdatei auch mehrere crontab-Abschnitte enthalten.
Templates verwenden
Mit collective.recipe.template lassen sich Textdateien aus Vorlagen erstellen wobei die buildout-Variablen verwendet werden können. Hierzu wird in der buildout.cfg-Datei z.B. folgender neuer Abschnitt definiert:
[buildout]
parts =
…
logrotate
…
[logrotate]
recipe = collective.recipe.template
input = templates/logrotate.conf
output = ${buildout:directory}/etc/logrotate.conf
Und wenn ein Auszug aus templates/logrotate.conf-Datei so aussieht:
…
${buildout:directory}/var/log/instance.log {
postrotate
${buildout:bin-directory}/instance logreopen
endscript
}
sieht dieser Auszug in der generierten Datei myproject/etc/logrotate.conf so aus:
…
/home/veit/myproject/var/log/instance.log {
postrotate
/home/veit/myproject/instance logreopen
endscript
}

