Efraim Flashner writes: >> + (build-system meson-build-system) >> + (arguments >> + `(#:tests? #f ;FIXME: The disable-broken-tests phase is ineffective. >> + #:configure-flags >> + (let ((bash (assoc-ref %build-inputs "bash")) >> + (coreutils (assoc-ref %build-inputs "coreutils")) >> + (kbd (assoc-ref %build-inputs "kbd")) >> + (kmod (assoc-ref %build-inputs "kmod")) >> + (util-linux (assoc-ref %build-inputs "util-linux")) >> + >> + (out (assoc-ref %outputs "out"))) >> + (list (string-append "-Dkill-path=" coreutils "/bin/kill") >> + (string-append "-Dkmod-path=" kmod "/bin/kmod") >> + (string-append "-Dsulogin-path=" util-linux "/bin/sulogin") >> + (string-append "-Dmount-path=" util-linux "/bin/mount") >> + (string-append "-Dumount-path=" util-linux "/bin/umount") >> + (string-append "-Dloadkeys-path=" kbd "/bin/loadkeys") >> + (string-append "-Dsetfont-path=" kbd "/bin/setfont") >> + (string-append "-Ddebug-shell=" bash "/bin/sh") >> + >> + ;; XXX: Can we reuse %ntp-servers here? >> + (string-append "-Dntp-servers=" >> + (string-join (map (lambda (n) >> + (string-append (number->string n) >> + ".guix.pool.ntp.org")) >> + '(0 1 2 3)) >> + ",")) >> + >> + ;; Use localhost for DNS with fallback to Quad9 (instead of Google). >> + "-Ddns-servers=127.0.0.1,::1,9.9.9.10,2620:fe::10" >> + >> + ;; FIXME: "Attempt to load external entity http://docbook.sf.net". >> + "-Dman=false" >> + >> + ;; Don't install SysV compatibility scripts. >> + "-Dsysvinit-path=" >> + "-Dsysvrcnd-path=" > > ;; Don't record build time. > "-Dtime-epoch=1" Good catch! >> + >> + (string-append "-Dbashcompletiondir=" out "/etc/bash_completion.d") >> + (string-append "-Dsysconfdir=" out "/etc") >> + (string-append "-Drootprefix=" out) >> + (string-append "-Drootlibdir=" out "/lib") >> + (string-append "-Ddbuspolicydir=" out "/etc/dbus-1/system.d") >> + (string-append "-Dpamconfdir=" out "/etc/pam.d"))) >> + #:phases (modify-phases %standard-phases >> + (add-after 'unpack 'patch-paths >> + (lambda* (#:key inputs outputs #:allow-other-keys) >> + (let ((bash (assoc-ref inputs "bash")) >> + (coreutils (assoc-ref inputs "coreutils")) >> + (glibc (assoc-ref inputs "glibc")) >> + (util-linux (assoc-ref inputs "util-linux")) >> + >> + (out (assoc-ref outputs "out"))) >> + >> + (substitute* '("src/core/swap.c" >> + "src/fsck/fsck.c" >> + "src/journal/cat.c" >> + "src/nspawn/nspawn.c" >> + "src/nspawn/nspawn-setuid.c") >> + (("/bin/sh") (string-append bash "/bin/sh")) > > this could be (which "sh") In a cross-compilation context, "which" might pick up the "native" bash, which is why I opted for the explicit coreutils and bash inputs. >> + ;; Create the hwdb in out/etc/udev/hwdb.d, not /etc/udev. >> + (substitute* "hwdb/meson.build" >> + (("systemd-hwdb update") >> + (string-append "systemd-hwdb -r " out >> + "/etc/udev/hwdb.d update"))) >> + #t))) >> + (add-before 'configure 'set-runpath >> + (lambda* (#:key outputs #:allow-other-keys) >> + (let ((out (assoc-ref outputs "out"))) >> + ;; We need out/lib and out/lib/systemd in RUNPATH. >> + (setenv "LDFLAGS" (string-append "-Wl,-rpath=" out "/lib," >> + "-rpath=" out "/lib/systemd")) >> + #t))) >> + (add-before 'check 'disable-broken-tests >> + (lambda _ >> + (delete-file "test-network") ;requires loopback >> + (delete-file "test-engine") ;requires cgroups >> + (delete-file "test-unit-name") ;likewise >> + (delete-file "test-unit-file") ;likewise >> + (delete-file "test-copy") ;FIXME >> + (delete-file "test-condition") ;requires containers >> + (delete-file "test-mount-util") ;requires /sys >> + (delete-file "test-exec-util") ;FIXME >> + (delete-file "test-xattr-util") ;FIXME >> + (delete-file "test-fs-util") ;requires /var/tmp >> + (delete-file "test-stat-util") ;FIXME >> + (delete-file "test-user-util") ;needs "root" user >> + (delete-file "test-path-lookup") ;expects systemd paths >> + (delete-file "test-namespace") ;requires containers >> + (delete-file "test-bpf") ;requires cgroups >> + (delete-file "test-fileio") ;FIXME >> + (delete-file "test-time-util") ;FIXME tzdata >> + (delete-file "test-date") ;likewise >> + (delete-file "test-calendarspec") ;likewise >> + (delete-file "test-cgroup-util") ;requires cgroup (duh) >> + (delete-file "test-strv") ;FIXME >> + (delete-file "test-path-util") ;FIXME /bin/sh >> + (delete-file "test-path") ;requires cgroup >> + (delete-file "test-sched-prio") ;requires cgroup >> + (delete-file "test-id128") ;FIXME >> + (delete-file "test-journal-flush") ;FIXME >> + (delete-file "test-bus-creds") ;requires cgroup >> + (delete-file "test-login") ;FIXME >> + (delete-file "test-dhcp-client") ;requires network >> + (delete-file "test-dhcp6-client") ;likewise >> + #t)) >> + (add-after 'install 'fix-environment-symlink >> + (lambda* (#:key outputs #:allow-other-keys) >> + ;; The install phase creates this dangling symlink: >> + ;; lib/environment.d/00-environment.conf -> ../../etc/environment >> + ;; ...which causes the 'fix-runpath' phase to error out. >> + ;; XXX: This should probably use /etc/environment instead. >> + (mkdir-p (string-append (assoc-ref outputs "out") >> + "/etc/environment")) >> + #t))))) >> + (native-inputs >> + `(("docbook-xml" ,docbook-xml) >> + ("docbook-xsl" ,docbook-xsl) >> + ("gettext" ,gettext-minimal) >> + ("gperf" ,gperf) >> + ("lxml" ,python-lxml) >> + ("m4" ,m4) >> + ("pkg-config" ,pkg-config) >> + ("xsltproc" ,libxslt))) >> + (inputs >> + `(("acl" ,acl) >> + ("audit" ,audit) >> + ("bash" ,bash) > > we probably don't need to include bash specifically, isn't it part of > the build system? Also, it should be bash-minimal Bash-minimal indeed. Oops. :-) However as ng0 mentioned, bash is soon part of systemd, so it won't be needed for very long. (I'm not sure we can joke about this, since we've talked about including "gash"[0] in the initrd...) [0] https://gitlab.com/rutger.van.beusekom/gash >> + ("bzip2" ,bzip2) >> + ("coreutils" ,coreutils) >> + ("cryptsetup" ,cryptsetup) >> + ("curl" ,curl) >> + ("dbus" ,dbus) >> + ;; TODO: Add gnu-efi for bootloader functionality. >> + ("elfutils" ,elfutils) > > Currently elfutils fails its test phase on armhf and aarch64, so we'll > need to fix this before rolling it out so we don't cut out users on > these platforms That's a shame. Users of those platforms will have to step in and do their part if they want to enjoy the New And Improved GuixSD. >> + ("glib" ,glib) >> + ("glibc" ,glibc) > > what about our future Hurd users? I'm sure Linux and the Hurd will both be subsumed by systemd in due time. [...] > Currently installing fails with the error: > Failed to run install script '/gnu/store/rl5m6cysqhizqr2nminx2nxficpiadmi-bash-4.4.12/bin/sh -c test -n "$DESTDIR" || /gnu/store/mqgzqi600k8yqhih863r6ngw0bmamqkq-systemd-238/bin/journalctl --version' > FAILED: meson-install You'll need to make linking work properly. Thanks for the feedback!