summaryrefslogtreecommitdiffstats
path: root/perl
diff options
context:
space:
mode:
authorMatthew Booth <mbooth@redhat.com>2009-07-20 11:16:55 +0100
committerMatthew Booth <mbooth@redhat.com>2009-07-20 11:16:55 +0100
commit06f6cc32f02c25b88e763237332b17dc7c6c6837 (patch)
treee5a8b801a6ad0d25a7cdd7ecf543aa8ae4a9ac60 /perl
parent503bd498dac5689f84983b583035a9a4a1f9e756 (diff)
downloadlibguestfs-06f6cc32f02c25b88e763237332b17dc7c6c6837.tar.gz
libguestfs-06f6cc32f02c25b88e763237332b17dc7c6c6837.tar.xz
libguestfs-06f6cc32f02c25b88e763237332b17dc7c6c6837.zip
Replace 'distrofamily' with feature tags
It turns out that the distribution hierarchy is not as reliable concept as you might think. This patch removes distrofamily again. Instead of distrofamily, we will add feature tags. This patch adds 2 feature tags for Linux distributions: package_format (eg rpm/dpkg) package_management (eg rhn/yum/apt) This change is reflected in the output of virt-inspector
Diffstat (limited to 'perl')
-rw-r--r--perl/lib/Sys/Guestfs/Lib.pm39
1 files changed, 30 insertions, 9 deletions
diff --git a/perl/lib/Sys/Guestfs/Lib.pm b/perl/lib/Sys/Guestfs/Lib.pm
index df3bbe19..f0840901 100644
--- a/perl/lib/Sys/Guestfs/Lib.pm
+++ b/perl/lib/Sys/Guestfs/Lib.pm
@@ -478,10 +478,16 @@ Filesystem content, if we could determine it. One of: "linux-grub",
Operating system distribution. One of: "fedora", "rhel", "centos",
"scientific", "debian".
-=item osdistrofamily
+=item package_format
(For Linux root partitions only)
-Operating system distribution family. One of: "redhat", "debian".
+The package format used by the guest distribution. One of: "rpm", "dpkg".
+
+=item package_management
+
+(For Linux root partitions only)
+The package management tool used by the guest distribution. One of: "rhn",
+"yum", "apt".
=item osversion
@@ -614,12 +620,13 @@ sub _check_linux_root
# Look into /etc to see if we recognise the operating system.
if ($g->is_file ("/etc/redhat-release")) {
- $r->{osdistrofamily} = "redhat";
+ $r->{package_format} = "rpm";
$_ = $g->cat ("/etc/redhat-release");
if (/Fedora release (\d+\.\d+)/) {
$r->{osdistro} = "fedora";
- $r->{osversion} = "$1"
+ $r->{osversion} = "$1";
+ $r->{package_management} = "yum";
}
elsif (/(Red Hat Enterprise Linux|CentOS|Scientific Linux)/) {
@@ -631,10 +638,12 @@ sub _check_linux_root
elsif($distro eq "CentOS") {
$r->{osdistro} = "centos";
+ $r->{package_management} = "yum";
}
elsif($distro eq "Scientific Linux") {
$r->{osdistro} = "scientific";
+ $r->{package_management} = "yum";
}
# Shouldn't be possible
@@ -647,13 +656,23 @@ sub _check_linux_root
elsif (/$distro.*release (\d+(?:\.(?:\d+))?)/) {
$r->{osversion} = "$1";
}
+
+ # Package management in RHEL changed in version 5
+ if ($r->{osdistro} eq "rhel") {
+ if ($r->{osversion} >= 5) {
+ $r->{package_management} = "yum";
+ } else {
+ $r->{package_management} = "rhn";
+ }
+ }
}
else {
$r->{osdistro} = "redhat-based";
}
} elsif ($g->is_file ("/etc/debian_version")) {
- $r->{osdistrofamily} = "debian";
+ $r->{package_format} = "dpkg";
+ $r->{package_management} = "apt";
$_ = $g->cat ("/etc/debian_version");
if (/(\d+\.\d+)/) {
@@ -915,9 +934,11 @@ sub _get_os_version
$r->{os} = $r->{root}->{fsos} if exists $r->{root}->{fsos};
$r->{distro} = $r->{root}->{osdistro} if exists $r->{root}->{osdistro};
- $r->{distrofamily} = $r->{root}->{osdistrofamily}
- if exists $r->{root}->{osdistrofamily};
$r->{version} = $r->{root}->{osversion} if exists $r->{root}->{osversion};
+ $r->{package_format} = $r->{root}->{package_format}
+ if exists $r->{root}->{package_format};
+ $r->{package_management} = $r->{root}->{package_management}
+ if exists $r->{root}->{package_management};
}
sub _assign_mount_points
@@ -1097,8 +1118,8 @@ sub _check_for_applications
my $osn = $os->{os};
if ($osn eq "linux") {
- my $family = $os->{distrofamily};
- if (defined $family && $family eq "redhat") {
+ my $package_format = $os->{package_format};
+ if (defined $package_format && $package_format eq "rpm") {
my @lines = $g->command_lines
(["rpm",
"-q", "-a",