强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

GNU Guix 函数式包管理教程 / 第二章 安装与配置

第二章:安装与配置

2.1 安装方式概览

Guix 提供两种主要使用方式:

方式说明适合人群
Guix 包管理器在现有 Linux 发行版上安装 Guix想体验 Guix 包管理的用户
Guix System完整的 GNU/Linux 操作系统追求完整声明式系统管理的用户

本章将介绍这两种方式的安装步骤,以及 Guix Home 和通道配置。


2.2 在现有发行版上安装 Guix

2.2.1 系统要求

要求最低推荐
架构x86_64、i686、aarch64、armv7x86_64
磁盘空间5 GB(基础安装)20 GB+(含多个 generation)
内存1 GB4 GB+
网络安装时需要持续需要用于下载包

2.2.2 官方安装脚本

# 1. 下载安装脚本
wget https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh
chmod +x guix-install.sh

# 2. 以 root 身份运行安装脚本
sudo ./guix-install.sh

# 3. 验证安装
guix --version

安装脚本会自动完成以下操作:

  1. 创建 /gnu/store 目录结构
  2. 创建 guixbuild 用户组
  3. 下载并安装 Guix 二进制
  4. 设置 systemd 服务或启动脚本
  5. 配置 Guix 守护进程(daemon)

2.2.3 安装后配置

配置二进制替代(Binary Substitution):

安装完成后,Guix 默认会从 ci.guix.gnu.org 下载预编译的二进制包,但需要导入授权密钥:

# 导入构建服务器的签名密钥
sudo guix archive --authorize \
  < ~root/.config/guix/current/share/guix/ci.guix.gnu.org.pub

# 也导入备用服务器的密钥(可选)
wget https://ci.guix.gnu.org/nars/snix/store/...

设置 PATH 环境变量:

# 添加到 ~/.bashrc 或 ~/.zshrc
export PATH="$HOME/.guix-profile/bin:$PATH"
export PATH="/var/guix/profiles/per-user/$USER/current/bin:$PATH"

配置 GUIX_LOCPATH(locale 支持):

# 如果遇到 locale 警告
export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale"

2.2.4 各发行版特殊注意事项

发行版注意事项
Ubuntu/Debian需要安装 gpgwget;可能存在 AppArmor 限制
FedoraSELinux 可能阻止 Guix daemon;需要配置策略
Arch LinuxAUR 中有 guix-bin 包可供安装
NixOS可以通过 Nix 安装 Guix,但两者共存需注意路径冲突

⚠️ 注意:Guix daemon 需要 root 权限运行。在某些安全强化的系统上,可能需要额外配置。


2.3 安装 Guix System

Guix System 是一个完整的 GNU/Linux 发行版,支持图形安装和手动安装。

2.3.1 下载安装镜像

# 从官方镜像下载
# https://ftp.gnu.org/gnu/guix/
# 或使用国内镜像

# 验证镜像签名
guix download https://ftp.gnu.org/gnu/guix/guix-system-install-1.4.0.x86_64-linux.iso.xz

# 解压
xz -d guix-system-install-*.iso.xz

2.3.2 制作启动 U 盘

# 使用 dd 命令写入 U 盘(注意替换 sdX)
sudo dd if=guix-system-install-*.iso of=/dev/sdX bs=4M status=progress
sync

2.3.3 安装过程

Guix System 的安装过程基于文本界面:

步骤 1:启动并连接网络

# 安装程序启动后,先配置网络
ifconfig eth0 up
dhclient eth0

# 测试网络
ping -c 3 gnu.org

步骤 2:分区

# 查看磁盘
lsblk

# 使用 cfdisk 分区(示例)
cfdisk /dev/sda

# 推荐分区方案:
# /dev/sda1  512MB   EFI 分区(如需 UEFI)
# /dev/sda2  剩余    根分区(ext4)

# 格式化
mkfs.ext4 /dev/sda2
mkfs.fat -F 32 /dev/sda1  # 如有 EFI

# 挂载
mount /dev/sda2 /mnt
mkdir -p /mnt/boot/efi
mount /dev/sda1 /mnt/boot/efi

步骤 3:创建系统配置文件

# 生成初始配置
herd start cow-store /mnt
guix system init /etc/configuration/desktop.scm /mnt

或者手动编写配置:

;; /mnt/etc/config.scm
(use-modules (gnu)
             (gnu system nss))
(use-service-modules desktop networking)
(use-package-modules certs gnome)

(operating-system
  (host-name "my-guix")
  (timezone "Asia/Shanghai")
  (locale "zh_CN.utf8")

  (keyboard-layout (keyboard-layout "cn"))

  (bootloader (bootloader-configuration
                (bootloader grub-efi-bootloader)
                (targets '("/boot/efi"))
                (keyboard-layout keyboard-layout)))

  (file-systems (append
                  (list (file-system
                          (device "/dev/sda2")
                          (mount-point "/")
                          (type "ext4"))
                        (file-system
                          (device "/dev/sda1")
                          (mount-point "/boot/efi")
                          (type "vfat")))
                  %base-file-systems))

  (users (cons* (user-account
                  (name "user")
                  (comment "Default User")
                  (group "users")
                  (home-directory "/home/user")
                  (supplementary-groups '("wheel" "netdev"
                                          "audio" "video")))
                %base-user-accounts))

  (packages (append (list
                      nss-certs      ; TLS 证书
                      gvfs)          ; 文件管理器支持
                    %base-packages))

  (services (append (list
                      (service gnome-desktop-service-type))
                    %desktop-services)))

步骤 4:执行安装

# 初始化系统
guix system init /mnt/etc/config.scm /mnt

这一步可能需要较长时间(下载大量包),如果网络条件好会通过二进制替代加速。

步骤 5:重启

reboot

2.3.4 安装后首次启动

首次进入 Guix System 后:

# 更新系统(拉取最新包定义)
sudo guix pull

# 升级系统
sudo guix system reconfigure /etc/config.scm

2.4 Guix Home

Guix Home 是用户级环境管理器,可以声明式管理用户的 dotfiles、Shell 配置、守护进程等。

2.4.1 安装 Guix Home

# 在 Guix System 上,Guix Home 随系统提供
# 在其他发行版上安装 Guix 后,同样可用

# 创建初始配置
guix home import /tmp/home-configuration.scm

2.4.2 示例配置

;; ~/.config/guix/home-configuration.scm
(use-modules (gnu home)
             (gnu home services)
             (gnu home services shells)
             (gnu home services gnupg)
             (gnu packages)
             (gnu packages version-control)
             (gnu packages shells))

(home-environment
  ;; 用户软件包
  (packages (list git
                  openssh
                  htop
                  tree))

  ;; 用户服务
  (services
    (list
      ;; Bash 配置
      (service home-bash-service-type
        (home-bash-configuration
          (aliases '(("ll" . "ls -alh")
                     ("gs" . "git status")
                     ("gd" . "git diff")))
          (bashrc (list (plain-file "bashrc" "
# 自定义 Bash 配置
export EDITOR=vim
export VISUAL=vim
"))))

      ;; GPG Agent
      (service home-gpg-agent-service-type
        (home-gpg-agent-configuration
          (pinentry-program
            (file-append pinentry "/bin/pinentry"))
          (ssh-support? #t))))))

2.4.3 部署 Guix Home

# 应用配置
guix home reconfigure ~/.config/guix/home-configuration.scm

# 查看当前 generation
guix home generations

# 回滚到上一个版本
guix home roll-back

2.5 通道(Channels)配置

通道是 Guix 获取包定义的来源。默认使用官方通道 https://git.savannah.gnu.org/git/guix.git

2.5.1 查看当前通道

# 列出已配置的通道
guix describe

# 输出示例:
# Generation 5    May 10 2026 10:00:00    (current)
#   guix 1.4.0    abc1234
#     repository URL: https://git.savannah.gnu.org/git/guix.git
#     branch: master
#     commit: abc1234...

2.5.2 添加第三方通道

创建通道配置文件:

# 编辑 ~/.config/guix/channels.scm
mkdir -p ~/.config/guix
;; ~/.config/guix/channels.scm
(list
  ;; 官方通道(默认已包含)
  (channel
    (name 'guix)
    (url "https://git.savannah.gnu.org/git/guix.git")
    (introduction
      (make-channel-introduction
        "9edb3f66fd807b096b48283debdcddccfea34bad"
        (openpgp-fingerprint
          "BBB0 2DFC 2F96 32BA 8D95  4B6C 9218 5D7B E7AA 3A24"))))

  ;; Nonguix 通道(包含非自由软件)
  (channel
    (name 'nonguix)
    (url "https://gitlab.com/nonguix/nonguix")
    (introduction
      (make-channel-introduction
        "897c1a470da759236cc11798f4e0a5f7d4d59fbc"
        (openpgp-fingerprint
          "2A39 3FFF 68F4 EF7A 3D29  12AF 6F51 20A0 22FB B2D5")))))

2.5.3 拉取通道更新

# 更新通道(等同于 git pull 所有通道)
guix pull

# 使用指定通道配置文件
guix pull --channels=~/.config/guix/channels.scm

2.5.4 版本锁定

为了确保团队成员使用完全相同的包版本,可以锁定通道:

# 导出当前通道状态
guix describe --format=channels > ~/.config/guix/channels.scm

# 其他机器使用此文件拉取完全相同的版本
guix pull --channels=~/.config/guix/channels.scm

导出的锁定文件格式如下:

(list (channel
        (name 'guix)
        (url "https://git.savannah.gnu.org/git/guix.git")
        (commit "abc1234...")
        (introduction
          (make-channel-introduction
            "9edb3f66fd807b096b48283debdcddccfea34bad"
            (openpgp-fingerprint
              "BBB0 2DFC 2F96 32BA 8D95  4B6C 9218 5D7B E7AA 3A24")))))

2.6 Guix 守护进程(Daemon)

Guix 守护进程(guix-daemon)是整个系统的核心,负责执行所有构建操作。

2.6.1 守护进程状态

# 查看守护进程状态(systemd)
sudo systemctl status guix-daemon

# 启动守护进程
sudo systemctl start guix-daemon

# 开机自启
sudo systemctl enable guix-daemon

2.6.2 守护进程配置

# 查看守护进程命令行参数
cat /etc/systemd/system/guix-daemon.service

# 常用参数:
# --build-users-group=guixbuild  构建用户组
# --max-jobs=4                   最大并行构建数
# --cache-directory=/var/guix/cache  缓存目录

2.6.3 调整构建用户数量

# 默认创建了 10 个构建用户(guixbuild-01 到 guixbuild-10)
# 如需更多并行构建:
sudo groupadd -r guixbuild
for i in $(seq 1 20); do
  sudo useradd -g guixbuild -G guixbuild \
    -d /var/empty -s /sbin/nologin \
    -c "Guix build user $i" \
    --system guixbuild-$(printf "%02d" $i)
done

2.7 故障排除

常见问题清单

问题原因解决方案
guix: command not foundPATH 未配置添加 Guix bin 目录到 PATH
permission denied on /gnu/store守护进程未运行启动 guix-daemon
下载速度极慢二进制替代服务器在国外配置代理或镜像
hash mismatch 错误源码包已更新guix pull 更新通道
locale 警告GUIX_LOCPATH 未设置设置环境变量

网络代理配置

# 如果需要通过代理访问网络
sudo systemctl edit guix-daemon

# 添加环境变量
[Service]
Environment="http_proxy=http://proxy:8080"
Environment="https_proxy=http://proxy:8080"

或者直接设置用户代理:

export http_proxy=http://proxy:8080
export https_proxy=http://proxy:8080

2.8 总结

本章涵盖了 Guix 的各种安装方式:

  1. 包管理器模式——在现有发行版上安装 Guix,适合入门体验
  2. Guix System——完整声明式操作系统,适合深度使用
  3. Guix Home——用户环境管理,声明式管理 dotfiles
  4. 通道配置——管理包来源,支持版本锁定

下一章我们将学习 Guix 的日常操作命令。


扩展阅读