aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.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/>.

;; Build Guix using Guix.

(use-modules (srfi srfi-26))

;; Add ~/.config/guix/current to the search path.
(eval-when (expand load eval)
  (and=> (or (getenv "XDG_CONFIG_HOME")
             (and=> (getenv "HOME")
                    (cut string-append <> "/.config/guix/current")))
         (lambda (current)
           (set! %load-path
             (cons (string-append current "/share/guile/site/"
                                  (effective-version))
                   %load-path))
           (set! %load-compiled-path
             (cons (string-append current "/lib/guile/" (effective-version)
                                  "/site-ccache")
                   %load-compiled-path)))))

(use-modules (guix) (guix ui)
             (guix git-download)
             (ice-9 match))

(match (command-line)
  ((program source)
   (with-error-handling
     (with-store store
       (let* ((script (string-append source "/build-aux/build-self.scm"))
              (build  (primitive-load script))
              (git?   (git-predicate source)))
         (run-with-store store
           ;; TODO: Extract #:version and #:commit using Guile-Git.
           (mlet* %store-monad ((source (interned-file source "guix-source"
                                                       #:select? git?
                                                       #:recursive? #t))
                                (drv    (build source #:pull-version 1)))
             (mbegin %store-monad
               (show-what-to-build* (list drv))
               (built-derivations (list drv))
               (with-monad %store-monad
                 (display (derivation->output-path drv))
                 (newline)
                 (return drv))))))))))
ute ‘--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