diff --git a/component/imagemagick/buildout.cfg b/component/imagemagick/buildout.cfg index 96b25a2d0afdafa8306b0ed16581383ea428e1f3..bf6cec46535f22f6b1ab23a0043a4a3d2c0cbb84 100644 --- a/component/imagemagick/buildout.cfg +++ b/component/imagemagick/buildout.cfg @@ -28,8 +28,8 @@ filename = imagemagick-6.6.6-1-no-gsx-gsc-probe.patch [imagemagick] recipe = hexagonit.recipe.cmmi -url = ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.7.9-10.tar.bz2 -md5sum = f7ae7dae79e330e4b08d6c27783a9472 +url = ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.8.0-4.tar.bz2 +md5sum = 635a943f9e6e40c68bc8414754c6fcaf depends = ${libtiff:version} ${librsvg:version} diff --git a/slapos/recipe/mioga/instantiate.py b/slapos/recipe/mioga/instantiate.py index 7288b1dd43fbc6ff687fc6ecfe3737f452d44d3c..ab8057a1152dc8acc49b7aec6a1e203eba040d17 100644 --- a/slapos/recipe/mioga/instantiate.py +++ b/slapos/recipe/mioga/instantiate.py @@ -39,6 +39,7 @@ class Recipe(GenericBaseRecipe): """\ Configure a Mioga instance: + - copy over /var and /buildinst directories - call "make install-all" """ @@ -47,11 +48,9 @@ class Recipe(GenericBaseRecipe): os.remove(filepath) def install(self): - print "This is a FRESH INSTALLATION." self.instantiate(True) def update(self): - print "This is an update." self.instantiate(False) def instantiate(self, isNewInstall): @@ -68,22 +67,23 @@ class Recipe(GenericBaseRecipe): vardir = self.options['var_directory'] mioga_base = os.path.join(vardir, 'lib', 'Mioga2') fm = FileModifier('conf/Config.xml') - fm.modify('init_sql', 'yes' if isNewInstall else 'no') - fm.modify('install_dir', mioga_base) - fm.modify('tmp_dir', os.path.join(mioga_base, 'tmp')) - fm.modify('search_tmp_dir', os.path.join(mioga_base, 'mioga_search')) - fm.modify('maildir', os.path.join(vardir, 'spool', 'mioga', 'maildir')) - fm.modify('maildirerror', os.path.join(vardir, 'spool', 'mioga', 'error')) - fm.modify('mailfifo', os.path.join(vardir, 'spool', 'mioga', 'fifo')) + fm.modifyParameter('init_sql', 'yes' if isNewInstall else 'no') + fm.modifyParameter('install_dir', mioga_base) + fm.modifyParameter('tmp_dir', os.path.join(mioga_base, 'tmp')) + fm.modifyParameter('search_tmp_dir', os.path.join(mioga_base, 'mioga_search')) + fm.modifyParameter('maildir', os.path.join(vardir, 'spool', 'mioga', 'maildir')) + fm.modifyParameter('maildirerror', os.path.join(vardir, 'spool', 'mioga', 'error')) + fm.modifyParameter('mailfifo', os.path.join(vardir, 'spool', 'mioga', 'fifo')) notifier_fifo = os.path.join(vardir, 'spool', 'mioga', 'notifier') - fm.modify('notifierfifo', notifier_fifo) + fm.modifyParameter('notifierfifo', notifier_fifo) searchengine_fifo = os.path.join(vardir, 'spool', 'mioga', 'searchengine') - fm.modify('searchenginefifo', searchengine_fifo) - fm.modify('dbi_passwd', self.options['db_password']) - fm.modify('db_host', self.options['db_host']) - fm.modify('db_port', self.options['db_port']) - fm.modify('dav_host', self.options['public_ipv6']) - fm.modify('dav_port', self.options['public_ipv6_port']) + fm.modifyParameter('searchenginefifo', searchengine_fifo) + fm.modifyParameter('dbi_passwd', self.options['db_password']) + fm.modifyParameter('db_host', self.options['db_host']) + fm.modifyParameter('db_port', self.options['db_port']) + fm.modifyParameter('dav_host', self.options['public_ipv6']) + fm.modifyParameter('dav_port', self.options['public_ipv6_port']) + fm.modifyParameter('bin_dir', self.options['bin_dir']) # db_name, dbi_login are standard fm.save() # Ensure no old data is kept @@ -94,6 +94,8 @@ class Recipe(GenericBaseRecipe): environ = os.environ environ['PATH'] = ':'.join([self.options['perl_bin'], # priority! + # Mioga scripts in Makefiles and shell scripts + self.options['bin_dir'], self.options['mioga_add_to_path'], self.options['postgres_bin'], environ['PATH'] ]) @@ -116,8 +118,8 @@ class Recipe(GenericBaseRecipe): # We must call "make installall" in the SAME environment that # "perl Makefile.PL" left! - cmd = subprocess.Popen(self.options['perl_bin'] + '/perl Makefile.PL' - + ' && make installall', + cmd = subprocess.Popen(self.options['perl_bin'] + '/perl Makefile.PL disable_check' + + ' && make slapos-instantiation', env=environ, shell=True) cmd.communicate() @@ -209,14 +211,34 @@ Include conf/extra/httpd-autoindex.conf else: os.mkfifo(fifo, 0600) + mioga_conf_path = os.path.join(mioga_base, 'conf', 'Mioga.conf') notifier_wrapper = self.createPythonScript( - os.path.join(services_dir, 'notifier_wrapper'), + os.path.join(services_dir, 'notifier'), 'slapos.recipe.librecipe.execute.execute', [ os.path.join(self.options['mioga_compile_dir'], 'bin', 'notifier', 'notifier.pl'), - os.path.join(mioga_base, 'conf', 'Mioga.conf') ] + mioga_conf_path ] ) path_list.append(notifier_wrapper) + searchengine_wrapper = self.createPythonScript( + os.path.join(services_dir, 'searchengine'), + 'slapos.recipe.librecipe.execute.execute', + [ os.path.join(self.options['mioga_compile_dir'], 'bin', 'notifier', 'searchengine.pl'), + mioga_conf_path ] + ) + path_list.append(searchengine_wrapper) + + crawl_fm = FileModifier( + os.path.join(self.options['mioga_compile_dir'], 'bin', 'search', 'crawl_sample.sh') ) + # TODO: The crawl script will still call the shell command "date" + crawl_fm.modify(r'/var/tmp/crawl', self.options['log_dir'] + '/crawl') + crawl_fm.modify(r'/var/lib/Mioga2/conf', mioga_base + '/conf') + crawl_fm.modify(r'/usr/local/bin/(mioga2_(?:info|crawl|index).pl)', + self.options['site_perl'] + '/bin/' + r"\g<1>") + crawl_path = os.path.join(self.options['bin_dir'], 'crawl.sh') + crawl_fm.save(crawl_path) + os.chmod(crawl_path, stat.S_IRWXU) + if os.path.exists(self.options['pid_file']): # Reload apache configuration with open(self.options['pid_file']) as pid_file: @@ -232,7 +254,7 @@ Include conf/extra/httpd-autoindex.conf -# Copied verbatim from mioga-hooks.py - how to reuse code? +# Copied and adapted from mioga-hooks.py - how to reuse code? class FileModifier: def __init__(self, filename): self.filename = filename @@ -240,14 +262,20 @@ class FileModifier: self.content = f.read() f.close() - def modify(self, key, value): + def modifyParameter(self, key, value): (self.content, count) = re.subn( r'(<parameter[^>]*\sname\s*=\s*"' + re.escape(key) + r'"[^>]*\sdefault\s*=\s*")[^"]*', r"\g<1>" + value, self.content) return count + + def modify(self, pattern, replacement): + (self.content, count) = re.subn(pattern, replacement, self.content) + return count - def save(self): - f = open(self.filename, 'w') + def save(self, output=""): + if output == "": + output = self.filename + f = open(output, 'w') f.write(self.content) f.close() diff --git a/software/mioga/instance-apacheperl.cfg b/software/mioga/instance-apacheperl.cfg index 915b400d277ca83c6054ebf4232b380425f21ae7..ec9ff221f87ee8fbe9705d984a79195755c227b3 100644 --- a/software/mioga/instance-apacheperl.cfg +++ b/software/mioga/instance-apacheperl.cfg @@ -3,6 +3,7 @@ parts = postgres-urlparse # apacheperl-promise mioga-instance + cron-entry-crawler publish-connection-information eggs-directory = ${buildout:eggs-directory} @@ -11,6 +12,7 @@ offline = true [rootdirectory] recipe = slapos.cookbook:mkdirectory +bin = $${buildout:directory}/bin etc = $${buildout:directory}/etc srv = $${buildout:directory}/srv log = $${buildout:directory}/log @@ -21,6 +23,30 @@ recipe = slapos.cookbook:mkdirectory services = $${rootdirectory:etc}/run promises = $${rootdirectory:etc}/promise htdocs = $${rootdirectory:srv}/htdocs +cronstamps = $${rootdirectory:etc}/cronstamps/ +cron-entries = $${rootdirectory:etc}/cron.d/ +crontabs = $${rootdirectory:etc}/crontabs/ + +[cron-simplelogger] +recipe = slapos.cookbook:simplelogger +wrapper = $${rootdirectory:bin}/cron_simplelogger +log = $${rootdirectory:log}/crond.log + +[cron] +recipe = slapos.cookbook:cron +dcrond-binary = ${dcron:location}/sbin/crond +cronstamps = $${basedirectory:cronstamps} +cron-entries = $${basedirectory:cron-entries} +crontabs = $${basedirectory:crontabs} +catcher = $${cron-simplelogger:wrapper} +binary = $${basedirectory:services}/crond + +[cron-entry-crawler] +<= cron +recipe = slapos.cookbook:cron.d +name = logrotate +frequency = 23 50 * * * +command = $${mioga-instance:bin_dir}/crawl.sh [apacheperl-promise] recipe = slapos.cookbook:check_port_listening @@ -81,3 +107,6 @@ dav_locks = $${rootdirectory:var}/dav_locks services_dir = $${basedirectory:services} error_log = $${rootdirectory:log}/error.log access_log = $${rootdirectory:log}/access.log +bin_dir = $${rootdirectory:bin} +log_dir = $${rootdirectory:log} +site_perl = ${perl:siteprefix} \ No newline at end of file diff --git a/software/mioga/mioga-patch b/software/mioga/mioga-patch index a2c31b978a0024c3d72320b71bc0c0bfaf3892fa..701307a83ecbd3868ab080b33df2b3eb3eb968d2 100644 --- a/software/mioga/mioga-patch +++ b/software/mioga/mioga-patch @@ -1,7 +1,21 @@ -diff -r c0f4c1b8b448 Makefile.PL ---- a/Makefile.PL Sat Oct 06 16:15:43 2012 +0200 -+++ b/Makefile.PL Mon Oct 22 19:07:32 2012 +0200 -@@ -115,7 +115,7 @@ +diff --git a/INSTALL b/INSTALL +index ef0f369..b275a48 100644 +--- a/INSTALL ++++ b/INSTALL +@@ -382,6 +382,8 @@ A default init script is provided in file web/conf/mioga2.init.d. This script wo + Additional configuration for the Search engine + ---------------------------------------------- + ++The default init script starts the search engine daemon. ++ + You must edit the crawl_sample.sh to specify default location for configuration files and rename it to crawl.sh. + This script must be run by cron in a day basis with apache user (www-data for Debian) + +diff --git a/Makefile.PL b/Makefile.PL +index 3582d20..0d9ef77 100644 +--- a/Makefile.PL ++++ b/Makefile.PL +@@ -115,7 +115,7 @@ my $docsubdirs = "docs"; # ---------------------------------------------------------------------------- sub MY::processPL { return ' @@ -10,7 +24,7 @@ diff -r c0f4c1b8b448 Makefile.PL # between "all" and next "tardist" include config.mk -@@ -124,10 +124,7 @@ +@@ -124,10 +124,7 @@ tardist: doc dist: doc install :: if test -e $(TMP_DIR) ; then \ @@ -22,10 +36,41 @@ diff -r c0f4c1b8b448 Makefile.PL echo "===> File $(TMP_DIR) exists but is not a directory ..." ; \ exit 1 ; \ fi \ -diff -r c0f4c1b8b448 bin/mailinglist/miogamailinglist.pl ---- a/bin/mailinglist/miogamailinglist.pl Sat Oct 06 16:15:43 2012 +0200 -+++ b/bin/mailinglist/miogamailinglist.pl Mon Oct 22 19:07:32 2012 +0200 -@@ -205,11 +205,11 @@ +@@ -156,6 +153,29 @@ install-all :: + + (cd web && $(MAKE) setperms) || exit 1; + ++slapos-compilation :: install ++ for i in bin locales web ; \ ++ do \ ++ (cd $$i && $(MAKE) install) || exit 1;\ ++ done ++ # Create symlinks for static content that can be shared among all SlapOS instances ++ for i in var/lib/Mioga2/static var/lib/Mioga2/conf/themes/default var/lib/Mioga2/conf/xsl; do \ ++ mkdir -p `dirname "$(MIOGA_STATIC)/$$i"` && \ ++ mv "$(MIOGA_BASE)/$$i" "$(MIOGA_STATIC)/$$i" && \ ++ ln -s "$(MIOGA_STATIC)/$$i" "$(MIOGA_BASE)/$$i"; \ ++ done ++ # copy a minimal build system into mioga/build ++ mkdir -p "$(MIOGA_BUILDINST)" ++ cp -R --parents Makefile.PL sql web/conf conf "$(MIOGA_BUILDINST)" ++ ++slapos-instantiation :: ++ for i in web/conf conf sql ; \ ++ do \ ++ (cd $$i && $(MAKE) install) || exit 1;\ ++ done ++ ++ (cd web && $(MAKE) setperms) || exit 1; ++ + doc: + for i in ' . $docsubdirs . ' ; \ + do \ +diff --git a/bin/mailinglist/miogamailinglist.pl b/bin/mailinglist/miogamailinglist.pl +index 80668e2..fa1603a 100755 +--- a/bin/mailinglist/miogamailinglist.pl ++++ b/bin/mailinglist/miogamailinglist.pl +@@ -205,11 +205,11 @@ sub MsgSendStock sub CheckUTF8 { my ($str) = @_; @@ -39,9 +84,33 @@ diff -r c0f4c1b8b448 bin/mailinglist/miogamailinglist.pl $str = $conv->convert($str); } return $str; -diff -r c0f4c1b8b448 conf/Config.xml ---- a/conf/Config.xml Sat Oct 06 16:15:43 2012 +0200 -+++ b/conf/Config.xml Mon Oct 22 19:07:32 2012 +0200 +diff --git a/bin/notifier/searchengine.pl b/bin/notifier/searchengine.pl +index efd1ca2..fc5ba67 100755 +--- a/bin/notifier/searchengine.pl ++++ b/bin/notifier/searchengine.pl +@@ -39,8 +39,7 @@ if (!open(FIFO, "+>$fifo")) { + syslog('err', "Can't open fifo: $!. Exiting..."); + } + my $flags = fcntl(FIFO, F_GETFL, 0); +- +- ++my $crawler = $config->GetBinariesDir()."/crawl.sh"; + # MAIN LOOP + + my %instances; +@@ -53,7 +52,7 @@ while (1) { + $instances{$line} += 1; + } + foreach my $inst (keys(%instances)) { +- system("/usr/local/bin/crawl.sh $inst"); ++ system("$crawler $inst"); + } + fcntl(FIFO, F_SETFL, $flags); + } +diff --git a/conf/Config.xml b/conf/Config.xml +index e614cda..3dcccf5 100644 +--- a/conf/Config.xml ++++ b/conf/Config.xml @@ -3,6 +3,9 @@ <version module="Mioga2"/> @@ -52,9 +121,16 @@ diff -r c0f4c1b8b448 conf/Config.xml <parameter name="instance_ident" question="First Mioga instance Identifier ?" type="text" default="Mioga" xpath="/instance_ident"/> -@@ -37,6 +40,12 @@ +@@ -35,8 +38,18 @@ + <parameter name="authentication" question="Authentification method ?" + type="enum" default="Mioga2" values="Mioga2" xpath="/authentication"/> - +- ++ ++ <parameter name="bin_dir" question="Directory for helper scripts and binaries ?" ++ type="text" default="/usr/local/bin" ++ xpath="/bin_dir"/> ++ <parameter name="Database settings" type="submenu"> + <parameter name="db_host" question=" Mioga database server name or address ?" + type="text" default="localhost" @@ -65,51 +141,11 @@ diff -r c0f4c1b8b448 conf/Config.xml <parameter name="db_name" question=" Name of Mioga database ?" type="text" default="mioga2" xpath="/database/DBname"/> -diff -r c0f4c1b8b448 lib/Mioga2/Authen.pm ---- a/lib/Mioga2/Authen.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/Authen.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -87,7 +87,7 @@ - use Mioga2::GroupList; - use Mioga2::InstanceList; - --my $debug = 0; -+my $debug = 5; - - # ============================================================================ - -@@ -131,11 +131,16 @@ - if($args ne '') { - $real_uri .= "?$args"; - } -+ print STDERR "VHH DEBUG: t_uri = $t_uri , real_uri = $real_uri\n"; - - try { - $miogaconf = new Mioga2::MiogaConf($config_file); -+ print STDERR "VHH DEBUG: after miogaconf\n"; - $uri_obj = new Mioga2::URI($miogaconf, uri => $real_uri); -+ print STDERR "VHH DEBUG: after uri_obj\n"; -+ print STDERR "VHH DEBUG: mioga-ident: ".$uri_obj->GetMiogaIdent()."\n"; - $config = new Mioga2::Config($miogaconf, $uri_obj->GetMiogaIdent()); -+ print STDERR "VHH DEBUG: after config\n"; - } - catch Mioga2::Exception::Simple with { - my $err = shift; -diff -r c0f4c1b8b448 lib/Mioga2/Authz.pm ---- a/lib/Mioga2/Authz.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/Authz.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -118,7 +118,7 @@ - use Mioga2::tools::string_utils; - use Mioga2::Constants; - --my $debug = 0; -+my $debug = 5; - my $timer = 0; - - # ============================================================================ -diff -r c0f4c1b8b448 lib/Mioga2/Bottin.pm ---- a/lib/Mioga2/Bottin.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/Bottin.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -1742,11 +1742,11 @@ +diff --git a/lib/Mioga2/Bottin.pm b/lib/Mioga2/Bottin.pm +index ba4cd8d..0db5651 100644 +--- a/lib/Mioga2/Bottin.pm ++++ b/lib/Mioga2/Bottin.pm +@@ -1742,11 +1742,11 @@ sub InitSuperAdminMode { sub CheckUTF8 { my ($str) = @_; @@ -124,10 +160,11 @@ diff -r c0f4c1b8b448 lib/Mioga2/Bottin.pm $str = $conv->convert($str); } return $str; -diff -r c0f4c1b8b448 lib/Mioga2/Classes/URI.pm ---- a/lib/Mioga2/Classes/URI.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/Classes/URI.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -75,15 +75,16 @@ +diff --git a/lib/Mioga2/Classes/URI.pm b/lib/Mioga2/Classes/URI.pm +index 8678b33..bf97e71 100644 +--- a/lib/Mioga2/Classes/URI.pm ++++ b/lib/Mioga2/Classes/URI.pm +@@ -75,15 +75,16 @@ sub new { # convert uri to UTF-8 my $uri = uri_unescape($options{uri}); @@ -148,17 +185,24 @@ diff -r c0f4c1b8b448 lib/Mioga2/Classes/URI.pm $uri = $conv->convert($uri); warn "==> converted uri = '$uri'" if $debug; } -@@ -211,4 +212,4 @@ - - # ============================================================================ - 1; --__END__ -\ No newline at end of file -+__END__ -diff -r c0f4c1b8b448 lib/Mioga2/DAVFS.pm ---- a/lib/Mioga2/DAVFS.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/DAVFS.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -141,10 +141,11 @@ +diff --git a/lib/Mioga2/Config.pm b/lib/Mioga2/Config.pm +index b088823..4edac62 100644 +--- a/lib/Mioga2/Config.pm ++++ b/lib/Mioga2/Config.pm +@@ -28,7 +28,7 @@ Config.pm: Access class to the current Mioga instance configuration. + This module permits to access to the current Mioga instance + configuration parameters. + +-=head1 METHODS DESRIPTION ++=head1 METHODS DESCRIPTION + + =cut + +diff --git a/lib/Mioga2/DAVFS.pm b/lib/Mioga2/DAVFS.pm +index b56c4ad..7810f82 100644 +--- a/lib/Mioga2/DAVFS.pm ++++ b/lib/Mioga2/DAVFS.pm +@@ -141,10 +141,11 @@ use Mioga2::tools::APIAuthz; use Mioga2::tools::database; use Mioga2::tools::string_utils; use Mioga2::tools::Convert; @@ -171,7 +215,7 @@ diff -r c0f4c1b8b448 lib/Mioga2/DAVFS.pm my $MULTI_STATUS = 207; # code DAV for the Multi-status response -@@ -749,13 +750,17 @@ +@@ -756,13 +757,17 @@ sub make_request { my $host = $self->{host}; my $port = $self->{port}; @@ -190,7 +234,7 @@ diff -r c0f4c1b8b448 lib/Mioga2/DAVFS.pm ->as_string; print STDERR "[Mioga2::DAVFS::make_request] uri = $uri\n" if $debug; -@@ -767,7 +772,7 @@ +@@ -774,7 +779,7 @@ sub make_request { # process headers if ( $header =~ /^destination/i && $value !~ $dav_uri ) { @@ -199,22 +243,11 @@ diff -r c0f4c1b8b448 lib/Mioga2/DAVFS.pm $value = Mioga2::Classes::URI->new( uri => $value )->as_string; $value = $self->escapeSpecialChars($value); } -diff -r c0f4c1b8b448 lib/Mioga2/DAVProxy.pm ---- a/lib/Mioga2/DAVProxy.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/DAVProxy.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -47,7 +47,7 @@ - use Mioga2::MiogaConf; - - --my $debug = 0; -+my $debug = 5; - - # ============================================================================ - -diff -r c0f4c1b8b448 lib/Mioga2/Database.pm ---- a/lib/Mioga2/Database.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/Database.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -61,7 +61,7 @@ +diff --git a/lib/Mioga2/Database.pm b/lib/Mioga2/Database.pm +index 4afa54b..ca8368c 100644 +--- a/lib/Mioga2/Database.pm ++++ b/lib/Mioga2/Database.pm +@@ -61,7 +61,7 @@ sub new { my $self = { }; bless($self, $class); @@ -223,7 +256,7 @@ diff -r c0f4c1b8b448 lib/Mioga2/Database.pm if (!defined ($attributes{$attr})) { throw Mioga2::Exception::DB ("[Mioga2::Database::new]", "Cannot connect to database: " . $DBI::errstr); } -@@ -72,8 +72,10 @@ +@@ -72,8 +72,10 @@ sub new { my $dbiPassword = $self->{database}->{DBIpasswd}; my $dbDriver = $self->{database}->{DBIdriver}; my $dbName = $self->{database}->{DBname}; @@ -235,45 +268,48 @@ diff -r c0f4c1b8b448 lib/Mioga2/Database.pm $self->{dbh} = DBI->connect($datasource, $dbiUser, $dbiPassword); -diff -r c0f4c1b8b448 lib/Mioga2/Dispatch.pm ---- a/lib/Mioga2/Dispatch.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/Dispatch.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -96,7 +96,7 @@ - - use Mioga2::Apache; - --my $debug = 0; -+my $debug = 5; - my $timer = 0; +diff --git a/lib/Mioga2/Exception/DB.pm b/lib/Mioga2/Exception/DB.pm +index 7ce5020..bee00ca 100644 +--- a/lib/Mioga2/Exception/DB.pm ++++ b/lib/Mioga2/Exception/DB.pm +@@ -76,6 +76,17 @@ sub as_string + return $string; + } + ++# ---------------------------------------------------------------------------- ++=head2 getDBerror () ++Return the error as sent by the database connector. ++=cut ++# ---------------------------------------------------------------------------- ++sub getDBerror { ++ my ($self) = @_; ++ return $self->{errDB} ++} ++ ++ + # ============================================================================ - $Error::Debug = 1; -diff -r c0f4c1b8b448 lib/Mioga2/InstanceList.pm ---- a/lib/Mioga2/InstanceList.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/InstanceList.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -423,7 +423,9 @@ + =head1 PRIVATE METHODS DESCRIPTION +diff --git a/lib/Mioga2/InstanceList.pm b/lib/Mioga2/InstanceList.pm +index 3e2cf7a..a676a1b 100644 +--- a/lib/Mioga2/InstanceList.pm ++++ b/lib/Mioga2/InstanceList.pm +@@ -423,7 +423,9 @@ sub Store { $conf->RunHooks($self->{config}->{miogaconf}); # Run crawl.sh to initialize search engine database -- my $crawlcmd = $self->{config}->{miogaconf}->GetMiogaPrefix () . "/bin/mioga2_index.pl --conf=" . $self->{config}->GetMiogaConfPath () . ' ' . $self->Get ('ident'); +- my $crawlcmd = $self->{config}->{miogaconf}->GetMiogaPrefix () . "/bin/mioga2_index.pl --conf=" . $self->{config}->GetMiogaConfPath () . ' --search_conf=' . $self->{config}->GetInstallPath . "/conf/search_conf.xml" . ' ' . $self->Get ('ident'); + my $crawlcmd = $self->{config}->{miogaconf}->GetMiogaPrefix () . "/bin/mioga2_index.pl --conf=" . $self->{config}->GetMiogaConfPath () -+ . ' --search_conf=' . $self->{config}->{miogaconf}->GetInstallDir()."/conf/search_conf.xml" -+ . ' '. $self->Get ('ident'); ++ . ' --search_conf=' . $self->{config}->{miogaconf}->GetInstallDir()."/conf/search_conf.xml" ++ . ' '. $self->Get ('ident'); system ("$crawlcmd"); } elsif (scalar (keys (%{$self->{update}}))) { -diff -r c0f4c1b8b448 lib/Mioga2/Magellan.pm ---- a/lib/Mioga2/Magellan.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/Magellan.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -70,7 +70,7 @@ - require Mioga2::Magellan::Database; - require Mioga2::Magellan::Properties; - --my $debug = 0; -+my $debug = 5; - - # ============================================================================ - # CheckUserAccessOnMethod ($context, $user, $group, $method_ident) -@@ -327,10 +327,13 @@ +diff --git a/lib/Mioga2/Magellan.pm b/lib/Mioga2/Magellan.pm +index 86e2e42..4b3814a 100644 +--- a/lib/Mioga2/Magellan.pm ++++ b/lib/Mioga2/Magellan.pm +@@ -327,10 +327,13 @@ sub GetNodes { $mygroup = $group; } @@ -288,7 +324,7 @@ diff -r c0f4c1b8b448 lib/Mioga2/Magellan.pm ); $inconsistent = pop (@$resources); -@@ -853,7 +856,7 @@ +@@ -853,7 +856,7 @@ sub GetResource { ); print STDERR "mime = $mime\n content= $content\n" if ($debug); if ($mime) { @@ -297,10 +333,11 @@ diff -r c0f4c1b8b448 lib/Mioga2/Magellan.pm #my $encoding = $conv->convert($content); #if ($encoding) { if ($mime =~ /(application\/xml)|(text\/)|(application\/xsl)/) -diff -r c0f4c1b8b448 lib/Mioga2/Magellan/Archive.pm ---- a/lib/Mioga2/Magellan/Archive.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/Magellan/Archive.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -163,7 +163,7 @@ +diff --git a/lib/Mioga2/Magellan/Archive.pm b/lib/Mioga2/Magellan/Archive.pm +index 842ae90..3b9e7f7 100644 +--- a/lib/Mioga2/Magellan/Archive.pm ++++ b/lib/Mioga2/Magellan/Archive.pm +@@ -163,7 +163,7 @@ sub Content return undef; } @@ -309,32 +346,11 @@ diff -r c0f4c1b8b448 lib/Mioga2/Magellan/Archive.pm my %folders; while(my $file = <PRG>) { chomp($file); -diff -r c0f4c1b8b448 lib/Mioga2/Magellan/DAV.pm ---- a/lib/Mioga2/Magellan/DAV.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/Magellan/DAV.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -52,7 +52,7 @@ - use Mioga2::XML::Simple; - use Mioga2::Constants; - --my $debug = 0; -+my $debug = 5; - - my $MULTI_STATUS = 207; # code DAV for the Multi-status response - my $CREATED = 201; # code DAV for the created mkcol response -@@ -79,9 +79,11 @@ - my $user_agent; - my $request; - -+ print STDERR "VHH DEBUG: ExecuteRequest original URL: $url\n"; - # Escape URL for request - $url = st_URIEscape($url); -- -+ print STDERR "VHH DEBUG: ExecuteRequest request URL: $url\n"; -+ - $user_agent = new LWP::UserAgent(keep_alive => 0); - $request = new HTTP::Request($method, $url); - -@@ -106,7 +108,7 @@ +diff --git a/lib/Mioga2/Magellan/DAV.pm b/lib/Mioga2/Magellan/DAV.pm +index cdf77f1..116ebf4 100644 +--- a/lib/Mioga2/Magellan/DAV.pm ++++ b/lib/Mioga2/Magellan/DAV.pm +@@ -106,7 +106,7 @@ sub ExecuteRequest } if ($response->code >= 500) { @@ -343,10 +359,11 @@ diff -r c0f4c1b8b448 lib/Mioga2/Magellan/DAV.pm } return $response; -diff -r c0f4c1b8b448 lib/Mioga2/MailingList.pm ---- a/lib/Mioga2/MailingList.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/MailingList.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -749,11 +749,11 @@ +diff --git a/lib/Mioga2/MailingList.pm b/lib/Mioga2/MailingList.pm +index c7d631c..3a92466 100644 +--- a/lib/Mioga2/MailingList.pm ++++ b/lib/Mioga2/MailingList.pm +@@ -749,11 +749,11 @@ sub MailDeleteMsg sub CheckUTF8 { my ($str) = @_; @@ -361,22 +378,24 @@ diff -r c0f4c1b8b448 lib/Mioga2/MailingList.pm $str = $conv->convert($str); } return $str; -diff -r c0f4c1b8b448 lib/Mioga2/Router.pm ---- a/lib/Mioga2/Router.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/Router.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -45,7 +45,7 @@ - use Apache2::RequestUtil; - use Data::Dumper; +diff --git a/lib/Mioga2/MiogaConf.pm b/lib/Mioga2/MiogaConf.pm +index 5b74a96..a46e27c 100644 +--- a/lib/Mioga2/MiogaConf.pm ++++ b/lib/Mioga2/MiogaConf.pm +@@ -258,7 +258,7 @@ sub GetFilenameEncoding { + sub GetBinariesDir { + my ($self) = @_; --my $debug = 0; -+my $debug = 5; +- return $self->{binaries_dir}; ++ return $self->{bin_dir}; + } - #------------------------------------------------------------------------------- - # If the URI contains a single member, it can be: -diff -r c0f4c1b8b448 lib/Mioga2/Search.pm ---- a/lib/Mioga2/Search.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/Search.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -447,13 +447,13 @@ + # ============================================================================ +diff --git a/lib/Mioga2/Search.pm b/lib/Mioga2/Search.pm +index 2c20259..292f864 100644 +--- a/lib/Mioga2/Search.pm ++++ b/lib/Mioga2/Search.pm +@@ -447,13 +447,13 @@ sub CheckArgs elsif (exists($context->{args}->{query})) { $query_string = $context->{args}->{query}; } @@ -393,33 +412,11 @@ diff -r c0f4c1b8b448 lib/Mioga2/Search.pm $query_string = $conv->convert($query_string); warn "==> converted query_string = '$query_string'" if $debug; } -diff -r c0f4c1b8b448 lib/Mioga2/URI.pm ---- a/lib/Mioga2/URI.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/URI.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -812,7 +812,7 @@ - my ($self) = @_; - - my $uri = $self->{uri}; -- -+ print STDERR "VHH DEBUG: original URI is $uri\n"; - my $base_uri = $self->{miogaconf}->GetBasePath(); - - # Check base URI -@@ -820,8 +820,10 @@ - throw Mioga2::Exception::Simple("Mioga2::URI::CheckURI", - __x("URI does not begin with {pattern}.", pattern => $base_uri)); - } -+ print STDERR "VHH DEBUG: cutting away base URI: ${base_uri}\n"; - - $uri =~ s/^$base_uri([$|\/])//; -+ print STDERR "VHH DEBUG: now matching ident on ${uri}\n"; - - # Retrieve Mioga Ident - my ($mioga_ident) = split(/[\/\?]/, $uri); -diff -r c0f4c1b8b448 lib/Mioga2/tools/string_utils.pm ---- a/lib/Mioga2/tools/string_utils.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/Mioga2/tools/string_utils.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -46,6 +46,7 @@ +diff --git a/lib/Mioga2/tools/string_utils.pm b/lib/Mioga2/tools/string_utils.pm +index c56cc3b..36bfa5a 100644 +--- a/lib/Mioga2/tools/string_utils.pm ++++ b/lib/Mioga2/tools/string_utils.pm +@@ -46,6 +46,7 @@ use Mioga2::Content::XSLT; use Mioga2::XML::Simple; use Exporter; use Text::Iconv; @@ -427,7 +424,7 @@ diff -r c0f4c1b8b448 lib/Mioga2/tools/string_utils.pm use Encode::Detect::Detector; use Data::Dumper; use HTML::TokeParser::Simple; -@@ -715,14 +716,15 @@ +@@ -715,11 +716,11 @@ Check if string is UTF8 and convert it if needed sub st_CheckUTF8 { my ($str) = @_; @@ -442,14 +439,11 @@ diff -r c0f4c1b8b448 lib/Mioga2/tools/string_utils.pm $str = $conv->convert($str); utf8::decode ($str); } -+ - return ($str); - } # ---------- end of subroutine st_CheckUTF8 ---------- - -diff -r c0f4c1b8b448 lib/MiogaConf.pm ---- a/lib/MiogaConf.pm Sat Oct 06 16:15:43 2012 +0200 -+++ b/lib/MiogaConf.pm Mon Oct 22 19:07:32 2012 +0200 -@@ -811,6 +811,10 @@ +diff --git a/lib/MiogaConf.pm b/lib/MiogaConf.pm +index 0870174..bbcc80a 100644 +--- a/lib/MiogaConf.pm ++++ b/lib/MiogaConf.pm +@@ -836,6 +836,10 @@ sub CheckDepends my @missing; my @missing_clib; @@ -460,7 +454,7 @@ diff -r c0f4c1b8b448 lib/MiogaConf.pm foreach my $dep (@{$self->{CONFIG}->{dependencies}->[0]->{dep}}) { my $version; if(exists $dep->{version}) { -@@ -833,6 +837,7 @@ +@@ -858,6 +862,7 @@ sub CheckDepends } } @@ -468,26 +462,49 @@ diff -r c0f4c1b8b448 lib/MiogaConf.pm foreach my $dep (@{$self->{CONFIG}->{dependencies}->[0]->{clib}}) { my $version; -diff -r c0f4c1b8b448 sql/Makefile ---- a/sql/Makefile Sat Oct 06 16:15:43 2012 +0200 -+++ b/sql/Makefile Mon Oct 22 19:07:32 2012 +0200 -@@ -18,9 +18,9 @@ - if [ $(INIT_SQL) = 'yes' ] ; \ +diff --git a/sql/Makefile b/sql/Makefile +index 07b26f5..f6b6c0f 100644 +--- a/sql/Makefile ++++ b/sql/Makefile +@@ -1,4 +1,5 @@ + include ../config.mk ++DB_STATE=`perl -w testdb.pl` + + all: + +@@ -15,19 +16,20 @@ install: + cp upgradeMiogletDesc.pl $(DESTDIR)$(INSTALL_DIR)/conf/Config.hook.d + chmod a+x $(DESTDIR)$(INSTALL_DIR)/conf/Config.hook.d/upgradeMiogletDesc.pl + +- if [ $(INIT_SQL) = 'yes' ] ; \ ++ if [ $(DB_STATE) = 'nodb' ] ; \ then \ echo "Initialize database"; \ - su - $(POSTGRES_USER) -c "dropdb $(DB_NAME)" ; \ - su - $(POSTGRES_USER) -c "createdb --encoding UTF8 $(DB_NAME)" && \ - su $(POSTGRES_USER) -c "psql $(DB_NAME) < create_lang.sql" && \ +- perl -w -I../lib initdb.pl ; \ +- elif [ $(INIT_SQL) != 'noupdate' ]; then \ + dropdb -h $(DB_HOST) -p $(DB_PORT) -U $(DBI_LOGIN) $(DB_NAME) ; \ + createdb --encoding UTF8 -h $(DB_HOST) -p $(DB_PORT) -U $(DBI_LOGIN) $(DB_NAME) && \ + psql -h $(DB_HOST) -p $(DB_PORT) -U $(DBI_LOGIN) $(DB_NAME) < create_lang.sql && \ - perl -w -I../lib initdb.pl ; \ - elif [ $(INIT_SQL) != 'noupdate' ]; then \ ++ perl -w -I../lib initdb.pl force_init_sql=1; \ ++ elif [ $(DB_STATE) = 'present' ]; then \ echo "Update database"; \ -diff -r c0f4c1b8b448 sql/schema_base.sql ---- a/sql/schema_base.sql Sat Oct 06 16:15:43 2012 +0200 -+++ b/sql/schema_base.sql Mon Oct 22 19:07:32 2012 +0200 -@@ -429,10 +429,6 @@ + perl -w -I../lib updatedb.pl configxml=$(DESTDIR)$(INSTALL_DIR)/conf/Config.xml; \ ++ elif [ $(DB_STATE) = 'noserver' ]; then \ ++ echo "ERROR: Cannot connect to the database server!"; \ + fi + +- + clean: + rm -f *~ + +diff --git a/sql/schema_base.sql b/sql/schema_base.sql +index b7d8cc2..88d5e2d 100644 +--- a/sql/schema_base.sql ++++ b/sql/schema_base.sql +@@ -429,10 +429,6 @@ CREATE OR REPLACE FUNCTION check_group_base_default_profile_id () RETURNS trigge END; ' LANGUAGE 'plpgsql'; @@ -498,7 +515,7 @@ diff -r c0f4c1b8b448 sql/schema_base.sql CREATE OR REPLACE FUNCTION check_group_base_mioga_id () RETURNS trigger AS ' DECLARE -@@ -839,6 +835,10 @@ +@@ -839,6 +835,10 @@ create table m_profile ( ); create unique index m_profile_ident_group_index on m_profile (ident, group_id); @@ -509,10 +526,75 @@ diff -r c0f4c1b8b448 sql/schema_base.sql -- -- Add referencial integrity on default_profile_id in m_group_base -diff -r c0f4c1b8b448 web/conf/startup.pl ---- a/web/conf/startup.pl Sat Oct 06 16:15:43 2012 +0200 -+++ b/web/conf/startup.pl Mon Oct 22 19:07:32 2012 +0200 -@@ -29,6 +29,7 @@ +diff --git a/sql/testdb.pl b/sql/testdb.pl +new file mode 100755 +index 0000000..2fa3fe7 +--- /dev/null ++++ b/sql/testdb.pl +@@ -0,0 +1,37 @@ ++#!/usr/bin/perl -w ++ ++# Tests the availability of the Mioga2 database. ++# Returns on stdout one of: ++# 'present' - The Mioga2 database has been found. ++# 'nodb' - There is no Mioga2 database but the database server is working fine ++# (i.e. one can try to create the database) ++# 'noserver' - Connection to the database server failed. ++ ++# This has been written for Mioga2/SlapOS, to avoid overwriting the database ++# when re-instantiating the Apache/mod_perl partition. ++ ++use strict; ++use lib "../lib"; ++ ++use Data::Dumper; ++use Error qw(:try); ++use Mioga2::Exception::DB; ++use Mioga2::MiogaConf; ++ ++# TODO: get this through a parameter? ++# my $configxml = "../conf/Config.xml"; ++my $miogaconf = "../web/conf/Mioga.conf"; ++ ++try { ++ my $config = new Mioga2::MiogaConf($miogaconf); ++ print 'present'; ++} catch Mioga2::Exception::DB with { ++ my $err = shift; ++ if ($err->getDBerror() =~ m#database "mioga2" does not exist#) { ++ print 'nodb'; ++ } else { ++ print 'noserver'; ++ } ++} otherwise { ++ print 'noserver'; ++} +diff --git a/web/Makefile b/web/Makefile +index 66af45f..9649a02 100644 +--- a/web/Makefile ++++ b/web/Makefile +@@ -16,11 +16,11 @@ all :: + + + install :: +- if [ $(INIT_SQL) = 'yes' -a -d $(INSTALL_DIR) ] ; \ +- then \ +- su - $(POSTGRES_USER) -c "pg_dump -b -Ft --column-inserts $(DB_NAME) | gzip" > ${INSTALL_DIR}/db_dump.tar.gz ; \ +- mv $(INSTALL_DIR) $(BACKUP_DIR) ; \ +- fi ++# if [ $(INIT_SQL) = 'yes' -a -d $(INSTALL_DIR) ] ; \ ++# then \ ++# su - $(POSTGRES_USER) -c "pg_dump -b -Ft --column-inserts $(DB_NAME) | gzip" > ${INSTALL_DIR}/db_dump.tar.gz ; \ ++# mv $(INSTALL_DIR) $(BACKUP_DIR) ; \ ++# fi + + mkdir -p $(TMP_DIR) + mkdir -p $(DESTDIR)$(INSTALL_DIR)/$(INSTANCE_IDENT)/$(MIOGA_FILES) +diff --git a/web/conf/startup.pl b/web/conf/startup.pl +index a9dc968..6558061 100644 +--- a/web/conf/startup.pl ++++ b/web/conf/startup.pl +@@ -29,6 +29,7 @@ use MIME::Entity (); use MIME::Parser (); use MIME::QuotedPrint (); use MiogaConf (); @@ -520,3 +602,16 @@ diff -r c0f4c1b8b448 web/conf/startup.pl use Net::LDAP (); use Parse::Yapp::Driver (); use Storable (); +diff --git a/web/skel/Makefile b/web/skel/Makefile +index e604e7d..fbaad2d 100644 +--- a/web/skel/Makefile ++++ b/web/skel/Makefile +@@ -33,7 +33,7 @@ fr_FR : $(SRC_FR_FILES) + install: + rsync $(RSYNC_OPTS) $(SUBDIRS) $(DESTDIR)$(INSTALL_DIR)/conf/skel/ + # Update instance default skeletons +- for i in `mioga2_info.pl --conf=$(DESTDIR)$(INSTALL_DIR)/conf/Mioga.conf instances`; do if [ ! -d /var/lib/Mioga2/$$i/MiogaFiles/skel/ ]; then mkdir $(DESTDIR)$(INSTALL_DIR)/$$i/MiogaFiles/skel/; fi; cp -R $(DESTDIR)$(INSTALL_DIR)/conf/skel/* $(DESTDIR)$(INSTALL_DIR)/$$i/MiogaFiles/skel/; done ++# for i in `mioga2_info.pl --conf=$(DESTDIR)$(INSTALL_DIR)/conf/Mioga.conf instances`; do if [ ! -d /var/lib/Mioga2/$$i/MiogaFiles/skel/ ]; then mkdir $(DESTDIR)$(INSTALL_DIR)/$$i/MiogaFiles/skel/; fi; cp -R $(DESTDIR)$(INSTALL_DIR)/conf/skel/* $(DESTDIR)$(INSTALL_DIR)/$$i/MiogaFiles/skel/; done + + clean: + rm -rf $(SUBDIRS) diff --git a/software/mioga/software.cfg b/software/mioga/software.cfg index fee736e9b95ae74267ff6185f8884969d2bdb455..7bda2cc6edd900def94b8b69d522016fa5347a76 100644 --- a/software/mioga/software.cfg +++ b/software/mioga/software.cfg @@ -16,6 +16,7 @@ extends = ../../component/perl-DBD-Pg/buildout.cfg ../../component/perl-Search-Xapian/buildout.cfg ../../component/libxslt/buildout.cfg + ../../component/dcron/buildout.cfg ../../component/lxml-python/buildout.cfg ../../stack/slapos.cfg @@ -90,12 +91,18 @@ configure-command = [mioga] recipe = hexagonit.recipe.cmmi -version = 2.4.14 +version = 2.4.16 # No use re-using "version", the whole URL will change for the next one -url = http://www.alixen.org/attachments/download/87/Mioga2-2.4.14.tar.gz -md5sum = 8282ae4b93fcea3f346168e6a855f65c +url = http://www.alixen.org/attachments/download/89/Mioga2-2.4.16.tar.gz +md5sum = 1d2e76c798ee6d5f233011997200e125 +location = ${buildout:parts-directory}/${:_buildout_section_name_} +buildinst = ${mioga:location}/buildinst +static = ${mioga:location}/static environment = - PATH=${libxslt:location}/bin:${libxml2:location}/bin:%(PATH)s + MIOGA_BASE=${mioga:location} + MIOGA_BUILDINST=${mioga:buildinst} + MIOGA_STATIC=${mioga:static} + PATH=${libxslt:location}/bin:${libxml2:location}/bin:${perl:location}/bin:${perl:siteprefix}/bin:%(PATH)s patch-options = -p1 patches = ${mioga-patch:location}/${mioga-patch:filename} @@ -103,6 +110,8 @@ patches = pre-configure-hook = ${mioga-hooks:location}/${mioga-hooks:filename}:pre_configure_hook configure-command = ${perl:location}/bin/perl Makefile.PL +make-targets = + slapos-compilation keep-compile-dir = true perl-binary = ${perl:location}/bin/perl