From 1e912c8e385c94baff8e54b76532763ee161d575 Mon Sep 17 00:00:00 2001 From: Bob Gilligan Date: Fri, 30 Apr 2010 15:51:31 -0700 Subject: Added an op-mode command to rename a system image. Also added an op-mode command to display the Vyatta version strings along with the names of the installed images. This is useful if you rename an image from its default name, which is its version string. --- Makefile.am | 1 + 1 file changed, 1 insertion(+) (limited to 'Makefile.am') diff --git a/Makefile.am b/Makefile.am index 7174493..0fda3f8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -23,6 +23,7 @@ bin_SCRIPTS += scripts/show-dhcp-leases.pl bin_SCRIPTS += scripts/vyatta-boot-image.pl bin_SCRIPTS += scripts/vyatta-sudo bin_SCRIPTS += scripts/vyatta-show-snmp.pl +bin_SCRIPTS += scripts/rename-image.pl bin_sudo_users_SCRIPTS = scripts/vyatta-identify-interface.pl bin_sudo_users_SCRIPTS += scripts/vyatta-delete-log-file.sh -- cgit v1.2.3 From f78be567aa747f501ad55f0037ef843801d3dd93 Mon Sep 17 00:00:00 2001 From: Bob Gilligan Date: Fri, 30 Apr 2010 17:49:31 -0700 Subject: Add "show system image storage" op mode command. As the name indicates, it tells you how much disk space each image occupies. --- Makefile.am | 1 + scripts/show-image-storage.pl | 66 ++++++++++++++++++++++++++++ templates/show/system/image/storage/node.def | 3 ++ 3 files changed, 70 insertions(+) create mode 100644 scripts/show-image-storage.pl create mode 100644 templates/show/system/image/storage/node.def (limited to 'Makefile.am') diff --git a/Makefile.am b/Makefile.am index 0fda3f8..25e343c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -24,6 +24,7 @@ bin_SCRIPTS += scripts/vyatta-boot-image.pl bin_SCRIPTS += scripts/vyatta-sudo bin_SCRIPTS += scripts/vyatta-show-snmp.pl bin_SCRIPTS += scripts/rename-image.pl +bin_SCRIPTS += scripts/show-image-storage.pl bin_sudo_users_SCRIPTS = scripts/vyatta-identify-interface.pl bin_sudo_users_SCRIPTS += scripts/vyatta-delete-log-file.sh diff --git a/scripts/show-image-storage.pl b/scripts/show-image-storage.pl new file mode 100644 index 0000000..00a5112 --- /dev/null +++ b/scripts/show-image-storage.pl @@ -0,0 +1,66 @@ +#!/usr/bin/perl + +# **** License **** +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# This code was originally developed by Vyatta, Inc. +# Portions created by Vyatta are Copyright (C) 2010 Vyatta, Inc. +# All Rights Reserved. +# +# Author: Bob Gilligan +# Date: April 30, 2010 +# Description: Script to display disk storage used by images +# +# **** End License **** + +use strict; +use warnings; +use Getopt::Long; + + +# +# Main section +# + +# Figure out where the images live... +my $imagedir = "/live/image/boot"; +if (! -e $imagedir) { + # Must be running on Old non-image system. + $imagedir = "/boot"; + if (! -e $imagedir) { + printf("Can't locate system image directory!\n"); + exit 1; + } +} + +my $bootlist=`/opt/vyatta/bin/vyatta-boot-image.pl --list`; + +my @bootlist_arr = split(/\n/, $bootlist); + +printf("Image name Read-Only Read-Write Total\n"); +printf("------------------------------ ------------ ------------ ------------\n"); + +foreach my $image (@bootlist_arr) { + my $total; + my $read_only; + my $read_write; + my $string; + my $garbage; + + if ( -e "$imagedir/$image") { + $string = `du -s $imagedir/$image`; + ($total, $garbage) = split(' ', $string); + $string = `du -s $imagedir/$image/*.squashfs`; + ($read_only, $garbage) = split(' ', $string); + $read_write = $total - $read_only; + printf("%-30s %12d %12d %12d\n", $image, $read_only, $read_write, + $total); + } +} diff --git a/templates/show/system/image/storage/node.def b/templates/show/system/image/storage/node.def new file mode 100644 index 0000000..0592adc --- /dev/null +++ b/templates/show/system/image/storage/node.def @@ -0,0 +1,3 @@ +help: Show disk space utilization of system images + +run: /opt/vyatta/bin/show-image-storage.pl -- cgit v1.2.3 From 0d76417d76a6cc297fc7944b1f620ef4a83ef1f4 Mon Sep 17 00:00:00 2001 From: Bob Gilligan Date: Wed, 26 May 2010 16:34:44 -0700 Subject: Move DHCPv6 client op-mode commands to this package. --- Makefile.am | 2 + scripts/dhcpv6-client-show-leases.pl | 211 +++++++++++++++++++++ templates/release/dhcpv6/interface/node.def | 2 + .../release/dhcpv6/interface/node.tag/node.def | 10 + templates/release/dhcpv6/node.def | 1 + templates/renew/dhcpv6/interface/node.def | 1 + templates/renew/dhcpv6/interface/node.tag/node.def | 10 + templates/renew/dhcpv6/node.def | 1 + templates/show/dhcpv6/client/leases/node.def | 3 + templates/show/dhcpv6/client/node.def | 1 + 10 files changed, 242 insertions(+) create mode 100644 scripts/dhcpv6-client-show-leases.pl create mode 100644 templates/release/dhcpv6/interface/node.def create mode 100644 templates/release/dhcpv6/interface/node.tag/node.def create mode 100644 templates/release/dhcpv6/node.def create mode 100644 templates/renew/dhcpv6/interface/node.def create mode 100644 templates/renew/dhcpv6/interface/node.tag/node.def create mode 100644 templates/renew/dhcpv6/node.def create mode 100644 templates/show/dhcpv6/client/leases/node.def create mode 100644 templates/show/dhcpv6/client/node.def (limited to 'Makefile.am') diff --git a/Makefile.am b/Makefile.am index 25e343c..67ae860 100644 --- a/Makefile.am +++ b/Makefile.am @@ -26,6 +26,8 @@ bin_SCRIPTS += scripts/vyatta-show-snmp.pl bin_SCRIPTS += scripts/rename-image.pl bin_SCRIPTS += scripts/show-image-storage.pl +sbin_SCRIPTS = scripts/dhcpv6-client-show-leases.pl + bin_sudo_users_SCRIPTS = scripts/vyatta-identify-interface.pl bin_sudo_users_SCRIPTS += scripts/vyatta-delete-log-file.sh bin_sudo_users_SCRIPTS += scripts/vyatta-reboot.pl diff --git a/scripts/dhcpv6-client-show-leases.pl b/scripts/dhcpv6-client-show-leases.pl new file mode 100644 index 0000000..546668c --- /dev/null +++ b/scripts/dhcpv6-client-show-leases.pl @@ -0,0 +1,211 @@ +#!/usr/bin/perl + +# Module: dhcpv6-client-show-leases.pl +# +# **** License **** +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# A copy of the GNU General Public License is available as +# `/usr/share/common-licenses/GPL' in the Debian GNU/Linux distribution +# or on the World Wide Web at `http://www.gnu.org/copyleft/gpl.html'. +# You can also obtain it by writing to the Free Software Foundation, +# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301, USA. +# +# This code was originally developed by Vyatta, Inc. +# Portions created by Vyatta are Copyright (C) 2010 Vyatta, Inc. +# All Rights Reserved. +# +# Author: Bob Gilligan +# Date: April 2010 +# Description: Script to display DHCPv6 client leases in a user-friendly form +# +# **** End License **** + +use strict; +use lib "/opt/vyatta/share/perl5/"; + +use Getopt::Long; +use Vyatta::Config; + + +# Globals +my $debug_flag = 0; + +GetOptions( + "debug" => \$debug_flag, + ); + + +sub log_msg { + my $message = shift; + + print "DEBUG: $message" if $debug_flag; +} + + +# +# Main section. +# + +opendir (my $dir, "/var/lib/dhcp3"); +my @lease_files; +while (my $f = readdir $dir) { + if ($f =~ /^dhclient_v6_(\w+).leases$/) { + push (@lease_files, $f); + } +} +closedir $dir; + +if ($debug_flag) { + print "lease files:", join(' ',@lease_files), "\n"; +} + +# Holds the most recent (last) entry for each interface +my %ghash = (); + +foreach my $lease_filename (@lease_files) { + my @lines=(); + + if (!open(LEASE_FILE, "; + close(LEASE_FILE); + chomp @lines; + + my $level = 0; + my $s1; + my $s2; + my $ia_na; + my $iaaddr; + my $ends_day; + my $ends_time; + my $ifname; + my $starts; + my $pref_life; + my $max_life; + my $binding_state; + + # Parse the leases file into a hash keyed by IPv6 addr. + foreach my $line (@lines) { + log_msg("Line: $line\n"); + if ($line =~ /^lease6 \{/) { + if ($level != 0) { + printf("Found lease6 at level $level\n"); + exit 1; + } + $level++; + } elsif ($line =~ /^.*ia-na .*\{/) { + if ($level != 1) { + printf("Found ia-na at level $level\n"); + exit 1; + } + log_msg("setting ia_na\n"); + ($s1, $ia_na, $s2) = split(' ', $line); + $level++; + } elsif ($line =~ /^.*interface /) { + if ($level != 1) { + printf("Found interface at level $level\n"); + exit 1; + } + ($s1, $ifname) = split(' ', $line); + $ifname =~ s/;//; + $ifname =~ s/\"//g; + log_msg("Setting ifname to $ifname\n"); + } elsif ($line =~ /^.*iaaddr .*\{/) { + if ($level != 2) { + printf("Found iaaddr at level $level\n"); + exit 1; + } + ($s1, $iaaddr, $s2) = split(' ', $line); + log_msg("Setting iaaddr to $iaaddr.\n"); + log_msg("s1 $s1 s2 $s2\n"); + $level++; + } elsif ($line =~ /^.*starts /) { + ($s1, $starts) = split(' ', $line); + $starts =~ s/;//; + } elsif ($line =~ /^.*preferred-life /) { + ($s1, $pref_life) = split(' ', $line); + $pref_life =~ s/;//; + } elsif ($line =~ /^.*max-life /) { + ($s1, $max_life) = split(' ', $line); + $max_life =~ s/;//; + } elsif ($line =~ /^.*ends /) { + if ($level != 2) { + printf("Found ends at level $level\n"); + exit 1; + } + log_msg("Setting ends_day ends_time\n"); + ($s1, $s2, $ends_day, $ends_time) = split(' ', $line); + $ends_time =~ s/;//; + } elsif ($line =~ /^.*binding state /) { + if ($level != 2) { + printf("Found binding state at level $level\n"); + exit 1; + } + log_msg("Setting binding state\n"); + ($s1, $s2, $binding_state) = split(' ', $line); + $binding_state =~ s/;//; + } elsif ($line =~ /^.*\{/) { + log_msg("Unknown clause: $line\n"); + $level++; + } elsif ($line =~ /\}$/) { + $level--; + if ($level == 0) { + if (!defined($ia_na)) { + printf("ia_na not defined\n"); + exit 1; + } + + if (!defined($iaaddr)) { + printf("iaaddr not defined\n"); + exit 1; + } + } + } else { + log_msg("Unknown parameter: $line\n"); + } + } + + my @array = ($ia_na, $iaaddr, $starts, $max_life, $pref_life); + $ghash{$ifname} = \@array; +} + +# Display the leases... + +my $num_entries = scalar(keys %ghash); +if ($num_entries == 0) { + printf("There are no DHCPv6 leases.\n"); + exit 0; +} else { + printf("DHCPv6 client leases:\n"); +} + +printf("\n"); +printf("Interface IPv6 Address Expires\n"); +printf("--------- --------------------------------------- ------------------------\n"); +foreach my $key (keys %ghash) { + my $entry = $ghash{$key}; + my ($ia_na, $iaaddr, $starts, $max_life, $pref_life) = @$entry; + my $ts; + if (defined ($starts) && defined ($max_life)) { + my $exp_time = $starts + $max_life; + $ts = localtime($exp_time); + } else { + $ts = "Unknown"; + } + printf ("%-9s %-39s %s\n", $key, $iaaddr, $ts); +} + + + diff --git a/templates/release/dhcpv6/interface/node.def b/templates/release/dhcpv6/interface/node.def new file mode 100644 index 0000000..847df8e --- /dev/null +++ b/templates/release/dhcpv6/interface/node.def @@ -0,0 +1,2 @@ +help: Release a DHCPv6 lease on an interface + diff --git a/templates/release/dhcpv6/interface/node.tag/node.def b/templates/release/dhcpv6/interface/node.tag/node.def new file mode 100644 index 0000000..05f45c8 --- /dev/null +++ b/templates/release/dhcpv6/interface/node.tag/node.def @@ -0,0 +1,10 @@ +help: Release DHCPv6 lease for interface + +allowed: + local -a array + array=( /var/lib/dhcp3/dhclient_v6_*.conf ) + tail=${array[@]#/var/lib/dhcp3/dhclient_v6_} + ifnames=${tail[@]%.conf} + echo -n ${ifnames[@]} + +run: sudo /opt/vyatta/sbin/vyatta-dhcpv6-client.pl --release --ifname "$4" diff --git a/templates/release/dhcpv6/node.def b/templates/release/dhcpv6/node.def new file mode 100644 index 0000000..ed4b8c2 --- /dev/null +++ b/templates/release/dhcpv6/node.def @@ -0,0 +1 @@ +help: Release a DHCPv6 lease \ No newline at end of file diff --git a/templates/renew/dhcpv6/interface/node.def b/templates/renew/dhcpv6/interface/node.def new file mode 100644 index 0000000..eb69706 --- /dev/null +++ b/templates/renew/dhcpv6/interface/node.def @@ -0,0 +1 @@ +help: Renew DHCPv6 lease for an interface \ No newline at end of file diff --git a/templates/renew/dhcpv6/interface/node.tag/node.def b/templates/renew/dhcpv6/interface/node.tag/node.def new file mode 100644 index 0000000..b6c5813 --- /dev/null +++ b/templates/renew/dhcpv6/interface/node.tag/node.def @@ -0,0 +1,10 @@ +help: Renew a DHCPv6 lease on an interface + +allowed: + local -a array + array=( /var/lib/dhcp3/dhclient_v6_*.conf ) + tail=${array[@]#/var/lib/dhcp3/dhclient_v6_} + ifnames=${tail[@]%.conf} + echo -n ${ifnames[@]} + +run: sudo /opt/vyatta/sbin/vyatta-dhcpv6-client.pl --renew --ifname "$4" \ No newline at end of file diff --git a/templates/renew/dhcpv6/node.def b/templates/renew/dhcpv6/node.def new file mode 100644 index 0000000..cbfb1bb --- /dev/null +++ b/templates/renew/dhcpv6/node.def @@ -0,0 +1 @@ +help: Renew a DHCPv6 lease diff --git a/templates/show/dhcpv6/client/leases/node.def b/templates/show/dhcpv6/client/leases/node.def new file mode 100644 index 0000000..8eb6954 --- /dev/null +++ b/templates/show/dhcpv6/client/leases/node.def @@ -0,0 +1,3 @@ +help: Display DHCPv6 client leases + +run: sudo /opt/vyatta/sbin/dhcpv6-client-show-leases.pl diff --git a/templates/show/dhcpv6/client/node.def b/templates/show/dhcpv6/client/node.def new file mode 100644 index 0000000..7c5b0c3 --- /dev/null +++ b/templates/show/dhcpv6/client/node.def @@ -0,0 +1 @@ +help: Display DHCPv6 client information -- cgit v1.2.3