你好,世界!
GNU Guix 是一个 GNU 项目——尊重计算机用户的自由。它是一款为 GNU/Linux 系统打造的包管理器。它旨在赋予用户更多控制自己的通用和专用计算环境的能力,并使这些环境更容易在未来重现,也更容易将其部署到一个或多个设备上。使用 GNU Guix,一台机器上的不同用户可以互相独立地管理自己的包,无需超级用户权限;用户有了自己的控制权。
Guix 可以在任何 GNU/Linux 发行版之上使用。它不会与您发行版的包管理器冲突。Guix 也可以是一个完整的 GNU 操作系统,由 Guix 本身生成,利用 Guix 软件的所有功能。
Guix 是自由软件,用户可以自由地使用、研究、修改和分享 Guix 及其提供的所有包。
Guix 作为一个操作系统它是由一个或多个 Scheme 语言(GNU Guile)文件来定义的。其中包括了系统文件、时区、语言、用户账号等全方位的操作系统定义。
比如,以下就是一个 Guix 操作系统的例子:
;;; config/systems/base-system.scm
(define-module (config systems base-system)
#:use-modules (gnu)
#:use-modules (guix)
#:export (base-system))
(use-package-modules ssh)
(use-service-modules networking ssh)
(define base-system
;; operating-system parameters
(operating-system
(host-name "base-system")
(timezone "Asia/Shanghai")
(locale "en_US.utf8")
(keyboard-layout (keyboard-layout "us" "altgr-intl"))
;; In practice these fields will depend on each machine's
;; partition configuration.
(bootloader
(bootloader-configuration
(bootloader grub-bootloader)
(targets '("/dev/sda"))
(terminal-outputs '(console))))
(swap-devices
(list
(swap-space
(target "/dev/sda1"))))
(file-systems
(cons* (file-system
(mount-point "/")
(device
(uuid "ac551a60-..."
'ext4))
(type "ext4"))
%base-file-systems))
;; users
(users (cons* (user-account
(name "guest")
(comment "an example")
(group "users")
(home-directory "/home/guest")
(supplementary-groups
'("wheel" "netdev" "audio" "video")))
%base-user-accounts))
;; System Services
(services (cons* (service dhcp-client-service-type)
(service openssh-service-type)
%base-services))))
'guix system' 命令就是把上述操作系统配置的定义文件具体实现在电脑上的命令。其调用方法也比较直接:
guix pull && sudo guix system reconfigure config/systems/base-system.scm
其中 'guix pull' 命令能够让系统获得最新的软件包,以免新构建的系统使用较老的包。
'guix system reconfigure' 会生成一个新的操作系统代(generation),它是当前的系统代+1,可以使用下列命令查看:
guix system list-generations
'guix system reconfigure' 生成一个新的操作系统部署在路径:/run/current-system。在该路径下还有系统使用的频道(channel)和生成操作系统的配置文件(即 base-system.scm),可以使用下列命令查看:
guix system describe
总之,'guix system' 是 Guix 生成整个操作系统的基本命令。
Guix 支持每个用户对自己的工作环境所用的系统进行配置和管理。用户可以使用一个或多个 Scheme 语言(GNU Guile)文件来定义自己需要安装的软件和服务配置,这就是用户的 home environment。
home environment 一般包括软件、配置和状态三个基本部分。每个用户都可以单独定义自己需要的软件及其配置和在不同状态下进行的动作。这给了用户极大的自主性和灵活性,也有利于用户顺利迁移自己的系统。
guix home 就是用来管理和实现 home environment 的命令。
如果要简单生成一份自己现在的 home environment,用户可以运行:
guix home import ~/src/guix-config
下面是所生成的 home-configuration.scm 的例子。
(use-modules (gnu home)
(gnu home services)
(gnu home services shells)
(gnu services)
(gnu packages admin)
(guix gexp))
(home-environment
(packages (list htop))
(services
(append (list
(service home-bash-service-type
(home-bash-configuration
(guix-defaults? #t)
(bash-profile (list (plain-file "bash-profile" "export HISTFILE=$XDG_CACHE_HOME/.bash_history")))))
(simple-service 'test-config
home-xdg-configuration-files-service-type
(list `("test.conf"
,(plain-file "tmp-file.txt"
"the content of
~/.config/test.conf")))))
%base-home-services)))
用户可以对此文件进行自己的修改和更新,然后使用以下命令进行实施。
guix pull && guix home reconfigure ~/src/guix-config/home-configuration.scm
其中 'guix pull' 命令能够让系统获得最新的软件包,以免新构建的系统使用较老的包。
'guix home reconfigure' 会生成一个新的操作系统代(generation),它是当前的系统代+1,可以使用下列命令查看:
guix home list-generations
'guix home reconfigure' 生成的配置文件部署在 ~ 下,原来的文件会被移动到 ~/timestamp-guix-home-legacy-configs-backup。
一个新的 home 系统部署在路径:~/.guix-home。在该路径下还有系统使用的频道(channel)和生成操作系统的配置文件(即 home-configuration.scm),可以使用下列命令查看:
guix home describe
guix system 和 guix home 分别对 Guix 的系统层和用户层进行管理和配置,让 Guix 变得灵活而强大,同时不失统一性。
如果你希望自己的 Guix 系统丰富多彩,那么 立伯乐 或许可以帮你。
让自由软件带你进入的美好自由世界!