| 223 | rodolico | 1 | #! /usr/bin/env perl
 | 
        
           |  |  | 2 |   | 
        
           |  |  | 3 | use strict;
 | 
        
           |  |  | 4 | use warnings;
 | 
        
           |  |  | 5 |   | 
        
           |  |  | 6 | # find our location and use it for searching for libraries
 | 
        
           |  |  | 7 | BEGIN {
 | 
        
           |  |  | 8 |    use FindBin;
 | 
        
           |  |  | 9 |    use File::Spec;
 | 
        
           |  |  | 10 |    # use libraries from the directory this script is in
 | 
        
           |  |  | 11 |    use lib File::Spec->catdir($FindBin::Bin);
 | 
        
           |  |  | 12 |    # and its parent
 | 
        
           |  |  | 13 |    use lib File::Spec->catdir( $FindBin::Bin . '/../' );
 | 
        
           |  |  | 14 |    eval( 'use YAML::Tiny' );
 | 
        
           |  |  | 15 | }
 | 
        
           |  |  | 16 |   | 
        
           |  |  | 17 | use Cwd qw(abs_path);
 | 
        
           |  |  | 18 | use sysinfosetup;
 | 
        
           |  |  | 19 |   | 
        
           |  |  | 20 | my $scriptDir = abs_path(File::Spec->catdir($FindBin::Bin) );
 | 
        
           |  |  | 21 |   | 
        
           |  |  | 22 | use Digest::MD5 qw(md5_hex);
 | 
        
           |  |  | 23 | use File::Copy;
 | 
        
           |  |  | 24 |   | 
        
           |  |  | 25 | # define the version number
 | 
        
           |  |  | 26 | # see https://metacpan.org/pod/release/JPEACOCK/version-0.97/lib/version.pod
 | 
        
           |  |  | 27 | use version;
 | 
        
           |  |  | 28 | our $VERSION = version->declare("v0.001.001");
 | 
        
           |  |  | 29 |   | 
        
           |  |  | 30 |   | 
        
           |  |  | 31 | use Data::Dumper;
 | 
        
           |  |  | 32 | use File::Basename;
 | 
        
           |  |  | 33 | use Getopt::Long;
 | 
        
           |  |  | 34 |   | 
        
           |  |  | 35 | Getopt::Long::Configure ("bundling"); # allow -vd --os='debian'
 | 
        
           |  |  | 36 | our $dryRun;
 | 
        
           |  |  | 37 | our $DEBUG;
 | 
        
           |  |  | 38 | my $os;
 | 
        
           |  |  | 39 | my $help = 0;
 | 
        
           |  |  | 40 | my $version = 0;
 | 
        
           |  |  | 41 | my $quiet = 0;
 | 
        
           |  |  | 42 | my $seedFileName = '';
 | 
        
           |  |  | 43 |   | 
        
           |  |  | 44 | # simple display if --help is passed
 | 
        
           |  |  | 45 | sub help {
 | 
        
           |  |  | 46 |    use File::Basename;
 | 
        
           |  |  | 47 |    print basename($0) . " $VERSION\n";
 | 
        
           |  |  | 48 |    print <<END
 | 
        
           |  |  | 49 | $0 [options]
 | 
        
           |  |  | 50 | Options:
 | 
        
           |  |  | 51 |    --os|-o      - lower case name of operating system (debian, freebsd, etc...)
 | 
        
           |  |  | 52 |    --dryrun|-n  - do not actually do anything, just tell you what I'd do
 | 
        
           |  |  | 53 |    --version|-v - display version and exit
 | 
        
           |  |  | 54 |    --quiet|-q   - Do not ask questions, just do stuff
 | 
        
           |  |  | 55 |    --help|-g    - Show this screen
 | 
        
           |  |  | 56 |    --seed|-s    - URL/Path to seed file for config
 | 
        
           |  |  | 57 |    --debug      - Show extra information (--nodebug is default)
 | 
        
           |  |  | 58 | END
 | 
        
           |  |  | 59 | }
 | 
        
           |  |  | 60 |   | 
        
           |  |  | 61 |   | 
        
           |  |  | 62 | ################################################################
 | 
        
           |  |  | 63 | #               Main Code                                      #
 | 
        
           |  |  | 64 | ################################################################
 | 
        
           |  |  | 65 |   | 
        
           |  |  | 66 | # handle any command line parameters that may have been passed in
 | 
        
           |  |  | 67 |   | 
        
           |  |  | 68 | GetOptions (
 | 
        
           |  |  | 69 |             "os|o=s"      => \$os,      # pass in the operating system
 | 
        
           |  |  | 70 |             "dryrun|n"    => \$dryRun,  # do NOT actually do anything
 | 
        
           |  |  | 71 |             "seed|s=s"    => \$seedFileName,
 | 
        
           |  |  | 72 |             'help|h'      => \$help,
 | 
        
           |  |  | 73 |             'version|v'   => \$version,
 | 
        
           |  |  | 74 |             'quiet|q'     => \$quiet,
 | 
        
           |  |  | 75 |             'debug!'      => \$DEBUG
 | 
        
           |  |  | 76 |             ) or die "Error parsing command line\n";
 | 
        
           |  |  | 77 |   | 
        
           |  |  | 78 | if ( $help ) { &help() ; exit; }
 | 
        
           |  |  | 79 | if ( $version ) { use File::Basename; print basename($0) . " $VERSION\n"; exit; }
 | 
        
           |  |  | 80 |   | 
        
           |  |  | 81 | my $returnValue = 0;
 | 
        
           |  |  | 82 |   | 
        
           |  |  | 83 | # first, find operating system
 | 
        
           |  |  | 84 | my $command = $scriptDir . '/determineOS';
 | 
        
           |  |  | 85 | $os = `$command` unless $os;
 | 
        
           |  |  | 86 | &logIt( "Detected operating system is [$os]" );
 | 
        
           |  |  | 87 |   | 
        
           |  |  | 88 | die "Could not detect operation system\n" unless $os;
 | 
        
           |  |  | 89 | # now, verify we have all the libraries we need and install them if necessary
 | 
        
           |  |  | 90 | $command = $scriptDir . '/validateDependencies'
 | 
        
           |  |  | 91 |             . " -o $os" 
 | 
        
           |  |  | 92 |             . ( $quiet ? ' -q' : '' ) 
 | 
        
           |  |  | 93 |             . ( $DEBUG ? ' --debug' : '')
 | 
        
           |  |  | 94 |             . ( $dryRun ? ' -n' : '' );
 | 
        
           |  |  | 95 | &logIt( "Running command $command" );
 | 
        
           |  |  | 96 | system $command;
 | 
        
           |  |  | 97 | &logIt( "\tReturn value is $returnValue" );
 | 
        
           |  |  | 98 |   | 
        
           |  |  | 99 | $command = $scriptDir . "/../configure"
 | 
        
           |  |  | 100 |             . " -o $os" 
 | 
        
           |  |  | 101 |             . ( $quiet ? ' -q' : '' ) 
 | 
        
           |  |  | 102 |             . ( $DEBUG ? ' --debug' : '')
 | 
        
           |  |  | 103 |             . ( $dryRun ? ' -n' : '' )
 | 
        
           |  |  | 104 |             . ( " -s '$seedFileName'" );
 | 
        
           |  |  | 105 | &logIt( "Running command $command" );
 | 
        
           |  |  | 106 | system $command;
 | 
        
           |  |  | 107 | &logIt( "\tReturn value is $returnValue" );
 |