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 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) 0.25 (2011-09-21)
----------------- -----------------
......
...@@ -3,6 +3,8 @@ parts = apache-php ...@@ -3,6 +3,8 @@ parts = apache-php
extends = extends =
../apache/buildout.cfg ../apache/buildout.cfg
../mariadb/buildout.cfg
../libtool/buildout.cfg
[apache-php] [apache-php]
# Note: Shall react on each build of apache and reinstall itself # 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 ...@@ -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_} filename = ${:_buildout_section_name_}
download-only = true 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] [apache]
# inspired on http://old.aclark.net/team/aclark/blog/a-lamp-buildout-for-wordpress-and-other-php-apps/ # inspired on http://old.aclark.net/team/aclark/blog/a-lamp-buildout-for-wordpress-and-other-php-apps/
recipe = hexagonit.recipe.cmmi recipe = hexagonit.recipe.cmmi
......
...@@ -35,8 +35,8 @@ filename = imagemagick-6.6.7-4-without-lzma.patch ...@@ -35,8 +35,8 @@ filename = imagemagick-6.6.7-4-without-lzma.patch
[imagemagick] [imagemagick]
recipe = hexagonit.recipe.cmmi recipe = hexagonit.recipe.cmmi
url = http://ftp.sunet.se/pub/multimedia/graphics/ImageMagick/ImageMagick-6.7.2-9.tar.bz2 url = ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.7.2-10.tar.bz2
md5sum = 553008eb69f3caf1c5b0b3222c29bb18 md5sum = 073ec5d7f2a22db96a0e87e4322b75f9
configure-options = configure-options =
--disable-static --disable-static
--without-x --without-x
......
...@@ -2,7 +2,7 @@ from setuptools import setup, find_packages ...@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
import glob import glob
import os import os
version = '0.26-dev' version = '0.31-dev'
name = 'slapos.cookbook' name = 'slapos.cookbook'
long_description = open("README.txt").read() + "\n" + \ long_description = open("README.txt").read() + "\n" + \
open("CHANGES.txt").read() + "\n" open("CHANGES.txt").read() + "\n"
......
...@@ -41,13 +41,12 @@ class Recipe(BaseSlapRecipe): ...@@ -41,13 +41,12 @@ class Recipe(BaseSlapRecipe):
self.path_list = [] self.path_list = []
self.requirements, self.ws = self.egg.working_set() self.requirements, self.ws = self.egg.working_set()
document_root = self.createDataDirectory('www') document_root = self.createDataDirectory('www')
self.apache_config = self.installApache(document_root) apache_config = self.installApache(document_root)
self.setConnectionDict( self.setConnectionUrl(scheme='webdavs',
dict(url='https://[%s]:%s/' % (self.apache_config['ip'], host=apache_config['ip'],
self.apache_config['port']), port=apache_config['port'],
user=self.apache_config['user'], auth=(apache_config['user'],
password=self.apache_config['password']), apache_config['password']))
)
return self.path_list return self.path_list
def installApache(self, document_root, ip=None, port=None): def installApache(self, document_root, ip=None, port=None):
......
...@@ -31,8 +31,13 @@ import pkg_resources ...@@ -31,8 +31,13 @@ import pkg_resources
import zc.buildout import zc.buildout
import sys import sys
import zc.recipe.egg import zc.recipe.egg
import urlparse
class BaseRecipe(BaseSlapRecipe): 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): def installMysqlServer(self, ip=None, port=None):
if ip is None: if ip is None:
ip = self.getLocalIPv4Address() ip = self.getLocalIPv4Address()
...@@ -179,28 +184,60 @@ class Request(BaseRecipe): ...@@ -179,28 +184,60 @@ class Request(BaseRecipe):
self.path_list = [] self.path_list = []
self.requirements, self.ws = self.egg.working_set() self.requirements, self.ws = self.egg.working_set()
software_type = self.parameter_dict['slap_software_type'] software_type = self.parameter_dict['slap_software_type']
if software_type == 'RootSoftwareInstance':
document_root = self.createDataDirectory('htdocs') document_root = self.createDataDirectory('htdocs')
self.createHtdocs(self.options['source'].strip(), document_root) self.createHtdocs(self.options['source'].strip(), document_root)
mysql = self.request(self.software_release_url, 'MySQL Server', 'mysql')
mysql_conf = dict( if software_type == 'Backuped':
mysql_host=mysql.getConnectionParameter('mysql_host'), davstorage = self.request(self.options['davstorage-software-url'],
mysql_port=mysql.getConnectionParameter('mysql_port'), software_type, 'Backup Server').getConnectionParameter('url')
mysql_user=mysql.getConnectionParameter('mysql_user'),
mysql_password=mysql.getConnectionParameter('mysql_password'), parameters = {'remote_backup': davstorage}
mysql_database=mysql.getConnectionParameter('mysql_database'), elif software_type == 'PersonnalBackup':
) parameters = {'remote_backup': self.parameter_dict['remote_backup']}
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: else:
raise zc.buildout.UserError('Uknown software type %r' % software_type) 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)
return self.path_list 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 ...@@ -53,3 +53,4 @@ LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so LoadModule headers_module modules/mod_headers.so
LoadModule dir_module modules/mod_dir.so LoadModule dir_module modules/mod_dir.so
LoadModule php5_module modules/libphp5.so LoadModule php5_module modules/libphp5.so
LoadModule alias_module modules/mod_alias.so
...@@ -2,13 +2,17 @@ ...@@ -2,13 +2,17 @@
engine = On engine = On
safe_mode = Off safe_mode = Off
expose_php = Off expose_php = Off
error_reporting = E_ALL | E_STRICT error_reporting = E_ALL & ~(E_DEPRECATED|E_NOTICE|E_WARNING)
display_errors = Off display_errors = On
display_startup_errors = Off display_startup_errors = Off
log_errors = On log_errors = On
log_errors_max_len = 1024 log_errors_max_len = 1024
ignore_repeated_errors = Off ignore_repeated_errors = Off
ignore_repeated_source = Off ignore_repeated_source = Off
session.save_path = "%(tmp_directory)s" session.save_path = "%(tmp_directory)s"
session.auto_start = 1 session.auto_start = 0
date.timezone = Europe/Paris date.timezone = Europe/Paris
\ No newline at end of file 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 ...@@ -33,6 +33,8 @@ from hashlib import md5
import stat import stat
import netaddr import netaddr
import time import time
import re
import urlparse
class BaseSlapRecipe: class BaseSlapRecipe:
"""Base class for all slap.recipe.*""" """Base class for all slap.recipe.*"""
...@@ -256,3 +258,34 @@ class BaseSlapRecipe: ...@@ -256,3 +258,34 @@ class BaseSlapRecipe:
promise_path = os.path.join(self.promise_directory, promise_name) promise_path = os.path.join(self.promise_directory, promise_name)
self._writeExecutable(promise_path, file_content) self._writeExecutable(promise_path, file_content)
return promise_path 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): ...@@ -44,6 +44,7 @@ class Recipe(BaseSlapRecipe):
return arg return arg
def _install(self): def _install(self):
self.software_type = self.parameter_dict['slap_software_type']
self.path_list = [] self.path_list = []
self.requirements, self.ws = self.egg.working_set() self.requirements, self.ws = self.egg.working_set()
...@@ -63,13 +64,12 @@ class Recipe(BaseSlapRecipe): ...@@ -63,13 +64,12 @@ class Recipe(BaseSlapRecipe):
ca_conf['certificate_authority_path']) ca_conf['certificate_authority_path'])
self.linkBinary() self.linkBinary()
self.setConnectionDict(dict( self.setConnectionUrl(scheme='mysqls',
stunnel_ip = stunnel_conf['public_ip'], host=stunnel_conf['public_ip'],
stunnel_port = stunnel_conf['public_port'], port=stunnel_conf['public_port'],
mysql_database = mysql_conf['mysql_database'], auth=(mysql_conf['mysql_user'],
mysql_user = mysql_conf['mysql_user'], mysql_conf['mysql_password']),
mysql_password = mysql_conf['mysql_password'], path=mysql_conf['mysql_database'])
))
return self.path_list return self.path_list
def linkBinary(self): def linkBinary(self):
...@@ -141,7 +141,6 @@ class Recipe(BaseSlapRecipe): ...@@ -141,7 +141,6 @@ class Recipe(BaseSlapRecipe):
def installCertificateAuthority(self, ca_country_code='XX', def installCertificateAuthority(self, ca_country_code='XX',
ca_email='xx@example.com', ca_state='State', ca_city='City', ca_email='xx@example.com', ca_state='State', ca_city='City',
ca_company='Company'): ca_company='Company'):
backup_path = self.createBackupDirectory('ca')
self.ca_dir = os.path.join(self.data_root_directory, 'ca') self.ca_dir = os.path.join(self.data_root_directory, 'ca')
self._createDirectory(self.ca_dir) self._createDirectory(self.ca_dir)
self.ca_request_dir = os.path.join(self.ca_dir, 'requests') self.ca_request_dir = os.path.join(self.ca_dir, 'requests')
...@@ -182,15 +181,6 @@ class Recipe(BaseSlapRecipe): ...@@ -182,15 +181,6 @@ class Recipe(BaseSlapRecipe):
crl=os.path.join(self.ca_crl), crl=os.path.join(self.ca_crl),
request_dir=self.ca_request_dir 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( return dict(
ca_certificate=os.path.join(config['ca_dir'], 'cacert.pem'), ca_certificate=os.path.join(config['ca_dir'], 'cacert.pem'),
ca_crl=os.path.join(config['ca_dir'], 'crl'), ca_crl=os.path.join(config['ca_dir'], 'crl'),
...@@ -230,6 +220,7 @@ class Recipe(BaseSlapRecipe): ...@@ -230,6 +220,7 @@ class Recipe(BaseSlapRecipe):
stunnel_conf_path = self.createConfigurationFile("stunnel.conf", stunnel_conf_path = self.createConfigurationFile("stunnel.conf",
self.substituteTemplate(template_filename, self.substituteTemplate(template_filename,
stunnel_conf)) stunnel_conf))
self.path_list.append(stunnel_conf_path)
wrapper = zc.buildout.easy_install.scripts([('stunnel', wrapper = zc.buildout.easy_install.scripts([('stunnel',
'slapos.recipe.librecipe.execute', 'execute_wait')], self.ws, 'slapos.recipe.librecipe.execute', 'execute_wait')], self.ws,
sys.executable, self.wrapper_directory, arguments=[ sys.executable, self.wrapper_directory, arguments=[
...@@ -319,7 +310,7 @@ class Recipe(BaseSlapRecipe): ...@@ -319,7 +310,7 @@ class Recipe(BaseSlapRecipe):
mysql_backup_cron = os.path.join(self.cron_d, 'mysql_backup') mysql_backup_cron = os.path.join(self.cron_d, 'mysql_backup')
with open(mysql_backup_cron, 'w') as file_: with open(mysql_backup_cron, 'w') as file_:
file_.write('0 0 * * * %(mysqldump)s | %(gzip)s > %(tmpdump)s' \ 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, 'mysqldump': mysqldump_cmdline_str,
'gzip': self.options['gzip_binary'], 'gzip': self.options['gzip_binary'],
'tmpdump': self.parseCmdArgument(tmpdump_file), 'tmpdump': self.parseCmdArgument(tmpdump_file),
...@@ -328,5 +319,35 @@ class Recipe(BaseSlapRecipe): ...@@ -328,5 +319,35 @@ class Recipe(BaseSlapRecipe):
) )
self.path_list.append(mysql_backup_cron) self.path_list.append(mysql_backup_cron)
mysql_conf.update(backup_directory=backup_directory) 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 ... # The return could be more explicit database, user ...
return mysql_conf return mysql_conf
...@@ -16,8 +16,8 @@ def runMysql(args): ...@@ -16,8 +16,8 @@ def runMysql(args):
# XXX: Protect with proper root password # XXX: Protect with proper root password
# XXX: Follow http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html # XXX: Follow http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html
popen = subprocess.Popen([conf['mysql_install_binary'], popen = subprocess.Popen([conf['mysql_install_binary'],
'--skip-name-resolve', '--no-defaults', '--datadir=%s' % '--skip-name-resolve', '--skip-host-cache', '--no-defaults',
conf['data_directory']], '--datadir=%s' % conf['data_directory']],
stdout=subprocess.PIPE, stderr=subprocess.STDOUT) stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
result = popen.communicate()[0] result = popen.communicate()[0]
if popen.returncode is None or popen.returncode != 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 ...@@ -63,14 +63,14 @@ mode = 0644
python = python2.7 python = python2.7
[versions] [versions]
zc.buildout = 1.5.3-dev-SlapOS-009 zc.buildout = 1.5.3-dev-SlapOS-010
Jinja2 = 2.6 Jinja2 = 2.6
Werkzeug = 0.7.1 Werkzeug = 0.7.1
buildout-versions = 1.6 buildout-versions = 1.6
hexagonit.recipe.cmmi = 1.5.0 hexagonit.recipe.cmmi = 1.5.0
hexagonit.recipe.download = 1.5.0 hexagonit.recipe.download = 1.5.0
meld3 = 0.6.7 meld3 = 0.6.7
slapos.cookbook = 0.24 slapos.cookbook = 0.26
slapos.recipe.template = 1.1 slapos.recipe.template = 1.1
# Required by: # Required by:
......
...@@ -36,7 +36,7 @@ mode = 0644 ...@@ -36,7 +36,7 @@ mode = 0644
# Default json schema for instance parameters. # Default json schema for instance parameters.
recipe = slapos.recipe.template recipe = slapos.recipe.template
url = ${:_profile_base_location_}/configuration.json url = ${:_profile_base_location_}/configuration.json
md5sum = cbe1d75339c6cb20e1aef818797face1 md5sum = cbe1d75339c6cb20e1aef818797face1
output = ${buildout:directory}/schema.json output = ${buildout:directory}/schema.json
mode = 0644 mode = 0644
......
...@@ -77,4 +77,4 @@ xml-marshaller = 0.9.7 ...@@ -77,4 +77,4 @@ xml-marshaller = 0.9.7
setuptools = 0.6c12dev-r88795 setuptools = 0.6c12dev-r88795
# Use SlapOS patched zc.buildout # 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 = ...@@ -9,9 +9,8 @@ parts =
downloadcache-workaround downloadcache-workaround
extends = extends =
http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/stack/lamp.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/HEAD:/component/apache/buildout.cfg http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.50:/stack/shacache-client.cfg
http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/stack/shacache-client.cfg
[application] [application]
recipe = hexagonit.recipe.download recipe = hexagonit.recipe.download
...@@ -39,7 +38,12 @@ eggs = ${instance-recipe:egg} ...@@ -39,7 +38,12 @@ eggs = ${instance-recipe:egg}
[versions] [versions]
# Use SlapOS patched zc.buildout # 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] [downloadcache-workaround]
# workaround irritating problem of hexagonit.recipe.cmmi which automatically # workaround irritating problem of hexagonit.recipe.cmmi which automatically
......
...@@ -10,8 +10,8 @@ parts = ...@@ -10,8 +10,8 @@ parts =
downloadcache-workaround downloadcache-workaround
extends = extends =
http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/stack/lamp.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/HEAD:/stack/shacache-client.cfg http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.50:/stack/shacache-client.cfg
[application] [application]
recipe = hexagonit.recipe.download recipe = hexagonit.recipe.download
...@@ -51,7 +51,12 @@ eggs = ${instance-recipe:egg} ...@@ -51,7 +51,12 @@ eggs = ${instance-recipe:egg}
[versions] [versions]
# Use SlapOS patched zc.buildout # 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] [downloadcache-workaround]
# workaround irritating problem of hexagonit.recipe.cmmi which automatically # workaround irritating problem of hexagonit.recipe.cmmi which automatically
......
...@@ -17,4 +17,6 @@ mysqldump_binary = ${mariadb:location}/bin/mysqldump ...@@ -17,4 +17,6 @@ mysqldump_binary = ${mariadb:location}/bin/mysqldump
openssl_binary = ${openssl:location}/bin/openssl openssl_binary = ${openssl:location}/bin/openssl
stunnel_binary = ${stunnel:location}/bin/stunnel stunnel_binary = ${stunnel:location}/bin/stunnel
gzip_binary = ${gzip:location}/bin/gzip 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 = ...@@ -12,9 +12,9 @@ extends =
../../component/logrotate/buildout.cfg ../../component/logrotate/buildout.cfg
../../component/stunnel/buildout.cfg ../../component/stunnel/buildout.cfg
../../component/python-2.7/buildout.cfg ../../component/python-2.7/buildout.cfg
../../component/rdiff-backup/buildout.cfg
../../component/lxml-python/buildout.cfg ../../component/lxml-python/buildout.cfg
../../component/gzip/buildout.cfg ../../component/gzip/buildout.cfg
../../component/duplicity/buildout.cfg
../../stack/shacache-client.cfg ../../stack/shacache-client.cfg
# Use only quite well working sites. # Use only quite well working sites.
...@@ -38,8 +38,8 @@ parts = ...@@ -38,8 +38,8 @@ parts =
libxslt libxslt
eggs eggs
gzip gzip
rdiff-backup
instance-recipe-egg instance-recipe-egg
duplicity
# XXX: Workaround of SlapOS limitation # XXX: Workaround of SlapOS limitation
# Unzippig of eggs is required, as SlapOS do not yet provide nicely working # Unzippig of eggs is required, as SlapOS do not yet provide nicely working
...@@ -70,13 +70,13 @@ eggs = ...@@ -70,13 +70,13 @@ eggs =
# Default template for the instance. # Default template for the instance.
recipe = slapos.recipe.template recipe = slapos.recipe.template
url = ${:_profile_base_location_}/instance.cfg url = ${:_profile_base_location_}/instance.cfg
md5sum = 98a9939c04a1a7c7ab6a6b2c1c6e595e md5sum = 426f3cf33899a1f78de8b6ff35917852
output = ${buildout:directory}/template.cfg output = ${buildout:directory}/template.cfg
mode = 0644 mode = 0644
dollar = $ dollar = $
[versions] [versions]
slapos.cookbook = 0.25 slapos.cookbook = 0.29
# Required by slapos.cookbook==0.25 # Required by slapos.cookbook==0.25
slapos.core = 0.4 slapos.core = 0.4
...@@ -90,4 +90,4 @@ hexagonit.recipe.download = 1.5.0 ...@@ -90,4 +90,4 @@ hexagonit.recipe.download = 1.5.0
plone.recipe.command = 1.1 plone.recipe.command = 1.1
# Use SlapOS patched zc.buildout # 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} ...@@ -11,7 +11,6 @@ template = ${application-template:location}/${application-template:filename}
configuration = ${application-configuration:location} configuration = ${application-configuration:location}
httpd_binary = ${apache:location}/bin/httpd httpd_binary = ${apache:location}/bin/httpd
mysql_binary = ${mariadb:location}/bin/mysql stunnel_binary = ${stunnel:location}/bin/stunnel
mysql_install_binary = ${mariadb:location}/bin/mysql_install_db davstorage-software-url = http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.52:/software/davstorage/software.cfg
mysql_upgrade_binary = ${mariadb:location}/bin/mysql_upgrade mariadb-software-url = http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.54:/software/mariadb/software.cfg
mysqld_binary = ${mariadb:location}/libexec/mysqld
...@@ -4,12 +4,11 @@ versions = versions ...@@ -4,12 +4,11 @@ versions = versions
parts = parts =
template template
apache-php apache-php
mariadb
eggs eggs
instance-recipe-egg instance-recipe-egg
extends = extends =
../../stack/lamp.cfg ../../stack/apache-php.cfg
../../stack/shacache-client.cfg ../../stack/shacache-client.cfg
[application] [application]
...@@ -41,12 +40,12 @@ eggs = ${instance-recipe:egg} ...@@ -41,12 +40,12 @@ eggs = ${instance-recipe:egg}
# Default template for the instance. # Default template for the instance.
recipe = slapos.recipe.template recipe = slapos.recipe.template
url = ${:_profile_base_location_}/instance.cfg url = ${:_profile_base_location_}/instance.cfg
md5sum = efdb8509f40c86b1b73924fc1ce92f13 md5sum = c821944d1ab8d8c0305b08ea7c09c2e0
output = ${buildout:directory}/template.cfg output = ${buildout:directory}/template.cfg
mode = 0644 mode = 0644
[versions] [versions]
slapos.cookbook = 0.12 slapos.cookbook = 0.28
# Required by slapos.cookbook==0.12 # Required by slapos.cookbook==0.12
slapos.core = 0.8 slapos.core = 0.8
...@@ -60,4 +59,4 @@ hexagonit.recipe.download = 1.5.0 ...@@ -60,4 +59,4 @@ hexagonit.recipe.download = 1.5.0
plone.recipe.command = 1.1 plone.recipe.command = 1.1
# Use SlapOS patched zc.buildout # 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