diff --git a/reconfigure_apache.pl b/reconfigure_apache.pl new file mode 100755 index 00000000..f1010f6f --- /dev/null +++ b/reconfigure_apache.pl @@ -0,0 +1,137 @@ +#!/usr/bin/perl -w +package main; +use strict; +use warnings; +use feature qw(switch); +use Data::Dumper; +use Carp; +$SIG{ __DIE__ } = sub { Carp::confess( @_ ) }; +$SIG{ __WARN__ } = sub { Carp::confess( @_ ) }; +#use File::IO; +use Getopt::Long; +use File::Copy qw(cp); +use File::Temp qw(tempfile tempdir); +use POSIX qw(strftime ceil floor abs); +#use MIME::Base64 qw(); +use Cwd; +$| = 1; + +=pod +################################################################################ +# # +# Use this script to reconfigure apache Listen directives so that it only # +# listens on ports 127.0.0.1:80 and mgt_dev:80. This is to allow lanforge # +# versions of nginx to listen on managed ports without conflict. Run this # +# script every time you run /home/lanforge/lfconfig. # +# # +################################################################################ +=cut + +our $is_fedora=0; +our $is_centos=0; +our $is_ubuntu=0; + +sub error { + for (@_) { + print STDERR "$_\n"; + } +} + +if (!-f "/etc/os-release") { + die("no /etc/os-release, bye."); +} +my @os_release_lines = `cat /etc/os-release`; +my @os_name_lines = grep {/^NAME=/} @os_release_lines; +die ("Unknown OS") if (@os_name_lines < 1); + +if ($os_name_lines[0] =~ /CentOS( Linux)?/) { + $is_centos = 1; +} +elsif ($os_name_lines[0] =~ /\bFedora\b/) { + $is_fedora = 1; +} +elsif ( $os_name_lines[0] =~ /\bUbuntu\b/) { + $is_ubuntu = 1; +} +else { + die("Unknown OS: $os_name_lines[0]"); +} + +my @new_httpconf_lines = (); +if ((! -d "/home/lanforge") || (! -f "/home/lanforge/config.values" )) { + error("* Unable to find /home/lanforge/config.values. Not configuring apache."); + return; +} +my @config_values = `cat /home/lanforge/config.values`; +my @mgt_dev_lines = grep {/^mgt_dev/} @config_values; +if (@mgt_dev_lines != 1) { + error("* mgt_dev misconfigured in config.values. Not configuring apache."); + return; +} +my $mgt_dev = (split(/\s+/, $mgt_dev_lines[0]))[0]; +if (!(defined $mgt_dev) || $mgt_dev eq "") { + err("* Unable to find mgt_dev value. Not configuring apache."); + return; +} + +our $new_include; +our $httpconf; + +# if we have a Listen directive in apache, comment it out and create an include +sub collectListenLines { # original httpd.conf, listen.conf + my $conf = shift; + my $new_include = shift; + my @httpconf_lines = `cat $conf`; + chomp(@httpconf_lines); + my @new_httpconf_lines = (); + my @new_listen_lines = (); + my @listen_lines = grep {/^Listen /} @httpconf_lines; + chomp(@listen_lines); + my @include_lines = grep {m|^Include conf/lf_listen.conf$|} @httpconf_lines; + chomp(@include_lines); + + if (@listen_lines < 1 ) { + error(" * Apache misconfigured? No Listen directive and not include lf_listen.conf. Not modifying."); + return; + } + + for my $line (@httpconf_lines) { + if ($line =~ /^Listen /) { + $line = "# Moved to lf_listen.conf: $line"; + push(@listen_lines, "# $line"); + } + push(@new_httpconf_lines, $line); + } +} # ~collectListenLines + +## ## ## ## ## ## ## ## ## ## +## M A I N ## +## ## ## ## ## ## ## ## ## ## + +if ($is_fedora || $is_centos) { + die("* Unable to find /etc/httpd/conf/httpd.conf. Not configuring apache.") + unless( -f "/etc/httpd/conf/httpd.conf" ); + + $::new_include = "/etc/httpd/conf/lf_listen.conf"; + $::httpconf = "/etc/httpd/conf/httpd.conf"; + if (-f $new_include) { + print(" # lf_listen.conf already created, not creating\n"); + exit 0; + } + collectListenLines($::httpconf, $::new_include); + exit 0; +} # ~fedora +elsif ($is_ubuntu) { + $::new_include = "/etc/apache2/lf_listen.conf"; + $::httpconf = "/etc/apache2/ports.conf"; + die("* Unable to find $::httpconf. Not configuring apache.") + unless ( -f $::httpconf ); + + collectListenLines($::httpconf, $::new_include); +} +else { + error("Configuring apache mgt port not configured on other systems."); + exit 1; +} + +# eof \ No newline at end of file