mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-11-04 04:38:02 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			137 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
#!/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 |