[Libguestfs] [PATCH 10/10] dib: add squashfs output format

Pino Toscano ptoscano at redhat.com
Tue Feb 14 08:12:11 UTC 2017


Implement the "squash" output format, i.e. a squashfs compressed
filesystem.

This was implemented in diskimage-builder upstream as
commit 9d13084c4183b63587e1f5e4b03395a8df6538f6.
---
 dib/Makefile.am               |  1 +
 dib/output_format_squashfs.ml | 39 +++++++++++++++++++++++++++++++++++++++
 dib/utils.ml                  |  1 +
 dib/virt-dib.pod              |  6 ++++++
 4 files changed, 47 insertions(+)
 create mode 100644 dib/output_format_squashfs.ml

diff --git a/dib/Makefile.am b/dib/Makefile.am
index 470fb52..6780ee2 100644
--- a/dib/Makefile.am
+++ b/dib/Makefile.am
@@ -31,6 +31,7 @@ formats = \
 	docker \
 	qcow2 \
 	raw \
+	squashfs \
 	tar \
 	tgz \
 	vhd
diff --git a/dib/output_format_squashfs.ml b/dib/output_format_squashfs.ml
new file mode 100644
index 0000000..333e711
--- /dev/null
+++ b/dib/output_format_squashfs.ml
@@ -0,0 +1,39 @@
+(* virt-dib
+ * Copyright (C) 2017 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+open Common_utils
+open Common_gettext.Gettext
+
+open Output_format
+
+let squashfs_check (g : Guestfs.guestfs) =
+  g#available [| "squashfs" |]
+
+let squashfs_run_fs (g : Guestfs.guestfs) filename _ =
+  message (f_"Compressing the image as squashfs");
+  g#mksquashfs ~excludes:[| "sys/*"; "proc/*"; "dev/*" |] ~compress:"xz"
+    "/" filename
+
+let fmt = {
+  defaults with
+    name = "squashfs";
+    check_appliance_prerequisites = Some squashfs_check;
+    run_on_filesystem = Some squashfs_run_fs;
+}
+
+let () = register_format fmt
diff --git a/dib/utils.ml b/dib/utils.ml
index 3775a41..da5e738 100644
--- a/dib/utils.ml
+++ b/dib/utils.ml
@@ -33,6 +33,7 @@ let current_arch () =
   | arch -> arch
 
 let output_filename image_name = function
+  | "squashfs" -> image_name ^ ".squash"
   | fmt -> image_name ^ "." ^ fmt
 
 let log_filename () =
diff --git a/dib/virt-dib.pod b/dib/virt-dib.pod
index 2786050..7083e78 100644
--- a/dib/virt-dib.pod
+++ b/dib/virt-dib.pod
@@ -212,6 +212,12 @@ QEMU's qcow2.
 
 Raw disk format.
 
+=item C<squashfs>
+
+An squashfs filesystem, compressed with XZ.  This output format
+requires the C<squashfs> feature; see also
+L<guestfs(3)/AVAILABILITY>.
+
 =item C<tar>
 
 An uncompressed tarball.
-- 
2.9.3




More information about the Libguestfs mailing list