changes to build scripts to package Composer generated vendor directory instead depending on PEAR and post_install to install dependencies via PEAR

This commit is contained in:
Ralf Becker 2015-01-21 12:46:41 +00:00
parent 9bd80cdfc4
commit 376ba2d2c6
5 changed files with 39 additions and 174 deletions

View File

@ -38,8 +38,8 @@ RedirectMatch ^(/principals/users/.*)$ /egroupware/groupdav.php$1
php_value max_execution_time 90 php_value max_execution_time 90
php_admin_value mbstring.func_overload 0 php_admin_value mbstring.func_overload 0
php_value memory_limit 128M php_value memory_limit 128M
php_value include_path .:/usr/share/pear php_value include_path .
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_admin_value open_basedir /usr/share/egroupware:/var/lib/egroupware:/tmp:/usr/bin
php_value upload_max_filesize 64M php_value upload_max_filesize 64M
php_admin_value upload_tmp_dir /tmp php_admin_value upload_tmp_dir /tmp
php_value post_max_size 65M php_value post_max_size 65M
@ -66,11 +66,3 @@ RedirectMatch ^(/principals/users/.*)$ /egroupware/groupdav.php$1
# RewriteCond %{HTTPS} !^on$ # RewriteCond %{HTTPS} !^on$
# RewriteRule .* https://%{HTTP_HOST}/%{REQUEST_URI} [L,R] # RewriteRule .* https://%{HTTP_HOST}/%{REQUEST_URI} [L,R]
#</Directory> #</Directory>
<Directory /usr/share/egroupware/phpsysinfo/>
php_admin_value open_basedir /
</Directory>
<Directory /usr/share/egroupware/gallery/>
php_admin_value open_basedir /usr/share/egroupware:/var/lib/egroupware:/tmp:/usr/share/pear:/usr/bin:/bin
</Directory>

View File

@ -10,6 +10,7 @@ Package: egroupware-epl
Architecture: all Architecture: all
Depends: Depends:
egroupware-epl-core (= ${binary:Version}), egroupware-epl-core (= ${binary:Version}),
egroupware-epl-vendor (= ${binary:Version}),
egroupware-epl-jdots (= ${binary:Version}), egroupware-epl-jdots (= ${binary:Version}),
egroupware-epl-pixelegg (= ${binary:Version}), egroupware-epl-pixelegg (= ${binary:Version}),
egroupware-epl-stylite (= ${binary:Version}), egroupware-epl-stylite (= ${binary:Version}),
@ -53,8 +54,7 @@ Depends: apache2,
php5-sqlite, php5-sqlite,
php5-mysql | php5-pgsql | php5-odbc, php5-mysql | php5-pgsql | php5-odbc,
php5-json, php5-json,
php5-gd, php-pear, php5-gd,
egroupware-epl-egw-pear,
php5-mcrypt, php5-mcrypt,
php5-xsl, php5-xsl,
${misc:Depends} ${misc:Depends}
@ -336,6 +336,17 @@ Description: web-based groupware suite - tracker application
This EGroupware application is a universal tracker for bugs, feature This EGroupware application is a universal tracker for bugs, feature
requests, etc. with voting and bounties. 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 Package: egroupware-epl-wiki
Architecture: all Architecture: all
Depends: egroupware-epl-core (>= ${binary:Version}), Depends: egroupware-epl-core (>= ${binary:Version}),

View File

@ -1,6 +1,6 @@
Format: 1.0 Format: 1.0
Source: egroupware-epl 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 Architecture: all
Version: 14.2.20141211-1 Version: 14.2.20141211-1
Maintainer: Ralf Becker <rb@stylite.de> Maintainer: Ralf Becker <rb@stylite.de>

View File

@ -43,14 +43,12 @@ Prefix: /usr/share
%define cron cron %define cron cron
%define apache_user wwwrun %define apache_user wwwrun
%define apache_group www %define apache_group www
%define pear_dir \\/usr\\/share\\/php5\\/PEAR:\\/etc\\/php5
%else %else
%define php php %define php php
%define httpdconfd /etc/httpd/conf.d %define httpdconfd /etc/httpd/conf.d
%define cron crontabs %define cron crontabs
%define apache_user apache %define apache_user apache
%define apache_group apache %define apache_group apache
%define pear_dir \\/usr\\/share\\/pear
%endif %endif
%define install_log /root/%{name}-install.log %define install_log /root/%{name}-install.log
@ -82,7 +80,6 @@ Prefix: /usr/share
Distribution: %{distribution} Distribution: %{distribution}
Source0: %{name}-%{version}.tar.gz Source0: %{name}-%{version}.tar.gz
#Source1: %{name}-egw-pear-%{version}.tar.bz2
Source2: %{name}-stylite-%{version}.tar.bz2 Source2: %{name}-stylite-%{version}.tar.bz2
#Source3: %{name}-pixelegg-%{version}.tar.bz2 #Source3: %{name}-pixelegg-%{version}.tar.bz2
Source4: %{name}-esyncpro-%{version}.tar.bz2 Source4: %{name}-esyncpro-%{version}.tar.bz2
@ -127,6 +124,7 @@ Requires: %{name}-sambaadmin = %{version}
Requires: %{name}-sitemgr = %{version} Requires: %{name}-sitemgr = %{version}
Requires: %{name}-timesheet = %{version} Requires: %{name}-timesheet = %{version}
Requires: %{name}-tracker = %{version} Requires: %{name}-tracker = %{version}
Requires: %{name}-vendor = %{version}
Requires: %{name}-wiki = %{version} Requires: %{name}-wiki = %{version}
Obsoletes: %{egw_packagename} Obsoletes: %{egw_packagename}
Obsoletes: %{egw_packagename}-core Obsoletes: %{egw_packagename}-core
@ -176,10 +174,6 @@ Obsoletes: %{name}-egw-pear
echo "Installing php -> php5 alternative"; \ echo "Installing php -> php5 alternative"; \
/usr/sbin/update-alternatives --install /usr/bin/php php /usr/bin/php5 99; \ /usr/sbin/update-alternatives --install /usr/bin/php php /usr/bin/php5 99; \
fi 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 %endif
%if 0%{?rhel_version} || 0%{?fedora_version} || 0%{?centos_version} %if 0%{?rhel_version} || 0%{?fedora_version} || 0%{?centos_version}
chcon -R -u user_u -r object_r -t httpd_sys_content_t %{egwdatadir} 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 Summary: The EGroupware core
Group: Web/Database Group: Web/Database
Requires: %{php} >= 5.3.2 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-core %{version}
Provides: egw-etemplate %{version} Provides: egw-etemplate %{version}
Provides: egw-addressbook %{version} Provides: egw-addressbook %{version}
@ -487,6 +481,18 @@ Obsoletes: %{egw_packagename}-wiki
%description wiki %description wiki
This is the wiki app for EGroupware. 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 %package esyncpro
Version: %{version} Version: %{version}
Summary: Stylite eSync Provisioning Summary: Stylite eSync Provisioning
@ -495,8 +501,8 @@ Group: Web/Database
AutoReqProv: no AutoReqProv: no
Requires: egw-core >= %{version}, %{name}-esync >= %{version} Requires: egw-core >= %{version}, %{name}-esync >= %{version}
%description esyncpro %description esyncpro
Stylite's eSync Provisioning app allows to edit and assign Stylite's eSync Provisioning app allows to edit and assign
policies to devices and keeps a central list of syncing devices. policies to devices and keeps a central list of syncing devices.
It also allows to remote wipe or view sync logs of all devices. It also allows to remote wipe or view sync logs of all devices.
%post esyncpro %post esyncpro
@ -524,7 +530,7 @@ echo "post_install: %{post_install}"
[ "%{buildroot}" != "/" ] && rm -rf %{buildroot} [ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
mkdir -p $RPM_BUILD_ROOT%{egwdir} mkdir -p $RPM_BUILD_ROOT%{egwdir}
mkdir -p $RPM_BUILD_ROOT%{httpdconfd} 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 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 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 mkdir -p $RPM_BUILD_ROOT%{egwdatadir}/default/files
@ -547,6 +553,8 @@ ln -s ../../..%{egwdatadir}/header.inc.php
%defattr(-,root,root) %defattr(-,root,root)
%dir %{egwdir} %dir %{egwdir}
%{egwdir}/about.php %{egwdir}/about.php
%{egwdir}/composer.json
%{egwdir}/composer.lock
%{egwdir}/header.inc.php %{egwdir}/header.inc.php
%{egwdir}/header.inc.php.template %{egwdir}/header.inc.php.template
%{egwdir}/index.php %{egwdir}/index.php
@ -684,6 +692,10 @@ ln -s ../../..%{egwdatadir}/header.inc.php
%defattr(-,root,root) %defattr(-,root,root)
%{egwdir}/tracker %{egwdir}/tracker
%files vendor
%defattr(-,root,root)
%{egwdir}/vendor
%files wiki %files wiki
%defattr(-,root,root) %defattr(-,root,root)
%{egwdir}/wiki %{egwdir}/wiki

View File

@ -16,7 +16,6 @@ if (php_sapi_name() !== 'cli') // security precaution: forbit calling post_insta
$verbose = false; $verbose = false;
$config = array( $config = array(
'php' => '/usr/bin/php', 'php' => '/usr/bin/php',
'pear' => '/usr/bin/pear',
'source_dir' => '/usr/share/egroupware', 'source_dir' => '/usr/share/egroupware',
'data_dir' => '/var/lib/egroupware', 'data_dir' => '/var/lib/egroupware',
'header' => '$data_dir/header.inc.php', // symlinked to source_dir by rpm 'header' => '$data_dir/header.inc.php', // symlinked to source_dir by rpm
@ -102,7 +101,6 @@ function set_distro_defaults($distro=null)
case 'suse': case 'suse':
// openSUSE 12.1+ no longer uses php5 // openSUSE 12.1+ no longer uses php5
if (file_exists('/usr/bin/php5')) $config['php'] = '/usr/bin/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['start_db'] = '/sbin/service mysql';
$config['autostart_db'] = '/sbin/chkconfig --level 345 mysql on'; $config['autostart_db'] = '/sbin/chkconfig --level 345 mysql on';
$config['start_webserver'] = '/sbin/service apache2'; $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 // fix important php.ini and conf.d/*.ini settings
check_fix_php_apc_ini(); 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']; $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 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); 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 * fix egw_cache perms evtl. created by root, stoping webserver from accessing it
*/ */