GNU Guix Reference Manual Using the GNU Guix Functional Package Manager
Total Page:16
File Type:pdf, Size:1020Kb
GNU Guix Reference Manual Using the GNU Guix Functional Package Manager The GNU Guix Developers Edition 34cf1f4 29 September 2021 Copyright c 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Court`es Copyright c 2013, 2014, 2016 Andreas Enge Copyright c 2013 Nikita Karetnikov Copyright c 2014, 2015, 2016 Alex Kost Copyright c 2015, 2016 Mathieu Lirzin Copyright c 2014 Pierre-Antoine Rault Copyright c 2015 Taylan Ulrich Bayırlı/Kammer Copyright c 2015, 2016, 2017, 2019, 2020, 2021 Leo Famulari Copyright c 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus Copyright c 2016 Ben Woodcroft Copyright c 2016, 2017, 2018, 2021 Chris Marusich Copyright c 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner Copyright c 2016 John Darrington Copyright c 2016, 2017 Nikita Gillmann Copyright c 2016, 2017, 2018, 2019, 2020 Jan Nieuwenhuizen Copyright c 2016, 2017, 2018, 2019, 2020, 2021 Julien Lepiller Copyright c 2016 Alex ter Weele Copyright c 2016, 2017, 2018, 2019, 2020, 2021 Christopher Baines Copyright c 2017, 2018, 2019 Cl´ement Lassieur Copyright c 2017, 2018, 2020, 2021 Mathieu Othacehe Copyright c 2017 Federico Beffa Copyright c 2017, 2018 Carlo Zancanaro Copyright c 2017 Thomas Danckaert Copyright c 2017 humanitiesNerd Copyright c 2017, 2021 Christine Lemmer-Webber Copyright c 2017, 2018, 2019, 2020, 2021 Marius Bakke Copyright c 2017, 2019, 2020 Hartmut Goebel Copyright c 2017, 2019, 2020, 2021 Maxim Cournoyer Copyright c 2017, 2018, 2019, 2020, 2021 Tobias Geerinckx-Rice Copyright c 2017 George Clemmer Copyright c 2017 Andy Wingo Copyright c 2017, 2018, 2019, 2020 Arun Isaac Copyright c 2017 nee Copyright c 2018 Rutger Helling Copyright c 2018, 2021 Oleg Pykhalov Copyright c 2018 Mike Gerwitz Copyright c 2018 Pierre-Antoine Rouby Copyright c 2018, 2019 G´abor Boskovits Copyright c 2018, 2019, 2020 Florian Pelz Copyright c 2018 Laura Lazzati Copyright c 2018 Alex Vong Copyright c 2019 Josh Holland Copyright c 2019, 2020 Diego Nicola Barbato Copyright c 2019 Ivan Petkov Copyright c 2019 Jakob L. Kreuze Copyright c 2019 Kyle Andrews Copyright c 2019 Alex Griffin Copyright c 2019, 2020, 2021 Guillaume Le Vaillant Copyright c 2020 Liliana Marie Prikler Copyright c 2019, 2020 Simon Tournier Copyright c 2020 Wiktor Zelazny_ Copyright c 2020 Damien Cassou Copyright c 2020 Jakub Kądziolka Copyright c 2020 Jack Hill Copyright c 2020 Naga Malleswari Copyright c 2020, 2021 Brice Waegeneire Copyright c 2020 R Veera Kumar Copyright c 2020 Pierre Langlois Copyright c 2020 pinoaffe Copyright c 2020 Andr´eBatista Copyright c 2020, 2021 Alexandru-Sergiu Marton Copyright c 2020 raingloom Copyright c 2020 Daniel Brooks Copyright c 2020 John Soo Copyright c 2020 Jonathan Brielmaier Copyright c 2020 Edgar Vincent Copyright c 2021 Maxime Devos Copyright c 2021 B. Wilson Copyright c 2021 Xinglu Chen Copyright c 2021 Raghav Gururajan Copyright c 2021 Domagoj Stolfa Copyright c 2021 Hui Lu Copyright c 2021 pukkamustard Copyright c 2021 Alice Brenon Copyright c 2021 Andrew Tropin Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled \GNU Free Documentation License". i Table of Contents GNU Guix ::::::::::::::::::::::::::::::::::::::::::: 1 1 Introduction ::::::::::::::::::::::::::::::::::::: 2 1.1 Managing Software the Guix Way::::::::::::::::::::::::::::::: 2 1.2 GNU Distribution :::::::::::::::::::::::::::::::::::::::::::::: 3 2 Installation::::::::::::::::::::::::::::::::::::::: 5 2.1 Binary Installation ::::::::::::::::::::::::::::::::::::::::::::: 5 2.2 Requirements::::::::::::::::::::::::::::::::::::::::::::::::::: 8 2.3 Running the Test Suite ::::::::::::::::::::::::::::::::::::::::: 9 2.4 Setting Up the Daemon:::::::::::::::::::::::::::::::::::::::: 10 2.4.1 Build Environment Setup ::::::::::::::::::::::::::::::::: 10 2.4.2 Using the Offload Facility ::::::::::::::::::::::::::::::::: 12 2.4.3 SELinux Support ::::::::::::::::::::::::::::::::::::::::: 15 2.4.3.1 Installing the SELinux policy :::::::::::::::::::::::: 15 2.4.3.2 Limitations :::::::::::::::::::::::::::::::::::::::::: 15 2.5 Invoking guix-daemon ::::::::::::::::::::::::::::::::::::::::: 16 2.6 Application Setup ::::::::::::::::::::::::::::::::::::::::::::: 20 2.6.1 Locales ::::::::::::::::::::::::::::::::::::::::::::::::::: 20 2.6.2 Name Service Switch ::::::::::::::::::::::::::::::::::::: 21 2.6.3 X11 Fonts :::::::::::::::::::::::::::::::::::::::::::::::: 21 2.6.4 X.509 Certificates::::::::::::::::::::::::::::::::::::::::: 22 2.6.5 Emacs Packages :::::::::::::::::::::::::::::::::::::::::: 22 2.7 Upgrading Guix ::::::::::::::::::::::::::::::::::::::::::::::: 22 3 System Installation :::::::::::::::::::::::::::: 23 3.1 Limitations:::::::::::::::::::::::::::::::::::::::::::::::::::: 23 3.2 Hardware Considerations :::::::::::::::::::::::::::::::::::::: 23 3.3 USB Stick and DVD Installation::::::::::::::::::::::::::::::: 24 Copying to a USB Stick ::::::::::::::::::::::::::::::::::::::::: 24 Burning on a DVD :::::::::::::::::::::::::::::::::::::::::::::: 24 Booting ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 24 3.4 Preparing for Installation :::::::::::::::::::::::::::::::::::::: 25 3.5 Guided Graphical Installation ::::::::::::::::::::::::::::::::: 25 3.6 Manual Installation:::::::::::::::::::::::::::::::::::::::::::: 27 3.6.1 Keyboard Layout, Networking, and Partitioning::::::::::: 27 3.6.1.1 Keyboard Layout :::::::::::::::::::::::::::::::::::: 28 3.6.1.2 Networking :::::::::::::::::::::::::::::::::::::::::: 28 3.6.1.3 Disk Partitioning :::::::::::::::::::::::::::::::::::: 29 3.6.2 Proceeding with the Installation :::::::::::::::::::::::::: 30 3.7 After System Installation :::::::::::::::::::::::::::::::::::::: 32 3.8 Installing Guix in a Virtual Machine ::::::::::::::::::::::::::: 32 ii 3.9 Building the Installation Image :::::::::::::::::::::::::::::::: 33 3.10 Building the Installation Image for ARM Boards :::::::::::::: 33 4 Getting Started :::::::::::::::::::::::::::::::: 34 5 Package Management :::::::::::::::::::::::::: 37 5.1 Features::::::::::::::::::::::::::::::::::::::::::::::::::::::: 37 5.2 Invoking guix package :::::::::::::::::::::::::::::::::::::::: 38 5.3 Substitutes :::::::::::::::::::::::::::::::::::::::::::::::::::: 47 5.3.1 Official Substitute Servers :::::::::::::::::::::::::::::::: 48 5.3.2 Substitute Server Authorization::::::::::::::::::::::::::: 48 5.3.3 Getting Substitutes from Other Servers ::::::::::::::::::: 49 5.3.4 Substitute Authentication :::::::::::::::::::::::::::::::: 50 5.3.5 Proxy Settings:::::::::::::::::::::::::::::::::::::::::::: 51 5.3.6 Substitution Failure :::::::::::::::::::::::::::::::::::::: 51 5.3.7 On Trusting Binaries ::::::::::::::::::::::::::::::::::::: 51 5.4 Packages with Multiple Outputs ::::::::::::::::::::::::::::::: 52 5.5 Invoking guix gc :::::::::::::::::::::::::::::::::::::::::::::: 52 5.6 Invoking guix pull:::::::::::::::::::::::::::::::::::::::::::: 55 5.7 Invoking guix time-machine :::::::::::::::::::::::::::::::::: 59 5.8 Inferiors ::::::::::::::::::::::::::::::::::::::::::::::::::::::: 59 5.9 Invoking guix describe ::::::::::::::::::::::::::::::::::::::: 61 5.10 Invoking guix archive ::::::::::::::::::::::::::::::::::::::: 63 6 Channels :::::::::::::::::::::::::::::::::::::::: 66 6.1 Specifying Additional Channels :::::::::::::::::::::::::::::::: 66 6.2 Using a Custom Guix Channel::::::::::::::::::::::::::::::::: 66 6.3 Replicating Guix :::::::::::::::::::::::::::::::::::::::::::::: 67 6.4 Channel Authentication ::::::::::::::::::::::::::::::::::::::: 67 6.5 Channels with Substitutes ::::::::::::::::::::::::::::::::::::: 68 6.6 Creating a Channel:::::::::::::::::::::::::::::::::::::::::::: 68 6.7 Package Modules in a Sub-directory:::::::::::::::::::::::::::: 69 6.8 Declaring Channel Dependencies::::::::::::::::::::::::::::::: 70 6.9 Specifying Channel Authorizations::::::::::::::::::::::::::::: 70 6.10 Primary URL :::::::::::::::::::::::::::::::::::::::::::::::: 72 6.11 Writing Channel News ::::::::::::::::::::::::::::::::::::::: 72 7 Development ::::::::::::::::::::::::::::::::::: 74 7.1 Invoking guix environment ::::::::::::::::::::::::::::::::::: 74 7.2 Invoking guix pack:::::::::::::::::::::::::::::::::::::::::::: 79 7.3 The GCC toolchain:::::::::::::::::::::::::::::::::::::::::::: 84 7.4 Invoking guix git authenticate :::::::::::::::::::::::::::::: 84 iii 8 Programming Interface :::::::::::::::::::::::: 86 8.1 Package Modules :::::::::::::::::::::::::::::::::::::::::::::: 86 8.2 Defining Packages ::::::::::::::::::::::::::::::::::::::::::::: 87 8.2.1 package Reference:::::::::::::::::::::::::::::::::::::::: 90 8.2.2 origin Reference ::::::::::::::::::::::::::::::::::::::::: 92 8.3 Defining Package Variants ::::::::::::::::::::::::::::::::::::: 95 8.4 Build Systems ::::::::::::::::::::::::::::::::::::::::::::::::: 98 8.5 Build Phases ::::::::::::::::::::::::::::::::::::::::::::::::: 114 8.6 Build Utilities :::::::::::::::::::::::::::::::::::::::::::::::: 117 8.6.1 Dealing with Store File Names ::::::::::::::::::::::::::: 117 8.6.2 File Types::::::::::::::::::::::::::::::::::::::::::::::: 118 8.6.3 File Manipulation ::::::::::::::::::::::::::::::::::::::: 118 8.6.4 File Search :::::::::::::::::::::::::::::::::::::::::::::: 119 8.6.5 Build Phases :::::::::::::::::::::::::::::::::::::::::::: 120 8.7 The Store ::::::::::::::::::::::::::::::::::::::::::::::::::::