[PATCH 0/3] Initial attempt at rumpdisk support for the Hurd.

  • Done
  • quality assurance status badge
Details
3 participants
  • Josselin Poiret
  • Janneke Nieuwenhuizen
  • Ludovic Courtès
Owner
unassigned
Submitted by
Janneke Nieuwenhuizen
Severity
normal
J
J
Janneke Nieuwenhuizen wrote on 15 May 2023 21:35
(address . guix-patches@gnu.org)
cover.1684177770.git.janneke@gnu.org
Hi!

Some time ago we kind of promised to move forward with the Hurd[0] and while
we have had this pretty neat "childhurd" feature for some time[1], to really
do that we should get it to boot on real iron. An important ingredient to
make that happen made it into Hurd upstream over a year ago[2]: rumpdisk
support making use of the NetBSD rumpkernel[3].

Building this rumpkernel is a bit tricksy, Debian uses an import of the NetBSD
git archive[4] --which is quite large--with some twenty-odd custom patches[5].
Some of us asked bug-hurd to document their rumpkernel support[6] or distribute
it in a less Debian-centric and more usual way to make it more digestible for
other parties (such as Guix) to adopt, but that was rejected at the time[7].

Inspired by Josselin Poiret's recent Hurd updates[8] our chats on IRC and
especially their succes in getting it to boot again on master[9], I decided to
just take the easiest route possible and build the rumpkernel from Debian's
salsa package git archive and its patch series.

The good news is that with this patch series the Hurd now has two additional
servers: pci.arbiter and rumpdisk. Sadly, it currently hangs for me on

Toggle snippet (3 lines)
start: pci.arbiter:

Anyway, while this builds, we probably do not want to rely on Debian's
packaging support in this way but I'm also not sure what would be a better
course of action right now. Other than asking bug-hurd again to create an
upstream for their code outside/independent of their packaging.

Help and thoughts much appreciated!

See also:


Greetings,
Janneke

PS: I build it like this

Toggle snippet (3 lines)
./pre-inst-env guix system image -t hurd-qcow2 gnu/system/examples/bare-hurd.tmpl

and start it doing

Toggle snippet (9 lines)
guix shell qemu -- qemu-system-i386 \
-m 1024 \
--enable-kvm \
--device rtl8139,netdev=net0 \
--netdev user,id=net0,hostfwd=tcp:0.0.0.0:11022-:2222 \
--snapshot \
--hda /gnu/store/0zmdmjafmz0hgzw3gszl38nd0n2bblq9-disk-image


Janneke Nieuwenhuizen (3):
DRAFT gnu: Add rumpkernel.
gnu: hurd: Add rumpkernel.
DRAFT system: hurd: Boot with pci.arbiter and rumpdisk.

gnu/packages/hurd.scm | 232 +++++++++++++++++++++++++++++++++++++++++-
gnu/system.scm | 26 ++++-
2 files changed, 248 insertions(+), 10 deletions(-)


base-commit: 555a41f31c9ec9f4344d00beb94f663b44017019
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 15 May 2023 21:36
[PATCH 1/3] DRAFT gnu: Add rumpkernel.
(address . 63527@debbugs.gnu.org)
3c1235a19285d40174f0aadb1ac5fdead22f2961.1684177770.git.janneke@gnu.org
XXX We should probably not use Debian Salsa as source for the rumpkernel
checkout and patches and use the rumpkernel upstream instead copying Debian's
patches into our archive? Using the easier route as a first attempt to git it
to build (and boot) first.

* gnu/packages/hurd.scm (rumpkernel): New variable.
---
gnu/packages/hurd.scm | 216 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 215 insertions(+), 1 deletion(-)

Toggle diff (233 lines)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 34c7c00f2d..f834abcf43 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -3,7 +3,7 @@
;;; Copyright © 2018, 2020-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2020, 2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2022, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2020 Rene Saavedra <pacoon@protonmail.com>
;;;
@@ -662,3 +662,217 @@ (define-public netdde
;; Some drivers are dually licensed with the options being GPLv2 or one
;; of MPL/Expat/BSD-3 (dependent on the driver).
(license gpl2))))
+
+(define-public rumpkernel
+ (let ((commit "cd34aee0ee0f7a06011b2f988ce27a8fdc7ba900")
+ (revision "0"))
+ (package
+ (name "rumpkernel")
+ (version (git-version "0-20211031" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://salsa.debian.org/hurd-team/rumpkernel.git")
+ (commit commit)))
+ (sha256
+ (base32
+ "0dqr6nzsv25p66yiambq4jcq4870vzf23289cns0gdpk74gamm4l"))
+ (file-name (git-file-name name commit))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:tests? #f
+ #:modules '((srfi srfi-26)
+ (ice-9 match)
+ (ice-9 rdelim)
+ (guix build utils)
+ (guix build gnu-build-system))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'apply-patches
+ (lambda* (#:key target #:allow-other-keys)
+ (let* ((patch-directory "debian/patches/")
+ (series (string-append patch-directory "series"))
+ (text (with-input-from-file series read-string))
+ (lines (string-split (string-trim-right text) #\newline))
+ (patches (filter (negate (cute string-prefix? "#" <>))
+ lines))
+ (patch-files (map (cute string-append patch-directory <>)
+ patches)))
+ (for-each
+ (cute invoke "patch" "--force" "-p1" "-i" <>)
+ patch-files)
+ (when target
+ (substitute* "pci-userspace/src-gnu/Makefile.inc"
+ (("\\<mig\\>")
+ (string-append target "-mig")))
+ (substitute* "buildrump.sh/src/build.sh"
+ (("if [[] \"$[{]tool[}]\" = \"CC\" []]; then" all)
+ (string-append
+ "if [ \"${tool}\" = \"AR\" ]; then
+ lctool=${TARGET_AR-ar}
+ elif [ \"${tool}\" = \"NM\" ]; then
+ lctool=${TARGET_NM-nm}
+el"
+ all))))
+ ;; Avoid #! /gnu/store/...-bash/gnu/store/...-bash/bin/sh
+ (substitute* '("buildrump.sh/src/tools/genassym/Makefile"
+ "buildrump.sh/src/tools/lorder/Makefile")
+ (("[$][{]TOOL_SED[}] -e \"s,/bin/sh")
+ "${TOOL_SED} -e \"s,[ !]/bin/sh")))))
+ (add-before 'configure 'setenv
+ (lambda* (#:key build target #:allow-other-keys)
+ (define (noisy-setenv name value)
+ (setenv name value)
+ (format (current-error-port) "set ~a=~s\n" name value))
+ (noisy-setenv "HOST_CC" "gcc")
+ (let ((target (or target build)))
+ (noisy-setenv "TARGET_AR" (string-append target "-ar"))
+ (noisy-setenv "TARGET_CC" (string-append target "-gcc"))
+ (noisy-setenv "TARGET_CXX" (string-append target "-g++"))
+ (noisy-setenv "TARGET_LD" (string-append target "-ld"))
+ (noisy-setenv "TARGET_NM" (string-append target "-nm")))
+ (setenv "PAWD" "pwd")
+ (for-each
+ (cute noisy-setenv <> "")
+ '("_GCC_CRTENDS"
+ "_GCC_CRTEND"
+ "_GCC_CRTBEGINS"
+ "_GCC_CRTBEGIN"
+ "_GCC_CRTI"
+ "_GCC_CRTN"))
+ (noisy-setenv "BSDOBJDIR=" (string-append (getcwd) "/obj"))))
+ (replace 'configure
+ (lambda args
+ (let ((configure (assoc-ref %standard-phases 'configure)))
+ (with-directory-excursion "buildrump.sh/src/lib/librumpuser"
+ (apply configure args)))))
+ (replace 'build
+ (lambda* (#:key parallel-build? #:allow-other-keys)
+ (let* ((jobs (if parallel-build? (parallel-job-count) 1))
+ (host-cpu (match #$(or (%current-target-system
+ (%current-system)))
+ ("i586-pc-gnu" "i386")
+ ("i686-linux" "i386")
+ ("x86_64-linux" "amd64")))
+ (toprump (string-append
+ (getcwd)
+ "/buildrump.sh/src/sys/rump"))
+ (rump-make (string-append
+ (getcwd)
+ "/buildrump.sh/src/obj/tooldir/bin/nbmake-"
+ host-cpu)))
+ (mkdir "obj")
+ (with-directory-excursion "buildrump.sh/src"
+ (invoke
+ "sh" "build.sh"
+ "-V" "TOOLS_BUILDRUMP=yes"
+ "-V" "MKBINUTILS=no"
+ "-V" "MKGDB=no"
+ "-V" "MKGROFF=no"
+ "-V" (string-append "TOPRUMP=" toprump)
+ "-V" "BUILDRUMP_CPPFLAGS=-Wno-error=stringop-overread"
+ "-V" "RUMPUSER_EXTERNAL_DPLIBS=pthread"
+ "-V" (string-append
+ "CPPFLAGS="
+ " -I../../obj/destdir." host-cpu "/usr/include"
+ " -D_FILE_OFFSET_BITS=64"
+ " -DRUMP_REGISTER_T=int"
+ " -DRUMPUSER_CONFIG=yes"
+ " -DNO_PCI_MSI_MSIX=yes"
+ " -DNUSB_DMA=1")
+ "-V" (string-append
+ "CWARNFLAGS="
+ " -Wno-error=maybe-uninitialized"
+ " -Wno-error=address-of-packed-member"
+ " -Wno-error=unused-variable"
+ " -Wno-error=stack-protector"
+ " -Wno-error=array-parameter"
+ " -Wno-error=array-bounds"
+ " -Wno-error=stringop-overflow")
+ "-V" "LIBCRTBEGIN="
+ "-V" "LIBCRTEND="
+ "-V" "LIBCRT0="
+ "-V" "LIBCRTI="
+ "-V" "_GCC_CRTENDS="
+ "-V" "_GCC_CRTEND="
+ "-V" "_GCC_CRTBEGINS="
+ "-V" "_GCC_CRTBEGIN="
+ "-V" "_GCC_CRTI="
+ "-V" "_GCC_CRTN="
+ "-U"
+ "-u"
+ "-T" "./obj/tooldir"
+ "-m" host-cpu
+ "-j" (number->string jobs)
+ "tools"
+ "rump"))
+ (with-directory-excursion "buildrump.sh/src/lib/librumpuser"
+ (setenv "RUMPRUN" "true")
+ (invoke rump-make "dependall"))
+ (with-directory-excursion "pci-userspace/src-gnu"
+ (invoke rump-make "dependall")))))
+ (replace 'install
+ (lambda _
+ (define (install-file file target)
+ (let ((dest (string-append target (basename file))))
+ (format (current-output-port) "`~a' -> `~a'~%" file dest)
+ (mkdir-p (dirname dest))
+ (if (file-exists? dest)
+ (format (current-error-port)
+ "warning: skipping: ~a\n" file)
+ (let ((stat (lstat file)))
+ (case (stat:type stat)
+ ((symlink)
+ (let ((target (readlink file)))
+ (symlink target dest)))
+ (else
+ (copy-file file dest)))))))
+ (let ((header (string-append #$output "/include/rump"))
+ (lib (string-append #$output "/lib/")))
+ (mkdir-p header)
+ (copy-recursively "buildrump.sh/src/sys/rump/include/rump"
+ header)
+ (mkdir-p lib)
+ (for-each
+ (cute install-file <> lib)
+ (append (find-files "buildrump.sh/src" "librump.*[.](a|so.*)")
+ (find-files "obj" "librump.*[.](a|so.*)")))))))))
+ (inputs
+ (list gnumach-headers libpciaccess))
+ (native-inputs
+ (list
+ autoconf
+ automake
+ libgcrypt
+ (if (%current-target-system)
+ (let* ((cross-base (resolve-interface '(gnu packages cross-base)))
+ (cross-mig (module-ref cross-base 'cross-mig)))
+ (cross-mig (%current-target-system)))
+ mig)
+ zlib))
+ (supported-systems %hurd-systems)
+ (home-page "https://wiki.netbsd.org/rumpkernel")
+ (synopsis "NetBSD as rumpkernel for the GNU/Hurd")
+ (description
+ "This package provides NetBSD as rumpkernel for the GNU/Hurd, so that
+the Hurd may be installed on iron. Using this rumpkernel package, the hurd
+package's rumpdisk can be built which provides the pci.arbiter and rumpdisk
+servers.")
+ (license (list
+ asl2.0
+ boost1.0
+ bsd-2
+ bsd-3
+ bsd-4
+ cddl1.0
+ expat
+ gpl1
+ gpl2+
+ gpl3+
+ isc
+ lgpl2.0+
+ public-domain
+ (@ (guix licenses) zlib)
+ (non-copyleft "file://src/lib/libc/hash/hashhl.c"
+ "See debian/copyright in the distribution."))))))
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 15 May 2023 21:36
[PATCH 2/3] gnu: hurd: Add rumpkernel.
(address . 63527@debbugs.gnu.org)
48105ac954b73df35d9c0d1ff7ec398e26634d4b.1684177770.git.janneke@gnu.org
* gnu/packages/hurd.scm (hurd)[inputs]: Add rumpkernel.
[arguments]: Rename `prepare-dde' phase to 'prepare-addons'. Add "rumpdisk"
directory.
---
gnu/packages/hurd.scm | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)

Toggle diff (50 lines)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index f834abcf43..fad529580d 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -356,7 +356,7 @@ (define-public hurd
(arguments
`(#:phases
(modify-phases %standard-phases
- (add-after 'unpack 'prepare-dde
+ (add-after 'unpack 'prepare-addons
(lambda* (#:key native-inputs inputs #:allow-other-keys)
;; First we import the things we want from dde.
(for-each make-file-writable (find-files "."))
@@ -370,7 +370,10 @@ (define-public hurd
;; Makefile. libdde_linux26 is built later in its own phase.
(substitute* "Makefile"
(("libbpf ")
- "libbpf libmachdevdde libddekit"))))
+ "libbpf libmachdevdde libddekit rumpdisk"))
+ (substitute* "rumpdisk/Makefile"
+ (("rumpdev_ahcisata" all)
+ (string-append all " rumpdev_ata")))))
(add-after 'unpack 'find-tirpc
(lambda* (#:key inputs #:allow-other-keys)
(for-each (lambda (var)
@@ -541,7 +544,11 @@ (define-public hurd
;; clnt_create
"ac_func_search_save_LIBS=-ltirpc"
"ac_cv_search_clnt_create=false"
- "CFLAGS=-fcommon")))
+ "CFLAGS=-fcommon")
+ #:make-flags
+ (list (string-append "RUMPPATH="
+ (assoc-ref %build-inputs "rumpkernel")
+ "/lib"))))
(build-system gnu-build-system)
(inputs
`(("libgcrypt" ,libgcrypt) ;for /hurd/random
@@ -557,7 +564,8 @@ (define-public hurd
("coreutils" ,coreutils)
("sed" ,sed)
("grep" ,grep)
- ("util-linux" ,util-linux)))
+ ("util-linux" ,util-linux)
+ ("rumpkernel" ,rumpkernel)))
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 15 May 2023 21:36
[PATCH 3/3] DRAFT system: hurd: Boot with pci.arbiter and rumpdisk.
(address . 63527@debbugs.gnu.org)
92582077be8b8e0d7ff87458f78cddd2afc6de65.1684177770.git.janneke@gnu.org
XXX Debian uses the .STATIC variants, but they are not being built. Do we
need those?

* gnu/system.scm (hurd-multiboot-modules): Add commands for pci.arbiter and
rumpdisk.
---
gnu/system.scm | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)

Toggle diff (60 lines)
diff --git a/gnu/system.scm b/gnu/system.scm
index 354f58f55b..29445cec2d 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -10,7 +10,7 @@
;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <jannek@gnu.org>
+;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <jannek@gnu.org>
;;; Copyright © 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
@@ -1486,16 +1486,29 @@ (define (operating-system-multiboot-modules os)
(define (hurd-multiboot-modules os)
(let* ((hurd (operating-system-hurd os))
+ (pci-arbiter-command
+ (list (file-append hurd "/hurd/pci-arbiter")
+ "pci.arbiter"
+ "--host-priv-port='${host-port}'"
+ "--device-master-port='${device-port}'"
+ "--next-task='${disk-task}'"
+ "--store-type=typed"
+ "'$(pci-task=task-create)'"
+ "'$(task-resume)'"))
+ (rumpdisk-command
+ (list (file-append hurd "/hurd/rumpdisk")
+ "rumpdisk"
+ "--next-task='${fs-task}'"
+ "'$(disk-task=task-create)'"))
(root-file-system-command
(list (file-append hurd "/hurd/ext2fs.static")
"ext2fs"
"--multiboot-command-line='${kernel-command-line}'"
- "--host-priv-port='${host-port}'"
- "--device-master-port='${device-port}'"
"--exec-server-task='${exec-task}'"
"--store-type=typed"
"--x-xattr-translator-records"
- "'${root}'" "'$(task-create)'" "'$(task-resume)'"))
+ "'${root}'"
+ "'$(fs-task=task-create)'"))
(target (%current-target-system))
(libc (if target
(with-parameters ((%current-target-system #f))
@@ -1512,7 +1525,10 @@ (define (hurd-multiboot-modules os)
;; (file-append hurd "/hurd/exec") "'$(exec-task=task-create)'")
(list (file-append hurd "/hurd/exec.static") "exec"
"'$(exec-task=task-create)'")))
- (list root-file-system-command exec-server-command)))
+ (list pci-arbiter-command
+ rumpdisk-command
+ root-file-system-command
+ exec-server-command)))
(define* (operating-system-boot-parameters os root-device
#:key system-kernel-arguments?)
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 16 May 2023 15:48
[PATCH v2 0/3] Initial attempt at rumpdisk support for the Hurd.
(address . 63527@debbugs.gnu.org)
cover.1684244425.git.janneke@gnu.org
Hi,

Our patches for the rumpkernel crossbuild have been accepted upstream


which makes our rumpkernel package a lot nicer. I suggest using the Debian
Salsa rumpkernel package as upstream for now until development has stabilized.

The pci.arbiter and rumpdisk are now also built statically and the .STATIC
variants are used for grub.cfg. A copy/pasto was fixed for the grub.cfg.

Sadly, we only get just a little bit further, boot now hangs like this for me:

start pci.arbiter: pci pci.arbiter: Starting the PCI system: Gratuitous error

Greetings,
Janneke

Janneke Nieuwenhuizen (3):
gnu: Add rumpkernel.
gnu: hurd: Add rumpkernel.
DRAFT system: hurd: Boot with pci.arbiter and rumpdisk.

gnu/local.mk | 1 +
gnu/packages/hurd.scm | 225 +++++++++++++++++-
.../patches/rumpkernel-cross-build.patch | 153 ++++++++++++
gnu/system.scm | 25 +-
4 files changed, 394 insertions(+), 10 deletions(-)
create mode 100644 gnu/packages/patches/rumpkernel-cross-build.patch


base-commit: 555a41f31c9ec9f4344d00beb94f663b44017019
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 16 May 2023 15:48
[PATCH v2 1/3] gnu: Add rumpkernel.
(address . 63527@debbugs.gnu.org)
8b12244dab33c893860c6247d96a595e0fb9a345.1684244425.git.janneke@gnu.org
This uses Debian Salsa package management as upstream as that is where
delopment happens. Once things have stabalized upstream may change to the
NetBSD git from where Debian takes their snapshots.

* gnu/packages/patches/rumpkernel-cross-build.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/hurd.scm (rumpkernel): Use it in new variable.
---
gnu/local.mk | 1 +
gnu/packages/hurd.scm | 208 +++++++++++++++++-
.../patches/rumpkernel-cross-build.patch | 153 +++++++++++++
3 files changed, 361 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/rumpkernel-cross-build.patch

Toggle diff (396 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 012ce84d2d..0e394e5c36 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1860,6 +1860,7 @@ dist_patch_DATA = \
%D%/packages/patches/rocm-opencl-runtime-4.3-noclinfo.patch \
%D%/packages/patches/rocm-opencl-runtime-4.3-noopencl.patch \
%D%/packages/patches/rottlog-direntry.patch \
+ %D%/packages/patches/rumpkernel-cross-build.patch \
%D%/packages/patches/ruby-hiredis-use-system-hiredis.patch \
%D%/packages/patches/ruby-hydra-minimal-no-byebug.patch \
%D%/packages/patches/ruby-anystyle-data-immutable-install.patch \
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 34c7c00f2d..8edf5d91c6 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -3,7 +3,7 @@
;;; Copyright © 2018, 2020-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2020, 2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2022, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2020 Rene Saavedra <pacoon@protonmail.com>
;;;
@@ -662,3 +662,209 @@ (define-public netdde
;; Some drivers are dually licensed with the options being GPLv2 or one
;; of MPL/Expat/BSD-3 (dependent on the driver).
(license gpl2))))
+
+(define-public rumpkernel
+ (let ((commit "ec2ab9612be4dc48a316a21a0c96d3388478a064")
+ (revision "2"))
+ (package
+ (name "rumpkernel")
+ (version (git-version "0-20211031" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://salsa.debian.org/hurd-team/rumpkernel.git")
+ (commit commit)))
+ (sha256
+ (base32
+ "1ypjg3jyzhh3gnanmk6fh76dwl5ml78n311nbi0hw7f7hygzn7vk"))
+ (file-name (git-file-name name commit))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:tests? #f
+ #:modules '((srfi srfi-26)
+ (ice-9 match)
+ (ice-9 rdelim)
+ (guix build utils)
+ (guix build gnu-build-system))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'apply-patches
+ (lambda* (#:key target #:allow-other-keys)
+ (let* ((patch-directory "debian/patches/")
+ (series (string-append patch-directory "series"))
+ (text (with-input-from-file series read-string))
+ (lines (string-split (string-trim-right text) #\newline))
+ (patches (filter (negate (cute string-prefix? "#" <>))
+ lines))
+ (patch-files (map
+ (cute string-append patch-directory <>)
+ patches)))
+ (for-each
+ (cute invoke "patch" "--force" "-p1" "-i" <>)
+ patch-files)
+ ;; Somewhere in the build.sh/make process MIG is not being
+ ;; exported, apparently.
+ (when target
+ (substitute* "pci-userspace/src-gnu/Makefile.inc"
+ (("MIG=mig")
+ (string-append "MIG=" target "-mig")))))))
+ (add-before 'configure 'setenv
+ (lambda* (#:key build target #:allow-other-keys)
+ (define (noisy-setenv name value)
+ (setenv name value)
+ (format (current-error-port) "set ~a=~s\n" name value))
+ (noisy-setenv "HOST_CC" "gcc")
+ (when target
+ (noisy-setenv "MIG" (string-append target "-mig")))
+ (let ((target (or target build)))
+ (noisy-setenv "TARGET_AR" (string-append target "-ar"))
+ (noisy-setenv "TARGET_CC" (string-append target "-gcc"))
+ (noisy-setenv "TARGET_CXX" (string-append target "-g++"))
+ (noisy-setenv "TARGET_LD" (string-append target "-ld"))
+ (noisy-setenv "TARGET_MIG" (string-append target "-mig"))
+ (noisy-setenv "TARGET_NM" (string-append target "-nm")))
+ (setenv "PAWD" "pwd")
+ (for-each
+ (cute noisy-setenv <> "")
+ '("_GCC_CRTENDS"
+ "_GCC_CRTEND"
+ "_GCC_CRTBEGINS"
+ "_GCC_CRTBEGIN"
+ "_GCC_CRTI"
+ "_GCC_CRTN"))
+ (noisy-setenv "BSDOBJDIR=" (string-append (getcwd) "/obj"))))
+ (replace 'configure
+ (lambda args
+ (let ((configure (assoc-ref %standard-phases 'configure)))
+ (with-directory-excursion "buildrump.sh/src/lib/librumpuser"
+ (apply configure args)))))
+ (replace 'build
+ (lambda* (#:key parallel-build? #:allow-other-keys)
+ (let* ((jobs (if parallel-build? (parallel-job-count) 1))
+ (host-cpu (match #$(or (%current-target-system
+ (%current-system)))
+ ("i586-pc-gnu" "i386")
+ ("i686-linux" "i386")
+ ("x86_64-linux" "amd64")))
+ (toprump (string-append
+ (getcwd)
+ "/buildrump.sh/src/sys/rump"))
+ (rump-make (string-append
+ (getcwd)
+ "/buildrump.sh/src/obj/tooldir/bin/nbmake-"
+ host-cpu)))
+ (mkdir "obj")
+ (with-directory-excursion "buildrump.sh/src"
+ (invoke
+ "sh" "build.sh"
+ "-V" "TOOLS_BUILDRUMP=yes"
+ "-V" "MKBINUTILS=no"
+ "-V" "MKGDB=no"
+ "-V" "MKGROFF=no"
+ "-V" (string-append "TOPRUMP=" toprump)
+ "-V" "BUILDRUMP_CPPFLAGS=-Wno-error=stringop-overread"
+ "-V" "RUMPUSER_EXTERNAL_DPLIBS=pthread"
+ "-V" (string-append
+ "CPPFLAGS="
+ " -I../../obj/destdir." host-cpu "/usr/include"
+ " -D_FILE_OFFSET_BITS=64"
+ " -DRUMP_REGISTER_T=int"
+ " -DRUMPUSER_CONFIG=yes"
+ " -DNO_PCI_MSI_MSIX=yes"
+ " -DNUSB_DMA=1")
+ "-V" (string-append
+ "CWARNFLAGS="
+ " -Wno-error=maybe-uninitialized"
+ " -Wno-error=address-of-packed-member"
+ " -Wno-error=unused-variable"
+ " -Wno-error=stack-protector"
+ " -Wno-error=array-parameter"
+ " -Wno-error=array-bounds"
+ " -Wno-error=stringop-overflow")
+ "-V" "LIBCRTBEGIN="
+ "-V" "LIBCRTEND="
+ "-V" "LIBCRT0="
+ "-V" "LIBCRTI="
+ "-V" "_GCC_CRTENDS="
+ "-V" "_GCC_CRTEND="
+ "-V" "_GCC_CRTBEGINS="
+ "-V" "_GCC_CRTBEGIN="
+ "-V" "_GCC_CRTI="
+ "-V" "_GCC_CRTN="
+ "-U"
+ "-u"
+ "-T" "./obj/tooldir"
+ "-m" host-cpu
+ "-j" (number->string jobs)
+ "tools"
+ "rump"))
+ (with-directory-excursion "buildrump.sh/src/lib/librumpuser"
+ (setenv "RUMPRUN" "true")
+ (invoke rump-make "dependall"))
+ (with-directory-excursion "pci-userspace/src-gnu"
+ (invoke rump-make "dependall")))))
+ (replace 'install
+ (lambda _
+ (define (install-file file target)
+ (let ((dest (string-append target (basename file))))
+ (format (current-output-port) "`~a' -> `~a'~%" file dest)
+ (mkdir-p (dirname dest))
+ (if (file-exists? dest)
+ (format (current-error-port)
+ "warning: skipping: ~a\n" file)
+ (let ((stat (lstat file)))
+ (case (stat:type stat)
+ ((symlink)
+ (let ((target (readlink file)))
+ (symlink target dest)))
+ (else
+ (copy-file file dest)))))))
+ (let ((header (string-append #$output "/include/rump"))
+ (lib (string-append #$output "/lib/")))
+ (mkdir-p header)
+ (copy-recursively "buildrump.sh/src/sys/rump/include/rump"
+ header)
+ (mkdir-p lib)
+ (for-each
+ (cute install-file <> lib)
+ (append (find-files "buildrump.sh/src" "librump.*[.](a|so.*)")
+ (find-files "obj" "librump.*[.](a|so.*)")))))))))
+ (inputs
+ (list gnumach-headers libpciaccess))
+ (native-inputs
+ (list
+ autoconf
+ automake
+ libgcrypt
+ (if (%current-target-system)
+ (let* ((cross-base (resolve-interface '(gnu packages cross-base)))
+ (cross-mig (module-ref cross-base 'cross-mig)))
+ (cross-mig (%current-target-system)))
+ mig)
+ zlib))
+ (supported-systems %hurd-systems)
+ (home-page "https://wiki.netbsd.org/rumpkernel")
+ (synopsis "NetBSD as rumpkernel for the GNU/Hurd")
+ (description
+ "This package provides NetBSD as rumpkernel for the GNU/Hurd, so that
+the Hurd may be installed on iron. Using this rumpkernel package, the hurd
+package's rumpdisk can be built which provides the pci.arbiter and rumpdisk
+servers.")
+ (license (list
+ asl2.0
+ boost1.0
+ bsd-2
+ bsd-3
+ bsd-4
+ cddl1.0
+ expat
+ gpl1
+ gpl2+
+ gpl3+
+ isc
+ lgpl2.0+
+ public-domain
+ (@ (guix licenses) zlib)
+ (non-copyleft "file://src/lib/libc/hash/hashhl.c"
+ "See debian/copyright in the distribution."))))))
diff --git a/gnu/packages/patches/rumpkernel-cross-build.patch b/gnu/packages/patches/rumpkernel-cross-build.patch
new file mode 100644
index 0000000000..a8c7d93e20
--- /dev/null
+++ b/gnu/packages/patches/rumpkernel-cross-build.patch
@@ -0,0 +1,153 @@
+This patch fixes cross-building the rumpkernel:
+
+ * Fixes for non-multiarch toolchains,
+ * Support cross-mig,
+ * Cater for non-FHS .../bin/sh.
+
+Upstream status: not presented upstream.
+
+From 3e080e8a43f8b2f7a107849dd2e7e38ee2732d20 Mon Sep 17 00:00:00 2001
+From: Janneke Nieuwenhuizen <janneke@gnu.org>
+Date: Tue, 16 May 2023 07:29:23 +0200
+Subject: [PATCH 1/3] squash! patch: debian/patches/crossbuild
+
+---
+ buildrump.sh/src/build.sh | 10 ++++++++--
+ pci-userspace/src-gnu/Makefile.inc | 3 ++-
+ 2 files changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/buildrump.sh/src/build.sh b/buildrump.sh/src/build.sh
+index 60375f5f4..0e80813c1 100755
+--- a/buildrump.sh/src/build.sh
++++ b/buildrump.sh/src/build.sh
+@@ -2230,12 +2230,18 @@ maketoolwrapper ()
+ musthave=$1
+ tool=$2
+
+- if [ "${tool}" = "CC" ]; then
++ if [ "${tool}" = "AR" ]; then
++ lctool=${TARGET_AR-ar}
++ elif [ "${tool}" = "CC" ]; then
+ lctool=${TARGET_CC-gcc}
+ elif [ "${tool}" = "CXX" ]; then
+ lctool=${TARGET_CXX-g++}
+ elif [ "${tool}" = "LD" ]; then
+ lctool=${TARGET_LD-ld}
++ elif [ "${tool}" = "MIG" ]; then
++ lctool=${TARGET_MIG-mig}
++ elif [ "${tool}" = "NM" ]; then
++ lctool=${TARGET_NM-nm}
+ else
+ lctool=$(echo ${tool} | tr '[A-Z]' '[a-z]')
+ fi
+@@ -2302,7 +2308,7 @@ makerumptools ()
+ for x in CC AR NM OBJCOPY; do
+ maketoolwrapper true $x
+ done
+- for x in AS LD OBJDUMP RANLIB READELF SIZE STRINGS STRIP CXX; do
++ for x in AS LD OBJDUMP RANLIB READELF SIZE STRINGS STRIP CXX MIG; do
+ maketoolwrapper false $x
+ done
+
+diff --git a/pci-userspace/src-gnu/Makefile.inc b/pci-userspace/src-gnu/Makefile.inc
+index 6f8db357e..ef25bac3a 100644
+--- a/pci-userspace/src-gnu/Makefile.inc
++++ b/pci-userspace/src-gnu/Makefile.inc
+@@ -8,11 +8,12 @@ RUMPCOMP_USER_CPPFLAGS+=-I${PCIDIR} -I${DESTDIR}/usr/include
+ RUMPCOMP_CPPFLAGS+= -I${PCIDIR} -I${DESTDIR}/usr/include
+ CPPFLAGS+= -I${PCIDIR}
+ LDFLAGS+= -lmachuser -Wl,--no-as-needed -lpciaccess -Wl,--as-needed
++MIG=mig
+
+ mach_debugUser.c:
+ echo '#include <mach_debug/mach_debug.defs>' \
+ | ${CC} -E -x c - -o - \
+- | mig -cc cat - /dev/null -subrprefix __ \
++ | $(MIG) -cc cat - /dev/null -subrprefix __ \
+ -user mach_debugUser.c \
+ -server /dev/null \
+ -header mach_debug_U.h
+--
+2.39.2
+
+From af67549b7c5da5970a9330d281bd8305e1f6e8ed Mon Sep 17 00:00:00 2001
+From: Janneke Nieuwenhuizen <janneke@gnu.org>
+Date: Tue, 16 May 2023 07:39:54 +0200
+Subject: [PATCH 2/3] crossbuild: Cater for non-FHS shell.
+
+---
+ buildrump.sh/src/tools/genassym/Makefile | 2 +-
+ buildrump.sh/src/tools/lorder/Makefile | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/buildrump.sh/src/tools/genassym/Makefile b/buildrump.sh/src/tools/genassym/Makefile
+index e597c522b..96ca4ac21 100644
+--- a/buildrump.sh/src/tools/genassym/Makefile
++++ b/buildrump.sh/src/tools/genassym/Makefile
+@@ -17,7 +17,7 @@ ${TIMESTAMP}: genassym
+ ${HOST_INSTALL_FILE} -m ${BINMODE} ${.ALLSRC} ${.TARGET}
+
+ genassym: genassym.sh
+- ${TOOL_SED} -e "s,/bin/sh,${HOST_BSHELL},g" \
++ ${TOOL_SED} -e "s,\([ \!]\)/bin/sh,\1${HOST_BSHELL},g" \
+ -e "s,{AWK:=.*},{AWK:="${TOOL_AWK:Q}"}," \
+ < ${.ALLSRC} > ${.TARGET}
+
+diff --git a/buildrump.sh/src/tools/lorder/Makefile b/buildrump.sh/src/tools/lorder/Makefile
+index f3c599e12..92af83d51 100644
+--- a/buildrump.sh/src/tools/lorder/Makefile
++++ b/buildrump.sh/src/tools/lorder/Makefile
+@@ -17,7 +17,7 @@ ${TIMESTAMP}: lorder
+ ${HOST_INSTALL_FILE} -m ${BINMODE} ${.ALLSRC} ${.TARGET}
+
+ lorder: lorder.sh
+- ${TOOL_SED} -e "s,/bin/sh,"${HOST_BSHELL:Q}",g" \
++ ${TOOL_SED} -e "s,\([ \!]\)/bin/sh,\1"${HOST_BSHELL:Q}",g" \
+ -e "s,{JOIN:=.*},{JOIN:="${TOOL_JOIN:Q}"}," \
+ -e "s,{MKTEMP:=.*},{MKTEMP:="${TOOL_MKTEMP:Q}"}," \
+ -e "s,{NM:=.*},{NM:="${NM:Q}"}," \
+--
+2.39.2
+
+From 9c8c93485e688bcc3db129bb56da03b18daae52c Mon Sep 17 00:00:00 2001
+From: Janneke Nieuwenhuizen <janneke@gnu.org>
+Date: Tue, 16 May 2023 08:55:51 +0200
+Subject: [PATCH 3/3] squash! pci-userspace: Add acpi lookup of irqs with
+ fallback
+
+---
+ debian/patches/acpi.diff | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/debian/patches/acpi.diff b/debian/patches/acpi.diff
+index 8015a6e63..8e359b2c0 100644
+--- a/debian/patches/acpi.diff
++++ b/debian/patches/acpi.diff
+@@ -1,6 +1,6 @@
+ --- a/pci-userspace/src-gnu/Makefile.inc
+ +++ b/pci-userspace/src-gnu/Makefile.inc
+-@@ -3,7 +3,7 @@
++@@ -3,8 +3,8 @@
+ PCIDIR:= ${.PARSEDIR}
+ .PATH: ${PCIDIR}
+
+@@ -9,6 +9,7 @@
+ RUMPCOMP_USER_CPPFLAGS+=-I${PCIDIR} -I${DESTDIR}/usr/include
+ RUMPCOMP_CPPFLAGS+= -I${PCIDIR} -I${DESTDIR}/usr/include
+ CPPFLAGS+= -I${PCIDIR}
++ MIG=mig
+ @@ -16,3 +16,11 @@
+ -user mach_debugUser.c \
+ -server /dev/null \
+@@ -17,7 +18,7 @@
+ +acpiUser.c:
+ + echo '#include <hurd/acpi.defs>' \
+ + | ${CC} -E -x c - -o - \
+-+ | mig -cc cat - /dev/null -subrprefix __ \
+++ | $(MIG) -cc cat - /dev/null -subrprefix __ \
+ + -user acpiUser.c \
+ + -server /dev/null \
+ + -header acpi_U.h
+--
+2.39.2
+
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 16 May 2023 15:48
[PATCH v2 2/3] gnu: hurd: Add rumpkernel.
(address . 63527@debbugs.gnu.org)
f439b7d0a09fc9678e2bd2595cb40ded3be66281.1684244425.git.janneke@gnu.org
* gnu/packages/hurd.scm (hurd)[inputs]: Add rumpkernel.
[arguments]: Rename `prepare-dde' phase to 'prepare-addons'. Add "rumpdisk"
directory. Add --enable-static-progs=... option to #:configure-flags.
---
gnu/packages/hurd.scm | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)

Toggle diff (58 lines)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 8edf5d91c6..e419859c05 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -356,7 +356,7 @@ (define-public hurd
(arguments
`(#:phases
(modify-phases %standard-phases
- (add-after 'unpack 'prepare-dde
+ (add-after 'unpack 'prepare-addons
(lambda* (#:key native-inputs inputs #:allow-other-keys)
;; First we import the things we want from dde.
(for-each make-file-writable (find-files "."))
@@ -370,7 +370,10 @@ (define-public hurd
;; Makefile. libdde_linux26 is built later in its own phase.
(substitute* "Makefile"
(("libbpf ")
- "libbpf libmachdevdde libddekit"))))
+ "libbpf libmachdevdde libddekit rumpdisk"))
+ (substitute* "rumpdisk/Makefile"
+ (("rumpdev_ahcisata" all)
+ (string-append all " rumpdev_ata")))))
(add-after 'unpack 'find-tirpc
(lambda* (#:key inputs #:allow-other-keys)
(for-each (lambda (var)
@@ -533,6 +536,7 @@ (define-public hurd
#:configure-flags
,#~(list (string-append "LDFLAGS=-Wl,-rpath="
#$output "/lib")
+ "--enable-static-progs=ext2fs,iso9660fs,rumpdisk,pci-arbiter,acpi"
"--disable-ncursesw"
"--without-libbz2"
"--without-libz"
@@ -541,7 +545,11 @@ (define-public hurd
;; clnt_create
"ac_func_search_save_LIBS=-ltirpc"
"ac_cv_search_clnt_create=false"
- "CFLAGS=-fcommon")))
+ "CFLAGS=-fcommon")
+ #:make-flags
+ (list (string-append "RUMPPATH="
+ (assoc-ref %build-inputs "rumpkernel")
+ "/lib"))))
(build-system gnu-build-system)
(inputs
`(("libgcrypt" ,libgcrypt) ;for /hurd/random
@@ -557,7 +565,8 @@ (define-public hurd
("coreutils" ,coreutils)
("sed" ,sed)
("grep" ,grep)
- ("util-linux" ,util-linux)))
+ ("util-linux" ,util-linux)
+ ("rumpkernel" ,rumpkernel)))
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 16 May 2023 15:48
[PATCH v2 3/3] DRAFT system: hurd: Boot with pci.arbiter and rumpdisk.
(address . 63527@debbugs.gnu.org)
6ac4d3d9d5e19a86304e6bcefced3cf88462bbf5.1684244425.git.janneke@gnu.org
XXX This hangs at

start pci.arbiter:

* gnu/system.scm (hurd-multiboot-modules): Add commands for pci.arbiter and
rumpdisk.
---
gnu/system.scm | 25 ++++++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)

Toggle diff (59 lines)
diff --git a/gnu/system.scm b/gnu/system.scm
index 354f58f55b..12e646ad51 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -10,7 +10,7 @@
;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <jannek@gnu.org>
+;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <jannek@gnu.org>
;;; Copyright © 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
@@ -1486,16 +1486,28 @@ (define (operating-system-multiboot-modules os)
(define (hurd-multiboot-modules os)
(let* ((hurd (operating-system-hurd os))
+ (pci-arbiter-command
+ (list (file-append hurd "/hurd/pci-arbiter.static")
+ "pci.arbiter"
+ "--host-priv-port='${host-port}'"
+ "--device-master-port='${device-port}'"
+ "--next-task='${disk-task}'"
+ "'$(pci-task=task-create)'"
+ "'$(task-resume)'"))
+ (rumpdisk-command
+ (list (file-append hurd "/hurd/rumpdisk.static")
+ "rumpdisk"
+ "--next-task='${fs-task}'"
+ "'$(disk-task=task-create)'"))
(root-file-system-command
(list (file-append hurd "/hurd/ext2fs.static")
"ext2fs"
"--multiboot-command-line='${kernel-command-line}'"
- "--host-priv-port='${host-port}'"
- "--device-master-port='${device-port}'"
"--exec-server-task='${exec-task}'"
"--store-type=typed"
"--x-xattr-translator-records"
- "'${root}'" "'$(task-create)'" "'$(task-resume)'"))
+ "'${root}'"
+ "'$(fs-task=task-create)'"))
(target (%current-target-system))
(libc (if target
(with-parameters ((%current-target-system #f))
@@ -1512,7 +1524,10 @@ (define (hurd-multiboot-modules os)
;; (file-append hurd "/hurd/exec") "'$(exec-task=task-create)'")
(list (file-append hurd "/hurd/exec.static") "exec"
"'$(exec-task=task-create)'")))
- (list root-file-system-command exec-server-command)))
+ (list pci-arbiter-command
+ rumpdisk-command
+ root-file-system-command
+ exec-server-command)))
(define* (operating-system-boot-parameters os root-device
#:key system-kernel-arguments?)
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 10:46
[PATCH v3 2/7] gnu: hurd: Update libpciaccess to 0.17.
(address . 63527@debbugs.gnu.org)
e893890e6dcf64b84c99c3f3ee7e8b1754ebed6d.1684398787.git.janneke@gnu.org
As suggested by youpi on IRC


libpciaccess-0.16 is too old for the Hurd and would need Hurd-specific patches
while libpciaccess-0.17 works out of the box.

* gnu/packages/hurd.scm (hurd)[inputs]: Use libpciaccess-0.17.
(netdde)[inputs]: Likewise.
---
gnu/packages/hurd.scm | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

Toggle diff (42 lines)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 34c7c00f2d..da94b05272 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -3,7 +3,7 @@
;;; Copyright © 2018, 2020-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2020, 2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2022, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2020 Rene Saavedra <pacoon@protonmail.com>
;;;
@@ -45,7 +45,7 @@ (define-module (gnu packages hurd)
#:use-module (gnu packages bash)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages onc-rpc)
- #:use-module (gnu packages xorg) ; libpciaccess
+ #:use-module (gnu packages xorg) ;#:select (libpciaccess-0.17)
#:use-module (guix git-download)
#:export (hurd-system?
hurd-target?))
@@ -547,7 +547,7 @@ (define-public hurd
`(("libgcrypt" ,libgcrypt) ;for /hurd/random
("libdaemon" ,libdaemon) ;for /bin/console --daemonize
("unifont" ,unifont)
- ("libpciaccess" ,libpciaccess)
+ ("libpciaccess" ,libpciaccess-0.17)
;; For NFS support
("libtirpc" ,libtirpc/hurd)
@@ -645,7 +645,7 @@ (define-public netdde
"/bin"))
#t)))))
(inputs
- (list hurd libpciaccess zlib))
+ (list hurd libpciaccess-0.17 zlib))
(native-inputs
`(("coreutils" ,coreutils)
("gawk" ,gawk)
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 10:45
[PATCH v3 0/7] Rumpdisk support for the Hurd
(address . 63527@debbugs.gnu.org)
cover.1684398787.git.janneke@gnu.org
So, good progress and amazing news since the v2 series:

* Add libpciaccess-0.17, and
* Use that for the Hurd,
* Actually setup translators for pci.arbiter and rumpdisk,
* For QEMU update the memory-size to 2048MB, and
* Suggest to do so in our bare-hurd.tmpl example, and
* It boots! \o/

I had a lot of kind debugging help from Samuel Thibault and Sergey Bugaev on
well as on the bug-hurd list
here, thank you!

With https://issues.guix.gnu.org/63501by Josselin Poiret being merged
yesterday and this patch series we now have Rumpkernel/rumpdisk support for
the Hurd!

I've now succesfully been doing something like

Toggle snippet (11 lines)
./pre-inst-env guix system image -t hurd-raw gnu/system/examples/bare-hurd.tmpl
guix shell qemu -- qemu-system-i386 \
-m 4096 \
--enable-kvm \
--device rtl8139,netdev=net0 \
--netdev user,id=net0,hostfwd=tcp:0.0.0.0:11022-:2222 \
--snapshot \
--no-reboot \
--hda /gnu/store/r5dpblnfsj08jh3hdmn8s6l9xaczwn65-disk-image

and ssh into the Hurd VM again.

(Should we update the the Childhurds blogpost too, it suggest -m 512

Greetings,
Janneke

Janneke Nieuwenhuizen (7):
gnu: Add libpciaccess-0.17.
gnu: hurd: Update libpciaccess to 0.17.
gnu: Add rumpkernel.
gnu: hurd: Add rumpkernel.
hurd-boot: Setup pci-arbiter and rumpdisk translators.
services: childhurd: Bump default qemu memory to 2048MB.
system: hurd: Boot with pci.arbiter and rumpdisk.

gnu/build/hurd-boot.scm | 10 +-
gnu/packages/hurd.scm | 231 ++++++++++++++++++++++++++++-
gnu/packages/xorg.scm | 17 +++
gnu/services/virtualization.scm | 4 +-
gnu/system.scm | 25 +++-
gnu/system/examples/bare-hurd.tmpl | 4 +-
6 files changed, 271 insertions(+), 20 deletions(-)


base-commit: 5b700945fb0b33eec410de8979cae2fbf0d4f118
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 10:45
[PATCH v3 1/7] gnu: Add libpciaccess-0.17.
(address . 63527@debbugs.gnu.org)
5bfcf081db8cd1204903c10d809a6b2bcf7ac05c.1684398787.git.janneke@gnu.org
* gnu/packages/xorg.scm (libpciaccess-0.17): New variable.
---
gnu/packages/xorg.scm | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

Toggle diff (37 lines)
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index f3d30c0ff1..93a2cca15d 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -34,6 +34,7 @@
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 qblade <qblade@protonmail.com>
;;; Copyright © 2021 Lu Hui <luhux76@gmail.com>
+;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -1145,6 +1146,22 @@ (define-public libpciaccess
(description "Xorg Generic PCI access library.")
(license license:x11)))
+(define-public libpciaccess-0.17
+ (package
+ (inherit libpciaccess)
+ (name "libpciaccess")
+ (version "0.17")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://xorg/individual/lib/libpciaccess-"
+ version
+ ".tar.xz"))
+ (sha256
+ (base32
+ "0wsvv5d05maqbidvnavka7n0fnql55m4jix5wwlk14blr6ikna3l"))))))
+
(define-public libpthread-stubs
(package
(name "libpthread-stubs")
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 10:46
[PATCH v3 5/7] hurd-boot: Setup pci-arbiter and rumpdisk translators.
(address . 63527@debbugs.gnu.org)
a6ec8f8de032677904f19a5dbb248cef9c75c6b9.1684398787.git.janneke@gnu.org
* gnu/build/hurd-boot.scm (make-hurd-device-nodes): Setup pci-arbiter and
rumpdisk translators.
---
gnu/build/hurd-boot.scm | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)

Toggle diff (50 lines)
diff --git a/gnu/build/hurd-boot.scm b/gnu/build/hurd-boot.scm
index 95c15907dd..25c8f0ea51 100644
--- a/gnu/build/hurd-boot.scm
+++ b/gnu/build/hurd-boot.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2020-2022 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -105,7 +105,7 @@ (define* (make-hurd-device-nodes #:optional (root "/"))
;; TODO: Set the 'gnu.translator' extended attribute for passive translator
;; settings?
- )
+ (mkdir-p (scope "servers/bus/pci")))
(define (passive-translator-xattr? file-name)
"Return true if FILE-NAME has an extended @code{gnu.translator} attribute
@@ -183,7 +183,8 @@ (define* (set-hurd-device-translators #:optional (root "/"))
(mkdir-p dir))))
(define servers
- '(("servers/crash-dump-core" ("/hurd/crash" "--dump-core"))
+ '(("servers/bus/pci" ("/hurd/pci-arbiter"))
+ ("servers/crash-dump-core" ("/hurd/crash" "--dump-core"))
("servers/crash-kill" ("/hurd/crash" "--kill"))
("servers/crash-suspend" ("/hurd/crash" "--suspend"))
("servers/password" ("/hurd/password"))
@@ -213,6 +214,8 @@ (define* (set-hurd-device-translators #:optional (root "/"))
;; 'fd_to_filename' in libc expects it.
("dev/fd" ("/hurd/magic" "--directory" "fd") #o555)
+ ("dev/rumpdisk"("/hurd/rumpdisk") #o660)
+
;; Create a number of ttys; syslogd writes to tty12 by default.
;; FIXME: Creating /dev/tty12 leads the console client to switch to
;; tty12 when syslogd starts, which is confusing for users. Thus, do
@@ -249,6 +252,7 @@ (define* (set-hurd-device-translators #:optional (root "/"))
(false-if-EEXIST (symlink "/dev/fd/1" (scope "dev/stdout")))
(false-if-EEXIST (symlink "/dev/fd/2" (scope "dev/stderr")))
(false-if-EEXIST (symlink "crash-dump-core" (scope "servers/crash")))
+ (false-if-EEXIST (symlink "/dev/rumpdisk" (scope "dev/disk")))
;; Make sure /etc/mtab is a symlink to /proc/mounts.
(false-if-exception (delete-file (scope "etc/mtab")))
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 10:46
[PATCH v3 6/7] services: childhurd: Bump default qemu memory to 2048MB.
(address . 63527@debbugs.gnu.org)
8495d642f70a1c9368bd64d71e9d878d80628b33.1684398787.git.janneke@gnu.org
When booting with pci-arbiter and rumpdisk and using 1024MB of memory for
qemu, booting hangs, or seems to hang, at the end of the rumpdisk boot
messages. At least 1200MB is required, currently.

* gnu/services/virtualization.scm (<hurd-vm-configuration>)[memory-size]: Bump
to 2048.
* gnu/system/examples/bare-hurd.tmpl: Suggest using 2048 here too. Update
example `guix system image' and "qemu" command lines too.
---
gnu/services/virtualization.scm | 4 ++--
gnu/system/examples/bare-hurd.tmpl | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)

Toggle diff (43 lines)
diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm
index 2e311e3813..886b73f8c7 100644
--- a/gnu/services/virtualization.scm
+++ b/gnu/services/virtualization.scm
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Ryan Moe <ryan.moe@gmail.com>
;;; Copyright © 2018, 2020-2022 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2020,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2021 Timotej Lazar <timotej.lazar@araneo.si>
;;; Copyright © 2022 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2022 Leo Nikkilä <hello@lnikki.la>
@@ -1100,7 +1100,7 @@ (define-record-type* <hurd-vm-configuration>
(disk-size hurd-vm-configuration-disk-size ;number or 'guess
(default 'guess))
(memory-size hurd-vm-configuration-memory-size ;number
- (default 512))
+ (default 2048))
(options hurd-vm-configuration-options ;list of string
(default `("--snapshot")))
(id hurd-vm-configuration-id ;#f or integer [1..]
diff --git a/gnu/system/examples/bare-hurd.tmpl b/gnu/system/examples/bare-hurd.tmpl
index f0dd0cf742..463c7ee798 100644
--- a/gnu/system/examples/bare-hurd.tmpl
+++ b/gnu/system/examples/bare-hurd.tmpl
@@ -5,12 +5,12 @@
;; To build a disk image for a virtual machine, do
;;
-;; ./pre-inst-env guix system image --target=i586-pc-gnu \
+;; ./pre-inst-env guix system image --image-type=hurd-raw \
;; gnu/system/examples/bare-hurd.tmpl
;;
;; You may run it like so
;;
-;; guix environment --ad-hoc qemu -- qemu-system-i386 -enable-kvm -m 512M \
+;; guix shell qemu -- qemu-system-i386 -enable-kvm -m 2048 \
;; -device rtl8139,netdev=net0 -netdev user,id=net0,hostfwd=tcp:127.0.0.1:10022-:2222 \
;; -snapshot -hda <the-image>
;;
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 10:46
[PATCH v3 4/7] gnu: hurd: Add rumpkernel.
(address . 63527@debbugs.gnu.org)
efcd094993a80fe63ede09c07b91f0f2826d05a6.1684398787.git.janneke@gnu.org
* gnu/packages/hurd.scm (hurd)[inputs]: Add rumpkernel.
[arguments]: Rename `prepare-dde' phase to 'prepare-addons'. Add "rumpdisk"
directory. Add --enable-static-progs=... option to #:configure-flags.
---
gnu/packages/hurd.scm | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)

Toggle diff (58 lines)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index c7ea86b266..aaa9863a10 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -356,7 +356,7 @@ (define-public hurd
(arguments
`(#:phases
(modify-phases %standard-phases
- (add-after 'unpack 'prepare-dde
+ (add-after 'unpack 'prepare-addons
(lambda* (#:key native-inputs inputs #:allow-other-keys)
;; First we import the things we want from dde.
(for-each make-file-writable (find-files "."))
@@ -370,7 +370,10 @@ (define-public hurd
;; Makefile. libdde_linux26 is built later in its own phase.
(substitute* "Makefile"
(("libbpf ")
- "libbpf libmachdevdde libddekit"))))
+ "libbpf libmachdevdde libddekit rumpdisk"))
+ (substitute* "rumpdisk/Makefile"
+ (("rumpdev_ahcisata" all)
+ (string-append all " rumpdev_ata")))))
(add-after 'unpack 'find-tirpc
(lambda* (#:key inputs #:allow-other-keys)
(for-each (lambda (var)
@@ -533,6 +536,7 @@ (define-public hurd
#:configure-flags
,#~(list (string-append "LDFLAGS=-Wl,-rpath="
#$output "/lib")
+ "--enable-static-progs=ext2fs,iso9660fs,rumpdisk,pci-arbiter,acpi"
"--disable-ncursesw"
"--without-libbz2"
"--without-libz"
@@ -541,7 +545,11 @@ (define-public hurd
;; clnt_create
"ac_func_search_save_LIBS=-ltirpc"
"ac_cv_search_clnt_create=false"
- "CFLAGS=-fcommon")))
+ "CFLAGS=-fcommon")
+ #:make-flags
+ (list (string-append "RUMPPATH="
+ (assoc-ref %build-inputs "rumpkernel")
+ "/lib"))))
(build-system gnu-build-system)
(inputs
`(("libgcrypt" ,libgcrypt) ;for /hurd/random
@@ -557,7 +565,8 @@ (define-public hurd
("coreutils" ,coreutils)
("sed" ,sed)
("grep" ,grep)
- ("util-linux" ,util-linux)))
+ ("util-linux" ,util-linux)
+ ("rumpkernel" ,rumpkernel)))
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 10:46
[PATCH v3 3/7] gnu: Add rumpkernel.
(address . 63527@debbugs.gnu.org)
a793f1c535c44338639b443397673de0e1654b09.1684398787.git.janneke@gnu.org
This uses the Debian Salsa rumpkernel package git as upstream as that is where
delopment happens. Once things have stabalized upstream may change to the
NetBSD git from where Debian takes their snapshots.

* gnu/packages/hurd.scm (rumpkernel): New variable.
---
gnu/packages/hurd.scm | 206 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 206 insertions(+)

Toggle diff (216 lines)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index da94b05272..c7ea86b266 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -662,3 +662,209 @@ (define-public netdde
;; Some drivers are dually licensed with the options being GPLv2 or one
;; of MPL/Expat/BSD-3 (dependent on the driver).
(license gpl2))))
+
+(define-public rumpkernel
+ (let ((commit "ec2ab9612be4dc48a316a21a0c96d3388478a064")
+ (revision "2"))
+ (package
+ (name "rumpkernel")
+ (version (git-version "0-20211031" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://salsa.debian.org/hurd-team/rumpkernel.git")
+ (commit commit)))
+ (sha256
+ (base32
+ "1ypjg3jyzhh3gnanmk6fh76dwl5ml78n311nbi0hw7f7hygzn7vk"))
+ (file-name (git-file-name name commit))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:tests? #f
+ #:modules '((srfi srfi-26)
+ (ice-9 match)
+ (ice-9 rdelim)
+ (guix build utils)
+ (guix build gnu-build-system))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'apply-patches
+ (lambda* (#:key target #:allow-other-keys)
+ (let* ((patch-directory "debian/patches/")
+ (series (string-append patch-directory "series"))
+ (text (with-input-from-file series read-string))
+ (lines (string-split (string-trim-right text) #\newline))
+ (patches (filter (negate (cute string-prefix? "#" <>))
+ lines))
+ (patch-files (map
+ (cute string-append patch-directory <>)
+ patches)))
+ (for-each
+ (cute invoke "patch" "--force" "-p1" "-i" <>)
+ patch-files)
+ ;; Somewhere in the build.sh/make process MIG is not being
+ ;; exported, apparently.
+ (when target
+ (substitute* "pci-userspace/src-gnu/Makefile.inc"
+ (("MIG=mig")
+ (string-append "MIG=" target "-mig")))))))
+ (add-before 'configure 'setenv
+ (lambda* (#:key build target #:allow-other-keys)
+ (define (noisy-setenv name value)
+ (setenv name value)
+ (format (current-error-port) "set ~a=~s\n" name value))
+ (noisy-setenv "HOST_CC" "gcc")
+ (when target
+ (noisy-setenv "MIG" (string-append target "-mig")))
+ (let ((target (or target build)))
+ (noisy-setenv "TARGET_AR" (string-append target "-ar"))
+ (noisy-setenv "TARGET_CC" (string-append target "-gcc"))
+ (noisy-setenv "TARGET_CXX" (string-append target "-g++"))
+ (noisy-setenv "TARGET_LD" (string-append target "-ld"))
+ (noisy-setenv "TARGET_MIG" (string-append target "-mig"))
+ (noisy-setenv "TARGET_NM" (string-append target "-nm")))
+ (setenv "PAWD" "pwd")
+ (for-each
+ (cute noisy-setenv <> "")
+ '("_GCC_CRTENDS"
+ "_GCC_CRTEND"
+ "_GCC_CRTBEGINS"
+ "_GCC_CRTBEGIN"
+ "_GCC_CRTI"
+ "_GCC_CRTN"))
+ (noisy-setenv "BSDOBJDIR=" (string-append (getcwd) "/obj"))))
+ (replace 'configure
+ (lambda args
+ (let ((configure (assoc-ref %standard-phases 'configure)))
+ (with-directory-excursion "buildrump.sh/src/lib/librumpuser"
+ (apply configure args)))))
+ (replace 'build
+ (lambda* (#:key parallel-build? #:allow-other-keys)
+ (let* ((jobs (if parallel-build? (parallel-job-count) 1))
+ (host-cpu (match #$(or (%current-target-system
+ (%current-system)))
+ ("i586-pc-gnu" "i386")
+ ("i686-linux" "i386")
+ ("x86_64-linux" "amd64")))
+ (toprump (string-append
+ (getcwd)
+ "/buildrump.sh/src/sys/rump"))
+ (rump-make (string-append
+ (getcwd)
+ "/buildrump.sh/src/obj/tooldir/bin/nbmake-"
+ host-cpu)))
+ (mkdir "obj")
+ (with-directory-excursion "buildrump.sh/src"
+ (invoke
+ "sh" "build.sh"
+ "-V" "TOOLS_BUILDRUMP=yes"
+ "-V" "MKBINUTILS=no"
+ "-V" "MKGDB=no"
+ "-V" "MKGROFF=no"
+ "-V" (string-append "TOPRUMP=" toprump)
+ "-V" "BUILDRUMP_CPPFLAGS=-Wno-error=stringop-overread"
+ "-V" "RUMPUSER_EXTERNAL_DPLIBS=pthread"
+ "-V" (string-append
+ "CPPFLAGS="
+ " -I../../obj/destdir." host-cpu "/usr/include"
+ " -D_FILE_OFFSET_BITS=64"
+ " -DRUMP_REGISTER_T=int"
+ " -DRUMPUSER_CONFIG=yes"
+ " -DNO_PCI_MSI_MSIX=yes"
+ " -DNUSB_DMA=1")
+ "-V" (string-append
+ "CWARNFLAGS="
+ " -Wno-error=maybe-uninitialized"
+ " -Wno-error=address-of-packed-member"
+ " -Wno-error=unused-variable"
+ " -Wno-error=stack-protector"
+ " -Wno-error=array-parameter"
+ " -Wno-error=array-bounds"
+ " -Wno-error=stringop-overflow")
+ "-V" "LIBCRTBEGIN="
+ "-V" "LIBCRTEND="
+ "-V" "LIBCRT0="
+ "-V" "LIBCRTI="
+ "-V" "_GCC_CRTENDS="
+ "-V" "_GCC_CRTEND="
+ "-V" "_GCC_CRTBEGINS="
+ "-V" "_GCC_CRTBEGIN="
+ "-V" "_GCC_CRTI="
+ "-V" "_GCC_CRTN="
+ "-U"
+ "-u"
+ "-T" "./obj/tooldir"
+ "-m" host-cpu
+ "-j" (number->string jobs)
+ "tools"
+ "rump"))
+ (with-directory-excursion "buildrump.sh/src/lib/librumpuser"
+ (setenv "RUMPRUN" "true")
+ (invoke rump-make "dependall"))
+ (with-directory-excursion "pci-userspace/src-gnu"
+ (invoke rump-make "dependall")))))
+ (replace 'install
+ (lambda _
+ (define (install-file file target)
+ (let ((dest (string-append target (basename file))))
+ (format (current-output-port) "`~a' -> `~a'~%" file dest)
+ (mkdir-p (dirname dest))
+ (if (file-exists? dest)
+ (format (current-error-port)
+ "warning: skipping: ~a\n" file)
+ (let ((stat (lstat file)))
+ (case (stat:type stat)
+ ((symlink)
+ (let ((target (readlink file)))
+ (symlink target dest)))
+ (else
+ (copy-file file dest)))))))
+ (let ((header (string-append #$output "/include/rump"))
+ (lib (string-append #$output "/lib/")))
+ (mkdir-p header)
+ (copy-recursively "buildrump.sh/src/sys/rump/include/rump"
+ header)
+ (mkdir-p lib)
+ (for-each
+ (cute install-file <> lib)
+ (append (find-files "buildrump.sh/src" "librump.*[.](a|so.*)")
+ (find-files "obj" "librump.*[.](a|so.*)")))))))))
+ (inputs
+ (list gnumach-headers libpciaccess-0.17))
+ (native-inputs
+ (list
+ autoconf
+ automake
+ libgcrypt
+ (if (%current-target-system)
+ (let* ((cross-base (resolve-interface '(gnu packages cross-base)))
+ (cross-mig (module-ref cross-base 'cross-mig)))
+ (cross-mig (%current-target-system)))
+ mig)
+ zlib))
+ (supported-systems %hurd-systems)
+ (home-page "https://wiki.netbsd.org/rumpkernel")
+ (synopsis "NetBSD as rumpkernel for the GNU/Hurd")
+ (description
+ "This package provides NetBSD as rumpkernel for the GNU/Hurd, so that
+the Hurd may be installed on iron. Using this rumpkernel package, the hurd
+package's rumpdisk can be built which provides the pci.arbiter and rumpdisk
+servers.")
+ (license (list
+ asl2.0
+ boost1.0
+ bsd-2
+ bsd-3
+ bsd-4
+ cddl1.0
+ expat
+ gpl1
+ gpl2+
+ gpl3+
+ isc
+ lgpl2.0+
+ public-domain
+ (@ (guix licenses) zlib)
+ (non-copyleft "file://src/lib/libc/hash/hashhl.c"
+ "See debian/copyright in the distribution."))))))
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 10:46
[PATCH v3 7/7] system: hurd: Boot with pci.arbiter and rumpdisk.
(address . 63527@debbugs.gnu.org)
ddeedc7862a04dbabddc31216339bf409795a046.1684398787.git.janneke@gnu.org
Be sure to give the Hurd enough (virtual) memory

* gnu/system.scm (hurd-multiboot-modules): Add commands for pci.arbiter and
rumpdisk.
---
gnu/system.scm | 25 ++++++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)

Toggle diff (59 lines)
diff --git a/gnu/system.scm b/gnu/system.scm
index 354f58f55b..23addf41e9 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -10,7 +10,7 @@
;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <jannek@gnu.org>
+;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <jannek@gnu.org>
;;; Copyright © 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
@@ -1486,16 +1486,28 @@ (define (operating-system-multiboot-modules os)
(define (hurd-multiboot-modules os)
(let* ((hurd (operating-system-hurd os))
+ (pci-arbiter-command
+ (list (file-append hurd "/hurd/pci-arbiter.static")
+ "pci-arbiter"
+ "--host-priv-port='${host-port}'"
+ "--device-master-port='${device-port}'"
+ "--next-task='${disk-task}'"
+ "'$(pci-task=task-create)'"
+ "'$(task-resume)'"))
+ (rumpdisk-command
+ (list (file-append hurd "/hurd/rumpdisk.static")
+ "rumpdisk"
+ "--next-task='${fs-task}'"
+ "'$(disk-task=task-create)'"))
(root-file-system-command
(list (file-append hurd "/hurd/ext2fs.static")
"ext2fs"
"--multiboot-command-line='${kernel-command-line}'"
- "--host-priv-port='${host-port}'"
- "--device-master-port='${device-port}'"
"--exec-server-task='${exec-task}'"
"--store-type=typed"
"--x-xattr-translator-records"
- "'${root}'" "'$(task-create)'" "'$(task-resume)'"))
+ "'${root}'"
+ "'$(fs-task=task-create)'"))
(target (%current-target-system))
(libc (if target
(with-parameters ((%current-target-system #f))
@@ -1512,7 +1524,10 @@ (define (hurd-multiboot-modules os)
;; (file-append hurd "/hurd/exec") "'$(exec-task=task-create)'")
(list (file-append hurd "/hurd/exec.static") "exec"
"'$(exec-task=task-create)'")))
- (list root-file-system-command exec-server-command)))
+ (list pci-arbiter-command
+ rumpdisk-command
+ root-file-system-command
+ exec-server-command)))
(define* (operating-system-boot-parameters os root-device
#:key system-kernel-arguments?)
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 11:14
Re: [PATCH v3 0/7] Rumpdisk support for the Hurd
(address . 63527@debbugs.gnu.org)
87fs7ugfx7.fsf@gnu.org
Janneke Nieuwenhuizen writes:

Toggle quote (2 lines)
> So, good progress and amazing news since the v2 series:

Oops, there is still good news, but the updated MONOTONIC (and possibly
centiseconds) time patches from Debian Salsa are still needed!

In testing with all different builds I must have confused myself in the
final test, sorry! Anyway, the rest of the story and the good news
still holds, we just need another ugly cross-glibc patch for the Hurd.

I'll be preparing a new patch series.

Greetings,
Janneke

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 11:38
[PATCH v4 0/8] Rumpdisk support for the Hurd, really!
(address . 63527@debbugs.gnu.org)
cover.1684402361.git.janneke@gnu.org
Most everything mentioned in the v3 patch series still holds, apart from the
little fact that the rumpkernel will panic unless we use the complete time
patches from Debian Salsa glibc package management, as was discussed/suggested
on IRC by youpi:


So one additional patch for cross-glibc, no changes in any of the patches
since v3.

Greetings,
Janneke

Janneke Nieuwenhuizen (8):
gnu: glibc: Update time patches for the Hurd.
gnu: Add libpciaccess-0.17.
gnu: hurd: Update libpciaccess to 0.17.
gnu: Add rumpkernel.
gnu: hurd: Add rumpkernel.
hurd-boot: Setup pci-arbiter and rumpdisk translators.
services: childhurd: Bump default qemu memory to 2048MB.
system: hurd: Boot with pci.arbiter and rumpdisk.

gnu/build/hurd-boot.scm | 10 +-
gnu/local.mk | 2 +
gnu/packages/cross-base.scm | 34 ++-
gnu/packages/hurd.scm | 231 +++++++++++++++++-
...bc-2.35-hurd-clock_gettime_monotonic.patch | 137 +++++++++++
...glibc-2.35-hurd-clock_t_centiseconds.patch | 63 +++++
gnu/packages/xorg.scm | 17 ++
gnu/services/virtualization.scm | 4 +-
gnu/system.scm | 25 +-
gnu/system/examples/bare-hurd.tmpl | 4 +-
10 files changed, 504 insertions(+), 23 deletions(-)
create mode 100644 gnu/packages/patches/glibc-2.35-hurd-clock_gettime_monotonic.patch
create mode 100644 gnu/packages/patches/glibc-2.35-hurd-clock_t_centiseconds.patch


base-commit: 5b700945fb0b33eec410de8979cae2fbf0d4f118
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 11:38
[PATCH v4 2/8] gnu: Add libpciaccess-0.17.
(address . 63527@debbugs.gnu.org)
4e5f6c1005fad11cba2aa0078d7820874ce60477.1684402361.git.janneke@gnu.org
* gnu/packages/xorg.scm (libpciaccess-0.17): New variable.
---
gnu/packages/xorg.scm | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

Toggle diff (37 lines)
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index f3d30c0ff1..93a2cca15d 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -34,6 +34,7 @@
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 qblade <qblade@protonmail.com>
;;; Copyright © 2021 Lu Hui <luhux76@gmail.com>
+;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -1145,6 +1146,22 @@ (define-public libpciaccess
(description "Xorg Generic PCI access library.")
(license license:x11)))
+(define-public libpciaccess-0.17
+ (package
+ (inherit libpciaccess)
+ (name "libpciaccess")
+ (version "0.17")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://xorg/individual/lib/libpciaccess-"
+ version
+ ".tar.xz"))
+ (sha256
+ (base32
+ "0wsvv5d05maqbidvnavka7n0fnql55m4jix5wwlk14blr6ikna3l"))))))
+
(define-public libpthread-stubs
(package
(name "libpthread-stubs")
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 11:38
[PATCH v4 3/8] gnu: hurd: Update libpciaccess to 0.17.
(address . 63527@debbugs.gnu.org)
fbbb803d2d54364bbdc346d1b5f9c0ee34a715da.1684402361.git.janneke@gnu.org
As suggested by youpi on IRC


libpciaccess-0.16 is too old for the Hurd and would need Hurd-specific patches
while libpciaccess-0.17 works out of the box.

* gnu/packages/hurd.scm (hurd)[inputs]: Use libpciaccess-0.17.
(netdde)[inputs]: Likewise.
---
gnu/packages/hurd.scm | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

Toggle diff (42 lines)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 34c7c00f2d..da94b05272 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -3,7 +3,7 @@
;;; Copyright © 2018, 2020-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2020, 2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2022, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2020 Rene Saavedra <pacoon@protonmail.com>
;;;
@@ -45,7 +45,7 @@ (define-module (gnu packages hurd)
#:use-module (gnu packages bash)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages onc-rpc)
- #:use-module (gnu packages xorg) ; libpciaccess
+ #:use-module (gnu packages xorg) ;#:select (libpciaccess-0.17)
#:use-module (guix git-download)
#:export (hurd-system?
hurd-target?))
@@ -547,7 +547,7 @@ (define-public hurd
`(("libgcrypt" ,libgcrypt) ;for /hurd/random
("libdaemon" ,libdaemon) ;for /bin/console --daemonize
("unifont" ,unifont)
- ("libpciaccess" ,libpciaccess)
+ ("libpciaccess" ,libpciaccess-0.17)
;; For NFS support
("libtirpc" ,libtirpc/hurd)
@@ -645,7 +645,7 @@ (define-public netdde
"/bin"))
#t)))))
(inputs
- (list hurd libpciaccess zlib))
+ (list hurd libpciaccess-0.17 zlib))
(native-inputs
`(("coreutils" ,coreutils)
("gawk" ,gawk)
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 11:38
[PATCH v4 1/8] gnu: glibc: Update time patches for the Hurd.
(address . 63527@debbugs.gnu.org)
23790bf9a3383c0adf74ec209eb9222c410f667b.1684402361.git.janneke@gnu.org
The previous set of time patches were adapted from the Debian Salsa glibc
package git and were needed only to get Python to build. The rumpkernel needs
the full versions of those patches, with the current set causes a rumpkernel
panic.

As discussed/suggested on IRC


* gnu/packages/patches/glibc-2.35-hurd-clock_t_centiseconds.patch,
gnu/packages/patches/glibc-2.35-hurd-clock_gettime_monotonic.patch: New files.
* gnu/packages/cross-base.scm (cross-libc*)[native-inputs]: Add them, together
with their incorrect/incomplete already applied versions.
[arguments]: Use them in a new patch-libc/hurd phase: revert the incorrect
ones and apply the new patches.
---
gnu/local.mk | 2 +
gnu/packages/cross-base.scm | 34 ++++-
...bc-2.35-hurd-clock_gettime_monotonic.patch | 137 ++++++++++++++++++
...glibc-2.35-hurd-clock_t_centiseconds.patch | 63 ++++++++
4 files changed, 233 insertions(+), 3 deletions(-)
create mode 100644 gnu/packages/patches/glibc-2.35-hurd-clock_gettime_monotonic.patch
create mode 100644 gnu/packages/patches/glibc-2.35-hurd-clock_t_centiseconds.patch

Toggle diff (286 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 42514ded8e..c5b3568742 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1233,6 +1233,8 @@ dist_patch_DATA = \
%D%/packages/patches/glib-appinfo-watch.patch \
%D%/packages/patches/glib-networking-gnutls-binding.patch \
%D%/packages/patches/glib-skip-failing-test.patch \
+ %D%/packages/patches/glibc-2.35-hurd-clock_gettime_monotonic.patch \
+ %D%/packages/patches/glibc-2.35-hurd-clock_t_centiseconds.patch \
%D%/packages/patches/glibc-CVE-2019-7309.patch \
%D%/packages/patches/glibc-CVE-2019-9169.patch \
%D%/packages/patches/glibc-CVE-2019-19126.patch \
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 8d0b41180b..c8d1aef814 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013-2018, 2020, 2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016, 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016, 2019, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
@@ -624,7 +624,22 @@ (define* (cross-libc* target
(("/[^ ]+/lib/libc.so.0.3")
(string-append out "/lib/libc.so.0.3"
" libmachuser.so libhurduser.so"))))
- #t)))
+ #t))
+ ;; TODO: move to glibc in the next rebuild cycle
+ (add-after 'unpack 'patch-libc/hurd
+ (lambda* (#:key inputs #:allow-other-keys)
+ (for-each
+ (lambda (name)
+ (let ((patch (assoc-ref inputs name)))
+ (invoke "patch" "-p1" "--force" "-R" "-i" patch)))
+ '("hurd-monotonic.patch"
+ "hurd-centiseconds.patch"))
+ (for-each
+ (lambda (name)
+ (let ((patch (assoc-ref inputs name)))
+ (invoke "patch" "-p1" "--force" "-i" patch)))
+ '("2.35-hurd-centiseconds.patch"
+ "2.35-hurd-monotonic.patch")))))
'())))))
;; Shadow the native "kernel-headers" because glibc's recipe expects the
@@ -637,7 +652,20 @@ (define* (cross-libc* target
`(("cross-mig"
,(cross-mig target
#:xgcc xgcc
- #:xbinutils xbinutils)))
+ #:xbinutils xbinutils))
+ ;; TODO: move to glibc in the next rebuild cycle
+ ("hurd-monotonic.patch"
+ ,@(search-patches
+ "glibc-hurd-clock_gettime_monotonic.patch"))
+ ("hurd-centiseconds.patch"
+ ,@(search-patches
+ "glibc-hurd-clock_t_centiseconds.patch"))
+ ("2.35-hurd-monotonic.patch"
+ ,@(search-patches
+ "glibc-2.35-hurd-clock_gettime_monotonic.patch"))
+ ("2.35-hurd-centiseconds.patch"
+ ,@(search-patches
+ "glibc-2.35-hurd-clock_t_centiseconds.patch")))
'())
,@(package-inputs libc) ;FIXME: static-bash
,@(package-native-inputs libc))))))
diff --git a/gnu/packages/patches/glibc-2.35-hurd-clock_gettime_monotonic.patch b/gnu/packages/patches/glibc-2.35-hurd-clock_gettime_monotonic.patch
new file mode 100644
index 0000000000..05769d61b9
--- /dev/null
+++ b/gnu/packages/patches/glibc-2.35-hurd-clock_gettime_monotonic.patch
@@ -0,0 +1,137 @@
+Upstream status: taken from upstream:
+
+ https://salsa.debian.org/glibc-team/glibc/-/blob/sid/debian/patches/hurd-i386/local-clock_gettime_MONOTONIC.diff
+
+Use the realtime clock for the monotonic clock. This is of course not a proper
+implementation (which is being done in Mach), but will permit to fix at least
+the iceweasel stack.
+
+vlc however doesn't build when _POSIX_CLOCK_SELECTION is enabled but
+_POSIX_TIMERS is not, and they refuse to fix that (see #765578), so disable the
+former.
+
+---
+ sysdeps/mach/hurd/bits/posix_opt.h | 2 +-
+ sysdeps/unix/clock_gettime.c | 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+Index: glibc-2.27/sysdeps/mach/clock_gettime.c
+===================================================================
+--- glibc-2.27.orig/sysdeps/mach/clock_gettime.c
++++ glibc-2.27/sysdeps/mach/clock_gettime.c
+@@ -31,6 +31,10 @@ __clock_gettime (clockid_t clock_id, str
+ switch (clock_id) {
+
+ case CLOCK_REALTIME:
++ case CLOCK_MONOTONIC:
++ case CLOCK_MONOTONIC_RAW:
++ case CLOCK_REALTIME_COARSE:
++ case CLOCK_MONOTONIC_COARSE:
+ {
+ /* __host_get_time can only fail if passed an invalid host_t.
+ __mach_host_self could theoretically fail (producing an
+Index: glibc-2.27/rt/timer_create.c
+===================================================================
+--- glibc-2.27.orig/rt/timer_create.c
++++ glibc-2.27/rt/timer_create.c
+@@ -48,7 +48,7 @@ timer_create (clockid_t clock_id, struct
+ return -1;
+ }
+
+- if (clock_id != CLOCK_REALTIME)
++ if (clock_id != CLOCK_REALTIME && clock_id != CLOCK_MONOTONIC && clock_id != CLOCK_MONOTONIC_RAW && clock_id != CLOCK_REALTIME_COARSE && clock_id != CLOCK_MONOTONIC_COARSE)
+ {
+ __set_errno (EINVAL);
+ return -1;
+Index: glibc-2.27/sysdeps/mach/hurd/bits/posix_opt.h
+===================================================================
+--- glibc-2.27.orig/sysdeps/mach/hurd/bits/posix_opt.h
++++ glibc-2.27/sysdeps/mach/hurd/bits/posix_opt.h
+@@ -163,10 +163,10 @@
+ #define _POSIX_THREAD_PROCESS_SHARED -1
+
+ /* The monotonic clock might be available. */
+-#define _POSIX_MONOTONIC_CLOCK 0
++#define _POSIX_MONOTONIC_CLOCK 200809L
+
+-/* The clock selection interfaces are available. */
+-#define _POSIX_CLOCK_SELECTION 200809L
++/* The clock selection interfaces are not really available yet. */
++#define _POSIX_CLOCK_SELECTION -1
+
+ /* Advisory information interfaces could be available in future. */
+ #define _POSIX_ADVISORY_INFO 0
+Index: glibc-upstream/sysdeps/posix/clock_getres.c
+===================================================================
+--- glibc-upstream.orig/sysdeps/posix/clock_getres.c
++++ glibc-upstream/sysdeps/posix/clock_getres.c
+@@ -52,6 +52,10 @@ __clock_getres (clockid_t clock_id, stru
+ switch (clock_id)
+ {
+ case CLOCK_REALTIME:
++ case CLOCK_MONOTONIC:
++ case CLOCK_MONOTONIC_RAW:
++ case CLOCK_REALTIME_COARSE:
++ case CLOCK_MONOTONIC_COARSE:
+ retval = realtime_getres (res);
+ break;
+
+--- ./sysdeps/mach/clock_nanosleep.c.original 2020-07-21 00:31:35.226113142 +0200
++++ ./sysdeps/mach/clock_nanosleep.c 2020-07-21 00:31:49.026185761 +0200
+@@ -62,7 +62,7 @@
+ __clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req,
+ struct timespec *rem)
+ {
+- if (clock_id != CLOCK_REALTIME
++ if ((clock_id != CLOCK_REALTIME && clock_id != CLOCK_MONOTONIC && clock_id != CLOCK_MONOTONIC_RAW && clock_id != CLOCK_REALTIME_COARSE && clock_id != CLOCK_MONOTONIC_COARSE)
+ || !valid_nanoseconds (req->tv_nsec)
+ || (flags != 0 && flags != TIMER_ABSTIME))
+ return EINVAL;
+Index: glibc-2.32/hurd/hurdlock.c
+===================================================================
+--- glibc-2.32.orig/hurd/hurdlock.c
++++ glibc-2.32/hurd/hurdlock.c
+@@ -47,7 +47,7 @@ int
+ __lll_abstimed_wait (void *ptr, int val,
+ const struct timespec *tsp, int flags, int clk)
+ {
+- if (clk != CLOCK_REALTIME)
++ if (clk != CLOCK_REALTIME && clk != CLOCK_MONOTONIC)
+ return EINVAL;
+
+ int mlsec = compute_reltime (tsp, clk);
+@@ -59,7 +59,7 @@ int
+ __lll_abstimed_wait_intr (void *ptr, int val,
+ const struct timespec *tsp, int flags, int clk)
+ {
+- if (clk != CLOCK_REALTIME)
++ if (clk != CLOCK_REALTIME && clk != CLOCK_MONOTONIC)
+ return EINVAL;
+
+ int mlsec = compute_reltime (tsp, clk);
+@@ -79,7 +79,7 @@ int
+ __lll_abstimed_xwait (void *ptr, int lo, int hi,
+ const struct timespec *tsp, int flags, int clk)
+ {
+- if (clk != CLOCK_REALTIME)
++ if (clk != CLOCK_REALTIME && clk != CLOCK_MONOTONIC)
+ return EINVAL;
+
+ int mlsec = compute_reltime (tsp, clk);
+@@ -91,7 +91,7 @@ int
+ __lll_abstimed_lock (void *ptr,
+ const struct timespec *tsp, int flags, int clk)
+ {
+- if (clk != CLOCK_REALTIME)
++ if (clk != CLOCK_REALTIME && clk != CLOCK_MONOTONIC)
+ return EINVAL;
+
+ if (__lll_trylock (ptr) == 0)
+@@ -177,7 +177,7 @@ __lll_robust_abstimed_lock (void *ptr,
+ int wait_time = 25;
+ unsigned int val;
+
+- if (clk != CLOCK_REALTIME)
++ if (clk != CLOCK_REALTIME && clk != CLOCK_MONOTONIC)
+ return EINVAL;
+
+ while (1)
diff --git a/gnu/packages/patches/glibc-2.35-hurd-clock_t_centiseconds.patch b/gnu/packages/patches/glibc-2.35-hurd-clock_t_centiseconds.patch
new file mode 100644
index 0000000000..c4e9fd5105
--- /dev/null
+++ b/gnu/packages/patches/glibc-2.35-hurd-clock_t_centiseconds.patch
@@ -0,0 +1,63 @@
+Upstream status: taken from upstream:
+
+ https://salsa.debian.org/glibc-team/glibc/-/blob/sid/debian/patches/hurd-i386/unsubmitted-clock_t_centiseconds.diff
+
+Some applications assume centisecond precision, or at most millisecond precision
+(e.g. guile). This is a work-around for them.
+
+---
+ getclktck.c | 5 ++---
+ setitimer.c | 2 +-
+ times.c | 2 +-
+ 4 files changed, 8 insertions(+), 9 deletions(-)
+commit d57f2f9b4bd007846af2fb4217486ea572579010
+Author: Richard Braun <rbraun@sceen.net>
+Date: Tue Aug 27 11:35:31 2013 +0200
+
+ Express CPU time (clock_t of times(2)) in centiseconds
+
+diff --git a/sysdeps/mach/hurd/getclktck.c b/sysdeps/mach/hurd/getclktck.c
+index 69be2cc..5f7d946 100644
+--- a/sysdeps/mach/hurd/getclktck.c
++++ b/sysdeps/mach/hurd/getclktck.c
+@@ -18,12 +18,11 @@
+
+ #include <time.h>
+
+-/* Return frequency of `times'.
+- Since Mach reports CPU times in microseconds, we always use 1 million. */
++/* Return frequency of `times'. */
+ int
+ __getclktck (void)
+ {
+- return 1000000;
++ return 100;
+ }
+
+ /* Before glibc 2.2, the Hurd actually did this differently, so we
+diff --git a/sysdeps/mach/hurd/setitimer.c b/sysdeps/mach/hurd/setitimer.c
+index 39b6b16..4992c89 100644
+--- a/sysdeps/mach/hurd/setitimer.c
++++ b/sysdeps/mach/hurd/setitimer.c
+@@ -42,7 +42,7 @@ quantize_timeval (struct timeval *tv)
+ static time_t quantum = -1;
+
+ if (quantum == -1)
+- quantum = 1000000 / __getclktck ();
++ quantum = 100 / __getclktck ();
+
+ tv->tv_usec = ((tv->tv_usec + (quantum - 1)) / quantum) * quantum;
+ if (tv->tv_usec >= 1000000)
+diff --git a/sysdeps/mach/hurd/times.c b/sysdeps/mach/hurd/times.c
+index 9e13a75..593c33a 100644
+--- a/sysdeps/mach/hurd/times.c
++++ b/sysdeps/mach/hurd/times.c
+@@ -29,7 +29,7 @@
+ static inline clock_t
+ clock_from_time_value (const time_value_t *t)
+ {
+- return t->seconds * 1000000 + t->microseconds;
++ return t->seconds * 100 + t->microseconds / 10000;
+ }
+
+ /* Store the CPU time used by this process and all its
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 11:39
[PATCH v4 5/8] gnu: hurd: Add rumpkernel.
(address . 63527@debbugs.gnu.org)
8a33ba6a7672c2deb7e553bd9f95c8b22e3f4a58.1684402361.git.janneke@gnu.org
* gnu/packages/hurd.scm (hurd)[inputs]: Add rumpkernel.
[arguments]: Rename `prepare-dde' phase to 'prepare-addons'. Add "rumpdisk"
directory. Add --enable-static-progs=... option to #:configure-flags.
---
gnu/packages/hurd.scm | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)

Toggle diff (58 lines)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index c7ea86b266..aaa9863a10 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -356,7 +356,7 @@ (define-public hurd
(arguments
`(#:phases
(modify-phases %standard-phases
- (add-after 'unpack 'prepare-dde
+ (add-after 'unpack 'prepare-addons
(lambda* (#:key native-inputs inputs #:allow-other-keys)
;; First we import the things we want from dde.
(for-each make-file-writable (find-files "."))
@@ -370,7 +370,10 @@ (define-public hurd
;; Makefile. libdde_linux26 is built later in its own phase.
(substitute* "Makefile"
(("libbpf ")
- "libbpf libmachdevdde libddekit"))))
+ "libbpf libmachdevdde libddekit rumpdisk"))
+ (substitute* "rumpdisk/Makefile"
+ (("rumpdev_ahcisata" all)
+ (string-append all " rumpdev_ata")))))
(add-after 'unpack 'find-tirpc
(lambda* (#:key inputs #:allow-other-keys)
(for-each (lambda (var)
@@ -533,6 +536,7 @@ (define-public hurd
#:configure-flags
,#~(list (string-append "LDFLAGS=-Wl,-rpath="
#$output "/lib")
+ "--enable-static-progs=ext2fs,iso9660fs,rumpdisk,pci-arbiter,acpi"
"--disable-ncursesw"
"--without-libbz2"
"--without-libz"
@@ -541,7 +545,11 @@ (define-public hurd
;; clnt_create
"ac_func_search_save_LIBS=-ltirpc"
"ac_cv_search_clnt_create=false"
- "CFLAGS=-fcommon")))
+ "CFLAGS=-fcommon")
+ #:make-flags
+ (list (string-append "RUMPPATH="
+ (assoc-ref %build-inputs "rumpkernel")
+ "/lib"))))
(build-system gnu-build-system)
(inputs
`(("libgcrypt" ,libgcrypt) ;for /hurd/random
@@ -557,7 +565,8 @@ (define-public hurd
("coreutils" ,coreutils)
("sed" ,sed)
("grep" ,grep)
- ("util-linux" ,util-linux)))
+ ("util-linux" ,util-linux)
+ ("rumpkernel" ,rumpkernel)))
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 11:39
[PATCH v4 6/8] hurd-boot: Setup pci-arbiter and rumpdisk translators.
(address . 63527@debbugs.gnu.org)
f714cc2c0040059f3b0d716f9a5c2cf546630ce0.1684402361.git.janneke@gnu.org
* gnu/build/hurd-boot.scm (make-hurd-device-nodes): Setup pci-arbiter and
rumpdisk translators.
---
gnu/build/hurd-boot.scm | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)

Toggle diff (50 lines)
diff --git a/gnu/build/hurd-boot.scm b/gnu/build/hurd-boot.scm
index 95c15907dd..25c8f0ea51 100644
--- a/gnu/build/hurd-boot.scm
+++ b/gnu/build/hurd-boot.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2020-2022 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -105,7 +105,7 @@ (define* (make-hurd-device-nodes #:optional (root "/"))
;; TODO: Set the 'gnu.translator' extended attribute for passive translator
;; settings?
- )
+ (mkdir-p (scope "servers/bus/pci")))
(define (passive-translator-xattr? file-name)
"Return true if FILE-NAME has an extended @code{gnu.translator} attribute
@@ -183,7 +183,8 @@ (define* (set-hurd-device-translators #:optional (root "/"))
(mkdir-p dir))))
(define servers
- '(("servers/crash-dump-core" ("/hurd/crash" "--dump-core"))
+ '(("servers/bus/pci" ("/hurd/pci-arbiter"))
+ ("servers/crash-dump-core" ("/hurd/crash" "--dump-core"))
("servers/crash-kill" ("/hurd/crash" "--kill"))
("servers/crash-suspend" ("/hurd/crash" "--suspend"))
("servers/password" ("/hurd/password"))
@@ -213,6 +214,8 @@ (define* (set-hurd-device-translators #:optional (root "/"))
;; 'fd_to_filename' in libc expects it.
("dev/fd" ("/hurd/magic" "--directory" "fd") #o555)
+ ("dev/rumpdisk"("/hurd/rumpdisk") #o660)
+
;; Create a number of ttys; syslogd writes to tty12 by default.
;; FIXME: Creating /dev/tty12 leads the console client to switch to
;; tty12 when syslogd starts, which is confusing for users. Thus, do
@@ -249,6 +252,7 @@ (define* (set-hurd-device-translators #:optional (root "/"))
(false-if-EEXIST (symlink "/dev/fd/1" (scope "dev/stdout")))
(false-if-EEXIST (symlink "/dev/fd/2" (scope "dev/stderr")))
(false-if-EEXIST (symlink "crash-dump-core" (scope "servers/crash")))
+ (false-if-EEXIST (symlink "/dev/rumpdisk" (scope "dev/disk")))
;; Make sure /etc/mtab is a symlink to /proc/mounts.
(false-if-exception (delete-file (scope "etc/mtab")))
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 11:38
[PATCH v4 4/8] gnu: Add rumpkernel.
(address . 63527@debbugs.gnu.org)
b09d22de134120ff605033477fb55073c22ebd30.1684402361.git.janneke@gnu.org
This uses the Debian Salsa rumpkernel package git as upstream as that is where
delopment happens. Once things have stabalized upstream may change to the
NetBSD git from where Debian takes their snapshots.

* gnu/packages/hurd.scm (rumpkernel): New variable.
---
gnu/packages/hurd.scm | 206 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 206 insertions(+)

Toggle diff (216 lines)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index da94b05272..c7ea86b266 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -662,3 +662,209 @@ (define-public netdde
;; Some drivers are dually licensed with the options being GPLv2 or one
;; of MPL/Expat/BSD-3 (dependent on the driver).
(license gpl2))))
+
+(define-public rumpkernel
+ (let ((commit "ec2ab9612be4dc48a316a21a0c96d3388478a064")
+ (revision "2"))
+ (package
+ (name "rumpkernel")
+ (version (git-version "0-20211031" revision commit))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://salsa.debian.org/hurd-team/rumpkernel.git")
+ (commit commit)))
+ (sha256
+ (base32
+ "1ypjg3jyzhh3gnanmk6fh76dwl5ml78n311nbi0hw7f7hygzn7vk"))
+ (file-name (git-file-name name commit))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:tests? #f
+ #:modules '((srfi srfi-26)
+ (ice-9 match)
+ (ice-9 rdelim)
+ (guix build utils)
+ (guix build gnu-build-system))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'apply-patches
+ (lambda* (#:key target #:allow-other-keys)
+ (let* ((patch-directory "debian/patches/")
+ (series (string-append patch-directory "series"))
+ (text (with-input-from-file series read-string))
+ (lines (string-split (string-trim-right text) #\newline))
+ (patches (filter (negate (cute string-prefix? "#" <>))
+ lines))
+ (patch-files (map
+ (cute string-append patch-directory <>)
+ patches)))
+ (for-each
+ (cute invoke "patch" "--force" "-p1" "-i" <>)
+ patch-files)
+ ;; Somewhere in the build.sh/make process MIG is not being
+ ;; exported, apparently.
+ (when target
+ (substitute* "pci-userspace/src-gnu/Makefile.inc"
+ (("MIG=mig")
+ (string-append "MIG=" target "-mig")))))))
+ (add-before 'configure 'setenv
+ (lambda* (#:key build target #:allow-other-keys)
+ (define (noisy-setenv name value)
+ (setenv name value)
+ (format (current-error-port) "set ~a=~s\n" name value))
+ (noisy-setenv "HOST_CC" "gcc")
+ (when target
+ (noisy-setenv "MIG" (string-append target "-mig")))
+ (let ((target (or target build)))
+ (noisy-setenv "TARGET_AR" (string-append target "-ar"))
+ (noisy-setenv "TARGET_CC" (string-append target "-gcc"))
+ (noisy-setenv "TARGET_CXX" (string-append target "-g++"))
+ (noisy-setenv "TARGET_LD" (string-append target "-ld"))
+ (noisy-setenv "TARGET_MIG" (string-append target "-mig"))
+ (noisy-setenv "TARGET_NM" (string-append target "-nm")))
+ (setenv "PAWD" "pwd")
+ (for-each
+ (cute noisy-setenv <> "")
+ '("_GCC_CRTENDS"
+ "_GCC_CRTEND"
+ "_GCC_CRTBEGINS"
+ "_GCC_CRTBEGIN"
+ "_GCC_CRTI"
+ "_GCC_CRTN"))
+ (noisy-setenv "BSDOBJDIR=" (string-append (getcwd) "/obj"))))
+ (replace 'configure
+ (lambda args
+ (let ((configure (assoc-ref %standard-phases 'configure)))
+ (with-directory-excursion "buildrump.sh/src/lib/librumpuser"
+ (apply configure args)))))
+ (replace 'build
+ (lambda* (#:key parallel-build? #:allow-other-keys)
+ (let* ((jobs (if parallel-build? (parallel-job-count) 1))
+ (host-cpu (match #$(or (%current-target-system
+ (%current-system)))
+ ("i586-pc-gnu" "i386")
+ ("i686-linux" "i386")
+ ("x86_64-linux" "amd64")))
+ (toprump (string-append
+ (getcwd)
+ "/buildrump.sh/src/sys/rump"))
+ (rump-make (string-append
+ (getcwd)
+ "/buildrump.sh/src/obj/tooldir/bin/nbmake-"
+ host-cpu)))
+ (mkdir "obj")
+ (with-directory-excursion "buildrump.sh/src"
+ (invoke
+ "sh" "build.sh"
+ "-V" "TOOLS_BUILDRUMP=yes"
+ "-V" "MKBINUTILS=no"
+ "-V" "MKGDB=no"
+ "-V" "MKGROFF=no"
+ "-V" (string-append "TOPRUMP=" toprump)
+ "-V" "BUILDRUMP_CPPFLAGS=-Wno-error=stringop-overread"
+ "-V" "RUMPUSER_EXTERNAL_DPLIBS=pthread"
+ "-V" (string-append
+ "CPPFLAGS="
+ " -I../../obj/destdir." host-cpu "/usr/include"
+ " -D_FILE_OFFSET_BITS=64"
+ " -DRUMP_REGISTER_T=int"
+ " -DRUMPUSER_CONFIG=yes"
+ " -DNO_PCI_MSI_MSIX=yes"
+ " -DNUSB_DMA=1")
+ "-V" (string-append
+ "CWARNFLAGS="
+ " -Wno-error=maybe-uninitialized"
+ " -Wno-error=address-of-packed-member"
+ " -Wno-error=unused-variable"
+ " -Wno-error=stack-protector"
+ " -Wno-error=array-parameter"
+ " -Wno-error=array-bounds"
+ " -Wno-error=stringop-overflow")
+ "-V" "LIBCRTBEGIN="
+ "-V" "LIBCRTEND="
+ "-V" "LIBCRT0="
+ "-V" "LIBCRTI="
+ "-V" "_GCC_CRTENDS="
+ "-V" "_GCC_CRTEND="
+ "-V" "_GCC_CRTBEGINS="
+ "-V" "_GCC_CRTBEGIN="
+ "-V" "_GCC_CRTI="
+ "-V" "_GCC_CRTN="
+ "-U"
+ "-u"
+ "-T" "./obj/tooldir"
+ "-m" host-cpu
+ "-j" (number->string jobs)
+ "tools"
+ "rump"))
+ (with-directory-excursion "buildrump.sh/src/lib/librumpuser"
+ (setenv "RUMPRUN" "true")
+ (invoke rump-make "dependall"))
+ (with-directory-excursion "pci-userspace/src-gnu"
+ (invoke rump-make "dependall")))))
+ (replace 'install
+ (lambda _
+ (define (install-file file target)
+ (let ((dest (string-append target (basename file))))
+ (format (current-output-port) "`~a' -> `~a'~%" file dest)
+ (mkdir-p (dirname dest))
+ (if (file-exists? dest)
+ (format (current-error-port)
+ "warning: skipping: ~a\n" file)
+ (let ((stat (lstat file)))
+ (case (stat:type stat)
+ ((symlink)
+ (let ((target (readlink file)))
+ (symlink target dest)))
+ (else
+ (copy-file file dest)))))))
+ (let ((header (string-append #$output "/include/rump"))
+ (lib (string-append #$output "/lib/")))
+ (mkdir-p header)
+ (copy-recursively "buildrump.sh/src/sys/rump/include/rump"
+ header)
+ (mkdir-p lib)
+ (for-each
+ (cute install-file <> lib)
+ (append (find-files "buildrump.sh/src" "librump.*[.](a|so.*)")
+ (find-files "obj" "librump.*[.](a|so.*)")))))))))
+ (inputs
+ (list gnumach-headers libpciaccess-0.17))
+ (native-inputs
+ (list
+ autoconf
+ automake
+ libgcrypt
+ (if (%current-target-system)
+ (let* ((cross-base (resolve-interface '(gnu packages cross-base)))
+ (cross-mig (module-ref cross-base 'cross-mig)))
+ (cross-mig (%current-target-system)))
+ mig)
+ zlib))
+ (supported-systems %hurd-systems)
+ (home-page "https://wiki.netbsd.org/rumpkernel")
+ (synopsis "NetBSD as rumpkernel for the GNU/Hurd")
+ (description
+ "This package provides NetBSD as rumpkernel for the GNU/Hurd, so that
+the Hurd may be installed on iron. Using this rumpkernel package, the hurd
+package's rumpdisk can be built which provides the pci.arbiter and rumpdisk
+servers.")
+ (license (list
+ asl2.0
+ boost1.0
+ bsd-2
+ bsd-3
+ bsd-4
+ cddl1.0
+ expat
+ gpl1
+ gpl2+
+ gpl3+
+ isc
+ lgpl2.0+
+ public-domain
+ (@ (guix licenses) zlib)
+ (non-copyleft "file://src/lib/libc/hash/hashhl.c"
+ "See debian/copyright in the distribution."))))))
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 11:39
[PATCH v4 8/8] system: hurd: Boot with pci.arbiter and rumpdisk.
(address . 63527@debbugs.gnu.org)
91b78533b3abd24c04f3f09463bc061f56cf4805.1684402361.git.janneke@gnu.org
Be sure to give the Hurd enough (virtual) memory

* gnu/system.scm (hurd-multiboot-modules): Add commands for pci.arbiter and
rumpdisk.
---
gnu/system.scm | 25 ++++++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)

Toggle diff (59 lines)
diff --git a/gnu/system.scm b/gnu/system.scm
index 354f58f55b..23addf41e9 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -10,7 +10,7 @@
;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <jannek@gnu.org>
+;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <jannek@gnu.org>
;;; Copyright © 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
@@ -1486,16 +1486,28 @@ (define (operating-system-multiboot-modules os)
(define (hurd-multiboot-modules os)
(let* ((hurd (operating-system-hurd os))
+ (pci-arbiter-command
+ (list (file-append hurd "/hurd/pci-arbiter.static")
+ "pci-arbiter"
+ "--host-priv-port='${host-port}'"
+ "--device-master-port='${device-port}'"
+ "--next-task='${disk-task}'"
+ "'$(pci-task=task-create)'"
+ "'$(task-resume)'"))
+ (rumpdisk-command
+ (list (file-append hurd "/hurd/rumpdisk.static")
+ "rumpdisk"
+ "--next-task='${fs-task}'"
+ "'$(disk-task=task-create)'"))
(root-file-system-command
(list (file-append hurd "/hurd/ext2fs.static")
"ext2fs"
"--multiboot-command-line='${kernel-command-line}'"
- "--host-priv-port='${host-port}'"
- "--device-master-port='${device-port}'"
"--exec-server-task='${exec-task}'"
"--store-type=typed"
"--x-xattr-translator-records"
- "'${root}'" "'$(task-create)'" "'$(task-resume)'"))
+ "'${root}'"
+ "'$(fs-task=task-create)'"))
(target (%current-target-system))
(libc (if target
(with-parameters ((%current-target-system #f))
@@ -1512,7 +1524,10 @@ (define (hurd-multiboot-modules os)
;; (file-append hurd "/hurd/exec") "'$(exec-task=task-create)'")
(list (file-append hurd "/hurd/exec.static") "exec"
"'$(exec-task=task-create)'")))
- (list root-file-system-command exec-server-command)))
+ (list pci-arbiter-command
+ rumpdisk-command
+ root-file-system-command
+ exec-server-command)))
(define* (operating-system-boot-parameters os root-device
#:key system-kernel-arguments?)
--
2.39.2
J
J
Janneke Nieuwenhuizen wrote on 18 May 2023 11:39
[PATCH v4 7/8] services: childhurd: Bump default qemu memory to 2048MB.
(address . 63527@debbugs.gnu.org)
11e63f303ba42376ebc029c67f13b59bdb0af263.1684402361.git.janneke@gnu.org
When booting with pci-arbiter and rumpdisk and using 1024MB of memory for
qemu, booting hangs, or seems to hang, at the end of the rumpdisk boot
messages. At least 1200MB is required, currently.

* gnu/services/virtualization.scm (<hurd-vm-configuration>)[memory-size]: Bump
to 2048.
* gnu/system/examples/bare-hurd.tmpl: Suggest using 2048 here too. Update
example `guix system image' and "qemu" command lines too.
---
gnu/services/virtualization.scm | 4 ++--
gnu/system/examples/bare-hurd.tmpl | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)

Toggle diff (43 lines)
diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm
index 2e311e3813..886b73f8c7 100644
--- a/gnu/services/virtualization.scm
+++ b/gnu/services/virtualization.scm
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Ryan Moe <ryan.moe@gmail.com>
;;; Copyright © 2018, 2020-2022 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2020,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2021 Timotej Lazar <timotej.lazar@araneo.si>
;;; Copyright © 2022 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2022 Leo Nikkilä <hello@lnikki.la>
@@ -1100,7 +1100,7 @@ (define-record-type* <hurd-vm-configuration>
(disk-size hurd-vm-configuration-disk-size ;number or 'guess
(default 'guess))
(memory-size hurd-vm-configuration-memory-size ;number
- (default 512))
+ (default 2048))
(options hurd-vm-configuration-options ;list of string
(default `("--snapshot")))
(id hurd-vm-configuration-id ;#f or integer [1..]
diff --git a/gnu/system/examples/bare-hurd.tmpl b/gnu/system/examples/bare-hurd.tmpl
index f0dd0cf742..463c7ee798 100644
--- a/gnu/system/examples/bare-hurd.tmpl
+++ b/gnu/system/examples/bare-hurd.tmpl
@@ -5,12 +5,12 @@
;; To build a disk image for a virtual machine, do
;;
-;; ./pre-inst-env guix system image --target=i586-pc-gnu \
+;; ./pre-inst-env guix system image --image-type=hurd-raw \
;; gnu/system/examples/bare-hurd.tmpl
;;
;; You may run it like so
;;
-;; guix environment --ad-hoc qemu -- qemu-system-i386 -enable-kvm -m 512M \
+;; guix shell qemu -- qemu-system-i386 -enable-kvm -m 2048 \
;; -device rtl8139,netdev=net0 -netdev user,id=net0,hostfwd=tcp:127.0.0.1:10022-:2222 \
;; -snapshot -hda <the-image>
;;
--
2.39.2
L
L
Ludovic Courtès wrote on 18 May 2023 19:10
Re: bug#63527: [PATCH 0/3] Initial attempt at rumpdisk support for the Hurd.
(name . Janneke Nieuwenhuizen)(address . janneke@gnu.org)(address . 63527@debbugs.gnu.org)
87353t4lb6.fsf_-_@gnu.org
Hello!

Awesome patch series!!

Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

Toggle quote (26 lines)
> +++ b/gnu/packages/cross-base.scm
> @@ -1,7 +1,7 @@
> ;;; GNU Guix --- Functional package management for GNU
> ;;; Copyright © 2013-2018, 2020, 2023 Ludovic Courtès <ludo@gnu.org>
> ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
> -;;; Copyright © 2016, 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
> +;;; Copyright © 2016, 2019, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
> ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
> ;;; Copyright © 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
> @@ -624,7 +624,22 @@ (define* (cross-libc* target
> (("/[^ ]+/lib/libc.so.0.3")
> (string-append out "/lib/libc.so.0.3"
> " libmachuser.so libhurduser.so"))))
> - #t)))
> + #t))
> + ;; TODO: move to glibc in the next rebuild cycle
> + (add-after 'unpack 'patch-libc/hurd
> + (lambda* (#:key inputs #:allow-other-keys)
> + (for-each
> + (lambda (name)
> + (let ((patch (assoc-ref inputs name)))
> + (invoke "patch" "-p1" "--force" "-R" "-i" patch)))
> + '("hurd-monotonic.patch"
> + "hurd-centiseconds.patch"))

Since this should also be applied when building glibc natively on
i586-gnu, should this phase go to ‘glibc’ in (gnu packages base)
instead?

Also, in general, we should move away from quasiquote/unquote to
gexp/ungexp, which will allow us to not add inputs for patches (as is
done with ‘gcc-11’ in (gnu packages gcc)).

Toggle quote (14 lines)
> + ;; TODO: move to glibc in the next rebuild cycle
> + ("hurd-monotonic.patch"
> + ,@(search-patches
> + "glibc-hurd-clock_gettime_monotonic.patch"))
> + ("hurd-centiseconds.patch"
> + ,@(search-patches
> + "glibc-hurd-clock_t_centiseconds.patch"))
> + ("2.35-hurd-monotonic.patch"
> + ,@(search-patches
> + "glibc-2.35-hurd-clock_gettime_monotonic.patch"))
> + ("2.35-hurd-centiseconds.patch"
> + ,@(search-patches
> + "glibc-2.35-hurd-clock_t_centiseconds.patch")))

Let’s hope these patches will soon make it upstream!

Ludo’.
L
L
Ludovic Courtès wrote on 18 May 2023 19:17
(name . Janneke Nieuwenhuizen)(address . janneke@gnu.org)(address . 63527@debbugs.gnu.org)
87wn1536g8.fsf_-_@gnu.org
Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

Toggle quote (4 lines)
> This uses the Debian Salsa rumpkernel package git as upstream as that is where
> delopment happens. Once things have stabalized upstream may change to the
> NetBSD git from where Debian takes their snapshots.

Could you make it a comment close to the ‘origin’ form?

Toggle quote (2 lines)
> * gnu/packages/hurd.scm (rumpkernel): New variable.

[…]

Toggle quote (2 lines)
> + #~(modify-phases %standard-phases

You can tell from the phases that it took of lot of sweat to get there.
:-)

Could you add a few comments while it’s fresh on your mind to explain
the various tweaks? The ‘build’ phase is particularly intimidating.

Toggle quote (11 lines)
> + (native-inputs
> + (list
> + autoconf
> + automake
> + libgcrypt
> + (if (%current-target-system)
> + (let* ((cross-base (resolve-interface '(gnu packages cross-base)))
> + (cross-mig (module-ref cross-base 'cross-mig)))
> + (cross-mig (%current-target-system)))
> + mig)

I think you could #:use-module (gnu packages cross-base) and refer to
‘cross-mig’ directly.

Also, watch out the indentation. ;-)

(native-inputs
(list autoconf
automake
…))

Toggle quote (4 lines)
> + (license (list
> + asl2.0
> + boost1.0

Could you add a comment above briefly stating what this list means? (I
suppose each license applies to a specific part of the source?)

Anyhow, well done!

Ludo’.
L
L
Ludovic Courtès wrote on 18 May 2023 19:18
(name . Janneke Nieuwenhuizen)(address . janneke@gnu.org)(address . 63527@debbugs.gnu.org)
87sfbt36dd.fsf_-_@gnu.org
Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

Toggle quote (29 lines)
> (define (hurd-multiboot-modules os)
> (let* ((hurd (operating-system-hurd os))
> + (pci-arbiter-command
> + (list (file-append hurd "/hurd/pci-arbiter.static")
> + "pci-arbiter"
> + "--host-priv-port='${host-port}'"
> + "--device-master-port='${device-port}'"
> + "--next-task='${disk-task}'"
> + "'$(pci-task=task-create)'"
> + "'$(task-resume)'"))
> + (rumpdisk-command
> + (list (file-append hurd "/hurd/rumpdisk.static")
> + "rumpdisk"
> + "--next-task='${fs-task}'"
> + "'$(disk-task=task-create)'"))
> (root-file-system-command
> (list (file-append hurd "/hurd/ext2fs.static")
> "ext2fs"
> "--multiboot-command-line='${kernel-command-line}'"
> - "--host-priv-port='${host-port}'"
> - "--device-master-port='${device-port}'"
> "--exec-server-task='${exec-task}'"
> "--store-type=typed"
> "--x-xattr-translator-records"
> - "'${root}'" "'$(task-create)'" "'$(task-resume)'"))
> + "'${root}'"
> + "'$(fs-task=task-create)'"))
> (target (%current-target-system))

Wo0t, impressive!
L
L
Ludovic Courtès wrote on 18 May 2023 19:20
(name . Janneke Nieuwenhuizen)(address . janneke@gnu.org)(address . 63527@debbugs.gnu.org)
87o7mh36b5.fsf_-_@gnu.org
Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

Toggle quote (9 lines)
> When booting with pci-arbiter and rumpdisk and using 1024MB of memory for
> qemu, booting hangs, or seems to hang, at the end of the rumpdisk boot
> messages. At least 1200MB is required, currently.
>
> * gnu/services/virtualization.scm (<hurd-vm-configuration>)[memory-size]: Bump
> to 2048.
> * gnu/system/examples/bare-hurd.tmpl: Suggest using 2048 here too. Update
> example `guix system image' and "qemu" command lines too.

Sounds a bit fishy. :-)

Does Debian resort to a similar workaround?

Ludo’.
J
J
Janneke Nieuwenhuizen wrote on 19 May 2023 10:21
(name . Ludovic Courtès)(address . ludo@gnu.org)
87ttw8g29b.fsf@gnu.org
Ludovic Courtès writes:

Hi!

Toggle quote (2 lines)
> Awesome patch series!!

Thanks!

Toggle quote (3 lines)
> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> +++ b/gnu/packages/cross-base.scm
[..]
Toggle quote (14 lines)
>> + ;; TODO: move to glibc in the next rebuild cycle
>> + (add-after 'unpack 'patch-libc/hurd
>> + (lambda* (#:key inputs #:allow-other-keys)
>> + (for-each
>> + (lambda (name)
>> + (let ((patch (assoc-ref inputs name)))
>> + (invoke "patch" "-p1" "--force" "-R" "-i" patch)))
>> + '("hurd-monotonic.patch"
>> + "hurd-centiseconds.patch"))
>
> Since this should also be applied when building glibc natively on
> i586-gnu, should this phase go to ‘glibc’ in (gnu packages base)
> instead?

Yes, but I don't know how to do that without triggering a world
rebuild, or (re)creating a glibc/hurd, and currently the native build is
broken on the hurd. It tried, in glibc

#:phases (modify-phases %standard-phases
,@(if (and (hurd-target?)
(equal? (package-version this-package) "2.35"))
;; TODO: move to glibc in the next rebuild cycle
'((add-after 'unpack 'patch-libc/hurd
(lambda* (#:key inputs #:allow-other-keys)
(define* (apply-patch patch #:key reverse?)
(let ((patch (assoc-ref inputs name)))
(invoke "patch" "-p1" "--force"
(if reverse? "-R" "-N")
"-i" patch)))
(for-each (cut apply-patch <> #:reverse #t)
'("hurd-monotonic.patch"
"hurd-centiseconds.patch"))
(for-each apply-patch
'("2.35-hurd-centiseconds.patch"
"2.35-hurd-monotonic.patch")))))
'())

but that isn't being picked-up for cross-libc. I heard talk about
glibc/hurd, should we maybe keep this patch until we create glibc/hurd,
or make glibc/hurd sooner?

Toggle quote (4 lines)
> Also, in general, we should move away from quasiquote/unquote to
> gexp/ungexp, which will allow us to not add inputs for patches (as is
> done with ‘gcc-11’ in (gnu packages gcc)).

Ah, right; nice! Would that work for cross-libc without triggering a
world rebuild?

Toggle quote (4 lines)
>> + ;; TODO: move to glibc in the next rebuild cycle
>> + ("hurd-monotonic.patch"
>> + ,@(search-patches
>> + "glibc-hurd-clock_gettime_monotonic.patch"))
[..]

Toggle quote (2 lines)
> Let’s hope these patches will soon make it upstream!

Yeah!

Greetings
Janneke

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
J
J
Janneke Nieuwenhuizen wrote on 19 May 2023 11:21
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 63527@debbugs.gnu.org)
87fs7sfzia.fsf@gnu.org
Ludovic Courtès writes:

Toggle quote (8 lines)
> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> This uses the Debian Salsa rumpkernel package git as upstream as that is where
>> delopment happens. Once things have stabalized upstream may change to the
>> NetBSD git from where Debian takes their snapshots.
>
> Could you make it a comment close to the ‘origin’ form?

That makes sense, so it doesn't get lost, done.

Toggle quote (12 lines)
>> * gnu/packages/hurd.scm (rumpkernel): New variable.
>
> […]
>
>> + #~(modify-phases %standard-phases
>
> You can tell from the phases that it took of lot of sweat to get there.
> :-)
>
> Could you add a few comments while it’s fresh on your mind to explain
> the various tweaks? The ‘build’ phase is particularly intimidating.

I have added a general comment

;; As we are using the Debian package as upstream, we follow their
;; build:
;; * apply patches in debian/patches taken from the
;; debian/patches/series file
;; * for the configure, make, and install stages, follow
;; the code in debian/rules
;; The Debian patchset includes a cross build feature that we
;; use with two differences
;; * Debian uses a multiarch toolchain
;; * we use cross-mig
#:phases
#~(modify-phases %standard-phases

a comment before 'build

;; The build has three toplevel entry points
;; * buildrump.sh/src/build.sh: create a NetBSD-compatible
;; toolchain and supports cross-compiling
;; * buildrump.sh/src/lib/librumpuser: the librump* libraries
;; * pci-userspace/src-gnu: the librumpdev_pci* libraries
(replace 'build

and a comment in install

;; Some libraries are duplicated/copied around in the
;; build system, do not fail trying to install one
;; a second time.
(if (file-exists? dest)
(format (current-error-port)
"warning: skipping: ~a\n" file)

Toggle quote (14 lines)
>> + (native-inputs
>> + (list
>> + autoconf
>> + automake
>> + libgcrypt
>> + (if (%current-target-system)
>> + (let* ((cross-base (resolve-interface '(gnu packages cross-base)))
>> + (cross-mig (module-ref cross-base 'cross-mig)))
>> + (cross-mig (%current-target-system)))
>> + mig)
>
> I think you could #:use-module (gnu packages cross-base) and refer to
> ‘cross-mig’ directly.

Right. Weird, other packages do it like this and I copied without
thinking. Possibly there was a circular dependency before?

Toggle quote (7 lines)
> Also, watch out the indentation. ;-)
>
> (native-inputs
> (list autoconf
> automake
> …))

Ah, changed. I need to remember this, I'm a sucker for M-x sort-lines.

Toggle quote (7 lines)
>> + (license (list
>> + asl2.0
>> + boost1.0

> Could you add a comment above briefly stating what this list means? (I
> suppose each license applies to a specific part of the source?)

Changed to

(license
;; The NetBSD rumpkernel code is a big hodgepodge of softwares many of
;; which have their own different licensing terms, see also
(list asl2.0
boost1.0
...

Toggle quote (2 lines)
> Anyhow, well done!

Yay!

(A v5 patch series with this to follow once we have figured out the
glibc/hurd patching problem.)

Greetings,

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
J
J
Janneke Nieuwenhuizen wrote on 19 May 2023 11:30
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 63527@debbugs.gnu.org)
87a5y0fz2n.fsf@gnu.org
Ludovic Courtès writes:

Toggle quote (15 lines)
> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> When booting with pci-arbiter and rumpdisk and using 1024MB of memory for
>> qemu, booting hangs, or seems to hang, at the end of the rumpdisk boot
>> messages. At least 1200MB is required, currently.
>>
>> * gnu/services/virtualization.scm (<hurd-vm-configuration>)[memory-size]: Bump
>> to 2048.
>> * gnu/system/examples/bare-hurd.tmpl: Suggest using 2048 here too. Update
>> example `guix system image' and "qemu" command lines too.
>
> Sounds a bit fishy. :-)
>
> Does Debian resort to a similar workaround?

Yes, Debian has the same problem, the latest debian image
hangs in an identical way.


youpi seid "rumpdisk is very eaty, we need to fix that"

Greetings,
Janneke

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 17:47
[PATCH v5 01/11] gnu: Add libpciaccess-0.17.
(address . 63527@debbugs.gnu.org)
c188b8642822b09c5729f627b11d0b17affed7ec.1684855847.git.janneke@gnu.org
* gnu/packages/xorg.scm (libpciaccess-0.17): New variable.
---
gnu/packages/xorg.scm | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

Toggle diff (37 lines)
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index f3d30c0ff1..93a2cca15d 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -34,6 +34,7 @@
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 qblade <qblade@protonmail.com>
;;; Copyright © 2021 Lu Hui <luhux76@gmail.com>
+;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -1145,6 +1146,22 @@ (define-public libpciaccess
(description "Xorg Generic PCI access library.")
(license license:x11)))
+(define-public libpciaccess-0.17
+ (package
+ (inherit libpciaccess)
+ (name "libpciaccess")
+ (version "0.17")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://xorg/individual/lib/libpciaccess-"
+ version
+ ".tar.xz"))
+ (sha256
+ (base32
+ "0wsvv5d05maqbidvnavka7n0fnql55m4jix5wwlk14blr6ikna3l"))))))
+
(define-public libpthread-stubs
(package
(name "libpthread-stubs")
--
2.40.1
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 17:47
[PATCH v5 02/11] gnu: hurd: Update libpciaccess to 0.17.
(address . 63527@debbugs.gnu.org)
c40c3fcbe5b59de0a64dbbd781e7b4458146f334.1684855847.git.janneke@gnu.org
As suggested by youpi on IRC


libpciaccess-0.16 is too old for the Hurd and would need Hurd-specific patches
while libpciaccess-0.17 works out of the box.

* gnu/packages/hurd.scm (hurd)[inputs]: Use libpciaccess-0.17.
(netdde)[inputs]: Likewise.
---
gnu/packages/hurd.scm | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

Toggle diff (42 lines)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index a0133482b7..d8b4dcaf4f 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -3,7 +3,7 @@
;;; Copyright © 2018, 2020-2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2020, 2022 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2022, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2020 Rene Saavedra <pacoon@protonmail.com>
;;;
@@ -45,7 +45,7 @@ (define-module (gnu packages hurd)
#:use-module (gnu packages bash)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages onc-rpc)
- #:use-module (gnu packages xorg) ; libpciaccess
+ #:use-module (gnu packages xorg) ;libpciaccess-0.17
#:use-module (guix git-download)
#:export (hurd-system?
hurd-target?))
@@ -536,7 +536,7 @@ (define-public hurd
`(("libgcrypt" ,libgcrypt) ;for /hurd/random
("libdaemon" ,libdaemon) ;for /bin/console --daemonize
("unifont" ,unifont)
- ("libpciaccess" ,libpciaccess)
+ ("libpciaccess" ,libpciaccess-0.17)
;; For NFS support
("libtirpc" ,libtirpc/hurd)
@@ -634,7 +634,7 @@ (define-public netdde
"/bin"))
#t)))))
(inputs
- (list hurd libpciaccess zlib))
+ (list hurd libpciaccess-0.17 zlib))
(native-inputs
`(("coreutils" ,coreutils)
("gawk" ,gawk)
--
2.40.1
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 17:47
[PATCH v5 03/11] gnu: Add rumpkernel.
(address . 63527@debbugs.gnu.org)
4c2e940870b39b16d69a7855a5724e37e78bfbdd.1684855847.git.janneke@gnu.org
This uses the Debian Salsa rumpkernel package git as upstream as that is where
delopment happens. Once things have stabalized upstream may change to the
NetBSD git from where Debian takes their snapshots.

* gnu/packages/hurd.scm (rumpkernel): New variable.
(hurd-headers)[native-inputs]: Use cross-mig directly.
(gnumach)[native-inputs]: Likewise.
(hurd)[native-inputs]: Likewise.
---
gnu/packages/hurd.scm | 246 +++++++++++++++++++++++++++++++++++++++---
1 file changed, 234 insertions(+), 12 deletions(-)

Toggle diff (284 lines)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index d8b4dcaf4f..ff925eed75 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -33,6 +33,7 @@ (define-module (gnu packages hurd)
#:use-module (guix build-system trivial)
#:use-module (gnu packages autotools)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages cross-base)
#:use-module (gnu packages flex)
#:use-module (gnu packages gawk)
#:use-module (gnu packages gnupg)
@@ -162,9 +163,7 @@ (define-public hurd-headers
(list autoconf
automake
(if (%current-target-system)
- (let* ((cross-base (resolve-interface '(gnu packages cross-base)))
- (cross-mig (module-ref cross-base 'cross-mig)))
- (cross-mig (%current-target-system)))
+ (cross-mig (%current-target-system))
mig)))
(arguments
`(#:phases
@@ -296,10 +295,8 @@ (define-public gnumach
(list autoconf
automake
(if (%current-target-system)
- (let* ((cross-base (resolve-interface '(gnu packages cross-base)))
- (cross-mig (module-ref cross-base 'cross-mig)))
- (cross-mig (%current-target-system)))
- mig)
+ (cross-mig (%current-target-system))
+ mig)
perl
texinfo-4))
(supported-systems %hurd-systems)
@@ -551,11 +548,9 @@ (define-public hurd
`(("autoconf" ,autoconf)
("automake" ,automake)
("libgcrypt" ,libgcrypt) ;for 'libgcrypt-config'
- ("mig" ,(if (%current-target-system)
- (let* ((cross-base (resolve-interface '(gnu packages cross-base)))
- (cross-mig (module-ref cross-base 'cross-mig)))
- (cross-mig (%current-target-system)))
- mig))
+ ("mig" , (if (%current-target-system)
+ (cross-mig (%current-target-system))
+ mig))
("pkg-config" ,pkg-config)
("perl" ,perl)
("texinfo" ,texinfo-4)
@@ -651,3 +646,230 @@ (define-public netdde
;; Some drivers are dually licensed with the options being GPLv2 or one
;; of MPL/Expat/BSD-3 (dependent on the driver).
(license gpl2))))
+
+(define-public rumpkernel
+ (let ((commit "ec2ab9612be4dc48a316a21a0c96d3388478a064")
+ (revision "2"))
+ (package
+ (name "rumpkernel")
+ (version (git-version "0-20211031" revision commit))
+ ;; This uses the Debian Salsa rumpkernel package git as upstream as that
+ ;; is where delopment happens. Once things have stabalized, upstream
+ ;; may change to the NetBSD git from where Debian takes their snapshots.
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://salsa.debian.org/hurd-team/rumpkernel.git")
+ (commit commit)))
+ (sha256
+ (base32
+ "1ypjg3jyzhh3gnanmk6fh76dwl5ml78n311nbi0hw7f7hygzn7vk"))
+ (file-name (git-file-name name commit))))
+ (build-system gnu-build-system)
+ (arguments
+ (list
+ #:tests? #f
+ #:modules '((srfi srfi-26)
+ (ice-9 match)
+ (ice-9 rdelim)
+ (guix build utils)
+ (guix build gnu-build-system))
+ ;; As we are using the Debian package as upstream, we follow their
+ ;; build:
+ ;; * apply patches in debian/patches taken from the
+ ;; debian/patches/series file
+ ;; * for the configure, make, and install stages, follow
+ ;; the code in debian/rules
+ ;; The Debian patchset includes a cross build feature that we
+ ;; use with two differences
+ ;; * Debian uses a multiarch toolchain
+ ;; * we use cross-mig
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'apply-patches
+ (lambda* (#:key target #:allow-other-keys)
+ (let* ((patch-directory "debian/patches/")
+ (series (string-append patch-directory "series"))
+ (text (with-input-from-file series read-string))
+ (lines (string-split (string-trim-right text) #\newline))
+ (patches (filter (negate (cute string-prefix? "#" <>))
+ lines))
+ (patch-files (map
+ (cute string-append patch-directory <>)
+ patches)))
+ (for-each
+ (cute invoke "patch" "--force" "-p1" "-i" <>)
+ patch-files)
+ ;; Somewhere in the build.sh/make process MIG is not being
+ ;; exported, apparently.
+ (when target
+ (substitute* "pci-userspace/src-gnu/Makefile.inc"
+ (("MIG=mig")
+ (string-append "MIG=" target "-mig")))))))
+ (add-before 'configure 'setenv
+ (lambda* (#:key build target #:allow-other-keys)
+ (define (noisy-setenv name value)
+ (setenv name value)
+ (format (current-error-port) "set ~a=~s\n" name value))
+ (noisy-setenv "HOST_CC" "gcc")
+ (when target
+ (noisy-setenv "MIG" (string-append target "-mig")))
+ (let ((target (or target build)))
+ (noisy-setenv "TARGET_AR" (string-append target "-ar"))
+ (noisy-setenv "TARGET_CC" (string-append target "-gcc"))
+ (noisy-setenv "TARGET_CXX" (string-append target "-g++"))
+ (noisy-setenv "TARGET_LD" (string-append target "-ld"))
+ (noisy-setenv "TARGET_MIG" (string-append target "-mig"))
+ (noisy-setenv "TARGET_NM" (string-append target "-nm")))
+ (setenv "PAWD" "pwd")
+ (for-each
+ (cute noisy-setenv <> "")
+ '("_GCC_CRTENDS"
+ "_GCC_CRTEND"
+ "_GCC_CRTBEGINS"
+ "_GCC_CRTBEGIN"
+ "_GCC_CRTI"
+ "_GCC_CRTN"))
+ (noisy-setenv "BSDOBJDIR=" (string-append (getcwd) "/obj"))))
+ (replace 'configure
+ (lambda args
+ (let ((configure (assoc-ref %standard-phases 'configure)))
+ (with-directory-excursion "buildrump.sh/src/lib/librumpuser"
+ (apply configure args)))))
+ ;; The build has three toplevel entry points
+ ;; * buildrump.sh/src/build.sh: create a NetBSD-compatible
+ ;; toolchain and supports cross-compiling
+ ;; * buildrump.sh/src/lib/librumpuser: the librump* libraries
+ ;; * pci-userspace/src-gnu: the librumpdev_pci* libraries
+ (replace 'build
+ (lambda* (#:key parallel-build? #:allow-other-keys)
+ (let* ((jobs (if parallel-build? (parallel-job-count) 1))
+ (host-cpu (match #$(or (%current-target-system
+ (%current-system)))
+ ("i586-pc-gnu" "i386")
+ ("i686-linux" "i386")
+ ("x86_64-linux" "amd64")))
+ (toprump (string-append
+ (getcwd)
+ "/buildrump.sh/src/sys/rump"))
+ (rump-make (string-append
+ (getcwd)
+ "/buildrump.sh/src/obj/tooldir/bin/nbmake-"
+ host-cpu)))
+ (mkdir "obj")
+ (with-directory-excursion "buildrump.sh/src"
+ (invoke
+ "sh" "build.sh"
+ "-V" "TOOLS_BUILDRUMP=yes"
+ "-V" "MKBINUTILS=no"
+ "-V" "MKGDB=no"
+ "-V" "MKGROFF=no"
+ "-V" (string-append "TOPRUMP=" toprump)
+ "-V" "BUILDRUMP_CPPFLAGS=-Wno-error=stringop-overread"
+ "-V" "RUMPUSER_EXTERNAL_DPLIBS=pthread"
+ "-V" (string-append
+ "CPPFLAGS="
+ " -I../../obj/destdir." host-cpu "/usr/include"
+ " -D_FILE_OFFSET_BITS=64"
+ " -DRUMP_REGISTER_T=int"
+ " -DRUMPUSER_CONFIG=yes"
+ " -DNO_PCI_MSI_MSIX=yes"
+ " -DNUSB_DMA=1")
+ "-V" (string-append
+ "CWARNFLAGS="
+ " -Wno-error=maybe-uninitialized"
+ " -Wno-error=address-of-packed-member"
+ " -Wno-error=unused-variable"
+ " -Wno-error=stack-protector"
+ " -Wno-error=array-parameter"
+ " -Wno-error=array-bounds"
+ " -Wno-error=stringop-overflow")
+ "-V" "LIBCRTBEGIN="
+ "-V" "LIBCRTEND="
+ "-V" "LIBCRT0="
+ "-V" "LIBCRTI="
+ "-V" "_GCC_CRTENDS="
+ "-V" "_GCC_CRTEND="
+ "-V" "_GCC_CRTBEGINS="
+ "-V" "_GCC_CRTBEGIN="
+ "-V" "_GCC_CRTI="
+ "-V" "_GCC_CRTN="
+ "-U"
+ "-u"
+ "-T" "./obj/tooldir"
+ "-m" host-cpu
+ "-j" (number->string jobs)
+ "tools"
+ "rump"))
+ (with-directory-excursion "buildrump.sh/src/lib/librumpuser"
+ (setenv "RUMPRUN" "true")
+ (invoke rump-make "dependall"))
+ (with-directory-excursion "pci-userspace/src-gnu"
+ (invoke rump-make "dependall")))))
+ (replace 'install
+ (lambda _
+ (define (install-file file target)
+ (let ((dest (string-append target (basename file))))
+ (format (current-output-port) "`~a' -> `~a'~%" file dest)
+ (mkdir-p (dirname dest))
+ ;; Some libraries are duplicated/copied around in the
+ ;; build system, do not fail trying to install one
+ ;; a second time.
+ (if (file-exists? dest)
+ (format (current-error-port)
+ "warning: skipping: ~a\n" file)
+ (let ((stat (lstat file)))
+ (case (stat:type stat)
+ ((symlink)
+ (let ((target (readlink file)))
+ (symlink target dest)))
+ (else
+ (copy-file file dest)))))))
+ (let ((header (string-append #$output "/include/rump"))
+ (lib (string-append #$output "/lib/")))
+ (mkdir-p header)
+ (copy-recursively "buildrump.sh/src/sys/rump/include/rump"
+ header)
+ (mkdir-p lib)
+ (for-each
+ (cute install-file <> lib)
+ (append (find-files "buildrump.sh/src" "librump.*[.](a|so.*)")
+ (find-files "obj" "librump.*[.](a|so.*)")))))))))
+ (inputs
+ (list gnumach-headers libpciaccess-0.17))
+ (native-inputs
+ (list autoconf
+ automake
+ libgcrypt
+ (if (%current-target-system)
+ (cross-mig (%current-target-system))
+ mig)
+ zlib))
+ (supported-systems %hurd-systems)
+ (home-page "https://wiki.netbsd.org/rumpkernel")
+ (synopsis "NetBSD as rumpkernel for the GNU/Hurd")
+ (description
+ "This package provides NetBSD as rumpkernel for the GNU/Hurd, so that
+the Hurd may be installed on iron. Using this rumpkernel package, the hurd
+package's rumpdisk can be built which provides the pci.arbiter and rumpdisk
+servers.")
+ (license
+ ;; The NetBSD rumpkernel code is a big hodgepodge of softwares many of
+ ;; which have their own different licensing terms, see also
+ ;; https://salsa.debian.org/hurd-team/rumpkernel/-/blob/master/debian/copyright
+ (list asl2.0
+ boost1.0
+ bsd-2
+ bsd-3
+ bsd-4
+ cddl1.0
+ expat
+ gpl1
+ gpl2+
+ gpl3+
+ isc
+ lgpl2.0+
+ public-domain
+ (@ (guix licenses) zlib)
+ (non-copyleft "file://src/lib/libc/hash/hashhl.c"
+ "See debian/copyright in the distribution."))))))
--
2.40.1
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 17:47
[PATCH v5 04/11] gnu: Add hurd-shouldbeinlibc.
(address . 63527@debbugs.gnu.org)
4708bb318a328b1aafd3f748fb1766844759aabd.1684855847.git.janneke@gnu.org
* gnu/packages/hurd.scm (hurd-shouldbeinlibc): New variable.
---
gnu/packages/hurd.scm | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)

Toggle diff (37 lines)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index ff925eed75..9fbca9d5c5 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -240,6 +240,30 @@ (define-public hurd-minimal
Library for GNU/Hurd.")
(license gpl2+)))
+(define-public hurd-shouldbeinlibc
+ (package
+ (inherit hurd-headers)
+ (name "hurd-shouldbeinlibc")
+ (inputs (list glibc/hurd-headers gnumach-headers))
+ (arguments
+ (substitute-keyword-arguments (package-arguments hurd-headers)
+ ((#:make-flags flags '())
+ #~'("lib-subdirs=libshouldbeinlibc libstore"
+ "prog-subdirs="
+ "other-subdirs="
+ #$@flags))
+ ((#:phases _)
+ #~%standard-phases)
+ ((#:validate-runpath? validate-runpath? #f)
+ #f)))
+ (supported-systems %hurd-systems)
+ (home-page "https://www.gnu.org/software/hurd/hurd.html")
+ (synopsis "GNU Hurd libshouldbeinlibc library")
+ (description
+ "This package provides libshouldbeinlibc and libstore, needed to build
+parted for GNU/Hurd.")
+ (license gpl2+)))
+
(define-public hurd-core-headers
(package
(name "hurd-core-headers")
--
2.40.1
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 17:47
[PATCH v5 05/11] gnu: parted: Support building for the Hurd.
(address . 63527@debbugs.gnu.org)
71a14f2a5b28b90b2a996b1afab6e39c101dfa1d.1684855847.git.janneke@gnu.org
* gnu/packages/disk.scm (parted)[inputs]: Remove lvm2, add hurd-shouldbeinlibc
when building for the Hurd.
[arguments]: Add configure-flag '--disable-device-mapper' when building for
the Hurd.
---
gnu/packages/disk.scm | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)

Toggle diff (53 lines)
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index 894a542171..760e9cd8f6 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -4,7 +4,7 @@
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2016, 2018–2022 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2016, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com>
@@ -67,6 +67,7 @@ (define-module (gnu packages disk)
#:use-module (gnu packages graphics)
#:use-module (gnu packages gtk)
#:use-module (gnu packages guile)
+ #:use-module (gnu packages hurd)
#:use-module (gnu packages image)
#:use-module (gnu packages linux)
#:use-module (gnu packages ncurses)
@@ -249,17 +250,25 @@ (define-public parted
"18h51i3x5cbqhlj5rm23m9sfw63gaaby5czln5w6qpqj3ifdsf29"))))
(build-system gnu-build-system)
(arguments
- (list #:phases
+ (append
+ (if (hurd-target?)
+ '(#:configure-flags '("--disable-device-mapper"))
+ '())
+ (list
+ #:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'fix-locales-and-python
(lambda _
(substitute* "tests/t0251-gpt-unicode.sh"
(("C.UTF-8") "en_US.utf8")) ;not in Glibc locales
(substitute* "tests/msdos-overlap"
- (("/usr/bin/python") (which "python"))))))))
+ (("/usr/bin/python") (which "python")))))))))
(inputs
- (list lvm2 readline
- `(,util-linux "lib")))
+ `(,@(if (hurd-target?)
+ (list hurd-shouldbeinlibc)
+ (list lvm2))
+ ,readline
+ (,util-linux "lib")))
(native-inputs
(list gettext-minimal
--
2.40.1
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 17:47
[PATCH v5 00/11] Rumpdisk support for the Hurd, really, *really*!
(address . 63527@debbugs.gnu.org)
cover.1684855847.git.janneke@gnu.org
Hi!

So, with lots of kind help from the folks at #hurd and bug-hurd, and many
thanks to Josselin Poiret for sending their amazing "Add libc specific to Hurd
and update components" patch set (https://issues.guix.gnu.org/63641,note that
these series depend on this!) we now have rumpdisk support for the Hurd.

To actually use it instead of the gnumach builtin IDE driver, use

(kernel-arguments '("noide"))

To test this, I'm using this patch

Toggle snippet (14 lines)
diff --git a/gnu/system/examples/bare-hurd.tmpl b/gnu/system/examples/bare-hurd.tmpl
index 463c7ee798..f3d54be79d 100644
--- a/gnu/system/examples/bare-hurd.tmpl
+++ b/gnu/system/examples/bare-hurd.tmpl
@@ -33,7 +33,7 @@
(bootloader (bootloader-configuration
(bootloader grub-minimal-bootloader)
(targets '("/dev/sdX"))))
+ (kernel-arguments '("console=com0" "noide"))
(file-systems (cons (file-system
(device (file-system-label "my-root"))
(mount-point "/")

build it using

Toggle snippet (3 lines)
./pre-inst-env guix system image -t hurd-raw gnu/system/examples/bare-hurd.tmpl --keep-failed

and run it like this

Toggle snippet (13 lines)
guix shell qemu -- qemu-system-i386 \
-m 4096 \
--enable-kvm \
--device rtl8139,netdev=net0 \
--netdev user,id=net0,hostfwd=tcp:0.0.0.0:11022-:2222 \
--snapshot \
--no-reboot \
--device virtio-serial-pci \
--nographic \
--serial mon:stdio \
--hda /gnu/store/l35gz57nrkngc923f9zp9awxmq7ha1hc-disk-image

(It also still works without using "noide", we're still using that for
childhurd service where rumpdisk does not really make sense).

Enjoy!

Greetings,
Janneke

Janneke Nieuwenhuizen (11):
gnu: Add libpciaccess-0.17.
gnu: hurd: Update libpciaccess to 0.17.
gnu: Add rumpkernel.
gnu: Add hurd-shouldbeinlibc.
gnu: parted: Support building for the Hurd.
gnu: hurd: Add rumpkernel.
hurd-boot: Setup pci-arbiter and rumpdisk translators.
services: childhurd: Bump default qemu memory to 2048MB.
system: hurd: Boot with pci.arbiter and rumpdisk.
bootloader: grub: Use rumpdisk-style root when booting with "noide".
gnu: gnumach: Support "noide" argument.

doc/guix.texi | 21 ++
gnu/bootloader/grub.scm | 17 +-
gnu/build/hurd-boot.scm | 27 +-
gnu/local.mk | 3 +
gnu/packages/disk.scm | 19 +-
gnu/packages/hurd.scm | 298 ++++++++++++++++--
.../patches/gnumach-support-noide.patch | 25 ++
.../patches/hurd-fix-rumpdisk-build.patch | 41 +++
.../patches/hurd-rumpdisk-no-hd.patch | 26 ++
gnu/packages/xorg.scm | 17 +
gnu/services/virtualization.scm | 4 +-
gnu/system.scm | 25 +-
gnu/system/examples/bare-hurd.tmpl | 4 +-
13 files changed, 480 insertions(+), 47 deletions(-)
create mode 100644 gnu/packages/patches/gnumach-support-noide.patch
create mode 100644 gnu/packages/patches/hurd-fix-rumpdisk-build.patch
create mode 100644 gnu/packages/patches/hurd-rumpdisk-no-hd.patch


base-commit: 88da863e0048721cef17a5de294084be1f10e7e9
--
2.40.1
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 17:47
[PATCH v5 06/11] gnu: hurd: Add rumpkernel.
(address . 63527@debbugs.gnu.org)
5995550d8ce78db5a5d52198201c256275bbb954.1684855847.git.janneke@gnu.org
* gnu/packages/patches/hurd-fix-rumpdisk-build.patch,
gnu/packages/patches/hurd-rumpdisk-no-hd.patch: New files.
* gnu/local.mk (dist_patch_DATA): Add them.
* gnu/packages/hurd.scm (hurd-headers): Use them.
(hurd)[inputs]: Add util-linux:static, parted, rumpkernel.
[arguments]: Rename `prepare-dde' phase to 'prepare-addons'. Add "rumpdisk"
directory. Add --enable-static-progs=... option to #:configure-flags, and
remove --without-parted.
---
gnu/local.mk | 2 +
gnu/packages/hurd.scm | 17 +++++---
.../patches/hurd-fix-rumpdisk-build.patch | 41 +++++++++++++++++++
.../patches/hurd-rumpdisk-no-hd.patch | 26 ++++++++++++
4 files changed, 81 insertions(+), 5 deletions(-)
create mode 100644 gnu/packages/patches/hurd-fix-rumpdisk-build.patch
create mode 100644 gnu/packages/patches/hurd-rumpdisk-no-hd.patch

Toggle diff (160 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 2a09d44506..052b76ea7e 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1354,6 +1354,8 @@ dist_patch_DATA = \
%D%/packages/patches/hubbub-sort-entities.patch \
%D%/packages/patches/hueplusplus-mbedtls.patch \
%D%/packages/patches/hurd-add-without-rump-configure-option.patch \
+ %D%/packages/patches/hurd-fix-rumpdisk-build.patch \
+ %D%/packages/patches/hurd-rumpdisk-no-hd.patch \
%D%/packages/patches/hurd-fix-types-of-read-write-and-readables-methods-2.patch \
%D%/packages/patches/hurd-fix-types-of-read-write-and-readables-methods.patch \
%D%/packages/patches/hwloc-1-test-btrfs.patch \
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 9fbca9d5c5..536df96e00 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -34,6 +34,7 @@ (define-module (gnu packages hurd)
#:use-module (gnu packages autotools)
#:use-module (gnu packages compression)
#:use-module (gnu packages cross-base)
+ #:use-module (gnu packages disk)
#:use-module (gnu packages flex)
#:use-module (gnu packages gawk)
#:use-module (gnu packages gnupg)
@@ -157,7 +158,9 @@ (define-public hurd-headers
(sha256
(base32
"0jm1dnqkx4kdwmby0z5w0yqp9m5qp4hbxd4jxlyhiqm8nkw9mkvv"))
- (file-name (git-file-name name version))))
+ (file-name (git-file-name name version))
+ (patches (search-patches "hurd-fix-rumpdisk-build.patch"
+ "hurd-rumpdisk-no-hd.patch"))))
(build-system gnu-build-system)
(native-inputs
(list autoconf
@@ -366,7 +369,7 @@ (define-public hurd
(arguments
`(#:phases
(modify-phases %standard-phases
- (add-after 'unpack 'prepare-dde
+ (add-after 'unpack 'prepare-addons
(lambda* (#:key native-inputs inputs #:allow-other-keys)
;; First we import the things we want from dde.
(for-each make-file-writable (find-files "."))
@@ -380,7 +383,7 @@ (define-public hurd
;; Makefile. libdde_linux26 is built later in its own phase.
(substitute* "Makefile"
(("libbpf ")
- "libbpf libmachdevdde libddekit"))))
+ "libbpf libmachdevdde libddekit rumpdisk"))))
(add-after 'unpack 'find-tirpc
(lambda* (#:key inputs #:allow-other-keys)
(for-each (lambda (var)
@@ -543,10 +546,10 @@ (define-public hurd
#:configure-flags
,#~(list (string-append "LDFLAGS=-Wl,-rpath="
#$output "/lib")
+ "--enable-static-progs=ext2fs,iso9660fs,rumpdisk,pci-arbiter,acpi"
"--disable-ncursesw"
"--without-libbz2"
"--without-libz"
- "--without-parted"
;; This is needed to pass the configure check for
;; clnt_create
"ac_func_search_save_LIBS=-ltirpc"
@@ -567,7 +570,11 @@ (define-public hurd
("coreutils" ,coreutils)
("sed" ,sed)
("grep" ,grep)
- ("util-linux" ,util-linux)))
+ ("util-linux" ,util-linux)
+;; ("util-linux" ,util-linux "lib") ;libuuid.so, for parted
+ ("util-linux" ,util-linux "static") ;libuuid.a, for parted
+ ("parted" ,parted) ;for rumpdisk
+ ("rumpkernel" ,rumpkernel)))
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)
diff --git a/gnu/packages/patches/hurd-fix-rumpdisk-build.patch b/gnu/packages/patches/hurd-fix-rumpdisk-build.patch
new file mode 100644
index 0000000000..4ecd5ed0ee
--- /dev/null
+++ b/gnu/packages/patches/hurd-fix-rumpdisk-build.patch
@@ -0,0 +1,41 @@
+Upstream status: taken from upstream.
+
+From a2b0f721d077fdc5c9decb21b975b58fb51a3e8f Mon Sep 17 00:00:00 2001
+From: Janneke Nieuwenhuizen <janneke@gnu.org>
+Date: Mon, 22 May 2023 19:21:47 +0200
+Subject: [PATCH] rumpdisk: Do not assume FHS /usr/lib, fixes Guix cross-build.
+
+---
+ rumpdisk/Makefile | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/rumpdisk/Makefile b/rumpdisk/Makefile
+index 60a209b3..b59aaf9a 100644
+--- a/rumpdisk/Makefile
++++ b/rumpdisk/Makefile
+@@ -1,5 +1,5 @@
+ #
+-# Copyright (C) 2019 Free Software Foundation, Inc.
++# Copyright (C) 2019, 2023 Free Software Foundation, Inc.
+ #
+ # This program is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU General Public License as
+@@ -15,7 +15,6 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+-RUMPPATH=/usr/lib
+ RUMPLIBS=rump rumpuser rumpdev rumpdev_disk rumpdev_pci rumpvfs rumpdev_ahcisata rumpdev_piixide rumpdev_ata
+ RUMPEXTRA=rumpdev_scsipi
+
+@@ -38,6 +37,6 @@ target = rumpdisk
+ OBJS = $(SRCS:.c=.o)
+ HURDLIBS = machdev ports trivfs shouldbeinlibc iohelp ihash fshelp
+ LDLIBS += -lpthread -lpciaccess -ldl
+-LDLIBS += -Wl,--whole-archive $(RUMPLIBS:%=$(RUMPPATH)/lib%_pic.a) -Wl,--no-whole-archive $(RUMPEXTRA:%=$(RUMPPATH)/lib%_pic.a)
++LDLIBS += -Wl,--whole-archive $(RUMPLIBS:%=-l%_pic) -Wl,--no-whole-archive $(RUMPEXTRA:%=-l%_pic)
+
+ include ../Makeconf
+--
+2.40.1
+
diff --git a/gnu/packages/patches/hurd-rumpdisk-no-hd.patch b/gnu/packages/patches/hurd-rumpdisk-no-hd.patch
new file mode 100644
index 0000000000..4e5d41917d
--- /dev/null
+++ b/gnu/packages/patches/hurd-rumpdisk-no-hd.patch
@@ -0,0 +1,26 @@
+This avoids rumpdisk crash when booting without "noide".
+
+Upstream status: Taken from Debian Salsa package git
+
+ https://salsa.debian.org/hurd-team/hurd/-/blob/f40ff84260b5a98bea949013415a1c92c127a43e/debian/patches/rumpdisk-no-hd
+
+Index: hurd-debian/rumpdisk/block-rump.c
+===================================================================
+--- hurd-debian.orig/rumpdisk/block-rump.c
++++ hurd-debian/rumpdisk/block-rump.c
+@@ -143,7 +143,6 @@ rumpdisk_device_init (void)
+ {
+ device_t device;
+
+-#if 0
+ if (! device_open (device_master, D_READ, "hd0", &device)
+ || ! device_open (device_master, D_READ, "hd1", &device)
+ || ! device_open (device_master, D_READ, "hd3", &device)
+@@ -154,7 +153,6 @@ rumpdisk_device_init (void)
+ disabled = 1;
+ return;
+ }
+-#endif
+
+ if (! device_open (device_master, D_READ, "sd0", &device)
+ || ! device_open (device_master, D_READ, "sd1", &device)
--
2.40.1
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 17:47
[PATCH v5 07/11] hurd-boot: Setup pci-arbiter and rumpdisk translators.
(address . 63527@debbugs.gnu.org)
80f8fd0cb008971867e8b550535d7e4673d532c7.1684855847.git.janneke@gnu.org
* gnu/build/hurd-boot.scm (make-hurd-device-nodes): Create "servers/bus/pci.
(set-hurd-device-translators): Create transators for pci-arbiter, rumpdisk,
and /dev/wd0..4s1..4.
---
gnu/build/hurd-boot.scm | 27 +++++++++++++++++++++++----
1 file changed, 23 insertions(+), 4 deletions(-)

Toggle diff (74 lines)
diff --git a/gnu/build/hurd-boot.scm b/gnu/build/hurd-boot.scm
index 14bfc5e809..93324ac3f3 100644
--- a/gnu/build/hurd-boot.scm
+++ b/gnu/build/hurd-boot.scm
@@ -1,6 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2020-2022 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -105,7 +105,7 @@ (define* (make-hurd-device-nodes #:optional (root "/"))
;; TODO: Set the 'gnu.translator' extended attribute for passive translator
;; settings?
- )
+ (mkdir-p (scope "servers/bus/pci")))
(define (passive-translator-xattr? file-name)
"Return true if FILE-NAME has an extended @code{gnu.translator} attribute
@@ -183,7 +183,8 @@ (define* (set-hurd-device-translators #:optional (root "/"))
(mkdir-p dir))))
(define servers
- '(("servers/crash-dump-core" ("/hurd/crash" "--dump-core"))
+ '(("servers/bus/pci" ("/hurd/pci-arbiter"))
+ ("servers/crash-dump-core" ("/hurd/crash" "--dump-core"))
("servers/crash-kill" ("/hurd/crash" "--kill"))
("servers/crash-suspend" ("/hurd/crash" "--suspend"))
("servers/password" ("/hurd/password"))
@@ -216,6 +217,8 @@ (define* (set-hurd-device-translators #:optional (root "/"))
;; 'fd_to_filename' in libc expects it.
("dev/fd" ("/hurd/magic" "--directory" "fd") #o555)
+ ("dev/rumpdisk"("/hurd/rumpdisk") #o660)
+
;; Create a number of ttys; syslogd writes to tty12 by default.
;; FIXME: Creating /dev/tty12 leads the console client to switch to
;; tty12 when syslogd starts, which is confusing for users. Thus, do
@@ -239,7 +242,22 @@ (define* (set-hurd-device-translators #:optional (root "/"))
("/hurd/term" ,(string-append "/dev/ttyp" n)
"pty-slave" ,(string-append "/dev/ptyp" n))
#o666))))
- (iota 10 0))))
+ (iota 10 0))
+ ,@(append-map (lambda (n)
+ (let* ((n (number->string n))
+ (drive (string-append "dev/wd" n))
+ (disk (string-append "@/dev/disk:wd" n)))
+ `((,drive ("/hurd/storeio" ,disk) #o600)
+ ,@(map (lambda (p)
+ (let ((p (number->string p)))
+ `(,(string-append drive "s" p)
+ ("/hurd/storeio"
+ "--store-type=typed"
+ ,(string-append
+ "part:" p ":device:@/dev/disk:wd0"))
+ #o660)))
+ (iota 4 1)))))
+ (iota 4 0))))
(for-each scope-set-translator servers)
(mkdir* "dev/vcs/1")
@@ -252,6 +270,7 @@ (define* (set-hurd-device-translators #:optional (root "/"))
(false-if-EEXIST (symlink "/dev/fd/1" (scope "dev/stdout")))
(false-if-EEXIST (symlink "/dev/fd/2" (scope "dev/stderr")))
(false-if-EEXIST (symlink "crash-dump-core" (scope "servers/crash")))
+ (false-if-EEXIST (symlink "/dev/rumpdisk" (scope "dev/disk")))
;; Make sure /etc/mtab is a symlink to /proc/mounts.
(false-if-exception (delete-file (scope "etc/mtab")))
--
2.40.1
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 17:47
[PATCH v5 08/11] services: childhurd: Bump default qemu memory to 2048MB.
(address . 63527@debbugs.gnu.org)
cf05da4da21f8eeb89e604574ba96342dcb50f53.1684855847.git.janneke@gnu.org
When booting with pci-arbiter and rumpdisk and using 1024MB of memory for
qemu, booting hangs, or seems to hang, at the end of the rumpdisk boot
messages. At least 1200MB is required, currently.

* gnu/services/virtualization.scm (<hurd-vm-configuration>)[memory-size]: Bump
to 2048.
* gnu/system/examples/bare-hurd.tmpl: Suggest using 2048 here too. Update
example `guix system image' and "qemu" command lines too.
---
gnu/services/virtualization.scm | 4 ++--
gnu/system/examples/bare-hurd.tmpl | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)

Toggle diff (43 lines)
diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm
index 2e311e3813..886b73f8c7 100644
--- a/gnu/services/virtualization.scm
+++ b/gnu/services/virtualization.scm
@@ -1,7 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Ryan Moe <ryan.moe@gmail.com>
;;; Copyright © 2018, 2020-2022 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2020,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2021 Timotej Lazar <timotej.lazar@araneo.si>
;;; Copyright © 2022 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2022 Leo Nikkilä <hello@lnikki.la>
@@ -1100,7 +1100,7 @@ (define-record-type* <hurd-vm-configuration>
(disk-size hurd-vm-configuration-disk-size ;number or 'guess
(default 'guess))
(memory-size hurd-vm-configuration-memory-size ;number
- (default 512))
+ (default 2048))
(options hurd-vm-configuration-options ;list of string
(default `("--snapshot")))
(id hurd-vm-configuration-id ;#f or integer [1..]
diff --git a/gnu/system/examples/bare-hurd.tmpl b/gnu/system/examples/bare-hurd.tmpl
index f0dd0cf742..463c7ee798 100644
--- a/gnu/system/examples/bare-hurd.tmpl
+++ b/gnu/system/examples/bare-hurd.tmpl
@@ -5,12 +5,12 @@
;; To build a disk image for a virtual machine, do
;;
-;; ./pre-inst-env guix system image --target=i586-pc-gnu \
+;; ./pre-inst-env guix system image --image-type=hurd-raw \
;; gnu/system/examples/bare-hurd.tmpl
;;
;; You may run it like so
;;
-;; guix environment --ad-hoc qemu -- qemu-system-i386 -enable-kvm -m 512M \
+;; guix shell qemu -- qemu-system-i386 -enable-kvm -m 2048 \
;; -device rtl8139,netdev=net0 -netdev user,id=net0,hostfwd=tcp:127.0.0.1:10022-:2222 \
;; -snapshot -hda <the-image>
;;
--
2.40.1
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 17:47
[PATCH v5 09/11] system: hurd: Boot with pci.arbiter and rumpdisk.
(address . 63527@debbugs.gnu.org)
8334d576496a999fa12861ade14e2781423ff22f.1684855847.git.janneke@gnu.org
* gnu/system.scm (hurd-multiboot-modules): Add commands for pci.arbiter and
rumpdisk.
---
gnu/system.scm | 25 ++++++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)

Toggle diff (59 lines)
diff --git a/gnu/system.scm b/gnu/system.scm
index 354f58f55b..23addf41e9 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -10,7 +10,7 @@
;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <jannek@gnu.org>
+;;; Copyright © 2020, 2023 Janneke Nieuwenhuizen <jannek@gnu.org>
;;; Copyright © 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
@@ -1486,16 +1486,28 @@ (define (operating-system-multiboot-modules os)
(define (hurd-multiboot-modules os)
(let* ((hurd (operating-system-hurd os))
+ (pci-arbiter-command
+ (list (file-append hurd "/hurd/pci-arbiter.static")
+ "pci-arbiter"
+ "--host-priv-port='${host-port}'"
+ "--device-master-port='${device-port}'"
+ "--next-task='${disk-task}'"
+ "'$(pci-task=task-create)'"
+ "'$(task-resume)'"))
+ (rumpdisk-command
+ (list (file-append hurd "/hurd/rumpdisk.static")
+ "rumpdisk"
+ "--next-task='${fs-task}'"
+ "'$(disk-task=task-create)'"))
(root-file-system-command
(list (file-append hurd "/hurd/ext2fs.static")
"ext2fs"
"--multiboot-command-line='${kernel-command-line}'"
- "--host-priv-port='${host-port}'"
- "--device-master-port='${device-port}'"
"--exec-server-task='${exec-task}'"
"--store-type=typed"
"--x-xattr-translator-records"
- "'${root}'" "'$(task-create)'" "'$(task-resume)'"))
+ "'${root}'"
+ "'$(fs-task=task-create)'"))
(target (%current-target-system))
(libc (if target
(with-parameters ((%current-target-system #f))
@@ -1512,7 +1524,10 @@ (define (hurd-multiboot-modules os)
;; (file-append hurd "/hurd/exec") "'$(exec-task=task-create)'")
(list (file-append hurd "/hurd/exec.static") "exec"
"'$(exec-task=task-create)'")))
- (list root-file-system-command exec-server-command)))
+ (list pci-arbiter-command
+ rumpdisk-command
+ root-file-system-command
+ exec-server-command)))
(define* (operating-system-boot-parameters os root-device
#:key system-kernel-arguments?)
--
2.40.1
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 17:47
[PATCH v5 10/11] bootloader: grub: Use rumpdisk-style root when booting with "noide".
(address . 63527@debbugs.gnu.org)
cde5c5fc1af0eca456ca1463bffc871a90acae7d.1684855847.git.janneke@gnu.org
* gnu/bootloader/grub.scm (make-grub-configuration): When "noide" is in
arguments, use device name "wd0" rather than "hd0".
---
gnu/bootloader/grub.scm | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)

Toggle diff (42 lines)
diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm
index ecd44e7f3c..af46d76380 100644
--- a/gnu/bootloader/grub.scm
+++ b/gnu/bootloader/grub.scm
@@ -3,7 +3,7 @@
;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
;;; Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
-;;; Copyright © 2019, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2019, 2020, 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2019, 2020 Miguel Ángel Arruga Vivas <rosen644835@gmail.com>
;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2020 Stefan <stefan-guix@vodafonemail.de>
@@ -404,17 +404,20 @@ (define* (make-grub-configuration grub config entries
#$linux (string-join (list #$@arguments))
#$initrd)))
(multiboot-kernel
- (let ((kernel (menu-entry-multiboot-kernel entry))
- (arguments (menu-entry-multiboot-arguments entry))
- (modules (menu-entry-multiboot-modules entry))
- (root-index 1)) ; XXX EFI will need root-index 2
+ (let* ((kernel (menu-entry-multiboot-kernel entry))
+ (arguments (menu-entry-multiboot-arguments entry))
+ (disk (if (member "noide" arguments) "w" "h"))
+ (modules (menu-entry-multiboot-modules entry))
+ (root-index 1)) ; XXX EFI will need root-index 2
#~(format port "
menuentry ~s {
- multiboot ~a root=device:hd0s~a~a~a
+ multiboot ~a root=part:~a:device:~ad0~a~a
}~%"
#$label
#$kernel
- #$root-index (string-join (list #$@arguments) " " 'prefix)
+ #$root-index
+ #$disk
+ (string-join (list #$@arguments) " " 'prefix)
(string-join (map string-join '#$modules)
"\n module " 'prefix))))
(chain-loader
--
2.40.1
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 17:47
[PATCH v5 11/11] gnu: gnumach: Support "noide" argument.
(address . 63527@debbugs.gnu.org)
82af884b2c75d17e8548854300458e49fda8a755.1684855847.git.janneke@gnu.org
* gnu/packages/patches/gnumach-support-noide.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/hurd.scm (gnumach-headers): Use it.
* doc/guix.texi (Bootloader Configuration): Document it.
---
doc/guix.texi | 21 ++++++++++++++++
gnu/local.mk | 1 +
gnu/packages/hurd.scm | 3 ++-
.../patches/gnumach-support-noide.patch | 25 +++++++++++++++++++
4 files changed, 49 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/gnumach-support-noide.patch

Toggle diff (91 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index f4cca66d76..11ce9340ae 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -39779,6 +39779,27 @@ Bootloader Configuration
@item @code{multiboot-arguments} (default: @code{()})
The list of extra command-line arguments for the multiboot-kernel.
+For example, when running in QEMU it can be useful to use a text-based
+console (use options @option{--nographic} @option{--serial mon:stdio}):
+
+@lisp
+'("console=com0"")
+@end lisp
+
+To use the new (experimental) rumpdisk (See
+@url{https://darnassus.sceen.net/~hurd-web/rump_kernel/, GNU Hurd rump
+kernel}) instead of the legacy gnumach buitin IDE support:
+
+@lisp
+'("noide")
+@end lisp
+
+Of course, these options can be combined:
+
+@lisp
+'("console=com0" "noide")
+@end lisp
+
@item @code{multiboot-modules} (default: @code{()})
The list of commands for loading Multiboot modules. For example:
diff --git a/gnu/local.mk b/gnu/local.mk
index 052b76ea7e..e633afa4b4 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1277,6 +1277,7 @@ dist_patch_DATA = \
%D%/packages/patches/gnome-session-support-elogind.patch \
%D%/packages/patches/gnome-tweaks-search-paths.patch \
%D%/packages/patches/gnumach-add-missing-const_mach_port_name_array_t-type.patch \
+ %D%/packages/patches/gnumach-support-noide.patch \
%D%/packages/patches/gnupg-default-pinentry.patch \
%D%/packages/patches/gnupg-1-build-with-gcc10.patch \
%D%/packages/patches/gnutls-skip-trust-store-test.patch \
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 536df96e00..c44c51818e 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -80,7 +80,8 @@ (define-public gnumach-headers
(file-name (git-file-name "gnumach" version))
(sha256
(base32
- "0f49zqxf64ds75rmskizpybl2mw7sxs05k59gjp3pgspvr87w7gs"))))
+ "0f49zqxf64ds75rmskizpybl2mw7sxs05k59gjp3pgspvr87w7gs"))
+ (patches (list (search-patch "gnumach-support-noide.patch")))))
(build-system gnu-build-system)
(arguments
`(#:phases
diff --git a/gnu/packages/patches/gnumach-support-noide.patch b/gnu/packages/patches/gnumach-support-noide.patch
new file mode 100644
index 0000000000..723d4bcac4
--- /dev/null
+++ b/gnu/packages/patches/gnumach-support-noide.patch
@@ -0,0 +1,25 @@
+Upstream status: Taken from Debian/upsream.
+
+ https://salsa.debian.org/hurd-team/gnumach/-/blob/master/debian/patches/90_noide.patch
+
+This supports using `noide' on the gnumach command line, disabling
+gnumach IDE support and thus forcing use of rumdisk.
+
+---
+ linux/dev/glue/block.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/linux/dev/glue/block.c
++++ b/linux/dev/glue/block.c
+@@ -207,7 +207,10 @@ int
+ blk_dev_init ()
+ {
+ #ifdef CONFIG_BLK_DEV_IDE
+- ide_init ();
++ extern char *kernel_cmdline;
++ if (strncmp(kernel_cmdline, "noide", 5) &&
++ !strstr(kernel_cmdline, " noide"))
++ ide_init ();
+ #endif
+ #ifdef CONFIG_BLK_DEV_FD
+ floppy_init ();
--
2.40.1
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 18:01
Re: [PATCH v5 06/11] gnu: hurd: Add rumpkernel.
(address . 63527@debbugs.gnu.org)
877csz3ult.fsf@gnu.org
Janneke Nieuwenhuizen writes:

[..]

Toggle quote (3 lines)
> * gnu/packages/hurd.scm (hurd-headers): Use them.
> (hurd)[inputs]: Add util-linux:static, parted, rumpkernel.

[..]

Toggle quote (17 lines)
> diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
> index 9fbca9d5c5..536df96e00 100644

> @@ -567,7 +570,11 @@ (define-public hurd
> ("coreutils" ,coreutils)
> ("sed" ,sed)
> ("grep" ,grep)
> - ("util-linux" ,util-linux)))
> + ("util-linux" ,util-linux)
> +;; ("util-linux" ,util-linux "lib") ;libuuid.so, for parted
> + ("util-linux" ,util-linux "static") ;libuuid.a, for parted
> + ("parted" ,parted) ;for rumpdisk
> + ("rumpkernel" ,rumpkernel)))
> (native-inputs
> `(("autoconf" ,autoconf)
> ("automake" ,automake)

Oops, will remove the commented code, and also check if we can remove

("util-linux" ,util-linux)

altogether.

Janneke

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
..
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 18:20
[PATCH v6 06/11] gnu: hurd: Add rumpkernel.
(address . 63527@debbugs.gnu.org)
87wn0z2f53.fsf_-_@gnu.org
* gnu/packages/patches/hurd-fix-rumpdisk-build.patch,
gnu/packages/patches/hurd-rumpdisk-no-hd.patch: New files.
* gnu/local.mk (dist_patch_DATA): Add them.
* gnu/packages/hurd.scm (hurd-headers): Use them.
(hurd)[inputs]: Replace util-linux with util-linux:static, add parted,
rumpkernel.
[arguments]: Rename `prepare-dde' phase to 'prepare-addons'. Add "rumpdisk"
directory. Add --enable-static-progs=... option to #:configure-flags, and
remove --without-parted.
---
gnu/local.mk | 2 +
gnu/packages/hurd.scm | 15 ++++---
.../patches/hurd-fix-rumpdisk-build.patch | 41 +++++++++++++++++++
.../patches/hurd-rumpdisk-no-hd.patch | 26 ++++++++++++
4 files changed, 79 insertions(+), 5 deletions(-)
create mode 100644 gnu/packages/patches/hurd-fix-rumpdisk-build.patch
create mode 100644 gnu/packages/patches/hurd-rumpdisk-no-hd.patch

Toggle diff (158 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 2a09d44506..052b76ea7e 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1354,6 +1354,8 @@ dist_patch_DATA = \
%D%/packages/patches/hubbub-sort-entities.patch \
%D%/packages/patches/hueplusplus-mbedtls.patch \
%D%/packages/patches/hurd-add-without-rump-configure-option.patch \
+ %D%/packages/patches/hurd-fix-rumpdisk-build.patch \
+ %D%/packages/patches/hurd-rumpdisk-no-hd.patch \
%D%/packages/patches/hurd-fix-types-of-read-write-and-readables-methods-2.patch \
%D%/packages/patches/hurd-fix-types-of-read-write-and-readables-methods.patch \
%D%/packages/patches/hwloc-1-test-btrfs.patch \
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 9fbca9d5c5..2687c0229c 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -34,6 +34,7 @@ (define-module (gnu packages hurd)
#:use-module (gnu packages autotools)
#:use-module (gnu packages compression)
#:use-module (gnu packages cross-base)
+ #:use-module (gnu packages disk)
#:use-module (gnu packages flex)
#:use-module (gnu packages gawk)
#:use-module (gnu packages gnupg)
@@ -157,7 +158,9 @@ (define-public hurd-headers
(sha256
(base32
"0jm1dnqkx4kdwmby0z5w0yqp9m5qp4hbxd4jxlyhiqm8nkw9mkvv"))
- (file-name (git-file-name name version))))
+ (file-name (git-file-name name version))
+ (patches (search-patches "hurd-fix-rumpdisk-build.patch"
+ "hurd-rumpdisk-no-hd.patch"))))
(build-system gnu-build-system)
(native-inputs
(list autoconf
@@ -366,7 +369,7 @@ (define-public hurd
(arguments
`(#:phases
(modify-phases %standard-phases
- (add-after 'unpack 'prepare-dde
+ (add-after 'unpack 'prepare-addons
(lambda* (#:key native-inputs inputs #:allow-other-keys)
;; First we import the things we want from dde.
(for-each make-file-writable (find-files "."))
@@ -380,7 +383,7 @@ (define-public hurd
;; Makefile. libdde_linux26 is built later in its own phase.
(substitute* "Makefile"
(("libbpf ")
- "libbpf libmachdevdde libddekit"))))
+ "libbpf libmachdevdde libddekit rumpdisk"))))
(add-after 'unpack 'find-tirpc
(lambda* (#:key inputs #:allow-other-keys)
(for-each (lambda (var)
@@ -543,10 +546,10 @@ (define-public hurd
#:configure-flags
,#~(list (string-append "LDFLAGS=-Wl,-rpath="
#$output "/lib")
+ "--enable-static-progs=ext2fs,iso9660fs,rumpdisk,pci-arbiter,acpi"
"--disable-ncursesw"
"--without-libbz2"
"--without-libz"
- "--without-parted"
;; This is needed to pass the configure check for
;; clnt_create
"ac_func_search_save_LIBS=-ltirpc"
@@ -567,7 +570,9 @@ (define-public hurd
("coreutils" ,coreutils)
("sed" ,sed)
("grep" ,grep)
- ("util-linux" ,util-linux)))
+ ("util-linux" ,util-linux "static") ;libuuid.a, for parted
+ ("parted" ,parted) ;for rumpdisk
+ ("rumpkernel" ,rumpkernel)))
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)
diff --git a/gnu/packages/patches/hurd-fix-rumpdisk-build.patch b/gnu/packages/patches/hurd-fix-rumpdisk-build.patch
new file mode 100644
index 0000000000..4ecd5ed0ee
--- /dev/null
+++ b/gnu/packages/patches/hurd-fix-rumpdisk-build.patch
@@ -0,0 +1,41 @@
+Upstream status: taken from upstream.
+
+From a2b0f721d077fdc5c9decb21b975b58fb51a3e8f Mon Sep 17 00:00:00 2001
+From: Janneke Nieuwenhuizen <janneke@gnu.org>
+Date: Mon, 22 May 2023 19:21:47 +0200
+Subject: [PATCH] rumpdisk: Do not assume FHS /usr/lib, fixes Guix cross-build.
+
+---
+ rumpdisk/Makefile | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/rumpdisk/Makefile b/rumpdisk/Makefile
+index 60a209b3..b59aaf9a 100644
+--- a/rumpdisk/Makefile
++++ b/rumpdisk/Makefile
+@@ -1,5 +1,5 @@
+ #
+-# Copyright (C) 2019 Free Software Foundation, Inc.
++# Copyright (C) 2019, 2023 Free Software Foundation, Inc.
+ #
+ # This program is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU General Public License as
+@@ -15,7 +15,6 @@
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+-RUMPPATH=/usr/lib
+ RUMPLIBS=rump rumpuser rumpdev rumpdev_disk rumpdev_pci rumpvfs rumpdev_ahcisata rumpdev_piixide rumpdev_ata
+ RUMPEXTRA=rumpdev_scsipi
+
+@@ -38,6 +37,6 @@ target = rumpdisk
+ OBJS = $(SRCS:.c=.o)
+ HURDLIBS = machdev ports trivfs shouldbeinlibc iohelp ihash fshelp
+ LDLIBS += -lpthread -lpciaccess -ldl
+-LDLIBS += -Wl,--whole-archive $(RUMPLIBS:%=$(RUMPPATH)/lib%_pic.a) -Wl,--no-whole-archive $(RUMPEXTRA:%=$(RUMPPATH)/lib%_pic.a)
++LDLIBS += -Wl,--whole-archive $(RUMPLIBS:%=-l%_pic) -Wl,--no-whole-archive $(RUMPEXTRA:%=-l%_pic)
+
+ include ../Makeconf
+--
+2.40.1
+
diff --git a/gnu/packages/patches/hurd-rumpdisk-no-hd.patch b/gnu/packages/patches/hurd-rumpdisk-no-hd.patch
new file mode 100644
index 0000000000..4e5d41917d
--- /dev/null
+++ b/gnu/packages/patches/hurd-rumpdisk-no-hd.patch
@@ -0,0 +1,26 @@
+This avoids rumpdisk crash when booting without "noide".
+
+Upstream status: Taken from Debian Salsa package git
+
+ https://salsa.debian.org/hurd-team/hurd/-/blob/f40ff84260b5a98bea949013415a1c92c127a43e/debian/patches/rumpdisk-no-hd
+
+Index: hurd-debian/rumpdisk/block-rump.c
+===================================================================
+--- hurd-debian.orig/rumpdisk/block-rump.c
++++ hurd-debian/rumpdisk/block-rump.c
+@@ -143,7 +143,6 @@ rumpdisk_device_init (void)
+ {
+ device_t device;
+
+-#if 0
+ if (! device_open (device_master, D_READ, "hd0", &device)
+ || ! device_open (device_master, D_READ, "hd1", &device)
+ || ! device_open (device_master, D_READ, "hd3", &device)
+@@ -154,7 +153,6 @@ rumpdisk_device_init (void)
+ disabled = 1;
+ return;
+ }
+-#endif
+
+ if (! device_open (device_master, D_READ, "sd0", &device)
+ || ! device_open (device_master, D_READ, "sd1", &device)
--
2.40.1
J
J
Janneke Nieuwenhuizen wrote on 23 May 2023 23:00
Re: [PATCH v5 07/11] hurd-boot: Setup pci-arbiter and rumpdisk translators.
(address . 63527@debbugs.gnu.org)
87lehe3gr6.fsf@gnu.org
Janneke Nieuwenhuizen writes:

Toggle quote (4 lines)
> * gnu/build/hurd-boot.scm (make-hurd-device-nodes): Create "servers/bus/pci.
> (set-hurd-device-translators): Create transators for pci-arbiter, rumpdisk,
> and /dev/wd0..4s1..4.

Of course, that's rather /dev/wd0..3s1..4.

Changed commit message.

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
L
L
Ludovic Courtès wrote on 24 May 2023 11:08
Re: bug#63527: [PATCH 0/3] Initial attempt at rumpdisk support for the Hurd.
(name . Janneke Nieuwenhuizen)(address . janneke@gnu.org)(address . 63527@debbugs.gnu.org)
87bkiaqep7.fsf_-_@gnu.org
Hi,

Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

Toggle quote (5 lines)
> So, with lots of kind help from the folks at #hurd and bug-hurd, and many
> thanks to Josselin Poiret for sending their amazing "Add libc specific to Hurd
> and update components" patch set (https://issues.guix.gnu.org/63641, note that
> these series depend on this!) we now have rumpdisk support for the Hurd.

Yay!! ?

Toggle quote (4 lines)
> To actually use it instead of the gnumach builtin IDE driver, use
>
> (kernel-arguments '("noide"))

Should we build Mach without this driver, or otherwise make “noide” the
default? (We can answer that later, no rush.)

Toggle quote (5 lines)
> guix shell qemu -- qemu-system-i386 \
> -m 4096 \
> --enable-kvm \
> --device rtl8139,netdev=net0 \

Once we have netdde, we can probably drop that line and use the default
NIC (e1000, IIRC).

Is “-m 4096” still needed? You mentioned this as a workaround
initially, IIRC?

Ludo’.
L
L
Ludovic Courtès wrote on 24 May 2023 11:11
(name . Janneke Nieuwenhuizen)(address . janneke@gnu.org)(address . 63527@debbugs.gnu.org)
877csyqekw.fsf_-_@gnu.org
Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

Toggle quote (10 lines)
> As suggested by youpi on IRC
>
> https://logs.guix.gnu.org/hurd/2023-05-17.log#132259
>
> libpciaccess-0.16 is too old for the Hurd and would need Hurd-specific patches
> while libpciaccess-0.17 works out of the box.
>
> * gnu/packages/hurd.scm (hurd)[inputs]: Use libpciaccess-0.17.
> (netdde)[inputs]: Likewise.

[…]

Toggle quote (2 lines)
> + ("libpciaccess" ,libpciaccess-0.17)

Maybe add “;need libpciaccess > 0.16” to convey that we should be able
to safely upgrade next time.

Ludo’.
L
L
Ludovic Courtès wrote on 24 May 2023 11:13
(name . Janneke Nieuwenhuizen)(address . janneke@gnu.org)(address . 63527@debbugs.gnu.org)
871qj6qego.fsf_-_@gnu.org
Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

Toggle quote (5 lines)
> * gnu/packages/disk.scm (parted)[inputs]: Remove lvm2, add hurd-shouldbeinlibc
> when building for the Hurd.
> [arguments]: Add configure-flag '--disable-device-mapper' when building for
> the Hurd.

[...]

Toggle quote (9 lines)
> (arguments
> - (list #:phases
> + (append
> + (if (hurd-target?)
> + '(#:configure-flags '("--disable-device-mapper"))
> + '())
> + (list
> + #:phases

Slightly more visually appealing:

(list #:configure-flags (if (hurd-target?)
#~'("--disable-device-mapper")
#~'())
#:phases …)

:-)

Ludo’.
J
J
Janneke Nieuwenhuizen wrote on 24 May 2023 11:15
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 63527@debbugs.gnu.org)
87o7maytrm.fsf@gnu.org
Ludovic Courtès writes:

Hi Ludo!

Toggle quote (9 lines)
> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> So, with lots of kind help from the folks at #hurd and bug-hurd, and many
>> thanks to Josselin Poiret for sending their amazing "Add libc specific to Hurd
>> and update components" patch set (https://issues.guix.gnu.org/63641, note that
>> these series depend on this!) we now have rumpdisk support for the Hurd.
>
> Yay!! ?

Yes \o/

Toggle quote (7 lines)
>> To actually use it instead of the gnumach builtin IDE driver, use
>>
>> (kernel-arguments '("noide"))
>
> Should we build Mach without this driver, or otherwise make “noide” the
> default? (We can answer that later, no rush.)

Possibly, I would suggest for now to follow upstream, IIUC, rumpdisk is
still somewhat experimental (and slooowww).

I expect upstream/bothstream to drop the "noide" patch at some point,
and possibly eradicate the IDE driver from gnumach altogether?

Toggle quote (11 lines)
>> guix shell qemu -- qemu-system-i386 \
>> -m 4096 \
>> --enable-kvm \
>> --device rtl8139,netdev=net0 \
>
> Once we have netdde, we can probably drop that line and use the default
> NIC (e1000, IIRC).
>
> Is “-m 4096” still needed? You mentioned this as a workaround
> initially, IIRC?

-m 2048 should be enoug, it seems boot with -m 1200; but yea, we do _do_
need more than 1024 (or 512 even)...

Greetings,
Janneke

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
L
L
Ludovic Courtès wrote on 24 May 2023 11:16
(name . Janneke Nieuwenhuizen)(address . janneke@gnu.org)(address . 63527@debbugs.gnu.org)
87wn0yozrd.fsf_-_@gnu.org
Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

Toggle quote (4 lines)
> * gnu/build/hurd-boot.scm (make-hurd-device-nodes): Create "servers/bus/pci.
> (set-hurd-device-translators): Create transators for pci-arbiter, rumpdisk,
> and /dev/wd0..4s1..4.

[...]

Toggle quote (13 lines)
> + ,@(append-map (lambda (n)
> + (let* ((n (number->string n))
> + (drive (string-append "dev/wd" n))
> + (disk (string-append "@/dev/disk:wd" n)))
> + `((,drive ("/hurd/storeio" ,disk) #o600)
> + ,@(map (lambda (p)
> + (let ((p (number->string p)))
> + `(,(string-append drive "s" p)
> + ("/hurd/storeio"
> + "--store-type=typed"
> + ,(string-append
> + "part:" p ":device:@/dev/disk:wd0"))

Shouldn’t “/dev/disk:wd0” be “,disk” instead?
J
J
Janneke Nieuwenhuizen wrote on 24 May 2023 11:24
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 63527@debbugs.gnu.org)
87fs7mytdd.fsf@gnu.org
Ludovic Courtès writes:

Toggle quote (2 lines)
> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
[..]

Toggle quote (9 lines)
> Slightly more visually appealing:
>
> (list #:configure-flags (if (hurd-target?)
> #~'("--disable-device-mapper")
> #~'())
> #:phases …)
>
> :-)

Nice I couldn't figure this one out, thanks!

Greetings,
Janneke

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
J
J
Janneke Nieuwenhuizen wrote on 24 May 2023 11:28
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 63527@debbugs.gnu.org)
87a5xuyt6b.fsf@gnu.org
Ludovic Courtès writes:

Toggle quote (19 lines)
> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> As suggested by youpi on IRC
>>
>> https://logs.guix.gnu.org/hurd/2023-05-17.log#132259
>>
>> libpciaccess-0.16 is too old for the Hurd and would need Hurd-specific patches
>> while libpciaccess-0.17 works out of the box.
>>
>> * gnu/packages/hurd.scm (hurd)[inputs]: Use libpciaccess-0.17.
>> (netdde)[inputs]: Likewise.
>
> […]
>
>> + ("libpciaccess" ,libpciaccess-0.17)
>
> Maybe add “;need libpciaccess > 0.16” to convey that we should be able
> to safely upgrade next time.

Nice, yes that's helpful. Done.

Greetings,
Janneke

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
J
J
Janneke Nieuwenhuizen wrote on 24 May 2023 11:30
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 63527@debbugs.gnu.org)
877csyyt2v.fsf@gnu.org
Ludovic Courtès writes:

Toggle quote (23 lines)
> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> * gnu/build/hurd-boot.scm (make-hurd-device-nodes): Create "servers/bus/pci.
>> (set-hurd-device-translators): Create transators for pci-arbiter, rumpdisk,
>> and /dev/wd0..4s1..4.
>
> [...]
>
>> + ,@(append-map (lambda (n)
>> + (let* ((n (number->string n))
>> + (drive (string-append "dev/wd" n))
>> + (disk (string-append "@/dev/disk:wd" n)))
>> + `((,drive ("/hurd/storeio" ,disk) #o600)
>> + ,@(map (lambda (p)
>> + (let ((p (number->string p)))
>> + `(,(string-append drive "s" p)
>> + ("/hurd/storeio"
>> + "--store-type=typed"
>> + ,(string-append
>> + "part:" p ":device:@/dev/disk:wd0"))
>
> Shouldn’t “/dev/disk:wd0” be “,disk” instead?

Oops, yeah sure! This could have been quite a search bug search one
day...

Changed to

,@(append-map (lambda (n)
(let* ((n (number->string n))
(drive (string-append "dev/wd" n))
(disk (string-append "@/dev/disk:wd" n)))
`((,drive ("/hurd/storeio" ,disk) #o600)
,@(map (lambda (p)
(let ((p (number->string p)))
`(,(string-append drive "s" p)
("/hurd/storeio"
"--store-type=typed"
,(string-append
"part:" p ":device:" disk))
#o660)))
(iota 4 1)))))
(iota 4 0))

Greetings,
Janneke

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
L
L
Ludovic Courtès wrote on 24 May 2023 11:32
(name . Janneke Nieuwenhuizen)(address . janneke@gnu.org)(address . 63527@debbugs.gnu.org)
87pm6qoz0s.fsf_-_@gnu.org
Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

Toggle quote (3 lines)
> * gnu/bootloader/grub.scm (make-grub-configuration): When "noide" is in
> arguments, use device name "wd0" rather than "hd0".

[...]

Toggle quote (4 lines)
> + (let* ((kernel (menu-entry-multiboot-kernel entry))
> + (arguments (menu-entry-multiboot-arguments entry))
> + (disk (if (member "noide" arguments) "w" "h"))

Could you add a comment like:

;; Choose between device names as understood by Mach's built-in IDE
;; driver and those understood by rumpdisk (in the "noide" case).

(It’s a bit of an abstraction leak, but hey, we’ll worry about it when
we have another multiboot-compliant kernel.)

Ludo’.
L
L
Ludovic Courtès wrote on 24 May 2023 11:36
(name . Janneke Nieuwenhuizen)(address . janneke@gnu.org)(address . 63527@debbugs.gnu.org)
87ilcioyto.fsf_-_@gnu.org
Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

Toggle quote (5 lines)
> * gnu/packages/patches/gnumach-support-noide.patch: New file.
> * gnu/local.mk (dist_patch_DATA): Add it.
> * gnu/packages/hurd.scm (gnumach-headers): Use it.
> * doc/guix.texi (Bootloader Configuration): Document it.

[...]

Toggle quote (2 lines)
> +@lisp
> +'("console=com0"")
^
Extra quote.

Toggle quote (4 lines)
> +To use the new (experimental) rumpdisk (See
> +@url{https://darnassus.sceen.net/~hurd-web/rump_kernel/, GNU Hurd rump
> +kernel}) instead of the legacy gnumach buitin IDE support:

Nitpick:

To use the new and still experimental
user-level disk driver} instead of GNU@tie{}Mach's in-kernel IDE
driver, set @code{kernel-arguments} to:

Ludo’.
J
J
Janneke Nieuwenhuizen wrote on 24 May 2023 11:37
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 63527@debbugs.gnu.org)
87353mysrj.fsf@gnu.org
Ludovic Courtès writes:

Toggle quote (16 lines)
> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> * gnu/bootloader/grub.scm (make-grub-configuration): When "noide" is in
>> arguments, use device name "wd0" rather than "hd0".
>
> [...]
>
>> + (let* ((kernel (menu-entry-multiboot-kernel entry))
>> + (arguments (menu-entry-multiboot-arguments entry))
>> + (disk (if (member "noide" arguments) "w" "h"))
>
> Could you add a comment like:
>
> ;; Choose between device names as understood by Mach's built-in IDE
> ;; driver and those understood by rumpdisk (in the "noide" case).

Added as

;; Choose between device names as understood by Mach's built-in
;; IDE driver ("hdX") and those understood by rumpdisk ("wdX"
;; in the "noide" case).
(disk (if (member "noide" arguments) "w" "h"))

Toggle quote (3 lines)
> (It’s a bit of an abstraction leak, but hey, we’ll worry about it when
> we have another multiboot-compliant kernel.)

(Yeah, ok!)

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
L
L
Ludovic Courtès wrote on 24 May 2023 11:37
(name . Janneke Nieuwenhuizen)(address . janneke@gnu.org)(address . 63527@debbugs.gnu.org)
87cz2qoyrw.fsf_-_@gnu.org
I made cosmetic suggestions (as I usually do :-)) but the whole patch
series looks great to me, thank you!

Ludo’.
J
J
Janneke Nieuwenhuizen wrote on 24 May 2023 11:40
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 63527@debbugs.gnu.org)
87y1lexe2c.fsf@gnu.org
Ludovic Courtès writes:

Toggle quote (14 lines)
> Janneke Nieuwenhuizen <janneke@gnu.org> skribis:
>
>> * gnu/packages/patches/gnumach-support-noide.patch: New file.
>> * gnu/local.mk (dist_patch_DATA): Add it.
>> * gnu/packages/hurd.scm (gnumach-headers): Use it.
>> * doc/guix.texi (Bootloader Configuration): Document it.
>
> [...]
>
>> +@lisp
>> +'("console=com0"")
> ^
> Extra quote.

Oops.

Toggle quote (11 lines)
>> +To use the new (experimental) rumpdisk (See
>> +@url{https://darnassus.sceen.net/~hurd-web/rump_kernel/, GNU Hurd rump
>> +kernel}) instead of the legacy gnumach buitin IDE support:
>
> Nitpick:
>
> To use the new and still experimental
> @uref{https://darnassus.sceen.net/~hurd-web/rump_kernel/, rumpdisk
> user-level disk driver} instead of GNU@tie{}Mach's in-kernel IDE
> driver, set @code{kernel-arguments} to:

I like it! Thanks.

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
J
J
Janneke Nieuwenhuizen wrote on 24 May 2023 11:46
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 63527@debbugs.gnu.org)
87ttw2xds4.fsf@gnu.org
Ludovic Courtès writes:

Toggle quote (2 lines)
> I made cosmetic suggestions (as I usually do :-))

Yes, and spotted typos/buglets), so thank you for all that!

Toggle quote (3 lines)
> but the whole patch
> series looks great to me, thank you!

\o/

So, good to go after https://issues.guix.gnu.org/63641merges!

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
J
J
Josselin Poiret wrote on 13 Jul 2023 19:13
Re: [bug#63527] [PATCH 0/3] Initial attempt at rumpdisk support for the Hurd.
(address . 63527@debbugs.gnu.org)
87bkgf91kx.fsf@jpoiret.xyz
Hi Janneke,

Janneke Nieuwenhuizen <janneke@gnu.org> writes:

Toggle quote (2 lines)
> So, good to go after https://issues.guix.gnu.org/63641merges!

Finally got around to review and merge this + netdde as
b4fe82bd8af735000d0f2165a23cfb695c181f6f. Sorry for the delay, and
thanks for this amazing packaging!

Best,
--
Josselin Poiret
-----BEGIN PGP SIGNATURE-----

iQHEBAEBCgAuFiEEOSSM2EHGPMM23K8vUF5AuRYXGooFAmSwML4QHGRldkBqcG9p
cmV0Lnh5egAKCRBQXkC5FhcaiktyC/97QE4jrP7Q1IdSNosu58WyK3/dfyzd4jCz
dQLxLVSEqOeDGFe2n80fvfrzCGFQfsz9FC4GZJn/rgs+L7tHvDKaOFBLmIQvZTe4
O1Tkt6vGXGJcPSoUYhW/hkA6AYprmSkl7y1NETT69fnDTDAkkp1uMn/PzlZPYVsO
ftnBIwlZFy3M2+UyscTOmsttyfsfZCMmzC/NjcllCZEZVvZwARiiKPjSQmsGeVlV
8f90yBiQT9Z4C07ly3LwSvQ+ddOiRsetkbwwVCX4WgeBulcHGORLJWD2pybHFtWN
lCpmPaa/CBbJfqMaBOrQV9zQaDl/yfHznA77caTGl2HVEvzOUwUxWFuuRYbJK77T
Jfj8L9A7XR4nrsmRmMCMM5hb0nVKMh4KNIGC+BrhZtg2C/ziP2uMLnH3LJiuAH6H
OBpeD7h+g8Nvj3OqZ9HGbRGeBAB/zEYb450ECZ8QXyTkeTm8llEpsz5goiC7Zr8e
jQJ2DRJuEeguOOD8iLkKFceQZlTkkr0=
=3+aB
-----END PGP SIGNATURE-----

J
J
Josselin Poiret wrote on 13 Jul 2023 19:16
(address . control@debbugs.gnu.org)
87351r91gp.fsf@jpoiret.xyz
close 63527
thankyou
--
Josselin Poiret
-----BEGIN PGP SIGNATURE-----

iQHEBAEBCgAuFiEEOSSM2EHGPMM23K8vUF5AuRYXGooFAmSwMVcQHGRldkBqcG9p
cmV0Lnh5egAKCRBQXkC5FhcaiqPLDACHWumZ11Z1v0RBY5sGhZjtlBspX/b/T7iP
CUDraHOb3vKRnVZJcpVNuj14pgyXKwiyf0xDZMEryFJTnBtq4UJrJS26A4xHSNHm
vLYHucFJB6r14Fl/Bi4p+wAprrF71tmWcj6H1Pt5l1qRmhhcZYtHuZF6Fhwj2MJQ
xeyclCw98JV5wViitYdzMEjRLj9c4KF+k9/a1nTyikXU0Wya1JkNbFbyX35z/3kv
fvEYvIFg2ps1+bVXSVUzyBwSolJivVbx2/E24HSb+c98LNW2xuUwNKE0erdFxpkb
vf8mKq28xlvvhMvApp/ze8oqkY5C8B4s5bBnbbpccQ8C9mcOu6fM85GG51eNU2kv
/ndUr1lN5Mb0pVxsmV3ZDT99dATflemN94818BTBma6UbLmvQwgOnN6ot/a/33+T
r4lfboyaRKKkfKBi+4T76kOzplpGAcB7boyDDrRhU4vRDkk4vpmfv3sPcOz/Bjui
zTSIxlWf6PK6YnMaRhxzhtjGh4ZmvCM=
=pSCX
-----END PGP SIGNATURE-----

J
J
Janneke Nieuwenhuizen wrote on 13 Jul 2023 19:41
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
874jm7hfpc.fsf@gnu.org
Josselin Poiret writes:

Hi hurd-team ;)

Toggle quote (8 lines)
> Janneke Nieuwenhuizen <janneke@gnu.org> writes:
>
>> So, good to go after https://issues.guix.gnu.org/63641 merges!
>
> Finally got around to review and merge this + netdde as
> b4fe82bd8af735000d0f2165a23cfb695c181f6f. Sorry for the delay, and
> thanks for this amazing packaging!

Thanks for your extensive review with patches!

Does anything have to happen for ci to pick this up? It seems
awfully quiet here


It would be nice to have hurd-team rebased, and added to ci too, but
we'll probably want to wait until i568-gnu on master is built.

Greetings,
Janneke

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
L
L
Ludovic Courtès wrote on 14 Jul 2023 15:37
(name . Janneke Nieuwenhuizen)(address . janneke@gnu.org)
87bkgewr4j.fsf@gnu.org
Hello fantastic hackers! :-)

Janneke Nieuwenhuizen <janneke@gnu.org> skribis:

Toggle quote (10 lines)
>> Janneke Nieuwenhuizen <janneke@gnu.org> writes:
>>
>>> So, good to go after https://issues.guix.gnu.org/63641 merges!
>>
>> Finally got around to review and merge this + netdde as
>> b4fe82bd8af735000d0f2165a23cfb695c181f6f. Sorry for the delay, and
>> thanks for this amazing packaging!
>
> Thanks for your extensive review with patches!

Yeah, thanks to the two of you!!

Toggle quote (5 lines)
> Does anything have to happen for ci to pick this up? It seems
> awfully quiet here
>
> https://ci.guix.gnu.org/search?query=system%3Ai586-gnu

It was apparently picked up:


However, there seem to be regressions when cross-compiling to

Toggle snippet (31 lines)
gcc dlopenold.c -c -std=gnu11 -fgnu89-inline -g -O2 -Wall -Wwrite-strings -Wundef -Werror -fmerge-all-constants -frounding-math -fno-stack-protector -fno-common -Wstrict-prototypes -Wold-style-definition -fmath-errno -fPIC -ftls-model=initial-exec -I../include -I/tmp/guix-build-glibc-2.35.drv-0/build/dlfcn -I/tmp/guix-build-glibc-2.35.drv-0/build -I../sysdeps/unix/sysv/linux/x86_64/64 -I../sysdeps/unix/sysv/linux/x86_64 -I../sysdeps/unix/sysv/linux/x86/include -I../sysdeps/unix/sysv/linux/x86 -I../sysdeps/x86/nptl -I../sysdeps/unix/sysv/linux/wordsize-64 -I../sysdeps/x86_64/nptl -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux -I../sysdeps/nptl -I../sysdeps/pthread -I../sysdeps/gnu -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/x86_64 -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/x86_64/64 -I../sysdeps/x86_64/fpu/multiarch -I../sysdeps/x86_64/fpu -I../sysdeps/x86/fpu -I../sysdeps/x86_64/multiarch -I../sysdeps/x86_64 -I../sysdeps/x86/include -I../sysdeps/x86 -I../sysdeps/ieee754/float128 -I../sysdeps/ieee754/ldbl-96/include -I../sysdeps/ieee754/ldbl-96 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754/flt-32 -I../sysdeps/wordsize-64 -I../sysdeps/ieee754 -I../sysdeps/generic -I.. -I../libio -I. -nostdinc -isystem /gnu/store/qzqq7za0mqvxgp7q8jmzd97c22xbqd18-gcc-7.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/7.5.0/include -isystem /gnu/store/qzqq7za0mqvxgp7q8jmzd97c22xbqd18-gcc-7.5.0-lib/lib/gcc/x86_64-unknown-linux-gnu/7.5.0/include-fixed -isystem /gnu/store/sjq77rvlryjgksni6ry1648xkj807ynv-linux-libre-headers-5.15.49/include -D_LIBC_REENTRANT -include /tmp/guix-build-glibc-2.35.drv-0/build/libc-modules.h -DMODULE_NAME=libc -include ../include/libc-symbols.h -DPIC -DSHARED -DTOP_NAMESPACE=glibc -o /tmp/guix-build-glibc-2.35.drv-0/build/dlfcn/dlopenold.os -MD -MP -MF /tmp/guix-build-glibc-2.35.drv-0/build/dlfcn/dlopenold.os.dt -MT /tmp/guix-build-glibc-2.35.drv-0/build/dlfcn/dlopenold.os
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 60: syntax error
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 62: syntax error
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 63: syntax error
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 64: syntax error
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 65: syntax error
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 66: syntax error
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 67: syntax error
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 68: syntax error
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 69: syntax error
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 70: syntax error
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 263: syntax error
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 265: syntax error
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 266: syntax error
"/gnu/store/d90028hf869mppv8pspbpgbj7xmdj4h6-gnumach-headers-cross-i586-pc-gnu-1.8+git20221224/include/mach/mach_types.defs", line 267: type 'rpc_time_value_t' not defined
echo 'dlfcn/dladdr.o dlfcn/dladdr1.o dlfcn/dlclose.o dlfcn/dlerror.o dlfcn/dlinfo.o dlfcn/dlmopen.o dlfcn/dlopen.o dlfcn/dlsym.o dlfcn/dlvsym.o dlfcn/libc_dlerror_result.o' > /tmp/guix-build-glibc-2.35.drv-0/build/dlfcn/stamp.oT
mv -f /tmp/guix-build-glibc-2.35.drv-0/build/dlfcn/stamp.oT /tmp/guix-build-glibc-2.35.drv-0/build/dlfcn/stamp.o
make[2]: *** [Machrules:168: /tmp/guix-build-glibc-hurd-headers-cross-i586-pc-gnu-2.37.drv-0/build/mach/mach/mach_interface.__h] Error 1
make[2]: Leaving directory '/tmp/guix-build-glibc-hurd-headers-cross-i586-pc-gnu-2.37.drv-0/glibc-2.37/mach'
make[1]: *** [Makefile:484: mach/install-headers] Error 2
make[1]: Leaving directory '/tmp/guix-build-glibc-hurd-headers-cross-i586-pc-gnu-2.37.drv-0/glibc-2.37'
make: *** [Makefile:9: install-headers] Error 2
error: in phase 'install': uncaught exception:
%exception #<&invoke-error program: "make" arguments: ("install-headers") exit-status: 2 term-signal: #f stop-signal: #f>
phase `install' failed after 8.6 seconds
command "make" "install-headers" failed with status 2
echo 'dlfcn/dladdr.os dlfcn/dladdr1.os dlfcn/dlclose.os dlfcn/dlerror.os dlfcn/dlinfo.os dlfcn/dlmopen.os dlfcn/dlopen.os dlfcn/dlsym.os dlfcn/dlvsym.os dlfcn/libc_dlerror_result.os dlfcn/dlopenold.os' > /tmp/guix-build-glibc-2.35.drv-0/build/dlfcn/stamp.osT
builder for `/gnu/store/vk634lqm1fr9bfq1w6n68x33cj1vvyv8-glibc-hurd-headers-cross-i586-pc-gnu-2.37.drv' failed with exit code 1
@ build-failed /gnu/store/vk634lqm1fr9bfq1w6n68x33cj1vvyv8-glibc-hurd-headers-cross-i586-pc-gnu-2.37.drv - 1 builder for `/gnu/store/vk634lqm1fr9bfq1w6n68x33cj1vvyv8-glibc-hurd-headers-cross-i586-pc-gnu-2.37.drv' failed with exit code 1

Thoughts?

Ludo’.
J
J
Josselin Poiret wrote on 14 Jul 2023 20:59
(address . 63527@debbugs.gnu.org)
87zg3y71zx.fsf@jpoiret.xyz
Hi Ludo,

Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (3 lines)
> However, there seem to be regressions when cross-compiling to
> i586-pc-gnu, such as <https://ci.guix.gnu.org/build/1595110/details>:

That's because of the revert of the mig update in
a041bbb4bf98cce72b14c554369fc56eeacc2f5d, since it apparently caused
problems on the data service. I don't expect anything to build without
the new mig version, but I have no idea what could be causing this
issue. Janneke, have you ever run into such a thing when building
natively? Maybe it's just the childhurds not having enough RAM?

Best,
--
Josselin Poiret
-----BEGIN PGP SIGNATURE-----

iQHEBAEBCgAuFiEEOSSM2EHGPMM23K8vUF5AuRYXGooFAmSxmyIQHGRldkBqcG9p
cmV0Lnh5egAKCRBQXkC5FhcaihanC/4tTAPJulSaGs0dYkydfb/NcTZdQDLJEb5j
LB99dfXn86+5O/5X9UZdslqm8TTn9Di4MWabxDR3hTaTGaT6UiCatKH8Mvgl38Lj
5JKNv1uYj8zRRsyr3ymm3/2FimK/T6BjM+zri3giMIxA2RhRQqQzDK4RR6WjHeo7
WTxCZ5BiBzxQngQVq4nkDsDWN9Yy0PtAeaHhan1QQbA3HbLgp/hoYmiSSdg/R7l9
U2fzpKQVGDwj0Uf3kG6TJnPYRKOXsqqCqJb0bdiJFAFjOoumrLKm4Rszx4F8FWxk
sPogBn6IltS/FD/LJrMUqTwvZ4IgIsYXKNJ+svK8eJFfkyugxoKhwqFFKYM4Xwhb
0OhEvqJTrxVzbk9XxB6BdVzorELln9jBj9b1U/Op/bdzab/GzvNFINCXQ4mMKzb4
ySVK9mVuG9vTjG8k6rXV9Xon38abDQYzcj419Agjk7DuKChJ2RxYr4CQ6I2xhc0B
gt1lnfBZXjMB2qXmUlSboTFHP2jufM8=
=Wj3k
-----END PGP SIGNATURE-----

J
J
Janneke Nieuwenhuizen wrote on 15 Jul 2023 01:35
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
87zg3yf4nf.fsf@gnu.org
Josselin Poiret writes:

Toggle quote (13 lines)
> Hi Ludo,
>
> Ludovic Courtès <ludo@gnu.org> writes:
>
>> However, there seem to be regressions when cross-compiling to
>> i586-pc-gnu, such as <https://ci.guix.gnu.org/build/1595110/details>:
>
> That's because of the revert of the mig update in
> a041bbb4bf98cce72b14c554369fc56eeacc2f5d, since it apparently caused
> problems on the data service. I don't expect anything to build without
> the new mig version, but I have no idea what could be causing this
> issue.

Yes, I re-cherry-picked the mig update and put it at the bottom of
hurd-team and can confirm that

/gnu/store/8syklh9kg8rlkalzmb2rzgj0z6fgabyr-guile-static-stripped-tarball-3.0.9

Toggle quote (3 lines)
> Janneke, have you ever run into such a thing when building
> natively? Maybe it's just the childhurds not having enough RAM?

I've got no idea; it was suggested on IRC that a circular dependency was
created and that may be true. Like you remarked on IRC, we probably
need the commencement patches too.

We can see about the rest of hurd-team that's mostly about building guix
natively, later.

Greetings,
Janneke

--
Janneke Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com| Avatar® https://AvatarAcademy.com
?