aboutsummaryrefslogtreecommitdiff
path: root/gnu/machine.scm
blob: 0b79402b0a8e52f4d8cee5b1c511b82f8b0d9eb7 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 David Thompson <davet@gnu.org>
;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@sdf.lonestar.org>
;;;
;;; 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 <http://www.gnu.org/licenses/>.

(define-module (gnu machine)
  #:use-module (gnu system)
  #:use-module (guix derivations)
  #:use-module (guix monads)
  #:use-module (guix records)
  #:use-module (guix store)
  #:use-module ((guix utils) #:select (source-properties->location))
  #:export (environment-type
            environment-type?
            environment-type-name
            environment-type-description
            environment-type-location

            machine
            machine?
            this-machine

            machine-system
            machine-environment
            machine-configuration
            machine-display-name

            deploy-machine
            machine-remote-eval))

;;; Commentary:
;;;
;;; This module provides the types used to declare individual machines in a
;;; heterogeneous Guix deployment. The interface allows users of specify system
;;; configurations and the means by which resources should be provisioned on a
;;; per-host basis.
;;;
;;; Code:


;;;
;;; Declarations for resources that can be provisioned.
;;;

(define-record-type* <environment-type> environment-type
  make-environment-type
  environment-type?

  ;; Interface to the environment type's deployment code. Each procedure
  ;; should take the same arguments as the top-level procedure of this file
  ;; that shares the same name. For example, 'machine-remote-eval' should be
  ;; of the form '(machine-remote-eval machine exp)'.
  (machine-remote-eval environment-type-machine-remote-eval) ; procedure
  (deploy-machine      environment-type-deploy-machine)      ; procedure

  ;; Metadata.
  (name        environment-type-name)       ; symbol
  (description environment-type-description ; string
               (default #f))
  (location    environment-type-location    ; <location>
               (default (and=> (current-source-location)
                               source-properties->location))
               (innate)))


;;;
;;; Declarations for machines in a deployment.
;;;

(define-record-type* <machine> machine
  make-machine
  machine?
  this-machine
  (system        machine-system)       ; <operating-system>
  (environment   machine-environment)  ; symbol
  (configuration machine-configuration ; configuration object
                 (default #f)))        ; specific to environment

(define (machine-display-name machine)
  "Return the host-name identifying MACHINE."
  (operating-system-host-name (machine-system machine)))

(define (machine-remote-eval machine exp)
  "Evaluate EXP, a gexp, on MACHINE. Ensure that all the elements EXP refers to
are built and deployed to MACHINE beforehand."
  (let ((environment (machine-environment machine)))
    ((environment-type-machine-remote-eval environment) machine exp)))

(define (deploy-machine machine)
  "Monadic procedure transferring the new system's OS closure to the remote
MACHINE, activating it on MACHINE and switching MACHINE to the new generation."
  (let ((environment (machine-environment machine)))
    ((environment-type-deploy-machine environment) machine)))
-boot0) (ld-wrapper-boot0, glibc-final-with-bootstrap-bash) (static-bash-for-glibc, gettext-boot0, glibc-final, binutils-final) (libstdc++, zlib-final, bash-final): Likewise. (expat-sans-tests)[inputs]: New field. [arguments]: Add #:implicit-inputs? and #:guile. (m4-boot0*): New variable. Ludovic Courtès 2019-10-12gnu: Remove unnecessary uses of 'package-with-bootstrap-guile'....This reduces the object graph returned by: guix graph -e '(@@ (gnu packages commencement) glibc-final-with-bootstrap-bash) from 333 nodes (1542 edges) to 148 nodes (886 edges). This improves 'package-derivation' memoization and, consequently, the 'add-data-to-store' cache shown by: GUIX_PROFILING=add-data-to-store-cache guix build coreutils -nd goes from 10948 lookups to 8935 lookups. * gnu/packages/commencement.scm (mes-boot): Remove call to 'package-with-bootstrap-guile'. Call 'bootstrap-origin' on the source of NYACC-0.86. (tcc-boot0): Likewise. (tcc-boot): Remove call to 'package-with-bootstrap-guile' and call 'bootstrap-origin' on its source. (make-mesboot0): Remove call to 'package-with-bootstrap-guile'. (diffutils-mesboot): Likewise. (binutils-mesboot0): Likewise, and call 'bootstrap-origin' for its source. (gcc-core-mesboot): Likewise. (mesboot-headers): Remove call to 'package-with-bootstrap-guile'. (glibc-mesboot0): Likewise, and call 'bootstrap-origin' for its source. (gcc-mesboot0): Remove call to 'package-with-bootstrap-guile'. (binutils-mesboot): Likewise. (make-mesboot): Likewise. (gcc-mesboot1): Likewise, and call 'bootstrap-origin' for its source. (gcc-mesboot1-wrapper): Remove call to 'package-with-bootstrap-guile'. (glibc-headers-mesboot): Likewise, and call 'bootstrap-origin' for its source. (glibc-mesboot): Remove call to 'package-with-bootstrap-guile'. (gcc-mesboot): Likewise, and call to 'bootstrap-origin' for its source. (gcc-mesboot-wrapper): Remove call to 'package-with-bootstrap-guile'. (m4-mesboot): Likewise. (gnu-make-boot0): Likewise, and call 'bootstrap-origin' for its source. Ludovic Courtès 2019-09-08maint: Placate 'assert-no-store-file-names'....Reported by Vagrant Cascadian <vagrant@debian.org>. * Makefile.am (assert-no-store-file-names): Exclude "binutils-boot-2.20.1a.patch" since it contains a store file name as a comment. * gnu/packages/commencement.scm (glibc-mesboot0): Use an ellipsis instead of an actual store file name in comment. Ludovic Courtès 2019-09-08bootstrap: mes-boot: Fix at 0.19....This allows updating Mes without triggering a rebuild. * gnu/packages/commencement.scm (mes-boot): Fix 0.19. Jan Nieuwenhuizen 2019-09-06Merge branch 'master' into core-updatesMark H Weaver 2019-09-04gnu: glibc-utf8-locales: Fix cross-compilation....* gnu/packages/base.scm (glibc-utf8-locales)[inputs]: Move to ... [native-inputs]: ... here, in order to fix cross-compilation. * gnu/packages/commencement.scm (glibc-utf8-locales-final)[inputs]: Move to ... [native-inputs]: ... here, in order to fix cross-compilation. Mathieu Othacehe 2019-08-28gnu: bison-boot0: Build sequentially....This is a followup to 2c35ae82192fd6f1732b15fa41aec87aa61a1879 and b1593c1c4fd8f4fc6df4c43cab51334426e3aa76. * gnu/packages/commencement.scm (bison-boot0)[arguments]: Add #:parallel-build? and #:parallel-tests? on x86. Ludovic Courtès 2019-07-17Merge branch 'master' into core-updatesLudovic Courtès 2019-07-16gnu: Allow building toolchain with non-default libc....* gnu/packages/base.scm (make-gcc-libc): Make public. * gnu/packages/commencement.scm (make-gcc-toolchain): Add 'libc' optional argument to specify using a non-default glibc package, also make public. Carl Dong 2019-07-09gnu: flex: Remove superfluous input....The configure script will warn that "make indent" is unavailable, but apart from that this input is not actually used for the build process. * gnu/packages/flex.scm (flex)[inputs]: Remove INDENT. * gnu/packages/commencement.scm (flex-boot0)[inputs]: Likewise. Marius Bakke 2019-07-09gnu: Python: Update to 3.7.4....* gnu/packages/python.scm (python-3.7): Update to 3.7.4. [source](snippet): Move disabled tests ... [arguments]<#:make-flags>: ... here. Enable previously failing tests. <#:phases>: Add 'set-TZDIR'. [native-inputs]: Add TZDATA-FOR-TESTS. * gnu/packages/commencement.scm (python-boot0)[arguments]: Clear <#:make-flags>. Delete 'set-TZDIR' phase. * gnu/packages/patches/python-3-fix-tests.patch: Disable two new tests that do not work in the build container. Adjust context. Marius Bakke 2019-07-07gnu: commencement: Fix Python build on non-x86 platforms....* gnu/packages/commencement.scm (python-boot0)[version, source]: Downgrade to 3.5.7. [arguments]: Remove <#:make-flags>. Add <#:phases>. [native-inputs]: Remove artifical dependency on PKG-CONFIG. Marius Bakke 2019-07-02gnu: glibc: Update to 2.29....* gnu/packages/patches/glibc-bootstrap-system.patch, gnu/packages/patches/glibc-supported-locales.patch: Adjust for glibc 2.29. * gnu/packages/patches/glibc-2.28-supported-locales.patch, gnu/packages/patches/glibc-CVE-2019-7309.patch, gnu/packages/patches/glibc-CVE-2019-9169.patch, gnu/packages/patches/glibc-2.29-git-updates.patch: New files. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/base.scm (glibc): Update to 2.29. [source](patches): Add 'glibc-CVE-2019-7309.patch', 'glibc-CVE-2019-9169.patch', and 'glibc-2.29-git-updates.patch'. Remove 'glibc-hurd-magic-pid.patch'. [native-inputs]: Add PYTHON-MINIMAL. (glibc-2.28): New public variable. * gnu/packages/commencement.scm (expat-sans-tests, python-boot0): New variables. (glibc-final-with-bootstrap-bash)[native-inputs]: Add PYTHON-BOOT0. * gnu/packages/python.scm (python-3.7)[arguments]: Disable test that fails with glibc 2.29. Marius Bakke 2019-07-02gnu: linux-libre-headers: Update to 4.19.56....* gnu/packages/linux.scm (linux-libre-headers-4.14.67): Rename to ... (linux-libre-headers-4.19.56): ... this. Adjust hash accordingly. (linux-libre-headers): Set to LINUX-LIBRE-HEADERS-4.19.56. * gnu/packages/commencement.scm (linux-libre-headers-boot0)[native-inputs]: Add FLEX-BOOT0 and BISON-BOOT0. Marius Bakke 2019-07-02gnu: commencement: Remove outdated comment....* gnu/packages/commencement.scm (bison-boot0): Remove bash comment, which is no longer accurate. Marius Bakke 2019-07-02gnu: gettext: Update to 0.20.1....* gnu/packages/gettext.scm (gettext-minimal): Update to 0.20.1. [source](snippet): Remove. [inputs]: Remove EXPAT. Add LIBUNISTRING, LIBXML2, and NCURSES. [arguments]: Add #:configure-flags and a "patch-fixed-paths" phase. Delete "link-expat" phase. * gnu/packages/commencement.scm (gettext-boot0): Stay on version 0.19.8.1. [arguments]: Adjust accordingly. Co-authored-by: Miguel <rosen644835@gmail.com> Marius Bakke 2019-06-20gnu: commencement: Return #t from all phases....While at it, remove useless (and ...) indirections, because the procedures never return #f anyway: instead they would raise an exception upon failure. * gnu/packages/commencement.scm (mes-boot, tcc-boot0, tcc-boot, diffutils-mesboot, binutils-mesboot0, gcc-core-mesboot, gcc-mesboot0, glibc-headers-mesboot, glibc-mesboot, gnu-make-boot0): Return #t from phases and remove (and ...) blocks. Marius Bakke 2019-06-17gnu: gcc-mesboot-wrapper: Fix 'version' field....Until now the 'version' field would match 'gcc-mesboot1-wrapper' ("4.7.4") instead of that of 'gcc-mesboot' ("4.9.4"). * gnu/packages/commencement.scm (gcc-mesboot-wrapper)[version]: New field. Ludovic Courtès 2019-06-17gnu: commencement: '%bootstrap-inputs+toolchain' no longer contains Mes....* gnu/packages/commencement.scm (%bootstrap-inputs+toolchain): On i686-linux and x86_64-linux, remove "bootstrap-mescc-tools" and "mes" from %BOOTSTRAP-INPUTS. Ludovic Courtès 2019-06-13gnu: mes-boot, tcc-boot0: Require nyacc 0.86....This is a followup to b8016467273d06ffe3780ac97d38acfd72ce15d9. * gnu/packages/commencement.scm (mes-boot, tcc-boot0): Use source from NYACC-0.86 instead of NYACC. Ludovic Courtès 2019-05-25Merge branch 'staging' into core-updatesMarius Bakke 2019-05-06gnu: gcc: Add 9.1.0....* gnu/packages/gcc.scm (gcc-9): New variable. * gnu/packages/commencement.scm (gcc-toolchain-9): New variable. * gnu/packages/patches/gcc-9-strmov-store-file-names.patch: New file. * gnu/local.mk (dist_patch_DATA): Add the patch. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Carl Dong 2019-05-01Merge branch 'master' into core-updatesMarius Bakke 2019-03-31gnu: Fix descriptions to not use quotes....* gnu/packages/admin.scm (wpa-supplicant-minimal, mingetty, di), * gnu/packages/audio.scm (fil-plugins), * gnu/packages/base.scm (make-ld-wrapper, make-glibc-locales), * gnu/packages/bioinformatics.scm (r-samtools), * gnu/packages/chez.scm (chez-mit), * gnu/packages/commencement.scm (make-gcc-toolchain), * gnu/packages/compression.scm (fastjar), * gnu/packages/cran.scm (r-maps, r-rcpp), * gnu/packages/databases.scm (sparql-query), * gnu/packages/dunst.scm (dunst), * gnu/packages/ftp.scm (ncftp), * gnu/packages/gl.scm (freeglut), * gnu/packages/haskell-check.scm (ghc-tasty-golden), * gnu/packages/haskell.scm (ghc-case-insensitive, ghc-text, ghc-haskell-src, ghc-syb, ghc-deepseq-generics, ghc-network-uri, ghc-rerebase, ghc-zlib), * gnu/packages/image.scm (jbig2dec), * gnu/packages/kde-frameworks.scm (kinit, karchive), * gnu/packages/linux.scm (wireless-tools, perf, module-init-tools, kbd), * gnu/packages/lirc.scm (lirc), * gnu/packages/lisp.scm (uglify-js), * gnu/packages/mate.scm (mate-netbook), * gnu/packages/microcom.scm (microcom), * gnu/packages/music.scm (bristol), * gnu/packages/networking.scm (perl-geo-ip), * gnu/packages/patchutils.scm (patches), * gnu/packages/perl-check.scm (perl-test-more-utf8), * gnu/packages/perl.scm (perl-log-report-optional, perl-file-which, perl-io-tty, perl-log-any, perl-digest-sha1, perl-class-load, perl-regexp-common, perl-module-pluggable, perl-class-modifier), * gnu/packages/python-xyz.scm (python-backports-abc, python-natsort), * gnu/packages/samba.scm (iniparser), * gnu/packages/search.scm (mlocate), * gnu/packages/spice.scm (spice), * gnu/packages/statistics.scm (r-dt, r-lubridate, r-estimability, r-commonmark, r-digest, r-viridislite, r-stringr), * gnu/packages/tex.scm (texlive-latex-changebar), * gnu/packages/version-control.scm (subversion), * gnu/packages/w3m.scm (w3m), * gnu/packages/web.scm (perl-http-parser, perl-plack-middleware-reverseproxy), * gnu/packages/xorg.scm (xkeyboard-config, mkfontdir, xcursor-theme, mkfontscale, xinit, font-alias)[description]: Use @code instead of quotes. Efraim Flashner