GBrowse
view release on metacpan or search on metacpan
install_util/GBrowseInstall.pm view on Meta::CPAN
<Location /fast>
SetHandler fastcgi-script
</Location>
# Note: you may need to increase -idle-timeout if file uploads are timing out and returning server
# errors.
FastCgiConfig -startDelay 30 -appConnTimeout 30 -idle-timeout 600 -maxClassProcesses 20 $fcgi_inc -initial-env GBROWSE_CONF=$conf
</IfModule>
# Use of mod_perl is no longer supported. Use at your own risk.
<IfModule mod_perl.c>
Alias /mgb2 "$cgibin"
$modperl_switches
<Location /mgb2>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
</Location>
</IfModule>
END
}
sub ACTION_install {
my $self = shift;
my $prefix = $self->install_base || $self->prefix || '';
GBrowseGuessDirectories->prefix($prefix);
$self->depends_on('config_data');
$self->install_path->{conf}
||= $self->config_data('conf') || GBrowseGuessDirectories->conf;
$self->install_path->{htdocs}
||= $self->config_data('htdocs')
|| GBrowseGuessDirectories->htdocs;
$self->install_path->{'cgi-bin'}
||= $self->config_data('cgibin')
|| GBrowseGuessDirectories->cgibin;
$self->install_path->{'etc'}
||= GBrowseGuessDirectories->etc;
$self->install_path->{'databases'}
||= $self->config_data('databases')
|| GBrowseGuessDirectories->databases;
$self->install_path->{'persistent'}
||= $self->config_data('persistent')
|| GBrowseGuessDirectories->persistent;
$self->SUPER::ACTION_install();
my $user = $self->config_data('wwwuser') || GBrowseGuessDirectories->wwwuser;
# fix some directories so that www user can write into them
my $tmp = $self->config_data('tmp') || GBrowseGuessDirectories->tmp;
mkpath($tmp);
my ($uid,$gid) = (getpwnam($user))[2,3];
# taint check issues
$uid =~ /^(\d+)$/;
$uid = $1;
$gid =~ /^(\d+)$/;
$gid = $1;
unless (chown $uid,$gid,$tmp) {
$self->ownership_warning($tmp,$user);
}
my $htdocs_i = File::Spec->catfile($self->install_path->{htdocs},'i');
my $images = File::Spec->catfile($tmp,'images');
my $gbs_tmp = File::Spec->catfile($self->install_path->{htdocs},'tmp');
my $htdocs = $self->install_path->{htdocs};
chown $uid,-1,$htdocs;
{
local $> = $uid;
symlink($images,$htdocs_i); # so symlinkifowner match works!
symlink($tmp,$gbs_tmp);
}
chown $>,-1,$self->install_path->{htdocs};
my $persistent = $self->install_path->{'persistent'};
my $sessions = File::Spec->catfile($persistent,'sessions');
my $userdata = File::Spec->catfile($persistent,'userdata');
mkpath([$sessions,$userdata],0711);
my $databases = $self->install_path->{'databases'};
unless (chown $uid,$gid,glob(File::Spec->catfile($databases,'').'*')) {
$self->ownership_warning($databases,$user);
}
chmod 0755,File::Spec->catfile($self->install_path->{'etc'},'init.d','gbrowse-slave');
chmod 0755,File::Spec->catfile($self->install_path->{'etc'},'init.d','gbrowse-aws-balancer');
$self->fix_selinux;
my $base = basename($self->install_path->{htdocs});
# Configure the databases, if needed.
print STDERR "Updating user account database...\n";
my $metadb_script = File::Spec->catfile("bin", "gbrowse_metadb_config.pl");
my $perl = $self->perl;
my @inc = map{"-I$_"} split ':',$self->added_to_INC;
system $perl,@inc,$metadb_script;
system 'sudo','chown','-R',"$uid.$gid",$sessions,$userdata;
# make the gbrowse-aws-balancer file, which might contain secret keys, read-only to root
if ($self->config_data('installetc') =~ /^[yY]/) {
my $install_path = $self->install_path->{'etc'} || GBrowseGuessDirectories->etc;
system 'sudo','chmod','go-rwx',File::Spec->catfile($install_path,'default','gbrowse-aws-balancer');
}
# enable CGI scripts on 2.4 systems
if ($self->apache_version =~ /2\.4/) {
print STDERR "Enabling CGI scripts on your Apache2 system...\n";
system 'sudo','a2enmod','cgi';
}
if (Module::Build->y_n(
"It is recommended that you restart Apache. Shall I try this for you?",'y'
)) {
system "sudo /etc/init.d/apache2 restart";
}
print STDERR "\n***INSTALLATION COMPLETE***\n";
print STDERR "Load http://localhost/$base for demo and documentation.\n";
print STDERR "Visit the http://gmod.org for more information on setting up databases for users and custom tracks.\n";
}
sub ACTION_install_slave {
my $self = shift;
my $prefix = $self->install_base || $self->prefix ||'';
GBrowseGuessDirectories->prefix($prefix);
$self->install_path->{'etc'} ||= GBrowseGuessDirectories->etc;
$self->SUPER::ACTION_install();
}
sub ACTION_debian {
my $self = shift;
system "debuild";
}
sub fix_selinux {
my $self = shift;
return unless -e '/proc/filesystems';
my $f = IO::File->new('/proc/filesystems') or return;
return unless grep /selinux/i,<$f>;
my $enabled = IO::File->new('/selinux/enforce') or return;
return unless grep /1/,<$enabled>;
print STDERR "\n*** SELinux detected -- fixing permissions ***\n";
my $htdocs = $self->config_data('htdocs');
my $conf = $self->config_data('conf');
my $tmp = $self->config_data('tmp');
my $db = $self->config_data('databases');
system "/usr/bin/chcon -R -t httpd_sys_content_t $conf";
system "/usr/bin/chcon -R -t httpd_sys_content_t $htdocs";
system "/usr/bin/chcon -R -t httpd_sys_content_rw_t $tmp";
system "/usr/bin/chcon -R -t httpd_sys_content_rw_t $db";
}
sub process_conf_files {
my $self = shift;
install_util/GBrowseInstall.pm view on Meta::CPAN
END
}
sub mime_conf {
my $self = shift;
return <<END;
image/gif gif
image/jpeg jpeg jpg jpe
image/png png
image/svg+xml svg svgz
text/css css
text/html html htm shtml
END
}
sub config_done {
my $self = shift;
my $done = $self->config_data('config_done');
$self->config_data(config_done=>shift) if @_;
warn "NOTE: Run ./Build reconfig to change existing configuration.\n" if $done;
return $done;
}
sub registration_done {
my $self = shift;
my $done = $self->config_data('registration_done');
$self->config_data(registration_done=>shift) if @_;
return $done;
}
sub added_to_INC {
my $self = shift;
my @inc = grep {!/install_util/} eval {$self->_added_to_INC}; # not in published API
my $lib_base = $self->install_destination('lib');
my $arch_base = $self->install_destination('arch');
my %standard = map {$_=>1} @INC;
push @inc,$lib_base unless $standard{$lib_base};
push @inc,$arch_base unless $standard{$arch_base};
return @inc ? join(':',@inc) : '';
}
sub perl5lib {
my $self = shift;
return $self->added_to_INC || undef;
}
sub scriptdir {
my $self = shift;
my $id = $self->installdirs;
my $scriptdir = $id eq 'core' ? 'installscript'
:$id eq 'site' ? 'installsitebin'
:$id eq 'vendor' ? 'installvendorbin'
:'installsitebin';
return $Config::Config{$scriptdir};
}
sub ownership_warning {
my $self = shift;
my ($path,$owner) = @_;
warn "*** WARNING: Using sudo to change ownership of $path to '$owner'. You may be prompted for your login password ***\n";
system "sudo chown -R $owner $path";
}
sub cgiurl {
my $self = shift;
my $cgibin = $self->config_data('cgibin');
(my $cgiurl = $cgibin) =~ s!^.+/cgi-bin!/cgi-bin!;
$cgiurl =~ s!^.+/CGI-Executables!/cgi-bin!; #Macs and their crazy paths
return $cgiurl;
}
sub check_prereq {
my $self = shift;
my $result = $self->SUPER::check_prereq(@_);
unless ($result) {
$self->log_warn(<<END);
* Do not worry if some "recommended" prerequisites are missing. You can install *
* them later if you need the features they provide. Do not proceed with the *
* install if any of "REQUIRED" prerequisites are missing. *
* *
* The optional Safe::World module does not currently run on Perl 5.10 or *
* higher, and so cannot be installed. *
END
}
return $result;
}
sub asString { return 'GBrowse installer' }
1;
__END__
=head1 ACTIONS
=over 4
=item config
Interactively configure the locations in which GBrowse's scripts,
configuration files, and static image/support files will be installed.
One or more of the config options can be set on the command
line when first running perl Build.PL:
perl Build.PL --conf=/etc/gbrowse2 \ # config files
--htdocs=/var/www/gbrowse2 \ # static files
--cgibin=/usr/lib/cgi-bin/gb2 \ # CGI executables
--wwwuser=www-data \ # apache user
--tmp=/var/tmp/gbrowse2 \ # temporary data
--portdemo=8000 \ # demo web site port
--apachemodules=/usr/lib/apache2/modules # apache loadable modules
=item reconfig
Interactively edit configuration locations. See "./Build help config".
=item demo
Try to start an apache/gbrowse instance running in demo mode on the
( run in 1.150 second using v1.01-cache-2.11-cpan-92ad3014f07 )