From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nils Gillmann Subject: Re: [PATCH] gnu: Add systemd. Date: Sun, 1 Apr 2018 14:19:36 +0000 Message-ID: <20180401141936.4nx7js4e52fjrznp@abyayala> References: <20180401122259.9688-1-mbakke@fastmail.com> <20180401140419.GC26203@macbook41> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:59491) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f2dpK-0000CJ-2d for guix-devel@gnu.org; Sun, 01 Apr 2018 10:19:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f2dpH-0006cs-Jh for guix-devel@gnu.org; Sun, 01 Apr 2018 10:19:22 -0400 Received: from conspiracy.of.n0.is ([2a01:4f8:1c0c:7ad0::1]:46844) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1f2dpH-0006am-7V for guix-devel@gnu.org; Sun, 01 Apr 2018 10:19:19 -0400 Content-Disposition: inline In-Reply-To: <20180401140419.GC26203@macbook41> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: Efraim Flashner Cc: guix-devel@gnu.org Efraim Flashner transcribed 17K bytes: > On Sun, Apr 01, 2018 at 02:22:59PM +0200, Marius Bakke wrote: > > Guix, > > > > As discussed at FOSDEM, it is clear that The Shepherd does not have what > > it takes to boot a modern Linux system. While it works today, adding > > bootloader, DNS server, NTP client, syslog, udev, seat management, > > dishwasher, hardware database, network management and other essential > > PID 1 features is going to take too much effort and duplicate work. > > > > Meanwhile, GuixSD keeps drifting away from other distributions. This > > patch is the first of many in order to gain feature parity with the > > modern GNU/Linux world. 2018 is surely the year of the GuixSD desktop! > > This also allows us to save time with all of these services and allow us > to focus on adding new features that we need. > > > > > Note: It requires the patch from . > > > > * gnu/packages/systemd.scm: New file. > > * gnu/local.mk (GNU_SYSTEM_MODULES): Register it. > > --- > > gnu/local.mk | 1 + > > gnu/packages/systemd.scm | 251 +++++++++++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 252 insertions(+) > > create mode 100644 gnu/packages/systemd.scm > > > > diff --git a/gnu/local.mk b/gnu/local.mk > > index 2705fb37a..dbefd8cca 100644 > > --- a/gnu/local.mk > > +++ b/gnu/local.mk > > @@ -402,6 +402,7 @@ GNU_SYSTEM_MODULES = \ > > %D%/packages/statistics.scm \ > > %D%/packages/storage.scm \ > > %D%/packages/suckless.scm \ > > + %D%/packages/systemd.scm \ > > %D%/packages/swig.scm \ > > %D%/packages/sync.scm \ > > %D%/packages/syncthing.scm \ > > diff --git a/gnu/packages/systemd.scm b/gnu/packages/systemd.scm > > new file mode 100644 > > index 000000000..e90ed65cc > > --- /dev/null > > +++ b/gnu/packages/systemd.scm > > @@ -0,0 +1,251 @@ > > +;;; GNU Guix --- Functional package management for GNU > > +;;; Copyright © 2018 Marius Bakke > > +;;; > > +;;; This file is part of GNU Guix. > > +;;; > > +;;; GNU Guix is free software; you can redistribute it and/or modify it > > +;;; under the terms of the GNU General Public License as published by > > +;;; the Free Software Foundation; either version 3 of the License, or (at > > +;;; your option) any later version. > > +;;; > > +;;; GNU Guix is distributed in the hope that it will be useful, but > > +;;; WITHOUT ANY WARRANTY; without even the implied warranty of > > +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > +;;; GNU General Public License for more details. > > +;;; > > +;;; You should have received a copy of the GNU General Public License > > +;;; along with GNU Guix. If not, see . > > + > > +(define-module (gnu packages systemd) > > + #:use-module (guix packages) > > + #:use-module (guix download) > > + #:use-module (guix build-system meson) > > + #:use-module ((guix licenses) #:prefix license:) > > + #:use-module (gnu packages acl) > > + #:use-module (gnu packages admin) > > + #:use-module (gnu packages aidc) > > + #:use-module (gnu packages base) > > + #:use-module (gnu packages bash) > > + #:use-module (gnu packages compression) > > + #:use-module (gnu packages cryptsetup) > > + #:use-module (gnu packages curl) > > + #:use-module (gnu packages docbook) > > + #:use-module (gnu packages elf) > > + #:use-module (gnu packages gettext) > > + #:use-module (gnu packages glib) > > + #:use-module (gnu packages gnunet) > > + #:use-module (gnu packages gnupg) > > + #:use-module (gnu packages gperf) > > + #:use-module (gnu packages libidn) > > + #:use-module (gnu packages linux) > > + #:use-module (gnu packages m4) > > + #:use-module (gnu packages package-management) > > + #:use-module (gnu packages pcre) > > + #:use-module (gnu packages pkg-config) > > + #:use-module (gnu packages python) > > + #:use-module (gnu packages tls) > > + #:use-module (gnu packages xdisorg) > > + #:use-module (gnu packages xml)) > > + > > +(define-public systemd > > + (package > > + (name "systemd") > > + (version "238") > > + (source (origin > > + (method url-fetch) > > + (uri (string-append "https://github.com/systemd/systemd/archive/v" > > + version ".tar.gz")) > > + (file-name (string-append name "-" version ".tar.gz")) > > This should be a git-checkout, as per bug FILL-IN, with the changing > github tarballs. > > > + (sha256 > > + (base32 > > + "08p0wf6qby2hksa890hbybdfr274chjb3ykdi1rl4g1fmfdmkj5v")))) > > + (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" > > > + > > + (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") > > > + (("/bin/bash") (string-append bash "/bin/bash")) > > + (("/bin/cat") (string-append coreutils "/bin/cat")) > > + (("/bin/echo") (string-append coreutils "/bin/echo")) > > + (("/bin/getent") (string-append glibc "/bin/getent")) > > + (("/sbin/fsck") (string-append util-linux "/sbin/fsck")) > > + (("/sbin/swapon") (string-append util-linux "/sbin/swapon")) > > + (("/sbin/swapoff") (string-append util-linux "/sbin/swapoff"))) > > + (substitute* "src/journal/catalog.c" > > + (("/usr/lib/systemd/catalog") > > + (string-append out "/lib/systemd/catalog"))) > > + #t))) > > + (add-after 'patch-paths 'fix-install > > + (lambda* (#:key outputs #:allow-other-keys) > > + (let ((out (assoc-ref outputs "out"))) > > + ;; Don't create /var/lib/systemd during install. > > + (substitute* "meson.build" > > + ((".*mkdir_p\\.format\\(systemdstatedir\\)\\)") "")) > > + ;; Nor /var/lib/systemd/catalog. > > + (substitute* "catalog/meson.build" > > + (("journalctl --update-catalog") "journalctl --version")) > > + ;; Likewise for /var/log/journal. > > + (substitute* '("src/journal/meson.build" > > + "src/journal-remote/meson.build") > > + (("/var/log/journal") "/tmp/journal")) > > we'll need to keep an eye on this: > This will become a hard error in a future Meson release. 'chown 0:0 $DESTDIR/tmp/journal/remote && 64 33 > > > + ;; 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 I think bash is now part of systemd, so we won't need to reference our store bash as we can simply use the systemd-shell (full featured bash) for this, solving the bootstrap problem for systemd at least, as it already includes everything we'll ever need. > > + ("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 > > > + ("glib" ,glib) > > + ("glibc" ,glibc) > > what about our future Hurd users? > > > + ("gnutls" ,gnutls) > > + ("kbd" ,kbd) > > + ("kmod" ,kmod) > > + ("libcap" ,libcap) > > + ("libgcrypt" ,libgcrypt) > > + ("libidn2" ,libidn2) > > + ("libmicrohttpd" ,libmicrohttpd) > > + ("libseccomp" ,libseccomp) > > + ("libxkbcommon" ,libxkbcommon) > > + ("linux-pam" ,linux-pam) > > + ("lz4" ,lz4) > > + ("pcre2" ,pcre2) > > + ("python" ,python) > > + ("qrencode" ,qrencode) > > + ("util-linux" ,util-linux) > > + ("xz" ,xz) > > + ("zlib" ,zlib))) > > + (home-page "https://www.freedesktop.org/wiki/Software/systemd/") > > + (synopsis "System and service manager") > > + (description > > + "@code{systemd} is a suite of basic building blocks for a Linux system. > > +It provides a system and service manager that runs as PID 1 and starts the > > +rest of the system. systemd provides aggressive parallelization capabilities, > > +uses socket and D-Bus activation for starting services, offers on-demand > > +starting of daemons, keeps track of processes using Linux control groups, > > +maintains mount and automount points, and implements an elaborate transactional > > +dependency-based service control logic.") > > + (license license:lgpl2.1+))) > > + > > -- > > 2.16.3 > > > > > > 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 > > I'll take a look at it. > > -- > Efraim Flashner אפרים פלשנר > GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 > Confidentiality cannot be guaranteed on emails sent or received unencrypted