X-Git-Url: https://code.th-h.de/?p=usenet%2Fnewsstats.git;a=blobdiff_plain;f=install%2Finstall.pl;h=aff4480a7054473cee1e91fd197a366a5d15a40b;hp=d45d9114fc02cf768bf0a13f55eaf69cdb29870b;hb=2871792120fba3b9ac9fe1b7bf166638b05766fd;hpb=2832c235b2497a02713b12197ed97fbde3a91e15 diff --git a/install/install.pl b/install/install.pl index d45d911..aff4480 100755 --- a/install/install.pl +++ b/install/install.pl @@ -1,50 +1,62 @@ -#! /usr/bin/perl -W +#! /usr/bin/perl # # install.pl # # This script will create database tables as necessary. -# +# # It is part of the NewsStats package. # -# Copyright (c) 2010 Thomas Hochstein +# Copyright (c) 2010-2013 Thomas Hochstein # -# It can be redistributed and/or modified under the same terms under +# It can be redistributed and/or modified under the same terms under # which Perl itself is published. BEGIN { our $VERSION = "0.01"; use File::Basename; - # we're in .../install, so our module is in .. - push(@INC, dirname($0).'/..'); + # we're in .../install, so our module is in ../lib + push(@INC, dirname($0).'/../lib'); } use strict; +use warnings; use NewsStats qw(:DEFAULT); use Cwd; use DBI; +use Getopt::Long qw(GetOptions); +Getopt::Long::config ('bundling'); ################################# Main program ################################# ### read commandline options -my %Options = &ReadOptions(''); +my ($OptUpdate,$OptConfFile); +GetOptions ('u|update=s' => \$OptUpdate, + 'conffile=s' => \$OptConfFile, + 'h|help' => \&ShowPOD, + 'V|version' => \&ShowVersion) or exit 1; ### change working directory to .. (as we're in .../install) -chdir dirname($0).'/..'; +chdir dirname($FullPath).'/..'; +my $Path = cwd(); ### read configuration print("Reading configuration.\n"); -my %Conf = %{ReadConfig('newsstats.conf')}; +my %Conf = %{ReadConfig($OptConfFile)}; ##### -------------------------------------------------------------------------- ##### Database table definitions ##### -------------------------------------------------------------------------- +my $DBCreate = < < <table_info('%', '%', '%', 'TABLE')->fetchall_hashref('TABLE_NAME')}; - -# check for tables and create them, if they don't exist yet -foreach my $Table (keys %DBCreate) { - if (defined($TablesInDB{$Conf{$Table}})) { - printf("Database table %s.%s already exists, skipping ....\n",$Conf{'DBDatabase'},$Conf{$Table}); - next; - }; - my $DBQuery = $DBHandle->prepare($DBCreate{$Table}); - $DBQuery->execute() or die sprintf("$MySelf: E: Can't create table %s in database %s: %s%\n",$Table,$Conf{'DBDatabase'},$DBI::errstr); - printf("Database table %s.%s created succesfully.\n",$Conf{'DBDatabase'},$Conf{$Table}); -}; - -# close handle -$DBHandle->disconnect; -print "Database table generation done.\n"; +##### -------------------------------------------------------------------------- +##### Installation / upgrade instructions +##### -------------------------------------------------------------------------- -### output information on other necessary steps -my $Path = cwd(); -print < -TODO +INSTALL -__END__ +my $Upgrade =''; +if ($OptUpdate) { + $Upgrade = < [B<-Vh>] +### create DB, if necessary +if (!$OptUpdate) { + print "----------\nStarting database creation.\n"; + # create database + # we can't use InitDB() as that will use a table name of + # the table that doesn't exist yet ... + my $DBHandle = DBI->connect(sprintf('DBI:%s:host=%s',$Conf{'DBDriver'}, + $Conf{'DBHost'}), $Conf{'DBUser'}, + $Conf{'DBPw'}, { PrintError => 0 }); + my $DBQuery = $DBHandle->prepare($DBCreate); + $DBQuery->execute() or &Bleat(2, sprintf("Can't create database %s: %s%\n", + $Conf{'DBDatabase'}, $DBI::errstr)); + + printf("Database table %s created succesfully.\n",$Conf{'DBDatabase'}); + $DBHandle->disconnect; +}; -=head1 REQUIREMENTS +### DB init, read list of tables +print "Reading database information.\n"; +my $DBHandle = InitDB(\%Conf,1); +my %TablesInDB = + %{$DBHandle->table_info('%', '%', '%', 'TABLE')->fetchall_hashref('TABLE_NAME')}; + +if (!$OptUpdate) { + ##### installation mode + # check for tables and create them, if they don't exist yet + foreach my $Table (keys %DBCreate) { + &CreateTable($Table); + }; + print "Database table generation done.\n"; + + # Display install instructions + print $Install; +} else { + ##### upgrade mode + print "----------\nStarting upgrade process.\n"; + $PackageVersion = '0.03'; + if ($OptUpdate < $PackageVersion) { + if ($OptUpdate < 0.02) { + # 0.01 -> 0.02 + # &DoMySQL('...;'); + # print "v0.02: Database upgrades ...\n"; + # &PrintInstructions('0.02',<<" INSTRUCTIONS"); + # INSTRUCTIONS + }; + }; + # Display general upgrade instructions + print $Upgrade; +}; -See doc/README: Perl 5.8.x itself and the following modules from CPAN: +# close handle +$DBHandle->disconnect; -=over 2 +exit(0); -=item - +################################# Subroutines ################################## -Config::Auto +sub CreateTable { + my $Table = shift; + if (defined($TablesInDB{$Conf{$Table}})) { + printf("Database table %s.%s already exists, skipping ....\n", + $Conf{'DBDatabase'},$Conf{$Table}); + return; + }; + my $DBQuery = $DBHandle->prepare($DBCreate{$Table}); + $DBQuery->execute() or + &Bleat(2, sprintf("Can't create table %s in database %s: %s%\n",$Table, + $Conf{'DBDatabase'},$DBI::errstr)); + printf("Database table %s.%s created succesfully.\n", + $Conf{'DBDatabase'},$Conf{$Table}); + return; +}; -=item - +sub DoMySQL { + my $SQL = shift; + my $DBQuery = $DBHandle->prepare($SQL); + $DBQuery->execute() or &Bleat(1, sprintf("Database error: %s\n",$DBI::errstr)); + return; +}; -DBI +sub PrintInstructions { + my ($UpVersion,$Instructions) = @_; + print "v$UpVersion: Upgrade Instructions >>>>>\n"; + my $Padding = ' ' x (length($UpVersion) + 3); + $Instructions =~ s/^ /$Padding/mg; + print $Instructions; + print "<" x (length($UpVersion) + 29) . "\n"; +}; -=back + +__END__ + +################################ Documentation ################################# + +=head1 NAME + +install - installation script + +=head1 SYNOPSIS + +B [B<-Vh> [--update I] [--conffile I] + +=head1 REQUIREMENTS + +See L. =head1 DESCRIPTION @@ -185,40 +268,48 @@ This script will create database tables as necessary and configured. =head2 Configuration -F will read its configuration from F via +B will read its configuration from F via Config::Auto. -See doc/INSTALL for an overview of possible configuration options. +See L for an overview of possible configuration options. =head1 OPTIONS =over 3 -=item B<-V> (version) +=item B<-V>, B<--version> -Print out version and copyright information on B and exit. +Print out version and copyright information and exit. -=item B<-h> (help) +=item B<-h>, B<--help> Print this man page and exit. +=item B<-u>, B<--update> I + +Don't do a fresh install, but update from I. + +=item B<--conffile> I + +Load configuration from I instead of F. + =back =head1 FILES =over 4 -=item F +=item F The script itself. -=item F +=item F Library functions for the NewsStats package. -=item F +=item F -Runtime configuration file for B. +Runtime configuration file. =back @@ -233,11 +324,11 @@ bug tracker at L! =item - -doc/README +L =item - -doc/INSTALL +L =back @@ -249,7 +340,7 @@ Thomas Hochstein =head1 COPYRIGHT AND LICENSE -Copyright (c) 2010 Thomas Hochstein +Copyright (c) 2010-2013 Thomas Hochstein This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.