Commit 53c5932d authored by Romain Courteaud's avatar Romain Courteaud

Merge branch 'master' into erp5

Conflicts:
	component/apache/buildout.cfg
	component/groonga/buildout.cfg
	component/imagemagick/buildout.cfg
	component/mysql-5.1/buildout.cfg
	component/ncurses/buildout.cfg
	slapos/recipe/erp5/template/haproxy.cfg.in
	software/erp5/software.cfg
	software/vifib/software.cfg
	stack/erp5.cfg
parents 52ae749a af93196e
Changes
=======
0.26 (unreleased)
0.30 (Unreleased)
-----------------
* No changes yet.
* No change yet.
0.30 (2011-10-06)
-----------------
* LAMP : Update apache and php configuration files to work with a lot of different
PHP software. [Alain Takoudjou Kamdem]
0.29 (2011-09-28)
-----------------
* mysql: bug fix on database recovering (avoid importing dump two times). [Antoine Catton]
0.28 (2011-09-27)
-----------------
* lamp.request: requesting the mariadb software release instead of itself. [Antoine Catton]
* lamp.request: adding support of remote backup repo (using a different
software type). The default remote backup is a davstorage. [Antoine Catton]
0.27 (2011-09-27)
-----------------
* mysql: add backup and backup recovering using different software type. [Antoine Catton]
0.26 (2011-09-27)
-----------------
* Davstorage: returning more explicit url (using webdav scheme). [Antoine Catton]
* Other mysql minor fixes. [Antoine Catton]
0.25 (2011-09-21)
-----------------
......
......@@ -3,6 +3,8 @@ parts = apache-php
extends =
../apache/buildout.cfg
../mariadb/buildout.cfg
../libtool/buildout.cfg
[apache-php]
# Note: Shall react on each build of apache and reinstall itself
......
......@@ -20,6 +20,56 @@ url = http://www.apache.org/dist/httpd/patches/apply_to_2.2.21/CVE-2011-3368.pat
filename = ${:_buildout_section_name_}
download-only = true
[apache-no-ssl]
# inspired on http://old.aclark.net/team/aclark/blog/a-lamp-buildout-for-wordpress-and-other-php-apps/
recipe = hexagonit.recipe.cmmi
url = http://mir2.ovh.net/ftp.apache.org/dist//httpd/httpd-2.2.21.tar.bz2
md5sum = 1696ae62cd879ab1d4dd9ff021a470f2
configure-options = --enable-authn-alias
--enable-bucketeer
--enable-cache
--enable-case-filter
--enable-case-filter-in
--enable-cgid
--enable-charset-lite
--enable-disk-cache
--enable-echo
--enable-exception-hook
--enable-mods-shared=all
--enable-optional-fn-export
--enable-optional-fn-import
--enable-optional-hook-export
--enable-optional-hook-import
--enable-proxy
--enable-proxy-ajp
--enable-proxy-balancer
--enable-proxy-connect
--enable-proxy-ftp
--enable-proxy-http
--enable-proxy-scgi
--enable-so
--enable-dav
--enable-dav-fs
--disable-ssl
--with-included-apr
--with-z=${zlib:location}
--with-expat=${libexpat:location}
--with-pcre=${pcre:location}
--with-sqlite3=${sqlite3:location}
--with-gdbm=${gdbm:location}
--without-ssl
--without-lber
--without-ldap
--without-ndbm
--without-berkeley-db
--without-pgsql
--without-mysql
--without-sqlite2
--without-oracle
--without-freedts
--without-odbc
--without-iconv
[apache]
# inspired on http://old.aclark.net/team/aclark/blog/a-lamp-buildout-for-wordpress-and-other-php-apps/
recipe = hexagonit.recipe.cmmi
......
......@@ -35,8 +35,8 @@ filename = imagemagick-6.6.7-4-without-lzma.patch
[imagemagick]
recipe = hexagonit.recipe.cmmi
url = http://ftp.sunet.se/pub/multimedia/graphics/ImageMagick/ImageMagick-6.7.2-9.tar.bz2
md5sum = 553008eb69f3caf1c5b0b3222c29bb18
url = ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.7.2-10.tar.bz2
md5sum = 073ec5d7f2a22db96a0e87e4322b75f9
configure-options =
--disable-static
--without-x
......
......@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
import glob
import os
version = '0.26-dev'
version = '0.31-dev'
name = 'slapos.cookbook'
long_description = open("README.txt").read() + "\n" + \
open("CHANGES.txt").read() + "\n"
......
......@@ -41,13 +41,12 @@ class Recipe(BaseSlapRecipe):
self.path_list = []
self.requirements, self.ws = self.egg.working_set()
document_root = self.createDataDirectory('www')
self.apache_config = self.installApache(document_root)
self.setConnectionDict(
dict(url='https://[%s]:%s/' % (self.apache_config['ip'],
self.apache_config['port']),
user=self.apache_config['user'],
password=self.apache_config['password']),
)
apache_config = self.installApache(document_root)
self.setConnectionUrl(scheme='webdavs',
host=apache_config['ip'],
port=apache_config['port'],
auth=(apache_config['user'],
apache_config['password']))
return self.path_list
def installApache(self, document_root, ip=None, port=None):
......
......@@ -31,8 +31,13 @@ import pkg_resources
import zc.buildout
import sys
import zc.recipe.egg
import urlparse
class BaseRecipe(BaseSlapRecipe):
def getTemplateFilename(self, template_name):
return pkg_resources.resource_filename(__name__,
'template/%s' % template_name)
def installMysqlServer(self, ip=None, port=None):
if ip is None:
ip = self.getLocalIPv4Address()
......@@ -179,28 +184,60 @@ class Request(BaseRecipe):
self.path_list = []
self.requirements, self.ws = self.egg.working_set()
software_type = self.parameter_dict['slap_software_type']
if software_type == 'RootSoftwareInstance':
document_root = self.createDataDirectory('htdocs')
self.createHtdocs(self.options['source'].strip(), document_root)
mysql = self.request(self.software_release_url, 'MySQL Server', 'mysql')
mysql_conf = dict(
mysql_host=mysql.getConnectionParameter('mysql_host'),
mysql_port=mysql.getConnectionParameter('mysql_port'),
mysql_user=mysql.getConnectionParameter('mysql_user'),
mysql_password=mysql.getConnectionParameter('mysql_password'),
mysql_database=mysql.getConnectionParameter('mysql_database'),
)
if software_type == 'Backuped':
davstorage = self.request(self.options['davstorage-software-url'],
software_type, 'Backup Server').getConnectionParameter('url')
parameters = {'remote_backup': davstorage}
elif software_type == 'PersonnalBackup':
parameters = {'remote_backup': self.parameter_dict['remote_backup']}
else:
parameters = {}
mysql = self.request(self.options['mariadb-software-url'],
software_type, 'MariaDB Server', partition_parameter_kw=parameters
).getConnectionParameter('url')
mysql_parsed = urlparse.urlparse(mysql)
mysql_host, mysql_port = mysql_parsed.hostname, mysql_parsed.port
if mysql_parsed.scheme == 'mysqls': # Listen over stunnel
mysql_host, mysql_port = self.installStunnelClient(mysql_host,
mysql_port)
mysql_conf = dict(mysql_database=mysql_parsed.path.strip('/'),
mysql_user=mysql_parsed.username,
mysql_password=mysql_parsed.password,
mysql_host='%s:%s' % (mysql_host,mysql_port))
url = self.installApache(document_root)
self.setConnectionDict(dict(
url=url,
))
self.createConfiguration(self.options['template'], document_root,
self.options['configuration'], mysql_conf)
elif software_type == 'MySQL Server':
mysql_conf = self.installMysqlServer()
self.setConnectionDict(dict(
**mysql_conf
))
else:
raise zc.buildout.UserError('Uknown software type %r' % software_type)
return self.path_list
def installStunnelClient(self, remote_host, remote_port):
local_host = self.getLocalIPv4Address()
local_port = 8888
stunnel_conf_path = self.createConfigurationFile('stunnel.conf',
self.substituteTemplate(
self.getTemplateFilename('stunnel.conf.in'), {
'log': os.path.join(self.log_directory, 'stunnel.log'),
'pid_file': os.path.join(self.run_directory, 'stunnel.pid'),
'remote_host': remote_host, 'remote_port': remote_port,
'local_host': local_host, 'local_port': local_port,
}))
wrapper = zc.buildout.easy_install.scripts([('stunnel',
'slapos.recipe.librecipe.execute', 'execute')], self.ws,
sys.executable, self.wrapper_directory, arguments=[
self.options['stunnel_binary'].strip(), stunnel_conf_path]
)[0]
self.path_list.append(wrapper)
return (local_host, local_port,)
......@@ -53,3 +53,4 @@ LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so
LoadModule dir_module modules/mod_dir.so
LoadModule php5_module modules/libphp5.so
LoadModule alias_module modules/mod_alias.so
......@@ -2,13 +2,17 @@
engine = On
safe_mode = Off
expose_php = Off
error_reporting = E_ALL | E_STRICT
display_errors = Off
error_reporting = E_ALL & ~(E_DEPRECATED|E_NOTICE|E_WARNING)
display_errors = On
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
session.save_path = "%(tmp_directory)s"
session.auto_start = 1
session.auto_start = 0
date.timezone = Europe/Paris
file_uploads = On
upload_max_filesize = 8M
post_max_size = 8M
magic_quotes_gpc=0ff
foreground = yes
output = %(log)s
pid = %(pid_file)s
syslog = no
[service]
client = yes
accept = %(local_host)s:%(local_port)s
connect = %(remote_host)s:%(remote_port)s
......@@ -33,6 +33,8 @@ from hashlib import md5
import stat
import netaddr
import time
import re
import urlparse
class BaseSlapRecipe:
"""Base class for all slap.recipe.*"""
......@@ -256,3 +258,34 @@ class BaseSlapRecipe:
promise_path = os.path.join(self.promise_directory, promise_name)
self._writeExecutable(promise_path, file_content)
return promise_path
def setConnectionUrl(self, scheme, host, path='', params='', query='',
fragment='', port=None, auth=None):
"""Set the ConnectionDict to a dict with only one Universal Resource
Locator.
auth can be either a login string or a tuple (login, password).
"""
# XXX-Antoine: I didn't find any standard module to join an url with
# login, password, ipv6 host and port.
# So instead of copy and past in every recipe I factorized it right here.
netloc = ''
if auth is not None:
auth = tuple(auth)
netloc = str(auth[0]) # Login
if len(auth) > 1:
netloc += ':%s' % auth[1] # Password
netloc += '@'
# host is an ipv6 address whithout brackets
if ':' in host and not re.match(r'^\[.*\]$', host):
netloc += '[%s]' % host
else:
netloc += str(host)
if port is not None:
netloc += ':%s' % port
url = urlparse.urlunparse((scheme, netloc, path, params, query, fragment))
self.setConnectionDict(dict(url=url))
......@@ -44,6 +44,7 @@ class Recipe(BaseSlapRecipe):
return arg
def _install(self):
self.software_type = self.parameter_dict['slap_software_type']
self.path_list = []
self.requirements, self.ws = self.egg.working_set()
......@@ -63,13 +64,12 @@ class Recipe(BaseSlapRecipe):
ca_conf['certificate_authority_path'])
self.linkBinary()
self.setConnectionDict(dict(
stunnel_ip = stunnel_conf['public_ip'],
stunnel_port = stunnel_conf['public_port'],
mysql_database = mysql_conf['mysql_database'],
mysql_user = mysql_conf['mysql_user'],
mysql_password = mysql_conf['mysql_password'],
))
self.setConnectionUrl(scheme='mysqls',
host=stunnel_conf['public_ip'],
port=stunnel_conf['public_port'],
auth=(mysql_conf['mysql_user'],
mysql_conf['mysql_password']),
path=mysql_conf['mysql_database'])
return self.path_list
def linkBinary(self):
......@@ -141,7 +141,6 @@ class Recipe(BaseSlapRecipe):
def installCertificateAuthority(self, ca_country_code='XX',
ca_email='xx@example.com', ca_state='State', ca_city='City',
ca_company='Company'):
backup_path = self.createBackupDirectory('ca')
self.ca_dir = os.path.join(self.data_root_directory, 'ca')
self._createDirectory(self.ca_dir)
self.ca_request_dir = os.path.join(self.ca_dir, 'requests')
......@@ -182,15 +181,6 @@ class Recipe(BaseSlapRecipe):
crl=os.path.join(self.ca_crl),
request_dir=self.ca_request_dir
)]))
# configure backup
backup_cron = os.path.join(self.cron_d, 'ca_rdiff_backup')
open(backup_cron, 'w').write(
'''0 0 * * * %(rdiff_backup)s %(source)s %(destination)s'''%dict(
rdiff_backup=self.options['rdiff_backup_binary'],
source=self.ca_dir,
destination=backup_path))
self.path_list.append(backup_cron)
return dict(
ca_certificate=os.path.join(config['ca_dir'], 'cacert.pem'),
ca_crl=os.path.join(config['ca_dir'], 'crl'),
......@@ -230,6 +220,7 @@ class Recipe(BaseSlapRecipe):
stunnel_conf_path = self.createConfigurationFile("stunnel.conf",
self.substituteTemplate(template_filename,
stunnel_conf))
self.path_list.append(stunnel_conf_path)
wrapper = zc.buildout.easy_install.scripts([('stunnel',
'slapos.recipe.librecipe.execute', 'execute_wait')], self.ws,
sys.executable, self.wrapper_directory, arguments=[
......@@ -319,7 +310,7 @@ class Recipe(BaseSlapRecipe):
mysql_backup_cron = os.path.join(self.cron_d, 'mysql_backup')
with open(mysql_backup_cron, 'w') as file_:
file_.write('0 0 * * * %(mysqldump)s | %(gzip)s > %(tmpdump)s' \
'&& mv %(tmpdump)s %(dumpfile)s' % {
'&& mv -f %(tmpdump)s %(dumpfile)s' % {
'mysqldump': mysqldump_cmdline_str,
'gzip': self.options['gzip_binary'],
'tmpdump': self.parseCmdArgument(tmpdump_file),
......@@ -328,5 +319,35 @@ class Recipe(BaseSlapRecipe):
)
self.path_list.append(mysql_backup_cron)
mysql_conf.update(backup_directory=backup_directory)
# Remote backup
if self.software_type in ['Backuped', 'Recover']:
remote_url = self.parameter_dict['remote_backup']
remote_backup_bin = zc.buildout.easy_install.scripts([('remote_backup',
'slapos.recipe.librecipe.execute', 'execute')], self.ws,
sys.executable, self.bin_directory, arguments=[
self.options['duplicity_binary'], '--no-encryption',
backup_directory, remote_url]
)[0]
self.path_list.append(remote_backup_bin)
remote_backup_cron = os.path.join(self.cron_d, 'remote_backup')
self.path_list.append(remote_backup_cron)
with open(remote_backup_cron, 'w') as file_:
file_.write('1 0 * * * %s' % self.parseCmdArgument(
remote_backup_bin))
if self.software_type == 'Recover':
zc.buildout.easy_install.scripts([('import_backup',
__name__+'.recover', 'import_remote_dump')], self.ws,
sys.executable, self.wrapper_directory, arguments={
'lock_file': os.path.join(self.work_directory,
'import_done'),
'database': mysql_conf['mysql_database'],
'mysql_binary': self.options['mysql_binary'],
'mysql_socket': mysql_conf['socket'],
'duplicity_binary': self.options['duplicity_binary'],
'remote_backup': remote_url,
'local_directory': backup_directory,
'dump_name': dump_filename,
'zcat_binary': self.options['zcat_binary'],
})
# The return could be more explicit database, user ...
return mysql_conf
......@@ -16,8 +16,8 @@ def runMysql(args):
# XXX: Protect with proper root password
# XXX: Follow http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html
popen = subprocess.Popen([conf['mysql_install_binary'],
'--skip-name-resolve', '--no-defaults', '--datadir=%s' %
conf['data_directory']],
'--skip-name-resolve', '--skip-host-cache', '--no-defaults',
'--datadir=%s' % conf['data_directory']],
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
result = popen.communicate()[0]
if popen.returncode is None or popen.returncode != 0:
......
import sys
import os
import time
import subprocess
def import_remote_dump(kwargs):
# Get data from kwargs
lock_file = kwargs['lock_file']
database = kwargs['database']
mysql_binary = kwargs['mysql_binary']
mysql_socket = kwargs['mysql_socket']
duplicity_binary = kwargs['duplicity_binary']
remote_backup = kwargs['remote_backup']
local_directory = kwargs['local_directory']
dump_name = kwargs['dump_name']
zcat_binary = kwargs['zcat_binary']
# The script start really here
if os.path.exists(lock_file):
sys.exit(127)
while subprocess.call([mysql_binary, '--socket=%s' % mysql_socket,
'-u', 'root', '-e', 'use %s;' % database]) != 0:
time.sleep(10)
subprocess.check_call([duplicity_binary, 'restore', '--no-encryption',
remote_backup, local_directory])
zcat = subprocess.Popen([zcat_binary, os.path.join(local_directory,
dump_name)],
stdout=subprocess.PIPE)
mysql = subprocess.Popen([mysql_binary, '--socket=%s' % mysql_socket,
'-D', database, '-u', 'root'],
stdin=zcat.stdout)
zcat.stdout.close()
returncode = mysql.poll()
if returncode == 0:
open(lock_file, 'w').close() # Just a touch
sys.exit(returncode)
......@@ -63,14 +63,14 @@ mode = 0644
python = python2.7
[versions]
zc.buildout = 1.5.3-dev-SlapOS-009
zc.buildout = 1.5.3-dev-SlapOS-010
Jinja2 = 2.6
Werkzeug = 0.7.1
buildout-versions = 1.6
hexagonit.recipe.cmmi = 1.5.0
hexagonit.recipe.download = 1.5.0
meld3 = 0.6.7
slapos.cookbook = 0.24
slapos.cookbook = 0.26
slapos.recipe.template = 1.1
# Required by:
......
......@@ -77,4 +77,4 @@ xml-marshaller = 0.9.7
setuptools = 0.6c12dev-r88795
# Use SlapOS patched zc.buildout
zc.buildout = 1.5.3-dev-SlapOS-009
zc.buildout = 1.5.3-dev-SlapOS-010
......@@ -9,9 +9,8 @@ parts =
downloadcache-workaround
extends =
http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/stack/lamp.cfg
http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/component/apache/buildout.cfg
http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/stack/shacache-client.cfg
http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.50:/stack/lamp.cfg
http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.50:/stack/shacache-client.cfg
[application]
recipe = hexagonit.recipe.download
......@@ -39,7 +38,12 @@ eggs = ${instance-recipe:egg}
[versions]
# Use SlapOS patched zc.buildout
zc.buildout = 1.5.3-dev-SlapOS-005
zc.buildout = 1.5.3-dev-SlapOS-010
slapos.cookbook = 0.20
# Temporary fix for slapos-0.50
[lxml-python]
find-links += http://pypi.python.org/pypi/lxml/2.3.1
[downloadcache-workaround]
# workaround irritating problem of hexagonit.recipe.cmmi which automatically
......
......@@ -10,8 +10,8 @@ parts =
downloadcache-workaround
extends =
http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/stack/lamp.cfg
http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/stack/shacache-client.cfg
http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.50:/stack/lamp.cfg
http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.50:/stack/shacache-client.cfg
[application]
recipe = hexagonit.recipe.download
......@@ -51,7 +51,12 @@ eggs = ${instance-recipe:egg}
[versions]
# Use SlapOS patched zc.buildout
zc.buildout = 1.5.3-dev-SlapOS-005
zc.buildout = 1.5.3-dev-SlapOS-010
slapos.cookbook = 0.20
# Temporary fix for slapos-0.50
[lxml-python]
find-links += http://pypi.python.org/pypi/lxml/2.3.1
[downloadcache-workaround]
# workaround irritating problem of hexagonit.recipe.cmmi which automatically
......
......@@ -17,4 +17,6 @@ mysqldump_binary = ${mariadb:location}/bin/mysqldump
openssl_binary = ${openssl:location}/bin/openssl
stunnel_binary = ${stunnel:location}/bin/stunnel
gzip_binary = ${gzip:location}/bin/gzip
rdiff_backup_binary = ${buildout:bin-directory}/rdiff-backup
duplicity_binary = ${buildout:bin-directory}/duplicity
gzip_binary = ${gzip:location}/bin/gzip
zcat_binary = ${gzip:location}/bin/zcat
......@@ -12,9 +12,9 @@ extends =
../../component/logrotate/buildout.cfg
../../component/stunnel/buildout.cfg
../../component/python-2.7/buildout.cfg
../../component/rdiff-backup/buildout.cfg
../../component/lxml-python/buildout.cfg
../../component/gzip/buildout.cfg
../../component/duplicity/buildout.cfg
../../stack/shacache-client.cfg
# Use only quite well working sites.
......@@ -38,8 +38,8 @@ parts =
libxslt
eggs
gzip
rdiff-backup
instance-recipe-egg
duplicity
# XXX: Workaround of SlapOS limitation
# Unzippig of eggs is required, as SlapOS do not yet provide nicely working
......@@ -70,13 +70,13 @@ eggs =
# Default template for the instance.
recipe = slapos.recipe.template
url = ${:_profile_base_location_}/instance.cfg
md5sum = 98a9939c04a1a7c7ab6a6b2c1c6e595e
md5sum = 426f3cf33899a1f78de8b6ff35917852
output = ${buildout:directory}/template.cfg
mode = 0644
dollar = $
[versions]
slapos.cookbook = 0.25
slapos.cookbook = 0.29
# Required by slapos.cookbook==0.25
slapos.core = 0.4
......@@ -90,4 +90,4 @@ hexagonit.recipe.download = 1.5.0
plone.recipe.command = 1.1
# Use SlapOS patched zc.buildout
zc.buildout = 1.5.3-dev-SlapOS-009
zc.buildout = 1.5.3-dev-SlapOS-010
......@@ -11,7 +11,6 @@ template = ${application-template:location}/${application-template:filename}
configuration = ${application-configuration:location}
httpd_binary = ${apache:location}/bin/httpd
mysql_binary = ${mariadb:location}/bin/mysql
mysql_install_binary = ${mariadb:location}/bin/mysql_install_db
mysql_upgrade_binary = ${mariadb:location}/bin/mysql_upgrade
mysqld_binary = ${mariadb:location}/libexec/mysqld
stunnel_binary = ${stunnel:location}/bin/stunnel
davstorage-software-url = http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.52:/software/davstorage/software.cfg
mariadb-software-url = http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.54:/software/mariadb/software.cfg
......@@ -4,12 +4,11 @@ versions = versions
parts =
template
apache-php
mariadb
eggs
instance-recipe-egg
extends =
../../stack/lamp.cfg
../../stack/apache-php.cfg
../../stack/shacache-client.cfg
[application]
......@@ -41,12 +40,12 @@ eggs = ${instance-recipe:egg}
# Default template for the instance.
recipe = slapos.recipe.template
url = ${:_profile_base_location_}/instance.cfg
md5sum = efdb8509f40c86b1b73924fc1ce92f13
md5sum = c821944d1ab8d8c0305b08ea7c09c2e0
output = ${buildout:directory}/template.cfg
mode = 0644
[versions]
slapos.cookbook = 0.12
slapos.cookbook = 0.28
# Required by slapos.cookbook==0.12
slapos.core = 0.8
......@@ -60,4 +59,4 @@ hexagonit.recipe.download = 1.5.0
plone.recipe.command = 1.1
# Use SlapOS patched zc.buildout
zc.buildout = 1.5.3-dev-SlapOS-005
zc.buildout = 1.5.3-dev-SlapOS-010
[buildout]
find-links +=
http://www.nexedi.org/static/packages/source/slapos.buildout/
# Use only quite well working sites.
allow-hosts =
*.nexedi.org
*.python.org
*.sourceforge.net
dist.repoze.org
effbot.org
github.com
peak.telecommunity.com
psutil.googlecode.com
www.dabeaz.com
parts =
template
apache-php
mariadb
eggs
instance-recipe-egg
stunnel
extends =
../component/apache/buildout.cfg
../component/apache-php/buildout.cfg
../component/dcron/buildout.cfg
../component/git/buildout.cfg
../component/glib/buildout.cfg
../component/logrotate/buildout.cfg
../component/python-2.7/buildout.cfg
../component/lxml-python/buildout.cfg
../component/zlib/buildout.cfg
../component/stunnel/buildout.cfg
[application]
recipe = hexagonit.recipe.download
#If provided tarball does not containt top directory this option shall be changed to false
strip-top-level-dir = true
[eggs]
recipe = zc.recipe.egg
eggs =
${lxml-python:egg}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment