libguestfs + ocaml-hivex help wanted

  • Open
  • quality assurance status badge
Details
2 participants
  • Morgan Smith
  • Joshua Branson
Owner
unassigned
Submitted by
Morgan Smith
Severity
normal
M
M
Morgan Smith wrote on 16 Oct 2020 21:43
(address . guix-patches@gnu.org)
DM5PR1001MB21056B37F10D88430FA3C3DAC5030@DM5PR1001MB2105.namprd10.prod.outlook.com
So I've sunk a lot of time into this package but I actually don't need
it anymore. My use-case is gone. Also I don't have a lot of time these
days. It does build and some of the tests pass, but It's untested since
I don't have a use case.

Basically I'm just posting this here so someone else can finish it. I
don't want to touch this anymore. Sorry for only going half way
Attachment: OpenPGP_signature
M
M
Morgan.J.Smith wrote on 16 Oct 2020 22:00
[PATCH 1/2] gnu: Add ocaml-hivex.
(address . 44040@debbugs.gnu.org)(name . Morgan Smith)(address . Morgan.J.Smith@outlook.com)
DM5PR1001MB2105E82B91C9FE8D14CC119DC5030@DM5PR1001MB2105.namprd10.prod.outlook.com
From: Morgan Smith <Morgan.J.Smith@outlook.com>

* gnu/packages/ocaml.scm (ocaml-hivex): New variable.
---
gnu/packages/ocaml.scm | 104 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 104 insertions(+)

Toggle diff (138 lines)
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 4cc530509a..88c7f3c1d3 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -15,6 +15,7 @@
;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -47,6 +48,8 @@
#:use-module (gnu packages ghostscript)
#:use-module (gnu packages glib)
#:use-module (gnu packages gnome)
+ #:use-module (gnu packages gperf)
+ #:use-module (gnu packages gettext)
#:use-module (gnu packages gtk)
#:use-module (gnu packages libevent)
#:use-module (gnu packages libffi)
@@ -68,6 +71,7 @@
#:use-module (gnu packages texinfo)
#:use-module (gnu packages time)
#:use-module (gnu packages tls)
+ #:use-module (gnu packages version-control)
#:use-module (gnu packages virtualization)
#:use-module (gnu packages web-browsers)
#:use-module (gnu packages xml)
@@ -2831,6 +2835,106 @@ writing to these structures, and they are accessed via the Bigarray module.")
(description "Hex is a minimal library providing hexadecimal converters.")
(license license:isc)))
+(define-public ocaml-hivex
+ (package
+ (name "ocaml-hivex")
+ ;; Make sure to update the gnulib input to the commit upstream uses when
+ ;; updating this package
+ (version "1.3.19")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/libguestfs/hivex")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1gw59ac6z4fbg0flajnsh6d25h75pnk4605d5rw9rv0bvhfvway5"))))
+ (build-system ocaml-build-system)
+ (arguments
+ `(;; XXX: I'm not sure why runpath validation doesn't work
+ #:validate-runpath? #f
+ #:configure-flags
+ (list (string-append "CONFIG_SHELL="
+ (assoc-ref %build-inputs "bash") "/bin/bash")
+ (string-append "SHELL="
+ (assoc-ref %build-inputs "bash") "/bin/bash"))
+ #:test-target "check"
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'unpack-gnulib
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((gnulib (assoc-ref inputs "gnulib")))
+ ;; Upstream gnulib is cloned into this directory as a submodule
+ (copy-recursively gnulib ".gnulib")
+ #t)))
+ ;; Autogen calls bootstrap and then generates a configure script
+ (add-before 'configure 'autogen
+ (lambda _
+ (chmod "configure.ac" #o644)
+ (invoke "./autogen.sh")
+ #t))
+ (add-before 'autogen 'fix-bootstrap
+ (lambda _
+ ;; Stop bootstrap from cloning gnulib
+ (substitute* "bootstrap"
+ (("^git.*$") ""))
+ #t))
+ (add-before 'autogen 'fix-autogen.sh
+ (lambda _
+ (substitute* "autogen.sh"
+ ;; Forces bootstrap to run
+ (("git submodule status") "echo false")
+ ;; Don't run configure yet
+ (("^.*configure.*$") "echo\n"))
+ #t))
+ (add-after 'autogen 'patch-configure-and-build-aux
+ (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
+ (patch-shebang "configure")
+ ;; Hard code paths to ld and file in the configure script
+ (substitute* "configure"
+ (("/usr/bin/ld")
+ (string-append (assoc-ref inputs "ld-wrapper") "/bin/ld"))
+ (("/usr/bin/file")
+ (string-append (assoc-ref inputs "file") "/bin/file")))
+ #t))
+ (add-before 'install 'patch-ocaml-installdir
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ ;; Force ocaml installdir to be correct
+ (substitute* "ocaml/Makefile"
+ (("\\$\\(DESTDIR\\)\\$\\(OCAMLLIB\\)")
+ (string-append
+ out "/lib/ocaml/site-lib"))))
+ #t)))))
+ (native-inputs
+ `(("autoconf" ,autoconf)
+ ("automake" ,automake)
+ ("gperg" ,gperf)
+ ("libtool" ,libtool)
+ ("pkg-config" ,pkg-config)
+ ("gnulib"
+ ;; This is the commit upstream uses
+ ,(let ((commit "5e50baa16ef90204d9048a9e2f23c5a538955121"))
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "git://git.savannah.gnu.org/gnulib.git")
+ (commit commit)))
+ (sha256
+ (base32 "0clx0gq6mmm4dkzp5pqh02cbzggnc3ba491qb79brpxcrjri1pnd"))
+ (file-name (git-file-name "gnulib" commit)))))))
+ (inputs
+ `(("perl" ,perl)
+ ("sed" ,sed)
+ ("gettext" ,gettext-minimal)))
+ (home-page "https://github.com/libguestfs/hivex")
+ (synopsis "Library for reading and writing Windows Registry \"hive\"
+binary files")
+ (description "This library reads Windows NT registry files (ie. not
+Windows 3.1 or Windows 95/98/ME).")
+ (license license:lgpl2.1)))
+
(define-public ocaml4.07-ezjsonm
(package
(name "ocaml4.07-ezjsonm")
--
2.28.0
M
M
Morgan.J.Smith wrote on 16 Oct 2020 22:00
[PATCH 2/2] gnu: Add libguestfs.
(address . 44040@debbugs.gnu.org)(name . Morgan Smith)(address . Morgan.J.Smith@outlook.com)
DM5PR1001MB21057A278B3D910DEAB8492CC5030@DM5PR1001MB2105.namprd10.prod.outlook.com
From: Morgan Smith <Morgan.J.Smith@outlook.com>

* gnu/packages/virtualization.scm (libguestfs): New variable.
---
gnu/packages/virtualization.scm | 103 ++++++++++++++++++++++++++++++++
1 file changed, 103 insertions(+)

Toggle diff (150 lines)
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index ac062dfa15..d958d99330 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -16,6 +16,7 @@
;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -37,13 +38,16 @@
#:use-module (gnu packages admin)
#: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)
#:use-module (gnu packages bison)
+ #:use-module (gnu packages cdrom)
#:use-module (gnu packages check)
#:use-module (gnu packages cmake)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages cpio)
#:use-module (gnu packages cross-base)
#:use-module (gnu packages curl)
#:use-module (gnu packages cyrus-sasl)
@@ -63,6 +67,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)
@@ -79,8 +84,10 @@
#:use-module (gnu packages ncurses)
#:use-module (gnu packages nettle)
#:use-module (gnu packages networking)
+ #:use-module (gnu packages ocaml)
#:use-module (gnu packages onc-rpc)
#:use-module (gnu packages package-management)
+ #:use-module (gnu packages pcre)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages polkit)
@@ -2032,3 +2039,99 @@ administrators and developers in managing the database.")
libosinfo library. It provides information about guest operating systems for
use with virtualization provisioning tools")
(license license:lgpl2.0+)))
+
+(define-public libguestfs
+ (package
+ (name "libguestfs")
+ (version "1.42.0")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://download.libguestfs.org/"
+ (version-major+minor version)
+ "-stable/libguestfs-"
+ version
+ ".tar.gz"))
+ (sha256
+ (base32
+ "097hfi53w5lhf3im9l1lrymzv07ksyi1zcmg8bqrg9daycn1kvjg"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(;; XXX: I'm not sure why runpath validation doesn't work
+ #:validate-runpath? #f
+ ;; XXX: It's possible to get at least some of the tests to work
+ #:tests? #f
+ #:configure-flags (list "--disable-gnulib-tests"
+ "--disable-daemon"
+ "--disable-appliance"
+ "--with-distro=none"
+ "--disable-static")
+ ;; Installation is discouraged because users might want to have multiple
+ ;; versions installed at once. For that reason we have to specify
+ ;; "REALLY_INSTALL=yes" to install
+ #:make-flags (list "REALLY_INSTALL=yes")
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'fix-configure
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Our ncurses package doesn't have a binary called
+ ;; "ncurses6-config". It probably should though
+ (substitute* "configure"
+ (("ncurses6-config")
+ "ncursesw6-config"))
+ ;; Hard code paths to ld and file in the configure script
+ (substitute* "configure"
+ (("/usr/bin/ld")
+ (string-append (assoc-ref inputs "ld-wrapper") "/bin/ld"))
+ (("/usr/bin/file")
+ (string-append (assoc-ref inputs "file") "/bin/file")))
+ #t))
+ (add-before 'check 'fix-tests
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((bash (string-append (assoc-ref inputs "bash") "/bin/bash")))
+ (setenv "SHELL" bash))
+ #t))
+ (add-before 'install 'patch-ocaml-installdir
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ ;; Force ocaml installdir to be correct
+ (substitute* "ocaml/Makefile"
+ (("\\$\\(DESTDIR\\)\\$\\(OCAMLLIB\\)")
+ (string-append
+ out "/lib/ocaml/site-lib"))))
+ #t)))))
+ (native-inputs
+ `(("bison" ,bison)
+ ("curl" ,curl)
+ ("flex" ,flex)
+ ("pkg-config" ,pkg-config)))
+ (inputs
+ `(("augeas" ,augeas)
+ ("cdrkit-libre" ,cdrkit-libre)
+ ("cpio" ,cpio)
+ ("fuse" ,fuse)
+ ("gperf" ,gperf)
+ ("gperf" ,gperf)
+ ("jansson" ,jansson)
+ ("libselinux" ,libselinux)
+ ("libtirpc" ,libtirpc)
+ ("libvirt" ,libvirt)
+ ("libxml2" ,libxml2)
+ ("util-linux" ,util-linux) ; getopt
+ ("ncurses" ,ncurses)
+ ("ocaml" ,ocaml)
+ ("ocaml-findlib" ,ocaml-findlib)
+ ("ocaml-hivex" ,ocaml-hivex)
+ ("pcre" ,pcre)
+ ("perl" ,perl)
+ ("qemu" ,qemu)))
+ (home-page "https://libguestfs.org/")
+ (synopsis "Tools for accessing and modifying virtual machine (VM) disk
+images")
+ (description "libguestfs is a C library and a set of tools for accessing
+and modifying virtual disk images used in platform virtualization. The tools
+can be used for viewing and editing virtual machines (VMs) managed by libvirt
+and files inside VMs, scripting changes to VMs, and creating VMs.")
+ ;; The library files are released under LGPLv2.1 or later.
+ ;; The programs ;; are released under GPLv2+.
+ (license (list license:lgpl2.1+ license:gpl2+))))
--
2.28.0
J
J
Joshua Branson wrote on 28 Oct 2020 18:19
(address . Morgan.J.Smith@outlook.com)(address . 44040@debbugs.gnu.org)
871rhiqnea.fsf@dismail.de
Also libguestfs may be helpful for the Hurd filesystem translators:


--
Joshua Branson
Sent from Emacs and Gnus
"You can have whatever you want, as long as you help enough other people get what they want." - Zig Ziglar
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 44040@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 44040
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch