X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=scripts%2Finstallation_check.pl;h=43b290a35322b9e56f35304b8046496270cb77b0;hb=15b1558e299f3143ec8d89293674f9bab6ad61ed;hp=2bec003cd76f4b05acad1c2250bf8520eeccdce8;hpb=ecf1e7ec32290b1614a414086f04485a987c5f98;p=kivitendo-erp.git diff --git a/scripts/installation_check.pl b/scripts/installation_check.pl index 2bec003cd..43b290a35 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). @@ -21,9 +22,10 @@ unless (eval { require Config::Std; 1 }){ Debian: you may install the needed *.deb package with: apt-get install libconfig-std-perl - RPM: There is a rpm package "perl-Config-Std" + Red Hat/Fedora/CentOS: you may install the needed *.rpm package with: + yum install perl-Config-Std - Suse: you may install the needed *.rpm package with: + SUSE: you may install the needed *.rpm package with: zypper install perl-Config-Std +------------------------------------------------------------------------------+ @@ -35,7 +37,7 @@ EOL use SL::InstallationCheck; use SL::LxOfficeConf; - +my @missing_modules; my %check; Getopt::Long::Configure ("bundling"); GetOptions( @@ -47,6 +49,15 @@ GetOptions( "r|required!" => \ $check{r}, "h|help" => sub { pod2usage(-verbose => 2) }, "c|color!" => \ ( my $c = 1 ), + "i|install-command!" => \ my $apt, + "s|silent" => \ $check{s}, +); + +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" @@ -60,9 +71,7 @@ if (!defined $check{a} } if ($check{a}) { - foreach my $check (keys %check) { - $check{$check} = 1 unless defined $check{$check}; - } + $check{$_} //= 1 for qw(o d l r); } @@ -77,7 +86,6 @@ if (!SL::LxOfficeConf->read(undef, 'may fail')) { if ($check{r}) { print_header('Checking Required Modules'); check_module($_, required => 1) for @SL::InstallationCheck::required_modules; - print_header('Standard check for required modules done. See additional parameters for more checks (--help)') if $default_run; } if ($check{o}) { print_header('Checking Optional Modules'); @@ -91,6 +99,44 @@ if ($check{l}) { check_latex(); } +my $fail = @missing_modules; +print_header('Result'); +print_line('All', $fail ? 'NOT ok' : 'OK', $fail ? 'red' : 'green'); + +if ($default_run && !$check{s}) { + if (@missing_modules) { + $apt = 1; + print <<"EOL"; + +HEY! It seems there are modules MISSING! Look for the red lines with "NOT ok" +above. You'll want to fix those, I've enabled --install-command for you... +EOL + } else { + print <<"EOL"; + +Standard check done, everything is OK and up to date. Have a look at the --help +section of this script to see some more advanced checks for developer and +optional dependancies, as well as LaTeX packages you might need. +EOL + } +} + +if (@missing_modules && $apt && !$check{s}) { + print "\nHere are some sample installation lines, choose one appropriate 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 $/; + } + } +} + +exit !!@missing_modules; + sub check_latex { my ($res) = check_kpsewhich(); print_result("Looking for LaTeX kpsewhich", $res); @@ -113,7 +159,7 @@ our $mastertemplate_path = './templates/print/'; sub check_kpsewhich { return 1 if SL::InstallationCheck::check_kpsewhich(); - print STDERR <{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'; @@ -166,15 +213,17 @@ 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); local $" = $/; - print STDERR <{fullname} could not be loaded. @@ -191,20 +240,17 @@ EOL sub module_source_texts { my ($module) = @_; my @texts; - push @texts, <{name}" + for my $key (keys %install_methods) { + my $method = $install_methods{$key}; + push @texts, <<"EOL" if $module->{$method->{key}}; + - Using $method->{system} you can install it with $key: + $method->{install} $module->{$method->{key}} EOL + } push @texts, <{url}; - You can download it from this URL and install it manually: $module->{url} EOL - push @texts, <{debian}; - - On Debian, Ubuntu and other distros you can install it with apt-get: - sudo apt-get install $module->{debian} - Note: These may be out of date as well if your system is old. -EOL - # TODO: SuSE and Fedora packaging. Windows packaging. return @texts; } @@ -225,10 +271,12 @@ sub print_result { sub print_line { my ($text, $res, $color) = @_; + return if $check{s}; print $text, " ", ('.' x (78 - length($text) - length($res))), " ", mycolor($res, $color), $/; } sub print_header { + return if $check{s}; print $/; print "$_[0]:", $/; } @@ -241,7 +289,7 @@ __END__ =head1 NAME -scripts/installation_check.pl - check Lx-Office dependancies +scripts/installation_check.pl - check kivitendo dependancies =head1 SYNOPSIS @@ -249,9 +297,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. @@ -311,6 +359,12 @@ Don't probe for LaTeX document classes and packages in master templates. (Useful Print additional info for missing dependancies +=item C<-i, --install-command> + +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