GNU bug report logs - #73260
Add libguestfs

Previous Next

Package: guix-patches;

Reported by: paul <goodoldpaul <at> autistici.org>

Date: Sat, 14 Sep 2024 21:19:01 UTC

Severity: normal

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #38 received at 73260 <at> debbugs.gnu.org (full text, mbox):

From: Giacomo Leidi <goodoldpaul <at> autistici.org>
To: 73260 <at> debbugs.gnu.org
Cc: Giacomo Leidi <goodoldpaul <at> autistici.org>
Subject: [PATCH v2 2/3] gnu: Add libguestfs-minimal.
Date: Sat,  5 Oct 2024 00:31:43 +0200
* gnu/packages/virtualization.scm (libguestfs-minimal): New variable.
* gnu/packages/patches/libguestfs-syms.patch: Add file.
* gnu/local.mk: Add it.

Change-Id: Ide22707724ecd41145243c9f41adc3f5557c593e
---
 gnu/local.mk                               |   1 +
 gnu/packages/patches/libguestfs-syms.patch |  44 +++++++
 gnu/packages/virtualization.scm            | 127 +++++++++++++++++++++
 3 files changed, 172 insertions(+)
 create mode 100644 gnu/packages/patches/libguestfs-syms.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 49660d4b3e..6503b0cb7a 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1607,6 +1607,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/libgeotiff-fix-tests-with-proj-9.3.0.patch	\
   %D%/packages/patches/libgeotiff-fix-tests-with-proj-9.3.1.patch	\
   %D%/packages/patches/libgeotiff-fix-tests-on-i386.patch	\
+  %D%/packages/patches/libguestfs-syms.patch            	\
   %D%/packages/patches/libobjc2-unbundle-robin-map.patch	\
   %D%/packages/patches/libvirt-add-install-prefix.patch	\
   %D%/packages/patches/libziparchive-add-includes.patch		\
diff --git a/gnu/packages/patches/libguestfs-syms.patch b/gnu/packages/patches/libguestfs-syms.patch
new file mode 100644
index 0000000000..ad7453ea3c
--- /dev/null
+++ b/gnu/packages/patches/libguestfs-syms.patch
@@ -0,0 +1,44 @@
+diff -urN a/lib/Makefile.am b/lib/Makefile.am
+
+Without this patch the build phase fails during linking with:
+
+ld:./libguestfs.syms: file format not recognized; treating as linker script
+ld:./libguestfs.syms:23: syntax error
+collect2: error: ld returned 1 exit status
+make[3]: *** [Makefile:1252: libguestfs.la] Error 1
+make[3]: *** Waiting for unfinished jobs....
+Wide character in print at /tmp/guix-build-libguestfs-1.53.6.drv-0/libguestfs-1.50.1/podwrapper.pl line 633.
+touch stamp-guestfs.pod
+make[3]: Leaving directory '/tmp/guix-build-libguestfs-1.53.6.drv-0/libguestfs-1.50.1/lib'
+make[2]: *** [Makefile:1161: all] Error 2
+make[2]: Leaving directory '/tmp/guix-build-libguestfs-1.53.6.drv-0/libguestfs-1.50.1/lib'
+make[1]: *** [Makefile:1083: all-recursive] Error 1
+make[1]: Leaving directory '/tmp/guix-build-libguestfs-1.53.6.drv-0/libguestfs-1.50.1'
+make: *** [Makefile:989: all] Error 2
+error: in phase 'build': uncaught exception:
+
+--- a/lib/Makefile.am	2023-07-20 17:35:16.489080853 +0200
++++ b/lib/Makefile.am	2023-07-20 17:35:47.305793499 +0200
+@@ -160,8 +160,7 @@
+ # Force libtool to name the library 'libguestfs.so.0.$(MAX_PROC_NR).0'.
+ # Include the version script to limit which symbols are exported.
+ libguestfs_la_LDFLAGS = \
+-	-version-info $(MAX_PROC_NR):0:$(MAX_PROC_NR) \
+-	$(VERSION_SCRIPT_FLAGS)$(srcdir)/libguestfs.syms
++	-version-info $(MAX_PROC_NR):0:$(MAX_PROC_NR)
+ 
+ if HAVE_FUSE
+ # XXX Unfortunately FUSE_CFLAGS defines _FILE_OFFSET_BITS=64.
+diff -urN a/lib/Makefile.in b/lib/Makefile.in
+--- a/lib/Makefile.in	2023-07-20 17:35:16.489080853 +0200
++++ b/lib/Makefile.in	2023-07-20 17:36:05.474213641 +0200
+@@ -1109,8 +1109,7 @@
+ # Force libtool to name the library 'libguestfs.so.0.$(MAX_PROC_NR).0'.
+ # Include the version script to limit which symbols are exported.
+ libguestfs_la_LDFLAGS = \
+-	-version-info $(MAX_PROC_NR):0:$(MAX_PROC_NR) \
+-	$(VERSION_SCRIPT_FLAGS)$(srcdir)/libguestfs.syms
++	-version-info $(MAX_PROC_NR):0:$(MAX_PROC_NR)
+ 
+ @HAVE_LIBVIRT_TRUE <at> libvirt_is_version_SOURCES = libvirt-is-version.c
+ @HAVE_LIBVIRT_TRUE <at> libvirt_is_version_LDADD = \
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 4ad94ea8e5..4d3d7502f1 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -61,6 +61,7 @@ (define-module (gnu packages virtualization)
   #:use-module (gnu packages apparmor)
   #:use-module (gnu packages assembly)
   #:use-module (gnu packages attr)
+  #:use-module (gnu packages augeas)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
@@ -68,11 +69,13 @@ (define-module (gnu packages virtualization)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages bootloaders)
   #:use-module (gnu packages build-tools)
+  #:use-module (gnu packages cdrom)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cluster)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages containers)
+  #:use-module (gnu packages cpio)
   #:use-module (gnu packages cross-base)
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages cryptsetup)
@@ -84,6 +87,7 @@ (define-module (gnu packages virtualization)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages figlet)
+  #:use-module (gnu packages file)
   #:use-module (gnu packages firmware)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fonts)
@@ -96,6 +100,7 @@ (define-module (gnu packages virtualization)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages golang)
+  #:use-module (gnu packages gperf)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages haskell)
@@ -3011,3 +3016,125 @@ (define-public hivex
 file available through a C API, or through a separate program to export the
 hive as XML.")
     (license license:lgpl2.1)))
+
+(define-public libguestfs-minimal
+  (package
+    (name "libguestfs-minimal")
+    (version "1.53.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://libguestfs.org/download/"
+                                  (version-major+minor version)
+                                  "-stable/libguestfs-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0vssarc3n4kv26fyjmkrrcvh55v41fhycba43pij3rc2izl72s2y"))
+              (patches
+               (search-patches "libguestfs-syms.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:configure-flags
+           #~(list "--disable-appliance"
+                   "--disable-daemon"
+                   "--disable-static"
+                   "--disable-erlang"
+                   "--disable-golang"
+                   "--disable-haskell"
+                   "--disable-java"
+                   "--disable-lua"
+                   ;; FIXME: Perl bindings have wrong rpath and break the
+                   ;; validate-runpath phase.  Temporarily disable them until
+                   ;; a way is found to correctly patch perl/Build.PL.in.
+                   "--disable-perl"
+                   "--disable-php"
+                   "--with-distro=\"Guix System\""
+                   "--with-readline"
+                   (string-append "LDFLAGS=-Wl,-rpath," %output "/lib"))
+           #:make-flags #~`("REALLY_INSTALL=yes")
+           #:phases
+           #~(let* ((lib (string-append #$output "/lib"))
+                    (lib/ocaml (string-append lib "/ocaml")))
+               (modify-phases %standard-phases
+                 (add-after 'unpack 'patch-makefiles
+                   (lambda _
+                     (for-each patch-shebang
+                               (find-files "."))
+                     (substitute* "ocaml/Makefile.in"
+                       (("\\$\\(DESTDIR\\)\\$\\(OCAMLLIB\\)")
+                        lib/ocaml))
+                     ;; FIXME: Perl bindings have broken runpath,
+                     ;; this substitution doesn't seem to work.
+                     (substitute* "perl/Build.PL.in"
+                       (("extra_linker_flags => \\[")
+                        (string-append "extra_linker_flags => [
+        '-L" #$output "/lib',")))))
+                 (replace 'check
+                   (lambda* (#:key tests? make-flags #:allow-other-keys)
+                     (when tests?
+                       (apply invoke `("make" ,@make-flags "check-direct")))))
+                 (replace 'install
+                   (lambda* (#:key make-flags #:allow-other-keys)
+                     (mkdir-p "temp-build-dir")
+                     (apply invoke `("make" ,@make-flags "INSTALLDIRS=vendor"
+                                     "install"))))
+                 (add-after 'install 'wrap-binaries
+                   (lambda _
+                     (let ((bin (string-append #$output "/bin")))
+                       (for-each
+                        (lambda (binary)
+                          (use-modules (srfi srfi-1))
+                          (wrap-program binary
+                            `("PERL5LIB" ":" prefix
+                              (,(string-append #$output
+                                               "/lib/perl5/site_perl")))
+                            `("PATH" ":" prefix
+                              ,(search-path-as-list
+                                '("bin")
+                                (map second
+                                     '#$(package-inputs this-package))))))
+                        (find-files bin)))))
+                 (replace 'validate-documentation-location
+                   (lambda _
+                     (let ((man-dir
+                            (string-append #$output "/man"))
+                           (info-dir
+                            (string-append #$output "/info")))
+                       (for-each (lambda (d)
+                                   (invoke "rm" "-rf" d))
+                                 (list man-dir info-dir)))))))))
+    (native-inputs (list augeas
+                         bison
+                         cpio
+                         flex
+                         gettext-minimal
+                         gperf
+                         libtool
+                         ocaml
+                         ocaml-findlib
+                         ncurses
+                         perl
+                         perl-getopt-long
+                         perl-module-build
+                         pkg-config
+                         po4a
+                         xorriso
+                         xz
+                         zstd))
+    (inputs
+     (list file
+           fuse
+           jansson
+           hivex
+           libtirpc
+           pcre2
+           readline
+           qemu))
+    (home-page "https://libguestfs.org/")
+    (synopsis "Access and modify virtual machine disk images")
+    (description
+     "@code{libguestfs} is a set of tools for accessing and modifying virtual
+machine (VM) disk images.  You can use this for viewing and editing files inside
+guests, scripting changes to VMs, monitoring disk used/free statistics, creating
+guests, P2V, V2V, performing backups, cloning VMs, building VMs, formatting
+disks, resizing disks, and much more.")
+    (license (list license:gpl2+ license:lgpl2.1+))))
-- 
2.46.0





This bug report was last modified 230 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.