aboutsummaryrefslogtreecommitdiff
# GNU Guix --- Functional package management for GNU
# Copyright © 2018, 2019 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/>.

#
# Test the 'guix pack --localstatedir' command-line utility.
#

guix pack --version

# 'guix pack --localstatedir' produces derivations that depend on
# guile-sqlite3 and guile-gcrypt.  To make that relatively inexpensive, run
# the test in the user's global store if possible, on the grounds that
# binaries may already be there or can be built or downloaded inexpensively.

storedir="`guile -c '(use-modules (guix config))(display %storedir)'`"
localstatedir="`guile -c '(use-modules (guix config))(display %localstatedir)'`"
NIX_STORE_DIR="$storedir"
GUIX_DAEMON_SOCKET="$localstatedir/guix/daemon-socket/socket"
export NIX_STORE_DIR GUIX_DAEMON_SOCKET

if ! guile -c '(use-modules (guix)) (exit (false-if-exception (open-connection)))'
then
    exit 77
fi

# Build a tarball with '--localstatedir'
the_pack="`guix pack -C none --localstatedir --profile-name=current-guix \
            guile-bootstrap`"
test_directory="`mktemp -d`"
trap 'chmod -Rf +w "$test_directory"; rm -rf "$test_directory"' EXIT

cd "$test_directory"
tar -xf "$the_pack"

profile="`find -name current-guix`"
test "`readlink $profile`" = "current-guix-1-link"
test -s "`dirname $profile`/../../../db/db.sqlite"
test -x ".`guix build guile-bootstrap`/bin/guile"
cd -

# Make sure the store database is not completely bogus.
guile -c "(use-modules (sqlite3) (guix config) (ice-9 match))

  (define db
    (sqlite-open (string-append \"$test_directory\"
                                %localstatedir
                               \"/guix/db/db.sqlite\")
                 SQLITE_OPEN_READONLY))

  (define stmt
    (sqlite-prepare db \"SELECT * FROM ValidPaths;\"))

  (match (sqlite-fold cons '() stmt)
    ((#(ids paths hashes times derivers sizes) ...)
     (exit (member \"`guix build guile-bootstrap`\" paths))))"
n if it is executable. Change-Id: Ic7cc186618b0b92fccf49a3b27805756a9126b89 Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2024-06-04guix-install.sh: Add unique requirement for sysv init systemRichard Sent This improves the installer's ability to detect that all requirements are present regardless of init system. It also avoids performing the requirement check twice (printing excessively to the console) and provides a framework for adding new init system specific requirements if it's needed in the future. * etc/guix-install.sh (add_init_sys_require): Create. (SYSV_INIT_REQUIRE): Create. (main_install): Reorder installer steps so all requirements are checked in one pass. Change-Id: Ic541c1b90499d504642b7ab4ae595501b1a37b0d Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2024-06-02guix-install.sh: Relax check for OpenRC.Tomas Volf On my virtual private servers running Alpine, the install script failed to identify the init system. The virtual server is LXC based, and OpenRC identifies itself like this: # openrc --version openrc (OpenRC [LXC]) 0.52.1 The regular expression failed to match it. After relaxing the check (by removing the trailing `)' requirement) the installation went fine and I got functional Guix installation. * etc/guix-install.sh (chk_init_sys): Drop trailing \) from the regular expression. Change-Id: I5f951226341e631fb34cc6c26cfbb87656dab77a Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2024-06-02guix-install.sh: Add ~/.guix-profile/share/info to INFOPATH.Trevor Arjeski Adding ~/.guix-profile/share/info to the INFOPATH env var so that when a user does `guix install [package]` that package's info pages can be found. * etc/guix-install.sh (sys_create_init_profile): Add $GUIX_PROFILE/share/info to INFOPATH in ‘/etc/profile.d/zzz-guix.sh’. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Change-Id: I8958261c388ddee5659f0f1ce1c0c9813dc0f052 2024-04-29guix-install.sh: Fix setting GUIX_LOCPATH.Tomas Volf After installing Guix home on my new foreign system, the locale did not work and GDM did not even let me to log in. After some digging around using tty3 and tty4, I realized the GUIX_LOCPATH is not being set properly. I had nothing installed in the ~/.guix-profile (the symlink did not even exist) and I had glibc-locales installed in ~/.guix-home, yet GUIX_LOCPATH contained "$HOME/.guix-profile/lib/locale:". I believe when the code was modified from the original "home or profile" to the current "home and profile" the || was used by accident instead of &&. I also remove the trailing :, since it is taken care of by the ${...:+:}. * etc/guix-install.sh (sys_create_init_profile): Change-Id: I8a3287fe809af58aee2edc924154eecf91fa1eb8 Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2024-04-29guix-install.sh: Add default value for XCURSOR_PATH.Tomas Volf This improves compatibility with (at least) Gnome based systems. On my new Ubuntu 22.04 install the mouse cursor was broken (after I installed Guix) until I set this. * etc/guix-install.sh (sys_create_init_profile): Set default value for XCURSOR_PATH. Change-Id: I489f0307d99e4d8d82671f291c78b90c7b6dae4a Signed-off-by: Ludovic Courtès <ludo@gnu.org> 2024-04-07guix-install.sh: Make Guix modules available too.Janneke Nieuwenhuizen * etc/guix-install.sh (GUILE_LOAD_PATH): Prepend directory to current Guix modules. (GUILE_LOAD_COMPILED_PATH): Likewise to compiled modules. Change-Id: I0b2722a38b1f8ebab32142cbc372a23cadfb0620 2024-04-05guix-install.sh: Add ‘--uninstall’ flag.Ludovic Courtès * etc/guix-install.sh (REQUIRE): Add groupdel and userdel. (chk_term): Handle ‘WAR’. (sys_delete_store, sys_delete_build_user, sys_delete_guix_daemon) (sys_delete_init_profile, sys_delete_user_profiles): New functions. (main): Rename to… (main_install): … this. (main_uninstall): New function. (main): Dispatch between these two. * doc/guix.texi (Installation): Refer to “Binary Installation” instead of repeating it. (Binary Installation): Document uninstallation. Co-authored-by: Ludovic Courtès <ludo@gnu.org> Change-Id: I55b7c10823773bced2e268273e8ce828cb3bd98d 2024-04-03Switch order of the default substitute servers.Christopher Baines The aim here is to improve the user experience. There's anecdotal evidence that the network performance for bordeaux is better compared to ci at least for some users, and I don't know of any issues with rate limiting or access restriction for bordeaux compared to ci. It also has IPv6 support. Additionally, bordeaux generally had more substitutes than ci, particularly for aarch64-linux and armhf-linux. This change will offer a very slight speedup for those substitutes that only bordeaux has. Bordeaux has been a default substitute server for nearly 3 years now and I think this change is overdue. I'm also hopeful that we'll be able to build on the testing regarding mirrors for bordeaux, and that'll allow potentially improving the hosting setup (through providing more redundancy) and further improving substitute fetching for users who currently have issues with substitute access. * config-daemon.ac: Switch substitute urls order. * doc/guix.texi: Ditto. * etc/guix-install.sh: Ditto. * gnu/installer/newt/network.scm (wait-service-online): Ditto. * guix/store.scm (%default-substitute-urls): Ditto. Change-Id: I4f6d93ae1fc8b03d80b47b18b5749a51f1fde17b Signed-off-by: Christopher Baines <mail@cbaines.net>