Fix and clean up get_os().

This commit is contained in:
Daniel Nichter
2012-08-08 12:38:37 -06:00
parent 07237162f7
commit 5abd7f2d97

View File

@@ -104,16 +104,16 @@ sub get_os {
my ($self) = @_; my ($self) = @_;
chomp(my $platform = `uname -s`); chomp(my $platform = `uname -s`);
PTDEBUG && _d('platform:', $platform);
return unless $platform; return unless $platform;
my $lsb_release=`which lsb_release 2>/dev/null | awk '{print \$1}'`; chomp(my $lsb_release
= `which lsb_release 2>/dev/null | awk '{print \$1}'` || '');
PTDEBUG && _d('lsb_release:', $lsb_release);
my $kernel = "";
my $release = ""; my $release = "";
if ( $platform eq 'Linux' ) { if ( $platform eq 'Linux' ) {
$kernel = `uname -r`;
if ( -f "/etc/fedora-release" ) { if ( -f "/etc/fedora-release" ) {
$release = `cat /etc/fedora-release`; $release = `cat /etc/fedora-release`;
} }
@@ -127,7 +127,8 @@ sub get_os {
$release = `$lsb_release -ds`; $release = `$lsb_release -ds`;
} }
elsif ( -f "/etc/lsb-release" ) { elsif ( -f "/etc/lsb-release" ) {
$release = `grep DISTRIB_DESCRIPTION /etc/lsb-release |awk -F'=' '{print \$2}' |sed 's#"##g'`; $release = `grep DISTRIB_DESCRIPTION /etc/lsb-release`;
$release =~ s/^\w+="([^"]+)".+/$1/;
} }
elsif ( -f "/etc/debian_version" ) { elsif ( -f "/etc/debian_version" ) {
$release = "Debian-based version " . `cat /etc/debian_version`; $release = "Debian-based version " . `cat /etc/debian_version`;
@@ -136,8 +137,8 @@ sub get_os {
$release .= ' ' . ($code || ''); $release .= ' ' . ($code || '');
} }
} }
elsif ( `ls /etc/*release >/dev/null 2>&1` ) { elsif ( `ls /etc/*release 2>/dev/null` ) {
if ( `grep -q DISTRIB_DESCRIPTION /etc/*release` ) { if ( `grep DISTRIB_DESCRIPTION /etc/*release 2>/dev/null` ) {
$release = `grep DISTRIB_DESCRIPTION /etc/*release | head -n1`; $release = `grep DISTRIB_DESCRIPTION /etc/*release | head -n1`;
} }
else { else {
@@ -146,18 +147,22 @@ sub get_os {
} }
} }
elsif ( $platform =~ m/^\w+BSD$/ ) { elsif ( $platform =~ m/^\w+BSD$/ ) {
$kernel = `sysctl -n "kern.osrevision"`; chomp(my $rel = `uname -r`);
$release = `uname -r`; $release = "$platform $rel";
} }
elsif ( $platform eq "SunOS" ) { elsif ( $platform eq "SunOS" ) {
$kernel = `uname -v`; chomp(my $rel = `head -n1 /etc/release` || `uname -r`);
$release = `head -n1 /etc/release` || `uname -r`; $release = "$platform $rel";
} }
chomp($kernel) if $kernel; if ( !$release ) {
chomp($release) if $release; PTDEBUG && _d('Failed to get the release, using platform');
$release = $platform;
}
chomp($release);
return $kernel && $release ? "$kernel $release" : $platform; PTDEBUG && _d('OS version =', $release);
return $release;
} }
sub get_perl_variable { sub get_perl_variable {