|
|
|
#!/usr/bin/perl
|
|
|
|
#
|
|
|
|
# This parses the current IP addresses on the local system and writes them to /etc/issue so that they're seen
|
|
|
|
# by a user at the login prompt. This is meant to be useful during the initialization and setup stages, so
|
|
|
|
# it's expected to run before the Anvil::Tools module is installed. As such, it doesn't use those modules.
|
|
|
|
#
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
use IO::Handle;
|
|
|
|
|
|
|
|
# Turn off buffering so that the pinwheel will display while waiting for the SSH call(s) to complete.
|
|
|
|
$| = 1;
|
|
|
|
|
|
|
|
my $THIS_FILE = ($0 =~ /^.*\/(.*)$/)[0];
|
|
|
|
my $running_directory = ($0 =~ /^(.*?)\/$THIS_FILE$/)[0];
|
|
|
|
if (($running_directory =~ /^\./) && ($ENV{PWD}))
|
|
|
|
{
|
|
|
|
$running_directory =~ s/^\./$ENV{PWD}/;
|
|
|
|
}
|
|
|
|
|
|
|
|
my $shell_call = "/usr/sbin/ip addr list";
|
|
|
|
my $new_issue = '\S
|
|
|
|
Kernel \r on an \m
|
|
|
|
';
|
|
|
|
my $ips = {};
|
|
|
|
my $interface = "";
|
|
|
|
open (my $file_handle, $shell_call." 2>&1 |") or die "Failed to call: [".$shell_call."], error was: [".$!."]\n";
|
|
|
|
while(<$file_handle>)
|
|
|
|
{
|
|
|
|
chomp;
|
|
|
|
my $line = $_;
|
|
|
|
$line =~ s/\n$//;
|
|
|
|
$line =~ s/\r$//;
|
|
|
|
if ($line =~ /^\d+: (.*?): </)
|
|
|
|
{
|
|
|
|
$interface = $1;
|
|
|
|
}
|
|
|
|
next if not $interface;
|
|
|
|
next if $interface eq "lo";
|
|
|
|
if ($line =~ / inet (\d+\.\d+\.\d+\.\d+\/\d+) /)
|
|
|
|
{
|
|
|
|
my $ip = $1;
|
|
|
|
$ips->{$interface} = $ip;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
close $file_handle;
|
|
|
|
|
|
|
|
if (keys %{$ips})
|
|
|
|
{
|
|
|
|
$new_issue .= "\nActive IPs:\n";
|
|
|
|
foreach my $interface (sort {$a cmp $b} keys %{$ips})
|
|
|
|
{
|
|
|
|
$new_issue .= "- ".$interface.": ".$ips->{$interface}."\n";
|
|
|
|
}
|
|
|
|
$new_issue .= "\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
# Read in the current issue file and see if there is any difference.
|
|
|
|
my $old_issue = "";
|
|
|
|
my $issue_file = "/etc/issue";
|
|
|
|
open ($file_handle, "<", $issue_file) or die "Failed to read: [".$issue_file."], error was: [".$!."]\n";
|
|
|
|
while(<$file_handle>)
|
|
|
|
{
|
|
|
|
### NOTE: Don't chop this, we want to record exactly what we read
|
|
|
|
$old_issue .= $_;
|
|
|
|
}
|
|
|
|
close $file_handle;
|
|
|
|
|
|
|
|
my $update = $new_issue eq $old_issue ? 0 : 1;
|
|
|
|
if ($update)
|
|
|
|
{
|
|
|
|
open (my $file_handle, ">", $issue_file) or die "Failed to write: [".$issue_file."], the error was: [".$!."]\n";
|
|
|
|
print $file_handle $new_issue;
|
|
|
|
close $file_handle;
|
|
|
|
}
|
|
|
|
|
|
|
|
exit(0);
|