From 376ba2d2c673ae08c8ee25cb8e2730ec28f431fe Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Wed, 21 Jan 2015 12:46:41 +0000 Subject: [PATCH] changes to build scripts to package Composer generated vendor directory instead depending on PEAR and post_install to install dependencies via PEAR --- doc/rpm-build/apache.conf | 12 +-- doc/rpm-build/debian.control | 15 ++- doc/rpm-build/egroupware-epl.dsc | 2 +- doc/rpm-build/egroupware-epl.spec | 34 ++++--- doc/rpm-build/post_install.php | 150 ------------------------------ 5 files changed, 39 insertions(+), 174 deletions(-) diff --git a/doc/rpm-build/apache.conf b/doc/rpm-build/apache.conf index 70a2a3c2d4..7fc109b283 100644 --- a/doc/rpm-build/apache.conf +++ b/doc/rpm-build/apache.conf @@ -38,8 +38,8 @@ RedirectMatch ^(/principals/users/.*)$ /egroupware/groupdav.php$1 php_value max_execution_time 90 php_admin_value mbstring.func_overload 0 php_value memory_limit 128M - php_value include_path .:/usr/share/pear - php_admin_value open_basedir /usr/share/egroupware:/var/lib/egroupware:/tmp:/usr/share/pear:/usr/bin/zip:/usr/share/jpgraph:/usr/bin/tnef:/usr/bin/aspell:/usr/share/fonts + php_value include_path . + php_admin_value open_basedir /usr/share/egroupware:/var/lib/egroupware:/tmp:/usr/bin php_value upload_max_filesize 64M php_admin_value upload_tmp_dir /tmp php_value post_max_size 65M @@ -66,11 +66,3 @@ RedirectMatch ^(/principals/users/.*)$ /egroupware/groupdav.php$1 # RewriteCond %{HTTPS} !^on$ # RewriteRule .* https://%{HTTP_HOST}/%{REQUEST_URI} [L,R] # - - - php_admin_value open_basedir / - - - - php_admin_value open_basedir /usr/share/egroupware:/var/lib/egroupware:/tmp:/usr/share/pear:/usr/bin:/bin - diff --git a/doc/rpm-build/debian.control b/doc/rpm-build/debian.control index 62dfd79eb9..14a3df7724 100644 --- a/doc/rpm-build/debian.control +++ b/doc/rpm-build/debian.control @@ -10,6 +10,7 @@ Package: egroupware-epl Architecture: all Depends: egroupware-epl-core (= ${binary:Version}), + egroupware-epl-vendor (= ${binary:Version}), egroupware-epl-jdots (= ${binary:Version}), egroupware-epl-pixelegg (= ${binary:Version}), egroupware-epl-stylite (= ${binary:Version}), @@ -53,8 +54,7 @@ Depends: apache2, php5-sqlite, php5-mysql | php5-pgsql | php5-odbc, php5-json, - php5-gd, php-pear, - egroupware-epl-egw-pear, + php5-gd, php5-mcrypt, php5-xsl, ${misc:Depends} @@ -336,6 +336,17 @@ Description: web-based groupware suite - tracker application This EGroupware application is a universal tracker for bugs, feature requests, etc. with voting and bounties. +Package: egroupware-epl-vendor +Architecture: all +Depends: ${misc:Depends} +Description: web-based groupware suite - external dependencies + ${commondesc} + . + With this package EGroupware no longer depends on PEAR. + Dependencies include: + - diverse Horde framework packages like Horde_Imap_Client + - some PEAR packages incl. PEAR itself + Package: egroupware-epl-wiki Architecture: all Depends: egroupware-epl-core (>= ${binary:Version}), diff --git a/doc/rpm-build/egroupware-epl.dsc b/doc/rpm-build/egroupware-epl.dsc index 587b9f2fa6..7e4b5ffd0c 100644 --- a/doc/rpm-build/egroupware-epl.dsc +++ b/doc/rpm-build/egroupware-epl.dsc @@ -1,6 +1,6 @@ Format: 1.0 Source: egroupware-epl -Binary: egroupware-epl, egroupware-epl-core, egroupware-epl-bookmarks, egroupware-epl-calendar, egroupware-epl-developer-tools, egroupware-epl-emailadmin, egroupware-epl-esync, egroupware-epl-mail, egroupware-epl-filemanager, egroupware-epl-infolog, egroupware-epl-manual, egroupware-epl-news-admin, egroupware-epl-notifications, egroupware-epl-phpbrain, egroupware-epl-projectmanager, egroupware-epl-registration, egroupware-epl-resources, egroupware-epl-sambaadmin, egroupware-epl-sitemgr, egroupware-epl-timesheet, egroupware-epl-tracker, egroupware-epl-wiki, egroupware-epl-jdots, egroupware-epl-pixelegg +Binary: egroupware-epl, egroupware-epl-core, egroupware-epl-vendor, egroupware-epl-bookmarks, egroupware-epl-calendar, egroupware-epl-developer-tools, egroupware-epl-emailadmin, egroupware-epl-esync, egroupware-epl-mail, egroupware-epl-filemanager, egroupware-epl-infolog, egroupware-epl-manual, egroupware-epl-news-admin, egroupware-epl-notifications, egroupware-epl-phpbrain, egroupware-epl-projectmanager, egroupware-epl-registration, egroupware-epl-resources, egroupware-epl-sambaadmin, egroupware-epl-sitemgr, egroupware-epl-timesheet, egroupware-epl-tracker, egroupware-epl-wiki, egroupware-epl-jdots, egroupware-epl-pixelegg Architecture: all Version: 14.2.20141211-1 Maintainer: Ralf Becker diff --git a/doc/rpm-build/egroupware-epl.spec b/doc/rpm-build/egroupware-epl.spec index 1c5fada09c..a1ccb50c9f 100644 --- a/doc/rpm-build/egroupware-epl.spec +++ b/doc/rpm-build/egroupware-epl.spec @@ -43,14 +43,12 @@ Prefix: /usr/share %define cron cron %define apache_user wwwrun %define apache_group www - %define pear_dir \\/usr\\/share\\/php5\\/PEAR:\\/etc\\/php5 %else %define php php %define httpdconfd /etc/httpd/conf.d %define cron crontabs %define apache_user apache %define apache_group apache - %define pear_dir \\/usr\\/share\\/pear %endif %define install_log /root/%{name}-install.log @@ -82,7 +80,6 @@ Prefix: /usr/share Distribution: %{distribution} Source0: %{name}-%{version}.tar.gz -#Source1: %{name}-egw-pear-%{version}.tar.bz2 Source2: %{name}-stylite-%{version}.tar.bz2 #Source3: %{name}-pixelegg-%{version}.tar.bz2 Source4: %{name}-esyncpro-%{version}.tar.bz2 @@ -127,6 +124,7 @@ Requires: %{name}-sambaadmin = %{version} Requires: %{name}-sitemgr = %{version} Requires: %{name}-timesheet = %{version} Requires: %{name}-tracker = %{version} +Requires: %{name}-vendor = %{version} Requires: %{name}-wiki = %{version} Obsoletes: %{egw_packagename} Obsoletes: %{egw_packagename}-core @@ -176,10 +174,6 @@ Obsoletes: %{name}-egw-pear echo "Installing php -> php5 alternative"; \ /usr/sbin/update-alternatives --install /usr/bin/php php /usr/bin/php5 99; \ fi - if [ ! -f /usr/bin/pear -a -x /usr/bin/pear5 ]; then \ - echo "Installing pear -> pear5 alternative"; \ - /usr/sbin/update-alternatives --install /usr/bin/pear pear /usr/bin/pear5 99; \ - fi %endif %if 0%{?rhel_version} || 0%{?fedora_version} || 0%{?centos_version} chcon -R -u user_u -r object_r -t httpd_sys_content_t %{egwdatadir} @@ -211,7 +205,7 @@ Further contributed applications are available as separate packages. Summary: The EGroupware core Group: Web/Database Requires: %{php} >= 5.3.2 -Requires: %{php}-mbstring %{php}-gd %{php}-mcrypt %{php}-pear %{php}-posix %{extra_requires} %{cron} zip %{php}-json %{php}-xsl +Requires: %{php}-mbstring %{php}-gd %{php}-mcrypt %{php}-posix %{extra_requires} %{cron} zip %{php}-json %{php}-xsl Provides: egw-core %{version} Provides: egw-etemplate %{version} Provides: egw-addressbook %{version} @@ -487,6 +481,18 @@ Obsoletes: %{egw_packagename}-wiki %description wiki This is the wiki app for EGroupware. +%package vendor +Version: %{version} +Summary: External EGroupware dependencies +Group: Web/Database +AutoReqProv: no +%description vendor +Dependencies have been installed using Composer. +With this package EGroupware no longer depends on PEAR. +Dependencies include: +- diverse Horde framework packages like Horde_Imap_Client +- some PEAR packages incl. PEAR itself + %package esyncpro Version: %{version} Summary: Stylite eSync Provisioning @@ -495,8 +501,8 @@ Group: Web/Database AutoReqProv: no Requires: egw-core >= %{version}, %{name}-esync >= %{version} %description esyncpro -Stylite's eSync Provisioning app allows to edit and assign -policies to devices and keeps a central list of syncing devices. +Stylite's eSync Provisioning app allows to edit and assign +policies to devices and keeps a central list of syncing devices. It also allows to remote wipe or view sync logs of all devices. %post esyncpro @@ -524,7 +530,7 @@ echo "post_install: %{post_install}" [ "%{buildroot}" != "/" ] && rm -rf %{buildroot} mkdir -p $RPM_BUILD_ROOT%{egwdir} mkdir -p $RPM_BUILD_ROOT%{httpdconfd} -sed 's/\/usr\/share\/pear/%{pear_dir}/' egroupware/doc/rpm-build/apache.conf > $RPM_BUILD_ROOT%{httpdconfd}/egroupware.conf +cp egroupware/doc/rpm-build/apache.conf > $RPM_BUILD_ROOT%{httpdconfd}/egroupware.conf mkdir -p $RPM_BUILD_ROOT/etc/cron.d sed 's/apache/%{apache_user}/' egroupware/doc/rpm-build/egroupware.cron > $RPM_BUILD_ROOT/etc/cron.d/egroupware mkdir -p $RPM_BUILD_ROOT%{egwdatadir}/default/files @@ -547,6 +553,8 @@ ln -s ../../..%{egwdatadir}/header.inc.php %defattr(-,root,root) %dir %{egwdir} %{egwdir}/about.php +%{egwdir}/composer.json +%{egwdir}/composer.lock %{egwdir}/header.inc.php %{egwdir}/header.inc.php.template %{egwdir}/index.php @@ -684,6 +692,10 @@ ln -s ../../..%{egwdatadir}/header.inc.php %defattr(-,root,root) %{egwdir}/tracker +%files vendor +%defattr(-,root,root) +%{egwdir}/vendor + %files wiki %defattr(-,root,root) %{egwdir}/wiki diff --git a/doc/rpm-build/post_install.php b/doc/rpm-build/post_install.php index 7c316d2a23..6eb899757a 100755 --- a/doc/rpm-build/post_install.php +++ b/doc/rpm-build/post_install.php @@ -16,7 +16,6 @@ if (php_sapi_name() !== 'cli') // security precaution: forbit calling post_insta $verbose = false; $config = array( 'php' => '/usr/bin/php', - 'pear' => '/usr/bin/pear', 'source_dir' => '/usr/share/egroupware', 'data_dir' => '/var/lib/egroupware', 'header' => '$data_dir/header.inc.php', // symlinked to source_dir by rpm @@ -102,7 +101,6 @@ function set_distro_defaults($distro=null) case 'suse': // openSUSE 12.1+ no longer uses php5 if (file_exists('/usr/bin/php5')) $config['php'] = '/usr/bin/php5'; - if (file_exists('/usr/bin/pear5')) $config['pear'] = '/usr/bin/pear5'; $config['start_db'] = '/sbin/service mysql'; $config['autostart_db'] = '/sbin/chkconfig --level 345 mysql on'; $config['start_webserver'] = '/sbin/service apache2'; @@ -261,9 +259,6 @@ foreach(array('php','source_dir','data_dir','setup-cli') as $name) // fix important php.ini and conf.d/*.ini settings check_fix_php_apc_ini(); -// install/upgrade required pear packages -check_install_pear_packages(); - $setup_cli = $config['php'].' -d memory_limit=256M '.$config['setup-cli']; if (!file_exists($config['header']) || filesize($config['header']) < 200) // default header redirecting to setup is 147 bytes @@ -578,151 +573,6 @@ function usage($error=null) exit(0); } -/** - * Get installed pear packages, optional from a certain channel - * - * @global type $config - * @param string $channel='' - * @return null|array with package => version - */ -function pear_list($channel='') -{ - global $config; - - $out = $ret = null; - exec($config['pear'].' list'.($channel?' -c '.$channel:''),$out,$ret); - if ($channel && $ret == 1) - { - return null; - } - if ($ret) - { - echo "Error running pear command ($config[pear])!\n"; - exit(95); - } - $packages_installed = array(); - foreach($out as $line) - { - $matches = null; - if (preg_match('/^([a-z0-9_]+)\s+([0-9.]+[a-z0-9]*)\s+([a-z]+)/i',$line,$matches)) - { - $packages_installed[($channel?$channel.'/':'').$matches[1]] = $matches[2]; - } - } - return $packages_installed; -} - -/** - * Check if required PEAR packges are installed and install them if not, update pear packages with to low version - */ -function check_install_pear_packages() -{ - global $config; - $packages_installed = pear_list(); - - // some setup files use autoloader - define('EGW_SERVER_ROOT', dirname(dirname(__DIR__))); - define('EGW_INCLUDE_ROOT', EGW_SERVER_ROOT); - define('EGW_API_INC', EGW_SERVER_ROOT.'/phpgwapi/inc'); - include_once(EGW_API_INC.'/common_functions.inc.php'); - - // read required packages from apps - $packages = array('PEAR' => true); // pear must be the first, to run it's update first! - $channels = array(); - $setup_info = array(); - foreach(scandir($config['source_dir']) as $app) - { - if (is_dir($dir=$config['source_dir'].'/'.$app) && file_exists($file=$dir.'/setup/setup.inc.php')) include $file; - } - foreach($setup_info as $app => $data) - { - if (isset($data['check_install'])) - { - foreach($data['check_install'] as $package => $args) - { - if ($args['func'] == 'pear_check') - { - if (!$package) $package = 'PEAR'; - // if package is prefixed with a channel, list or discover it first - if (strpos($package, '/')) - { - list($channel) = explode('/', $package); - if (!in_array($channel, $channels)) - { - if (($channel_packages = pear_list($channel))) - { - $packages_installed += $channel_packages; - } - else - { - $discover_cmd = $config['pear'].' channel-discover '.$channel; - echo "$discover_cmd\n"; system($discover_cmd); - } - $channels[] = $channel; - } - } - // only overwrite lower version or no version - if (!isset($packages[$package]) || $packages[$package] === true || isset($args['version']) && version_compare($args['version'],$packages[$package],'>')) - { - $packages[$package] = isset($args['version']) ? $args['version'] : true; - } - } - } - } - } - //echo 'Installed: '; print_r($packages_installed); - //echo 'Required: '; print_r($packages); - $to_install = array_diff(array_keys($packages),array_keys($packages_installed)); - - $need_upgrade = array(); - foreach($packages as $package => $version) - { - if ($version !== true && $version !== '999.egw-pear' && isset($packages_installed[$package]) && - version_compare($version, $packages_installed[$package], '>')) - { - $need_upgrade[] = $package; - } - } - //echo 'Need upgrade: '; print_r($need_upgrade); - //echo 'To install: '; print_r($to_install); - if (($to_install || $need_upgrade)) - { - if (getmyuid()) - { - echo "You need to run as user root to be able to install/upgrade required PEAR packages!\n"; - } - else - { - echo "Install/upgrade required PEAR packages:\n"; - // need to run upgrades first, they might be required for install! - if ($need_upgrade) - { - if (in_array('PEAR',$need_upgrade)) // updating pear itself can be very tricky, this is what's needed for stock RHEL pear - { - $cmd = $config['pear'].' channel-update pear.php.net'; - echo "$cmd\n"; system($cmd); - $cmd = $config['pear'].' upgrade --force Console_Getopt Archive_Tar'; - echo "$cmd\n"; system($cmd); - } - $cmd = $config['pear'].' upgrade '.implode(' ',$need_upgrade); - echo "$cmd\n"; system($cmd); - } - if ($to_install) - { - // package install can fail if a required package of one to install is of an older version - // unfortunately there is no option to automatic update the required packages automatic - // as a quick fix for that situation, we always run "pear upgrade-all" first - $cmd = $config['pear'].' upgrade-all'; - echo "$cmd\n"; system($cmd); - $cmd = $config['pear'].' install '.implode(' ', $to_install); - echo "$cmd\n"; system($cmd); - } - } - } -} - -function lang() {} // required to be able to include */setup/setup.inc.php files - /** * fix egw_cache perms evtl. created by root, stoping webserver from accessing it */