Richard W.M. Jones
2016-Jun-07 09:29 UTC
[Libguestfs] [PATCH] customize: Add --uninstall operation.
---
customize/customize_run.ml | 30 ++++++++++++++++++++++++++++++
generator/customize.ml | 17 +++++++++++++++--
2 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/customize/customize_run.ml b/customize/customize_run.ml
index c9d9d7d..b2506d1 100644
--- a/customize/customize_run.ml
+++ b/customize/customize_run.ml
@@ -151,6 +151,31 @@ exec >>%s 2>&1
| pm ->
error_unimplemented_package_manager (s_"--update") pm
+ and guest_uninstall_command packages + let quoted_args = String.concat
" " (List.map quote packages) in
+ match g#inspect_get_package_management root with
+ | "apk" -> sprintf "apk del %s" quoted_args
+ | "apt" ->
+ (* http://unix.stackexchange.com/questions/22820 *)
+ sprintf "
+ export DEBIAN_FRONTEND=noninteractive
+ apt_opts='-q -y -o Dpkg::Options::=--force-confnew'
+ apt-get $apt_opts update
+ apt-get $apt_opts remove %s
+ " quoted_args
+ | "dnf" -> sprintf "dnf -y remove %s" quoted_args
+ | "pisi" -> sprintf "pisi rm %s" quoted_args
+ | "pacman" -> sprintf "pacman -R %s" quoted_args
+ | "urpmi" -> sprintf "urpme %s" quoted_args
+ | "xbps" -> sprintf "xbps-remove -Sy %s"
quoted_args
+ | "yum" -> sprintf "yum -y remove %s" quoted_args
+ | "zypper" -> sprintf "zypper -n rm -l %s"
quoted_args
+
+ | "unknown" ->
+ error_unknown_package_manager (s_"--uninstall")
+ | pm ->
+ error_unimplemented_package_manager (s_"--uninstall") pm
+
(* Windows has package_management == "unknown". *)
and error_unknown_package_manager flag error (f_"cannot use
'%s' because no package manager has been detected for this guest
OS.\n\nIf this guest OS is a common one with ordinary package management then
this may have been caused by a failure of libguestfs inspection.\n\nFor OSes
such as Windows that lack package management, this is not possible. Try using
one of the '--firstboot*' flags instead (described in the
manual).") flag
@@ -330,6 +355,11 @@ exec >>%s 2>&1
message (f_"Running touch: %s") path;
g#touch path
+ | `UninstallPackages pkgs ->
+ message (f_"Uninstalling packages: %s") (String.concat "
" pkgs);
+ let cmd = guest_uninstall_command pkgs in
+ do_run ~display:cmd cmd
+
| `Update ->
message (f_"Updating packages");
let cmd = guest_update_command () in
diff --git a/generator/customize.ml b/generator/customize.ml
index 3d3f978..496077b 100644
--- a/generator/customize.ml
+++ b/generator/customize.ml
@@ -214,7 +214,7 @@ installed during the image build using the guest's
package manager
For an overview on the different ways to install packages, see
L<virt-builder(1)/INSTALLING PACKAGES>.
-See also I<--update>.";
+See also I<--update>, I<--uninstall>.";
};
{ op_name = "link";
@@ -424,6 +424,19 @@ string like C<Europe/London>";
This command performs a L<touch(1)>-like operation on
C<FILE>.";
};
+ { op_name = "uninstall";
+ op_type = StringList "PKG,PKG..";
+ op_discrim = "`UninstallPackages";
+ op_shortdesc = "Uninstall package(s)";
+ op_pod_longdesc = "\
+Uninstall the named packages (a comma-separated list). These are
+removed during the image build using the guest's package manager
+(eg. apt, yum, etc.). Dependent packages may also need to be
+uninstalled to satisfy the request.
+
+See also I<--install>, I<--update>.";
+ };
+
{ op_name = "update";
op_type = Unit;
op_discrim = "`Update";
@@ -433,7 +446,7 @@ Do the equivalent of C<yum update>, C<apt-get
upgrade>, or whatever
command is required to update the packages already installed in the
template to their latest versions.
-See also I<--install>.";
+See also I<--install>, I<--uninstall>.";
};
{ op_name = "upload";
--
2.7.4
Richard W.M. Jones
2016-Jun-07 11:20 UTC
Re: [Libguestfs] [PATCH] customize: Add --uninstall operation.
On Tue, Jun 07, 2016 at 10:29:01AM +0100, Richard W.M. Jones wrote:> --- > customize/customize_run.ml | 30 ++++++++++++++++++++++++++++++ > generator/customize.ml | 17 +++++++++++++++-- > 2 files changed, 45 insertions(+), 2 deletions(-) > > diff --git a/customize/customize_run.ml b/customize/customize_run.ml > index c9d9d7d..b2506d1 100644 > --- a/customize/customize_run.ml > +++ b/customize/customize_run.ml > @@ -151,6 +151,31 @@ exec >>%s 2>&1 > | pm -> > error_unimplemented_package_manager (s_"--update") pm > > + and guest_uninstall_command packages > + let quoted_args = String.concat " " (List.map quote packages) in > + match g#inspect_get_package_management root with > + | "apk" -> sprintf "apk del %s" quoted_args > + | "apt" -> > + (* http://unix.stackexchange.com/questions/22820 *) > + sprintf " > + export DEBIAN_FRONTEND=noninteractive > + apt_opts='-q -y -o Dpkg::Options::=--force-confnew'> + apt-get $apt_opts updateI pushed this patch as it should be a simple feature request, but I removed the above line which the bug requester has assured me is not needed on Debian when removing packages. Rich.> + apt-get $apt_opts remove %s > + " quoted_args > + | "dnf" -> sprintf "dnf -y remove %s" quoted_args > + | "pisi" -> sprintf "pisi rm %s" quoted_args > + | "pacman" -> sprintf "pacman -R %s" quoted_args > + | "urpmi" -> sprintf "urpme %s" quoted_args > + | "xbps" -> sprintf "xbps-remove -Sy %s" quoted_args > + | "yum" -> sprintf "yum -y remove %s" quoted_args > + | "zypper" -> sprintf "zypper -n rm -l %s" quoted_args > + > + | "unknown" -> > + error_unknown_package_manager (s_"--uninstall") > + | pm -> > + error_unimplemented_package_manager (s_"--uninstall") pm > + > (* Windows has package_management == "unknown". *) > and error_unknown_package_manager flag > error (f_"cannot use '%s' because no package manager has been detected for this guest OS.\n\nIf this guest OS is a common one with ordinary package management then this may have been caused by a failure of libguestfs inspection.\n\nFor OSes such as Windows that lack package management, this is not possible. Try using one of the '--firstboot*' flags instead (described in the manual).") flag > @@ -330,6 +355,11 @@ exec >>%s 2>&1 > message (f_"Running touch: %s") path; > g#touch path > > + | `UninstallPackages pkgs -> > + message (f_"Uninstalling packages: %s") (String.concat " " pkgs); > + let cmd = guest_uninstall_command pkgs in > + do_run ~display:cmd cmd > + > | `Update -> > message (f_"Updating packages"); > let cmd = guest_update_command () in > diff --git a/generator/customize.ml b/generator/customize.ml > index 3d3f978..496077b 100644 > --- a/generator/customize.ml > +++ b/generator/customize.ml > @@ -214,7 +214,7 @@ installed during the image build using the guest's package manager > For an overview on the different ways to install packages, see > L<virt-builder(1)/INSTALLING PACKAGES>. > > -See also I<--update>."; > +See also I<--update>, I<--uninstall>."; > }; > > { op_name = "link"; > @@ -424,6 +424,19 @@ string like C<Europe/London>"; > This command performs a L<touch(1)>-like operation on C<FILE>."; > }; > > + { op_name = "uninstall"; > + op_type = StringList "PKG,PKG.."; > + op_discrim = "`UninstallPackages"; > + op_shortdesc = "Uninstall package(s)"; > + op_pod_longdesc = "\ > +Uninstall the named packages (a comma-separated list). These are > +removed during the image build using the guest's package manager > +(eg. apt, yum, etc.). Dependent packages may also need to be > +uninstalled to satisfy the request. > + > +See also I<--install>, I<--update>."; > + }; > + > { op_name = "update"; > op_type = Unit; > op_discrim = "`Update"; > @@ -433,7 +446,7 @@ Do the equivalent of C<yum update>, C<apt-get upgrade>, or whatever > command is required to update the packages already installed in the > template to their latest versions. > > -See also I<--install>."; > +See also I<--install>, I<--uninstall>."; > }; > > { op_name = "upload"; > -- > 2.7.4 > > _______________________________________________ > Libguestfs mailing list > Libguestfs@redhat.com > https://www.redhat.com/mailman/listinfo/libguestfs-- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-top is 'top' for virtual machines. Tiny program with many powerful monitoring features, net stats, disk stats, logging, etc. http://people.redhat.com/~rjones/virt-top
Seemingly Similar Threads
- Re: [PATCH 2/2] Make sure gpg-agent is terminated before umount
- Re: [PATCH 2/2] customize: Improve the error messages when package manager is unknown or unsupported.
- [PATCH] customize: use --noconfirm when installing Arch Linux packages
- [PATCH 1/2] inspection: Set package manager to "unknown" if parsing major version failed (RHBZ#1332025).
- [PATCH 2/2] customize: Improve the error messages when package manager is unknown or unsupported.