[Libguestfs] [PATCH] Initial drop of virt-v2v
Guido Günther
agx at sigxcpu.org
Sat Jul 25 01:14:05 UTC 2009
Hi Matthew,
not that I'm qualified to comment on this but it seems this is very
rpm/RedHat specific. Would it make sense to abstrǎct the package format
from the very beginning by introducing some thin wrappers:
On Fri, Jul 24, 2009 at 10:34:21PM +0100, Matthew Booth wrote:
[..snip..]
> +sub add_kernel
> +{
> + my $self = shift;
> + my $kernel_arch = "i386"; # XXX: Need to get this from inspection!
> +
> + my $g = $self->{g};
> +
> + my $filename = $self->match_file('kernel', $kernel_arch);
> +
> + # Inspect the rpm to work out what kernel version it contains
> + my $version;
> + foreach my $file ($g->command_lines(["rpm", "-qlp", $filename])) {
list_pkg
> + if($file =~ m{^/boot/vmlinuz-(.*)$}) {
> + $version = $1;
> + last;
> + }
> + }
> +
> + die(__x"{filename} doesn't contain a valid kernel\n",
> + filename => $filename) if(!defined($version));
> +
> + $self->install_rpm($filename);
> +
> + # Make augeas reload so it'll find the new kernel
> + $g->aug_load();
> +
> + return $version;
> +}
> +
> +sub remove_kernel
> +{
> + my $self = shift;
> + my $version = shift;
> +
> + my $g = $self->{g};
> + eval {
> + # Work out which rpm contains the kernel
> + my $rpm = $g->command(["rpm", "-qf", "/boot/vmlinuz-".$version]);
grep_pkg
> +
> + $g->command(["rpm", "-e", $rpm]);
> + };
> +
> + die($@) if($@);
> +}
> +
> +sub add_application
> +{
> + my $self = shift;
> + my $label = shift;
> + my $user_arch = "i386"; # XXX: Need to get this from inspection!
> +
> + my $filename = $self->match_file($label, $user_arch);
> + $self->install_rpm($filename);
install_pkg
> +}
> +
> +sub remove_application
> +{
> + my $self = shift;
> + my $name = shift;
> +
> + my $g = $self->{g};
> + eval {
> + $g->command(["rpm", "-e", $name]);
remove_pkg
We could then hook in deb based distros more easily by looking at
$desc->{package_format}.
Cheers,
-- Guido
More information about the Libguestfs
mailing list