You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.0 KiB
78 lines
2.0 KiB
#!/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);
|
|
|