From 91d2e0b5673b8e3413f2fb4957e5af32e2f822cb Mon Sep 17 00:00:00 2001 From: Giacomo Leidi Date: Sat, 5 Oct 2024 00:31:43 +0200 Subject: gnu: Add libguestfs-minimal. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/packages/virtualization.scm (libguestfs-minimal): New variable. * gnu/packages/patches/libguestfs-syms.patch: Add file. * gnu/local.mk: Add it. Change-Id: Ide22707724ecd41145243c9f41adc3f5557c593e Signed-off-by: Ludovic Courtès --- 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 c02fb5596b..9502f24621 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1605,6 +1605,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@libvirt_is_version_SOURCES = libvirt-is-version.c + @HAVE_LIBVIRT_TRUE@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 @@ #: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 @@ #: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 @@ #: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 @@ #: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 @@ is as much trouble as parsing the original binary format. Instead it makes the 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+)))) -- cgit v1.2.3