aboutsummaryrefslogtreecommitdiff
path: root/etc/release-manifest.scm
blob: 773910ac800e630bef2c98373afedc5ac049c31d (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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
;;; 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 © 2023 Andreas Enge <andreas@enge.fr>
;;;
;;; 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/>.

;;; This file returns a manifest containing release-critical bit, for all the
;;; supported architectures and cross-compilation targets.

(use-modules (gnu packages)
             (guix packages)
             (guix profiles)
             ((guix platform) #:select (targets))
             ((gnu services xorg) #:select (%default-xorg-modules))
             (guix utils)
             (guix gexp)
             (srfi srfi-1)
             (srfi srfi-26))

(define* (package->manifest-entry* package system
                                   #:key target)
  "Return a manifest entry for PACKAGE on SYSTEM, optionally cross-compiled to
TARGET."
  (manifest-entry
    (inherit (package->manifest-entry package))
    (name (string-append (package-name package) "." system
                         (if target
                             (string-append "." target)
                             "'")))
    (item (with-parameters ((%current-system system)
                            (%current-target-system target))
            package))))

(define %base-packages
  ;; Packages that must be substitutable on all the platforms Guix supports.
  (map specification->package
       '("bootstrap-tarballs" "gcc-toolchain" "nss-certs"
         "openssh" "emacs" "vim" "python" "guile" "guix")))

(define %base-packages/armhf
  ;; The guix package doesn't build natively on armhf due to Guile memory
  ;; issues compiling the package modules
  (remove (lambda (package)
            (string=? (package-name package) "guix"))
          %base-packages))

(define %base-packages/hurd
  ;; XXX: For now we are less demanding of "i586-gnu".
  (map specification->package
       '("coreutils" "grep" "findutils" "gawk" "make"
         #;"gcc-toolchain" "tar" "xz")))

(define %system-packages
  ;; Key packages proposed by the Guix System installer.
  (append (map specification->package
               '("xorg-server" "xfce" "gnome" "mate" "enlightenment"
                 "openbox" "awesome" "i3-wm" "ratpoison"
                 "emacs" "emacs-exwm" "emacs-desktop-environment"
                 "xlockmore" "slock" "libreoffice"
                 "connman" "network-manager" "network-manager-applet"
                 "openssh" "ntp" "tor"
                 "linux-libre" "grub-hybrid"
                 "icecat"))
          %default-xorg-modules))

(define %packages-to-cross-build
  ;; Packages that must be cross-buildable from x86_64-linux.
  ;; FIXME: Add (@ (gnu packages gcc) gcc) when <https://bugs.gnu.org/40463>
  ;; is fixed.
  (append (list (@ (gnu packages guile) guile-3.0/pinned))
          (map specification->package
               '("coreutils" "grep" "sed" "findutils" "diffutils" "patch"
                 "gawk" "gettext" "gzip" "xz"
                 "hello" "zlib"))))

(define %packages-to-cross-build-for-mingw
  ;; Many things don't build for MinGW.  Restrict to what's known to work.
  (map specification->package '("hello")))

(define %cross-bootstrap-targets
  ;; Cross-compilation triplets for which 'bootstrap-tarballs' must be
  ;; buildable.
  '("i586-pc-gnu"
    "arm-linux-gnueabihf"
    "aarch64-linux-gnu"))


;;;
;;; Manifests.
;;;

(define %base-manifest
  (manifest
   (append-map (lambda (system)
                 (map (cut package->manifest-entry* <> system)
                      (cond ((string=? system "i586-gnu")
                             %base-packages/hurd)
                            ((string=? system "armhf-linux")
                             %base-packages/armhf)
                            ((string=? system "powerpc64le-linux")
                             ;; FIXME: Drop 'bootstrap-tarballs' until
                             ;; <https://bugs.gnu.org/48055> is fixed.
                             (drop %base-packages 1))
                            (else
                             %base-packages))))
               %cuirass-supported-systems)))

(define %system-manifest
  (manifest
   (append-map (lambda (system)
                 ;; Some of %SYSTEM-PACKAGES are currently unsupported on some
                 ;; systems--e.g., GNOME on non-x86_64, due to Rust.  Filter
                 ;; them out.
                 (filter-map (lambda (package)
                               (and (supported-package? package system)
                                    (package->manifest-entry* package system)))
                             %system-packages))
               '("x86_64-linux" "i686-linux"))))  ;Guix System

(define %cross-manifest
  (manifest
   (append-map (lambda (target)
                 (map (cut package->manifest-entry* <> "x86_64-linux"
                           #:target target)
                      (if (target-mingw? target)
                          %packages-to-cross-build-for-mingw
                          %packages-to-cross-build)))
               (fold delete (targets)
                     '(;; Like in (gnu ci), dismiss cross-compilation to x86:
                       ;; it's pointless.
                       "x86_64-linux-gnu"
                       "i686-linux-gnu"

                       ;; XXX: Important bits like libsigsegv and libffi don't
                       ;; support RISCV at the moment, so don't require RISCV
                       ;; support.
                       "riscv64-linux-gnu")))))

(define %cross-bootstrap-manifest
  (manifest
   (map (lambda (target)
          (package->manifest-entry*
           (specification->package "bootstrap-tarballs")
           "x86_64-linux" #:target target))
        %cross-bootstrap-targets)))

;; Return the union of all three manifests.
(concatenate-manifests (list %base-manifest
                             %system-manifest
                             %cross-manifest
                             %cross-bootstrap-manifest))
irst character, silently. Add the [Yes/no] string to the message. When a newline is entered by the user, treat it as the default value, which is "yes". (chk_gpg_keyring): Remove "(yes/no)" from the prompt message. (configure_substitute_discovery): Likewise. (sys_authorize_build_farms): Likewise. Maxim Cournoyer 2022-07-04etc/guix-install.sh: Check for profile from 'guix home'....If "$HOME/.guix-home/profile" exists, use it for GUIX_PROFILE instead of "$HOME/.guix-profile". * etc/guix-install.sh (sys_create_init_profile): Check for 'guix home' profile. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Philip McGrath 2022-07-04etc/guix-install.sh: Initialize XDG base directories....The default values from the XDG base directory specification make little sense for Guix System, and some scripts in Guix assume that they are not "empty or unset": for example, see <https://issues.guix.gnu.org/56050>. On foreign distros, however, omitting the default values is likely to break software from the distro, perhaps even preventing the desktop environment from starting. To smooth over the difference, use the system-wide configuration to ensure the environment variables are always explicitly set on foreign distros. * etc/guix-install.sh (sys_create_init_profile): Explicitly initialize XDG base directory variables. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Philip McGrath 2021-11-07guix-install.sh: Undo some bugs introduced by shellcheck....* etc/guix-install.sh: Unquote all file names containing ~root. Tobias Geerinckx-Rice 2021-09-29guix-install.sh: Don't swallow wget errors....Using ‘-q’ suppresses *all* stderr output, including errors. * etc/guix-install.sh (chk_gpg_keyring, guix_get_bin_list, guix_get_bin): Substitute ‘--no-verbose’ for ‘-q’. Reported by Maxim Cournoyer <maxim.cournoyer@gmail.com> Tobias Geerinckx-Rice 2021-07-14guix-install.sh: Untabify....* etc/guix-install.sh (sys_create_build_user): Normalize to spaces. Maxim Cournoyer 2021-07-07guix-install.sh: Prompt for configuring substitutes discovery....Also ensure prompt_yes_no always print the message with a trailing space, which is more pleasing to the eye. * etc/guix-daemon.conf.in <--discover=no>: New guix-daemon option. * etc/guix-daemon.service.in: Likewise. * etc/init.d/guix-daemon.in: Likewise. * etc/openrc/guix-daemon.in: Likewise. * etc/guix-install.sh (configure_substitute_discovery): New procedure. (sys_enable_guix_daemon): Ask the user whether automatic substitute discovery should be enabled. Set the '--discover' argument accordingly. (prompt_yes_no): Add a trailing space to the message. (sys_authorize_build_farms): Remove trailing space from the message argument. * NEWS (Distribution): Add news. Maxim Cournoyer 2021-07-07guix-install.sh: No longer export GUIX_PROFILE....If GUIX_PROFILE is exported here, any subsequent "source /some/other/profile/etc/profile" will set variables pointing to "$HOME/.guix-profile" instead of pointing to the sourced profile. * etc/guix-install.sh (sys_create_init_profile): No longer export GUIX_PROFILE. Hartmut Goebel 2021-05-05guix-install.sh: Exit early if Guix is already installed....* etc/guix-install.sh (sys_create_store): Move the check & exit before The Guix binary archive is unpacked. Re-indent tar extraction command. Maxim Cournoyer 2021-05-05guix-install.sh: Propose automatically fetching OpenPGP keys....Via, for example, yes | ./guix-install.sh. * etc/guix-install.sh (prompt_yes_no): New procedure. (chk_gpg_keyring, sys_authorize_build_farms): Use it. Maxim Cournoyer 2021-05-05guix-install.sh: Please the shellcheck linter....* etc/guix-install.sh <FUNCNAME>: Explicitly refer to the first item of the FUNCNAME array. (ROOT_HOME): Replace variable by ~root directly; manually expanding it via echo was not necessary. (chk_gpg_keyring): Use an if branch for the exit to avoid a warning about expression precedence. (chk_term) <ansi_term>: Remove unused variable. (guix_get_bin) <wget, gpg>: Test the commands directly. Use an array for the wget arguments, which can then be properly expanded. (sys_create_store): Disable SC1090 for the source command, as we don't care about following the sourced script. <_msg>: Reuse the GUIX_PROFILE variable in the message. (sys_create_build_user) <getent>: Test the command directly. Maxim Cournoyer 2021-05-01guix-install.sh: Add support for more than one signing key....The forthcoming 1.3.0 release will be signed with my personal GnuPG key; the installation script need to tell users how fetch it. * etc/guix-install.sh (OPENPGP_SIGNING_KEY_ID): Remove variable. (GPG_SIGNING_KEYS): New associative array. (chk_gpg_keyring): Process all the keys contained in the above array. (main) <GUIX_BINARY_FILE_NAME>: Double quote variable. Maxim Cournoyer 2021-04-29guix-install.sh: Ensure GUIX_BINARY_FILE_NAME is an absolute path....This is necessary as the directory context is changed in the script, breaking the use of a relative path. * etc/guix-install.sh (main) <GUIX_BINARY_FILE_NAME>: Resolve its absolute path via the 'realpath' command. Maxim Cournoyer 2021-04-24guix-install.sh: Allow overriding the Guix binary source....This is useful for example for testing release candidates not yet uploaded to the FTP, or for testing manually downloaded images from the CI. * etc/guix-install.sh (main)[GUIX_BINARY_FILE_NAME]: When this variable is defined, use it as the file name of a Guix binary, instead of automatically retrieving the latest archive from the FTP. Maxim Cournoyer 2021-04-14guix-install.sh: Add the build users to the 'kvm' group....Fixes <https://bugs.gnu.org/42129>. * etc/guix-install.sh (sys_create_build_user): If a 'kvm' group exists, add it to the guixbuilders' lists of supplementary groups. Leo Famulari 2021-03-23Add powerpc64le-linux as a supported Guix architecture....This makes powerpc64le-linux a supported architecture for Guix, but not for Guix System. * Makefile.am (SUPPORTED_SYSTEMS): Add an entry for powerpc64le-linux. * etc/guix-install.sh (chk_sys_arch): Same. * guix/packages.scm (%supported-systems): Same. * m4/guix.m4 (GUIX_ASSERT_SUPPORTED_SYSTEM): Same. * tests/guix-build.sh (all_systems): Same. Chris Marusich 2021-01-03/etc/profile.d/guix.sh: Add guix pull profile even when absent...* etc/guix-install.sh (sys_create_init_profile): Set PATH and INFOPATH even when $_GUIX_PROFILE does not exist. After initial installation on a foreign distro, the guix pull profile won't be present in path. This means that the first guix pull won't take effect until the shell is restarted. ~/.guix-profile cannot be pre-loaded like this as the relevant paths are stored in ~/.guix-profile/etc/profile, which simply won't exist. However, guix package will output a relevant hint that instructs the user to reload the profile, so this isn't a problem. Jakub Kądziołka 2020-12-18guix-install.sh: Add variable quoting and curly-bracketing....* etc/guix-install.sh (guix_get_bin)[dl_path]: Add variable quoting and curly-bracketing. Signed-off-by: Christopher Baines <mail@cbaines.net> Vincent Legoll 2020-12-18guix-install.sh: Adjust variable use in guix_get_bin_list()....* etc/guix-install.sh (guix_get_bin_list)[BIN_VER]: Add curly-brackets, [latest_ver]: Likewise & add explicit array zero-indexing. Signed-off-by: Christopher Baines <mail@cbaines.net> Vincent Legoll 2020-12-18guix-install.sh: Add variable quoting in sys_make_guix_available....* etc/guix-install.sh (sys_make_guix_available): Add variable quoting. Signed-off-by: Christopher Baines <mail@cbaines.net> Vincent Legoll 2020-12-18guix-install.sh: Replace tabs with spaces....Almost the entire file is indented with spaces, a few tabs slipped in, clean them up. * etc/guix-install.sh(chk_sys_arch): Replace tabs with spaces. (sys_enable_guix_daemon): Likewise. Signed-off-by: Christopher Baines <mail@cbaines.net> Vincent Legoll 2020-11-15guix-install.sh: don't throw away release candidates when picking the latest ......* etc/guix-install.sh (guix_get_bin_list): modify regexes to allow rcN syntax Signed-off-by: Ludovic Courtès <ludo@gnu.org> Daniel Brooks 2020-10-16guix-install.sh: Check the service 'nscd' and suggest it....Fixes <https://bugs.gnu.org/43744>. * etc/guix-install.sh (chk_sys_nscd): New function to check if the service 'nscd is running, otherwise suggest to install distribution-wide. Signed-off-by: Ludovic Courtès <ludo@gnu.org> zimoun 2020-10-16guix-install.sh: Add symbolic links for supported shell completions....Fixes <https://bugs.gnu.org/43744>. * etc/guix-install.sh (sys_create_shell_completion): New function to add system wide all the symlinks for supported shell completions. Signed-off-by: Ludovic Courtès <ludo@gnu.org> zimoun 2020-09-17guix-install.sh: Support OpenRC....* etc/guix-install.sh (chk_init_sys): Detect OpenRC. (sys_enable_guix_daemon): Install & enable the Guix daemon on such systems. * etc/openrc/guix-daemon.in: New file. * nix/local.mk: Add a rule for it. (openrcservicedir, nodist_openrcservice_DATA): New variables. (CLEANFILES, EXTRA_DIST): Add them. * .gitignore: Ignore etc/openrc/guix-daemon. Signed-off-by: Tobias Geerinckx-Rice <me@tobias.gr> Morgan Smith 2020-09-17guix-install.sh: Be POSIX-compliant....* etc/guix-install.sh (guix_get_bin_list): Call grep with an extended regular expression instead of a non-POSIX Perl regular expression. (sys_create_store): Remove ‘--warning=no-timestamp’ argument to tar. Signed-off-by: Tobias Geerinckx-Rice <me@tobias.gr> Morgan Smith 2020-09-09guix-install.sh: Quote the OpenPGP key URL....Without quotes, zsh fails with "no matches found" as it tries to interpret the question mark. * etc/guix-install.sh (chk_gpg_keyring): Enclose URL in single quotes. Ludovic Courtès