Ludovic Courtès writes: Hello! > Jan Nieuwenhuizen skribis: > >>> Having an RC argument passed directly by the bootloader seems like a >>> good way to proceed for me. This is somehow remotely similar to what we >>> are doing with the "initrd" on Linux (pointing to some piece of code >>> that needs to be loaded before starting the init process). >>> >>> You would also need to store this RC argument in the >>> record, by adding a new field or stuffing it in the "initrd" >>> field. Then, we wouldn't need an extra service I guess. >> >> Hmm...I don't understand...probably I'm missing something. >> >> I was thinking to just extend boot-parameters with >> --rc-file=%hurd-rc-script, and then add %hurd-rc-script to the SYSTEM >> service...How would I get the RC script into SYSTEM without a service? > > Normally, if you have the system (as returned by ‘guix system build’), > that’s enough to derive any other kind of thing you might want. > > So for example, you could have a “startup” (or “rc”) entry in the > ‘system’ directory by extending ‘system-service-type’. And since the > system is known from the boot command line, bingo. > > The guideline IMO should be to remain as close as possible to Guix > System on GNU/Linux. It’s OK to depart a bit from upstream Hurd though > because those bits are not actually used (Debian does its own thing). Okay, that makes sense. Using --system=SYSTEM => SYSTEM/rc now. >>> If we are going that way, the procedures in (gnu build hurd-boot) could >>> be passed the "hurd" package to install, and we could maybe get rig of >>> the "/hurd" symlink? >> >> Hehe, that would be nice...but IME /hurd isn't easy to get rid of. > > Some of the /hurd names are embedded in libc, via the Hurd’s paths.h. > Some names are compared by string (!); for instance, symlink.c in libc > has: > > /* A symlink is a file whose translator is "/hurd/symlink\0target\0". */ > > memcpy (buf, _HURD_SYMLINK, sizeof (_HURD_SYMLINK)); > memcpy (&buf[sizeof (_HURD_SYMLINK)], from, len); > > That makes it next to impossible to remove /hurd. > > I think it should be treated like /bin/sh and /run/current-system: set > up at activation time. Ah right...I think this is exactly what I found (and forgot). The file system embeds the full file-name...that's unfortunate. >> +(define %hurd-rc-script >> + ;; The RC script to be started upon boot. >> + (program-file "rc" >> + (with-imported-modules '((guix build utils) >> + (gnu build hurd-boot) >> + (guix build syscalls)) > > Probably use ‘source-module-closure’ to be on the safe side. Nice! >> +(define (hurd-rc-entry mrc) >> + "Return, as a monadic value, an entry for the RC script in the system >> +directory." >> + (mlet %store-monad ((rc mrc)) >> + (return `(("rc" ,rc))))) >> + >> +(define hurd-startup-service-type >> + ;; The service that creates the initial RC startup file. >> + (service-type (name 'startup) >> + (extensions >> + (list (service-extension system-service-type hurd-rc-entry))) >> + (compose identity) >> + (extend (const (lower-object %hurd-rc-script))) >> + (description >> + "Produce the operating system's RC script, which is executed >> +by RUNSYSTEM."))) > > Is this service really meant to be extensible? If not, we could just do: (no) > (service-type (name 'startup) > (extensions > (list (service-extension system-service-type hurd-rc-entry))) > (default-value %hurd-rc-script)) > > where: > > (define (hurd-rc-entry rc) > (mlet %store-monad ((rc (lower-object rc))) > (return `(("rc" ,rc))))) Thanks, done! >> + (append >> + (if (hurd-target?) >> + (list #~(string-append "--rc-file=" #$%hurd-rc-script)) >> + '()) >> + (list (string-append "--root=" >> + ;; Note: Always use the DCE format because that's what >> + ;; (gnu build linux-boot) expects for the '--root' >> + ;; kernel command-line option. >> + (file-system-device->string root-device >> + #:uuid-type 'dce)) >> + #~(string-append "--system=" #$system) >> + #~(string-append "--load=" #$system "/boot")))) > > So my suggestion is to avoid --rc-file since you know that SYSTEM/rc > exists. Done! > Ludo’, who jumps in the middle of the discussion. :-) Very helpful indeed :-) -- attaching new version (and much tempted to push to wip-hurd-vm now). Any more wishes or ideas, things to be done before merging? Not all patches were reviewed in their current form, I think. Janneke