X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=scripts%2Finstallation_check.pl;h=72f0605406ab03b6468c09b950406b3283416057;hb=0cb0a30142224785c73b545b6729b1d5b8892fca;hp=def85906c9f3b88bc9ec34a88e1aecbb1063fe51;hpb=1bc5165546da59c9b7317e0ba790eb9b43c10e21;p=kivitendo-erp.git diff --git a/scripts/installation_check.pl b/scripts/installation_check.pl index def85906c..72f060540 100755 --- a/scripts/installation_check.pl +++ b/scripts/installation_check.pl @@ -4,6 +4,7 @@ use strict; use Getopt::Long; use Pod::Usage; use Term::ANSIColor; +use Text::Wrap; our $master_templates; BEGIN { unshift @INC, "modules/override"; # Use our own versions of various modules (e.g. YAML). @@ -13,8 +14,30 @@ BEGIN { $master_templates = './templates/print/'; } +unless (eval { require Config::Std; 1 }){ + print STDERR < \ $check{r}, "h|help" => sub { pod2usage(-verbose => 2) }, "c|color!" => \ ( my $c = 1 ), + "i|install!" => \ my $apt, +); + +my %install_methods = ( + apt => { key => 'debian', install => 'sudo apt-get install', system => "Debian, Ubuntu" }, + yum => { key => 'fedora', install => 'sudo yum install', system => "RHEL, Fedora, CentOS" }, + zypper => { key => 'suse', install => 'sudo zypper install', system => "SLES, openSUSE" }, + cpan => { key => 'name', install => "sudo cpan", system => "CPAN" }, ); # if nothing is requested check "required" @@ -47,6 +78,12 @@ if ($check{a}) { $| = 1; +if (!SL::LxOfficeConf->read(undef, 'may fail')) { + print_header('Could not load the config file. If you have dependancies from any features enabled in the configuration these will still show up as optional because of this. Please rerun this script after installing the dependancies needed to load the cofiguration.') +} else { + SL::InstallationCheck::check_for_conditional_dependencies(); +} + if ($check{r}) { print_header('Checking Required Modules'); check_module($_, required => 1) for @SL::InstallationCheck::required_modules; @@ -64,6 +101,20 @@ if ($check{l}) { check_latex(); } +if (@missing_modules && $apt) { + print "\nHere are some sample installation lines, choose one apporpriate for your system:\n\n"; + local $Text::Wrap::separator = " \\\n"; + + for (keys %install_methods) { + my $method = $install_methods{$_}; + if (my @install_candidates = grep $_, map { $_->{$method->{key}} } @missing_modules) { + print "$method->{system}:\n"; + print wrap(" ", " ", $method->{install}, @install_candidates); + print $/; + } + } +} + sub check_latex { my ($res) = check_kpsewhich(); print_result("Looking for LaTeX kpsewhich", $res); @@ -128,6 +179,7 @@ sub check_module { my ($module, %role) = @_; my $line = "Looking for $module->{fullname}"; + $line .= " (from $module->{dist_name})" if $module->{dist_name}; my ($res, $ver) = SL::InstallationCheck::module_available($module->{"name"}, $module->{version}); if ($res) { my $ver_string = ref $ver && $ver->can('numify') ? $ver->numify : $ver ? $ver : 'no version'; @@ -139,10 +191,12 @@ sub check_module { return if $res; + push @missing_modules, $module; + my $needed_text = - $role{optional} ? 'It is OPTIONAL for Lx-Office but RECOMMENDED for improved functionality.' - : $role{required} ? 'It is NEEDED by Lx-Office and must be installed.' - : $role{devel} ? 'It is OPTIONAL for Lx-Office and only useful for developers.' + $role{optional} ? 'It is OPTIONAL for kivitendo but RECOMMENDED for improved functionality.' + : $role{required} ? 'It is NEEDED by kivitendo and must be installed.' + : $role{devel} ? 'It is OPTIONAL for kivitendo and only useful for developers.' : 'It is not listed as a dependancy yet. Please tell this the developers.'; my @source_texts = module_source_texts($module); @@ -214,7 +268,7 @@ __END__ =head1 NAME -scripts/installation_check.pl - check Lx-Office dependancies +scripts/installation_check.pl - check kivitendo dependancies =head1 SYNOPSIS @@ -222,9 +276,9 @@ scripts/installation_check.pl - check Lx-Office dependancies =head1 DESCRIPTION -Check dependencys. List all perl modules needed by Lx-Office, probes for them, +Check dependencys. List all perl modules needed by kivitendo, probes for them, and warns if one is not available. List all LaTeX document classes and -packages needed by Lx-Office master templates, probes for them, and warns if +packages needed by kivitendo master templates, probes for them, and warns if one is not available. @@ -284,6 +338,12 @@ Don't probe for LaTeX document classes and packages in master templates. (Useful Print additional info for missing dependancies +=item C<-i, --install> + +Tries to generate installation commands for the most common package managers. +Note that these lists can be slightly off, but it should still save you a lot +of typing. + =back =head1 BUGS, CAVEATS and TODO