Siguiente: Referencia de operating-system, Subir: Configuración del sistema [Índice general][Índice]
El sistema operativo se configura proporcionando una declaración
operating-system
en un archivo que pueda ser proporcionado a la orden
guix system
(véase Invocación de guix system). Una configuración
simple, con los servicios predeterminados del sistema, el núcleo Linux-Libre
predeterminado, un disco de RAM inicial y un cargador de arranque puede ser
como sigue:
;; This is an operating system configuration template ;; for a "bare bones" setup, with no X11 display server. (use-modules (gnu)) (use-service-modules networking ssh) (use-package-modules screen ssh) (operating-system (host-name "komputilo") (timezone "Europe/Berlin") (locale "en_US.utf8") ;; Boot in "legacy" BIOS mode, assuming /dev/sdX is the ;; target hard disk, and "my-root" is the label of the target ;; root file system. (bootloader (bootloader-configuration (bootloader grub-bootloader) (target "/dev/sdX"))) (file-systems (cons (file-system (device (file-system-label "my-root")) (mount-point "/") (type "ext4")) %base-file-systems)) ;; This is where user accounts are specified. The "root" ;; account is implicit, and is initially created with the ;; empty password. (users (cons (user-account (name "alice") (comment "Bob's sister") (group "users") ;; Adding the account to the "wheel" group ;; makes it a sudoer. Adding it to "audio" ;; and "video" allows the user to play sound ;; and access the webcam. (supplementary-groups '("wheel" "audio" "video"))) %base-user-accounts)) ;; Globally-installed packages. (packages (cons screen %base-packages)) ;; Add services to the baseline: a DHCP client and ;; an SSH server. (services (append (list (service dhcp-client-service-type) (service openssh-service-type (openssh-configuration (openssh openssh-sans-x) (port-number 2222)))) %base-services)))
Este ejemplo debería ser auto-descriptivo. Algunos de los campos definidos
anteriormente, como host-name
y bootloader
, son
necesarios. Otros como packages
y services
, pueden omitirse,
en cuyo caso obtienen un valor por defecto.
Más adelante se muestran los efectos de algunos de los campos más
importantes (véase Referencia de operating-system, para detalles acerca de
todos los campos disponibles), y cómo instanciar el sistema operativo
usando guix system
.
El campo bootloader
describe el método que será usado para arrancar
su sistema. Las máquinas basadas en procesadores Intel pueden arrancar en el
“obsoleto” modo BIOS, como en el ejemplo previo. No obstante, máquinas más
recientes usan la Interfaz Unificada Extensible de Firmware (UEFI)
para arrancar. En ese caso, el capo bootloader
debe contener algo
parecido a esto:
(bootloader-configuration
(bootloader grub-efi-bootloader)
(target "/boot/efi"))
Véase Configuración del gestor de arranque, para más información sobre las opciones de configuración disponibles.
El campo packages
enumera los paquetes que serán visibles globalmente
en el sistema, para todas las cuentas de usuaria—es decir, en la variable
de entorno PATH
de cada usuaria—sin tener en cuenta los perfiles de
cada usuaria (véase Invocación de guix package). La variable
%base-packages
proporciona todas las herramientas esperadas para
tareas básicas y de administración—incluyendo las utilidades básicas GNU,
las herramientas de red GNU, el editor de texto ligero GNU Zile,
find
, grep
, etc. El ejemplo previo se añade
GNU Screen a estos, tomado del módulo (gnu packages screen)
(véase Módulos de paquetes). La sintaxis (list package output)
puede
usarse para añadir una salida específica de un paquete:
(use-modules (gnu packages)) (use-modules (gnu packages dns)) (operating-system ;; ... (packages (cons (list bind "utils") %base-packages)))
Referirse a los paquetes por nombre de variable, como antes a bind
,
tiene la ventaja de evitar ambigüedades; también permite que errores
tipográficos y demás obtengan un diagnóstico directo como “variables sin
definir”. La parte problemática es que se necesita conocer qué módulo
define qué paquete, y aumentar adecuadamente la línea de
use-package-modules
. Para evitar esto, se puede usar el procedimiento
specification->package
del módulo (gnu packages)
, que devuelve
el mejor paquete para un nombre dado, o nombre y versión:
(use-modules (gnu packages)) (operating-system ;; ... (packages (append (map specification->package '("tcpdump" "htop" "gnupg@2.0")) %base-packages)))
El campo services
enumera los servicios del sistema disponibles
cuando el sistema arranque (véase Servicios). La declaración
operating-system
previa especifica que, además de los servicios
básicos, queremos que el daemon de shell seguro OpenSSH espere conexiones
por el puerto 2222 (véase openssh-service-type
). En su implementación,
openssh-service-type
prepara todo para que sshd
se inicie con
las opciones de la línea de órdenes adecuadas, posiblemente generando bajo
demanda los archivos de configuración necesarios (véase Definición de servicios).
De manera ocasional, en vez de usar los servicios básicos tal y como vienen,
puede querer personalizarlos. Para hacerlo, use modify-services
(véase modify-services
) para modificar la lista.
Por ejemplo, supongamos que quiere modificar guix-daemon
y Mingetty
(el punto de acceso al sistema por consola) en la lista
%base-services
(véase %base-services
). Para
hacerlo, puede escribir lo siguiente en su declaración de sistema operativo:
(define %mis-servicios ;; Mi propia lista de servicios (modify-services %base-services (guix-service-type config => (guix-configuration (inherit config) ;; Obtenemos sustituciones desde example.org. (substitute-urls (list "https://example.org/guix" "https://ci.guix.gnu.org")))) (mingetty-service-type config => (mingetty-configuration (inherit config) ;; Ingresamos automáticamente con ;; la cuenta "guest". (auto-login "guest"))))) (operating-system ;; … (services %mis-servicios))
Esto modifica la configuración—es decir, los parámetros de los
servicios—de la instancia guix-service-type
, y de todas las
instancias de mingetty-service-type
en la lista
%base-services
. Observe cómo se consigue: primero, enlazamos la
configuración actual al identificador config
en el cuerpo, y
entonces escribimos el cuerpo de manera que evalúe a la configuración
deseada. En particular, fíjese como se usa inherit
para crear una
nueva configuración que tiene los mismos valores que la configuración
antigua, pero con unas pocas modificaciones.
La configuración para un uso típico de “escritorio”, con una partición de raíz cifrada, el servidor gráfico X11, GNOME y Xfce (las usuarias pueden escoger cual de estos entornos de escritorio usarán en la pantalla de inicio de sesión pulsando F1), gestión de red, gestión de energía y más, podría ser así:
;; This is an operating system configuration template ;; for a "desktop" setup with GNOME and Xfce where the ;; root partition is encrypted with LUKS. (use-modules (gnu) (gnu system nss)) (use-service-modules desktop xorg) (use-package-modules certs gnome) (operating-system (host-name "antelope") (timezone "Europe/Paris") (locale "en_US.utf8") ;; Choose US English keyboard layout. The "altgr-intl" ;; variant provides dead keys for accented characters. (keyboard-layout (keyboard-layout "us" "altgr-intl")) ;; Use the UEFI variant of GRUB with the EFI System ;; Partition mounted on /boot/efi. (bootloader (bootloader-configuration (bootloader grub-efi-bootloader) (target "/boot/efi") (keyboard-layout keyboard-layout))) ;; Specify a mapped device for the encrypted root partition. ;; The UUID is that returned by 'cryptsetup luksUUID'. (mapped-devices (list (mapped-device (source (uuid "12345678-1234-1234-1234-123456789abc")) (target "my-root") (type luks-device-mapping)))) (file-systems (append (list (file-system (device (file-system-label "my-root")) (mount-point "/") (type "ext4") (dependencies mapped-devices)) (file-system (device (uuid "1234-ABCD" 'fat)) (mount-point "/boot/efi") (type "vfat"))) %base-file-systems)) ;; Create user `bob' with `alice' as its initial password. (users (cons (user-account (name "bob") (comment "Alice's brother") (password (crypt "alice" "$6$abc")) (group "users") (supplementary-groups '("wheel" "netdev" "audio" "video"))) %base-user-accounts)) ;; This is where we specify system-wide packages. (packages (append (list ;; for HTTPS access nss-certs ;; for user mounts gvfs) %base-packages)) ;; Add GNOME and Xfce---we can choose at the log-in screen ;; by clicking the gear. Use the "desktop" services, which ;; include the X11 log-in service, networking with ;; NetworkManager, and more. (services (append (list (service gnome-desktop-service-type) (service xfce-desktop-service-type) (set-xorg-configuration (xorg-configuration (keyboard-layout keyboard-layout)))) %desktop-services)) ;; Allow resolution of '.local' host names with mDNS. (name-service-switch %mdns-host-lookup-nss))
Un sistema gráfico con una selección de gestores de ventanas ligeros en vez de entornos de escritorio completos podría ser así:
;; This is an operating system configuration template ;; for a "desktop" setup without full-blown desktop ;; environments. (use-modules (gnu) (gnu system nss)) (use-service-modules desktop) (use-package-modules bootloaders certs emacs emacs-xyz ratpoison suckless wm xorg) (operating-system (host-name "antelope") (timezone "Europe/Paris") (locale "en_US.utf8") ;; Use the UEFI variant of GRUB with the EFI System ;; Partition mounted on /boot/efi. (bootloader (bootloader-configuration (bootloader grub-efi-bootloader) (target "/boot/efi"))) ;; Assume the target root file system is labelled "my-root", ;; and the EFI System Partition has UUID 1234-ABCD. (file-systems (append (list (file-system (device (file-system-label "my-root")) (mount-point "/") (type "ext4")) (file-system (device (uuid "1234-ABCD" 'fat)) (mount-point "/boot/efi") (type "vfat"))) %base-file-systems)) (users (cons (user-account (name "alice") (comment "Bob's sister") (group "users") (supplementary-groups '("wheel" "netdev" "audio" "video"))) %base-user-accounts)) ;; Add a bunch of window managers; we can choose one at ;; the log-in screen with F1. (packages (append (list ;; window managers ratpoison i3-wm i3status dmenu emacs emacs-exwm emacs-desktop-environment ;; terminal emulator xterm ;; for HTTPS access nss-certs) %base-packages)) ;; Use the "desktop" services, which include the X11 ;; log-in service, networking with NetworkManager, and more. (services %desktop-services) ;; Allow resolution of '.local' host names with mDNS. (name-service-switch %mdns-host-lookup-nss))
Este ejemplo se refiere al sistema de archivos /boot/efi por su UUID
1234-ABCD
. Substituya este UUID con el UUID correcto en su sistema,
como el devuelto por la orden blkid
.
Véase Servicios de escritorio, para la lista exacta de servicios proporcionados
por %desktop-services
. Véase Certificados X.509, para información
sobre el paquete nss-certs
usado aquí.
De nuevo, %desktop-services
es simplemente una lista de objetos de
servicios. Si desea borrar servicios de aquí, puede hacerlo usando
procedimientos de filtrado de listas (véase SRFI-1 Filtering and Partitioning en GNU Guile Reference Manual). Por ejemplo, la
siguiente expresión devuelve una lista que contiene todos los servicios en
%desktop-services
excepto el servicio Avahi:
(remove (lambda (service)
(eq? (service-kind service) avahi-service-type))
%desktop-services)
Asumiendo que la declaración de operating-system
se encuentra en el
archivo mi-configuración-del-sistema.scm, la orden guix
system mi-conf-del-sistema.scm
instancia esa configuración, y la convierte
en la entrada predeterminada de GRUB en el arranque (véase Invocación de guix system).
La manera habitual de cambiar la configuración del sistema es actualizar
este archivo y volver a ejecutar guix system reconfigure
. Nunca se
deberían tocar los archivos en /etc o ejecutar órdenes que modifiquen
el estado del sistema como useradd
o grub-install
. De
hecho, debe evitarlo ya que no únicamente anularía su garantía sino que
también le impediría volver a una versión previa de su sistema, en caso de
necesitarlo.
Hablando de vuelta atrás, cada vez que ejecuta guix system
reconfigure
se crea una nueva generación del sistema—sin modificar
o borrar generaciones previas. Las generaciones previas tienen una entrada
en el menú del cargador de arranque, lo que permite arrancarlas en caso de
que algo funcionase mal en las últimas generaciones. Tranquilizador, ¿no? La
orden guix system list-generations
enumera las generaciones del
sistema disponibles en el disco. Es también posible volver a una versión
previa con las órdenes guix system roll-back
y guix
system switch-generation
.
Aunque la orden guix system reconfigure
no modificará las
generaciones previas, debe tener cuidado cuando la generación actual no es
la última (por ejemplo, después de invocar guix system roll-back
),
ya que la operación puede sobreescribir una generación posterior
(véase Invocación de guix system).
A nivel Scheme, el grueso de una declaración operating-system
se
instancia con el siguiente procedimiento monádico (véase La mónada del almacén):
Devuelve una derivación que construye so, un objeto
operating-system
(véase Derivaciones).
La salida de la derivación es un único directorio que hace referencia a todos los paquetes, archivos de configuración y otros archivos auxiliares necesarios para instanciar so.
Este procedimiento se proporciona por el módulo (gnu system)
. Junto
con (gnu services)
(véase Servicios), este módulo contiene los
entresijos del sistema Guix. ¡Asegúrese de echarle un vistazo!
Siguiente: Referencia de operating-system, Subir: Configuración del sistema [Índice general][Índice]