X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=perl%2Flib%2FSys%2FGuestfs%2FLib.pm;h=98cdb88358c344fe0804ff767ec060dbd9595157;hp=e17728d5ab55e19e8a50d155550f28c3555dc088;hb=dcfa05f703ca0c281c12a14450d06dfb4ac7893d;hpb=c03b7e4d756597f30415260a84a3caee3d9d6bde diff --git a/perl/lib/Sys/Guestfs/Lib.pm b/perl/lib/Sys/Guestfs/Lib.pm index e17728d..98cdb88 100644 --- a/perl/lib/Sys/Guestfs/Lib.pm +++ b/perl/lib/Sys/Guestfs/Lib.pm @@ -665,7 +665,7 @@ Operating system distribution. One of: "fedora", "rhel", "centos", =item package_format (For Linux root partitions only) -The package format used by the guest distribution. One of: "rpm", "dpkg". +The package format used by the guest distribution. One of: "rpm", "deb". =item package_management @@ -869,7 +869,7 @@ sub _check_linux_root $r->{osdistro} = "redhat-based"; } } elsif ($g->is_file ("/etc/debian_version")) { - $r->{package_format} = "dpkg"; + $r->{package_format} = "deb"; $r->{package_management} = "apt"; $_ = $g->cat ("/etc/debian_version"); @@ -1439,6 +1439,7 @@ sub _check_for_applications (["rpm", "-q", "-a", "--qf", "%{name} %{epoch} %{version} %{release} %{arch}\n"]); + @lines = sort @lines; foreach (@lines) { if (m/^(.*) (.*) (.*) (.*) (.*)$/) { my $epoch = $2; @@ -1453,6 +1454,24 @@ sub _check_for_applications push @apps, $app } } + } elsif (defined $package_format && $package_format eq "deb") { + my @lines = $g->command_lines + (["dpkg-query", + "-f", '${Package} ${Version} ${Architecture} ${Status}\n', + "-W"]); + @lines = sort @lines; + foreach (@lines) { + if (m/^(.*) (.*) (.*) (.*) (.*) (.*)$/) { + if ( $6 eq "installed" ) { + my $app = { + name => $1, + version => $2, + arch => $3 + }; + push @apps, $app + } + } + } } } elsif ($osn eq "windows") { # XXX @@ -1525,6 +1544,12 @@ sub _check_for_kernels # For every kernel we find, inspect it and add to $os->{kernels} my $grub = _find_grub_prefix($g, $os); + my $grub_conf = "/etc/grub.conf"; + + # Debian and other's have no /etc/grub.conf: + if ( ! -f "$grub_conf" ) { + $grub_conf = "$grub/grub/menu.lst"; + } my @boot_configs; @@ -1544,7 +1569,7 @@ sub _check_for_kernels my @configs = (); # Get all configurations from grub foreach my $bootable - ($g->aug_match("/files/etc/grub.conf/title")) + ($g->aug_match("/files/$grub_conf/title")) { my %config = (); $config{title} = $g->aug_get($bootable); @@ -1617,7 +1642,7 @@ sub _check_for_kernels # Add the default configuration eval { - $boot{default} = $g->aug_get("/files/etc/grub.conf/default"); + $boot{default} = $g->aug_get("/files/$grub_conf/default"); }; if($@) { warn __"No grub default specified";