From 9c976474465f055f0b3ceb7877a53ae1cad22613 Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Wed, 12 Oct 2022 13:37:59 +0200 Subject: system: Use a valid license as the dummy license. * gnu/system/images/wsl2.scm (dummy-package)[license]: Do not use #F. --- gnu/system/images/wsl2.scm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'gnu/system') diff --git a/gnu/system/images/wsl2.scm b/gnu/system/images/wsl2.scm index 15cb4f69b8a..80c2e775b49 100644 --- a/gnu/system/images/wsl2.scm +++ b/gnu/system/images/wsl2.scm @@ -33,6 +33,7 @@ #:use-module (guix build-system trivial) #:use-module (guix gexp) #:use-module (guix packages) + #:use-module ((guix licenses) #:select (fsdg-compatible)) #:export (wsl-boot-program wsl-os wsl2-image)) @@ -113,7 +114,7 @@ USER." (home-page #f) (synopsis #f) (description #f) - (license #f))) + (license (fsdg-compatible "dummy")))) (define dummy-bootloader (bootloader -- cgit v1.3 From 19f3dbcb4d4261b6d3813d36174b8ca6ac52d2ea Mon Sep 17 00:00:00 2001 From: Tobias Geerinckx-Rice Date: Sun, 23 Oct 2022 02:00:00 +0200 Subject: system: Support bare-bones serial console. * gnu/system/examples/bare-bones.tmpl (operating-system): Add a ttyS0 console to kernel-arguments. --- gnu/system/examples/bare-bones.tmpl | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gnu/system') diff --git a/gnu/system/examples/bare-bones.tmpl b/gnu/system/examples/bare-bones.tmpl index 387e4b12baf..687d4c15730 100644 --- a/gnu/system/examples/bare-bones.tmpl +++ b/gnu/system/examples/bare-bones.tmpl @@ -16,6 +16,9 @@ (bootloader (bootloader-configuration (bootloader grub-bootloader) (targets '("/dev/sdX")))) + ;; It's fitting to support the equally bare bones ‘-nographic’ + ;; QEMU option, which also nicely sidesteps forcing QWERTY. + (kernel-arguments (list "console=ttyS0,115200")) (file-systems (cons (file-system (device (file-system-label "my-root")) (mount-point "/") -- cgit v1.3 From a75deb884468db0ce2c35e23a61f1a14c9be958e Mon Sep 17 00:00:00 2001 From: Thiago Jung Bauermann Date: Thu, 3 Nov 2022 22:54:56 -0300 Subject: system: image: Define correct docker image arch when cross building MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cross-building a docker image with: $ guix system image --image-type=docker --target=aarch64-linux-gnu os.scm results in an image where the architecture declared in its config.json is the host architecture rather than the target one. The binaries are correctly cross-compiled, so the image can be loaded and used despite the warning message shown by docker: $ docker load -i vcal7bvsqcijchifhqdvprpd1niqh8sk-docker-image.tar.gz Loaded image: guix:latest $ docker create guix:latest WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested 40f06aa869ed690489c4a3824a7f7721bd4bf453b85f25ac7199266939fe2fba $ echo $? 0 This is fixed by passing the correct triplet to the build-docker-image function. * gnu/system/image.scm (system-docker-image) Add ‘image-target’ variable. [builder]: Pass ‘#:system’ argument to ‘build-docker-image’. Signed-off-by: Mathieu Othacehe --- gnu/system/image.scm | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gnu/system') diff --git a/gnu/system/image.scm b/gnu/system/image.scm index 5fc0d55d9a1..f07a4a52174 100644 --- a/gnu/system/image.scm +++ b/gnu/system/image.scm @@ -652,6 +652,8 @@ output file." shared-network?) (list boot-program))) (substitutable? (image-substitutable? image)) + (image-target (or (%current-target-system) + (nix-system->gnu-triplet))) (register-closures? (has-guix-service-type? os)) (schema (and register-closures? (local-file (search-path %load-path @@ -705,6 +707,7 @@ output file." #:entry-point '(#$boot-program #$os) #:compressor '(#+(file-append gzip "/bin/gzip") "-9n") #:creation-time (make-time time-utc 0 1) + #:system #$image-target #:transformations `((,image-root -> "")))))))) (computed-file name builder -- cgit v1.3 From a6da50d60a2cc3d0f218e38cbc197011b8151554 Mon Sep 17 00:00:00 2001 From: Hilton Chain Date: Sat, 12 Nov 2022 21:59:26 +0800 Subject: linux-initrd: raw-initrd: Add keyword argument #:pre-mount. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/system/linux-initrd.scm (raw-initrd): Add keyword argument #:pre-mount. Document it. * doc/guix.texi (initial RAM disk): Likewise. Signed-off-by: Ludovic Courtès --- doc/guix.texi | 8 +++++--- gnu/system/linux-initrd.scm | 7 +++++-- 2 files changed, 10 insertions(+), 5 deletions(-) (limited to 'gnu/system') diff --git a/doc/guix.texi b/doc/guix.texi index ef3b8e127e1..2d4f7d960e2 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -37869,15 +37869,17 @@ here is how to use it and customize it further. @cindex initrd @cindex initial RAM disk @deffn {Scheme Procedure} raw-initrd @var{file-systems} @ - [#:linux-modules '()] [#:mapped-devices '()] @ - [#:keyboard-layout #f] @ - [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f] + [#:linux-modules '()] [#:pre-mount #t] [#:mapped-devices '()] @ + [#:keyboard-layout #f] [#:helper-packages '()] @ + [#:qemu-networking? #f] [#:volatile-root? #f] Return a derivation that builds a raw initrd. @var{file-systems} is a list of file systems to be mounted by the initrd, possibly in addition to the root file system specified on the kernel command line via @option{root}. @var{linux-modules} is a list of kernel modules to be loaded at boot time. @var{mapped-devices} is a list of device mappings to realize before @var{file-systems} are mounted (@pxref{Mapped Devices}). +@var{pre-mount} is a G-expression to evaluate before realizing +@var{mapped-devices}. @var{helper-packages} is a list of packages to be copied in the initrd. It may include @code{e2fsck/static} or other packages needed by the initrd to check diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm index 4c4c78e4440..58e95a1312b 100644 --- a/gnu/system/linux-initrd.scm +++ b/gnu/system/linux-initrd.scm @@ -172,6 +172,7 @@ MODULES and taken from LINUX." #:key (linux linux-libre) (linux-modules '()) + (pre-mount #t) (mapped-devices '()) (keyboard-layout #f) (helper-packages '()) @@ -183,7 +184,8 @@ modules taken from LINUX. FILE-SYSTEMS is a list of file-systems to be mounted by the initrd, possibly in addition to the root file system specified on the kernel command line via 'root'. LINUX-MODULES is a list of kernel modules to be loaded at boot time. MAPPED-DEVICES is a list of device -mappings to realize before FILE-SYSTEMS are mounted. +mappings to realize before FILE-SYSTEMS are mounted. PRE-MOUNT is a +G-expression to evaluate before realizing MAPPED-DEVICES. HELPER-PACKAGES is a list of packages to be copied in the initrd. It may include e2fsck/static or other packages needed by the initrd to check root partition. @@ -255,7 +257,8 @@ upon error." (map spec->file-system '#$(map file-system->spec file-systems)) #:pre-mount (lambda () - (and #$@device-mapping-commands + (and #$pre-mount + #$@device-mapping-commands #$@file-system-scan-commands)) #:linux-modules '#$linux-modules #:linux-module-directory '#$kodir -- cgit v1.3 From e3c6575ee93741a43003cd1aa4663151dd90b9f5 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Mon, 28 Nov 2022 11:18:15 +0100 Subject: system: hurd: Create more ttys. * gnu/build/hurd-boot.scm (set-hurd-device-translators)[devices]: Add more /dev/ttyN nodes. * gnu/system/hurd.scm (%base-services/hurd): Add more 'hurd-getty-service-type' instances. --- gnu/build/hurd-boot.scm | 17 +++++++++++------ gnu/system/hurd.scm | 44 +++++++++++++++++++++++--------------------- 2 files changed, 34 insertions(+), 27 deletions(-) (limited to 'gnu/system') diff --git a/gnu/build/hurd-boot.scm b/gnu/build/hurd-boot.scm index 99e5c75e116..e068ffc2023 100644 --- a/gnu/build/hurd-boot.scm +++ b/gnu/build/hurd-boot.scm @@ -213,12 +213,17 @@ set." ;; 'fd_to_filename' in libc expects it. ("dev/fd" ("/hurd/magic" "--directory" "fd") #o555) - ("dev/tty1" ("/hurd/term" "/dev/tty1" "hurdio" "/dev/vcs/1/console") - #o666) - ("dev/tty2" ("/hurd/term" "/dev/tty2" "hurdio" "/dev/vcs/2/console") - #o666) - ("dev/tty3" ("/hurd/term" "/dev/tty3" "hurdio" "/dev/vcs/3/console") - #o666) + ;; Create a number of ttys; syslogd writes to tty12 by default. + ;; FIXME: Creating /dev/tty12 leads the console client to switch to + ;; tty12 when syslogd starts, which is confusing for users. Thus, do + ;; not create tty12. + ,@(map (lambda (n) + (let ((n (number->string n))) + `(,(string-append "dev/tty" n) + ("/hurd/term" ,(string-append "/dev/tty" n) + "hurdio" ,(string-append "/dev/vcs/" n "/console")) + #o666))) + (iota 11 1)) ,@(append-map (lambda (n) (let ((n (number->string n))) diff --git a/gnu/system/hurd.scm b/gnu/system/hurd.scm index 4bc32d9bd1b..24fc6dbcaeb 100644 --- a/gnu/system/hurd.scm +++ b/gnu/system/hurd.scm @@ -75,28 +75,30 @@ info-reader)) (define %base-services/hurd - (list (service hurd-console-service-type - (hurd-console-configuration (hurd hurd))) - (service hurd-getty-service-type (hurd-getty-configuration - (tty "tty1"))) - (service hurd-getty-service-type (hurd-getty-configuration - (tty "tty2"))) - (service static-networking-service-type - (list %loopback-static-networking + (append (list (service hurd-console-service-type + (hurd-console-configuration (hurd hurd))) + (service static-networking-service-type + (list %loopback-static-networking - ;; QEMU user-mode networking. To get "eth0", you need - ;; QEMU to emulate a device for which Mach has an - ;; in-kernel driver, for instance with: - ;; --device rtl8139,netdev=net0 --netdev user,id=net0 - %qemu-static-networking)) - (syslog-service) - (service guix-service-type - (guix-configuration - (extra-options '("--disable-chroot" - "--disable-deduplication")))) - (service special-files-service-type - `(("/bin/sh" ,(file-append bash "/bin/sh")) - ("/usr/bin/env" ,(file-append coreutils "/bin/env")))))) + ;; QEMU user-mode networking. To get "eth0", you need + ;; QEMU to emulate a device for which Mach has an + ;; in-kernel driver, for instance with: + ;; --device rtl8139,netdev=net0 --netdev user,id=net0 + %qemu-static-networking)) + (service guix-service-type + (guix-configuration + (extra-options '("--disable-chroot" + "--disable-deduplication")))) + (service special-files-service-type + `(("/bin/sh" ,(file-append bash "/bin/sh")) + ("/usr/bin/env" ,(file-append coreutils + "/bin/env")))) + (syslog-service)) + (map (lambda (n) + (service hurd-getty-service-type + (hurd-getty-configuration + (tty (string-append "tty" (number->string n)))))) + (iota 6 1)))) (define %setuid-programs/hurd ;; Default set of setuid-root programs. -- cgit v1.3 From 1a63aea94340f6a24ac09e1c348401e9dfd05395 Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Thu, 1 Dec 2022 19:50:36 +0100 Subject: linux-container: Do not replace nscd-service-type. * gnu/system/linux-container.scm (containerized-operating-system): Respect customizations to the nscd-service-type and only modify the caches field. --- gnu/system/linux-container.scm | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) (limited to 'gnu/system') diff --git a/gnu/system/linux-container.scm b/gnu/system/linux-container.scm index 69080bcacb6..c2fd55d48ec 100644 --- a/gnu/system/linux-container.scm +++ b/gnu/system/linux-container.scm @@ -121,9 +121,7 @@ containerized OS. EXTRA-FILE-SYSTEMS is a list of file systems to add to OS." ;; different configs that are better suited to containers. (append (list console-font-service-type mingetty-service-type - agetty-service-type - ;; Reinstantiated below with smaller caches. - nscd-service-type) + agetty-service-type) (if shared-network? ;; Replace these with dummy-networking-service-type below. (list @@ -134,17 +132,13 @@ containerized OS. EXTRA-FILE-SYSTEMS is a list of file systems to add to OS." (list)))) (define services-to-add - (append - ;; Many Guix services depend on a 'networking' shepherd - ;; service, so make sure to provide a dummy 'networking' - ;; service when we are sure that networking is already set up - ;; in the host and can be used. That prevents double setup. - (if shared-network? - (list (service dummy-networking-service-type)) - '()) - (list - (nscd-service (nscd-configuration - (caches %nscd-container-caches)))))) + ;; Many Guix services depend on a 'networking' shepherd + ;; service, so make sure to provide a dummy 'networking' + ;; service when we are sure that networking is already set up + ;; in the host and can be used. That prevents double setup. + (if shared-network? + (list (service dummy-networking-service-type)) + '())) (operating-system (inherit os) @@ -155,7 +149,11 @@ containerized OS. EXTRA-FILE-SYSTEMS is a list of file systems to add to OS." (services (append (remove (lambda (service) (memq (service-kind service) services-to-drop)) - (operating-system-user-services os)) + (modify-services (operating-system-user-services os) + (nscd-service-type + config => (nscd-configuration + (inherit config) + (caches %nscd-container-caches))))) services-to-add)) (file-systems (append (map mapping->fs (if shared-network? -- cgit v1.3 From c7793b82efd3383a9f7adf0dfa82d71ee032e41b Mon Sep 17 00:00:00 2001 From: Stefan Date: Thu, 1 Dec 2022 13:46:38 -0500 Subject: gnu: raspberry-pi: Add a bootloader-chain for the Raspberry Pi and os examples. * gnu/packages/raspberry-pi.scm (grub-efi-bootloader-chain-raspi-64): New bootloader variable, capable to boot a Raspberry Pi over network or from a local storage. * gnu/system/examples/raspberry-pi-64.tmpl: New operating-system example. * gnu/system/examples/raspberry-pi-64-nfs-root.tmpl: New operating-system example for booting over network. * Makefile.am (EXAMPLES): Register the new files. Signed-off-by: Maxim Cournoyer --- Makefile.am | 2 + gnu/packages/raspberry-pi.scm | 19 ++++++ gnu/system/examples/raspberry-pi-64-nfs-root.tmpl | 75 +++++++++++++++++++++ gnu/system/examples/raspberry-pi-64.tmpl | 79 +++++++++++++++++++++++ 4 files changed, 175 insertions(+) create mode 100644 gnu/system/examples/raspberry-pi-64-nfs-root.tmpl create mode 100644 gnu/system/examples/raspberry-pi-64.tmpl (limited to 'gnu/system') diff --git a/Makefile.am b/Makefile.am index 75c9df573c7..c0b2a3ee804 100644 --- a/Makefile.am +++ b/Makefile.am @@ -440,6 +440,8 @@ EXAMPLES = \ gnu/system/examples/desktop.tmpl \ gnu/system/examples/lightweight-desktop.tmpl \ gnu/system/examples/docker-image.tmpl \ + gnu/system/examples/raspberry-pi-64.tmpl \ + gnu/system/examples/raspberry-pi-64-nfs-root.tmpl \ gnu/system/examples/vm-image.tmpl GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go $(dist_noinst_DATA:%.scm=%.go) diff --git a/gnu/packages/raspberry-pi.scm b/gnu/packages/raspberry-pi.scm index 18a041b6af3..21bc9a3bd80 100644 --- a/gnu/packages/raspberry-pi.scm +++ b/gnu/packages/raspberry-pi.scm @@ -18,11 +18,14 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu packages raspberry-pi) + #:use-module (gnu bootloader) + #:use-module (gnu bootloader grub) #:use-module (gnu packages) #:use-module (gnu packages admin) #:use-module (gnu packages algebra) #:use-module (gnu packages base) #:use-module (gnu packages bash) + #:use-module (gnu packages bootloaders) #:use-module (gnu packages commencement) #:use-module (gnu packages cross-base) #:use-module (gnu packages documentation) @@ -316,6 +319,22 @@ kernel LINUX." (format #f "The device-tree files for Raspberry Pi models from ~a." (package-name linux))))) +(define-public grub-efi-bootloader-chain-raspi-64 + ;; A bootloader capable to boot a Raspberry Pi over network via TFTP or from + ;; a local storage like a micro SD card. It neither installs firmware nor + ;; device-tree files for the Raspberry Pi. It just assumes them to be + ;; existing in boot/efi in the same way that some UEFI firmware with ACPI + ;; data is usually assumed to be existing on PCs. It creates firmware + ;; configuration files and a bootloader-chain with U-Boot to provide an EFI + ;; API for the final GRUB bootloader. It also serves as a blue-print to + ;; create an a custom bootloader-chain with firmware and device-tree + ;; packages or files. + (efi-bootloader-chain grub-efi-netboot-removable-bootloader + #:packages (list u-boot-rpi-arm64-efi-bin) + #:files (list %raspi-config-txt + %raspi-bcm27-dtb-txt + %raspi-u-boot-bootloader-txt))) + (define (make-raspi-defconfig arch defconfig sha256-as-base32) "Make for the architecture ARCH a file-like object from the DEFCONFIG file with the hash SHA256-AS-BASE32. This object can be used as the #:defconfig diff --git a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl new file mode 100644 index 00000000000..7bcac8ded0c --- /dev/null +++ b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl @@ -0,0 +1,75 @@ +;; This is an operating-system configuration template of a +;; 64-bit minimal system for a Raspberry Pi with an NFS root file-system. + +;; It neither installs firmware nor device-tree files for the Raspberry Pi. +;; It just assumes them to be existing in boot/efi in the same way that some +;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + +;; It expects the boot/efi directory to be served via TFTP and the root +;; file-system to be served via NFS. See the grub-efi-netboot-bootloader +;; description in the manual for more details. + +(use-modules (gnu) + (gnu artwork) + (gnu system nss)) +(use-service-modules admin + avahi + networking + ssh) +(use-package-modules certs + linux + raspberry-pi + ssh) + +(define %my-public-key + (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) + +(define-public raspberry-pi-64-nfs-root + (operating-system + (host-name "raspberrypi-guix") + (timezone "Europe/Berlin") + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader-chain-raspi-64) + (targets (list "/boot/efi")) + (theme (grub-theme + (resolution '(1920 . 1080)) + (image (file-append + %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg")))))) + (kernel-arguments '("ip=dhcp")) + (kernel (customize-linux #:linux linux-libre-arm64-generic + #:extra-version "arm64-generic-netboot" + #:configs '("CONFIG_NFS_SWAP=y" + "CONFIG_USB_USBNET=y" + "CONFIG_USB_LAN78XX=y" + "CONFIG_USB_NET_SMSC95XX=y"))) + (initrd-modules '()) + (file-systems (cons* (file-system + (mount-point "/") + (type "nfs") + (device ":/export/raspberrypi/guix") + (options "addr=10.20.30.40,vers=4.1")) + %base-file-systems)) + (swap-devices (list (swap-space + (target "/run/swapfile")))) + (users (cons* (user-account + (name "pi") + (group "users") + (supplementary-groups '("wheel" "netdev" "audio" "video")) + (home-directory "/home/pi")) + %base-user-accounts)) + (packages (cons* nss-certs + openssh + %base-packages)) + (services (cons* (service avahi-service-type) + (service dhcp-client-service-type) + (service ntp-service-type) + (service openssh-service-type + (openssh-configuration + (x11-forwarding? #t) + (authorized-keys + `(("pi" ,%my-public-key))))) + %base-services)) + (name-service-switch %mdns-host-lookup-nss))) + +raspberry-pi-64-nfs-root diff --git a/gnu/system/examples/raspberry-pi-64.tmpl b/gnu/system/examples/raspberry-pi-64.tmpl new file mode 100644 index 00000000000..7d2638dd808 --- /dev/null +++ b/gnu/system/examples/raspberry-pi-64.tmpl @@ -0,0 +1,79 @@ +;; This is an operating-system configuration template of a +;; 64-bit minimal system for a Raspberry Pi with local storage. + +;; It neither installs firmware nor device-tree files for the Raspberry Pi. +;; It just assumes them to be existing in boot/efi in the same way that some +;; UEFI firmware with ACPI data is usually assumed to be existing on PCs. + +;; It expects the boot-partition to be mounted as boot/efi in the same way +;; as it is usually expeted on PCs with UEFI firmware. + +(use-modules (gnu) + (gnu artwork) + (gnu system nss)) +(use-service-modules admin + avahi + networking + ssh) +(use-package-modules certs + linux + raspberry-pi + ssh) + +(define %my-public-key + (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) + +(define-public raspberry-pi-64 + (operating-system + (host-name "raspberrypi-guix") + (timezone "Europe/Berlin") + (bootloader (bootloader-configuration + (bootloader grub-efi-bootloader-chain-raspi-64) + (targets (list "/boot/efi")) + (theme (grub-theme + (resolution '(1920 . 1080)) + (image (file-append + %artwork-repository + "/grub/GuixSD-fully-black-16-9.svg")))))) + (kernel (customize-linux #:linux linux-libre-arm64-generic + ;; It is possible to use a specific defconfig + ;; file, for example the "bcmrpi3_defconfig" with + ;; the variable shown below. Unfortunately the + ;; kernel built from the linux-libre sources with + ;; this defconfig file does not boot. + ;;#:extra-version "gnu-bcmrpi3" + ;;#:defconfig %bcmrpi3-defconfig + )) + (initrd-modules '()) + (file-systems (cons* (file-system + (mount-point "/") + (type "ext4") + (device (file-system-label "Guix"))) + (file-system + (mount-point "/boot/efi") + (type "vfat") + (device (file-system-label "EFI"))) + %base-file-systems)) + (swap-devices (list (swap-space + (target "/run/swapfile")))) + (users (cons* (user-account + (name "pi") + (group "users") + (supplementary-groups '("wheel" "netdev" "audio" "video")) + (home-directory "/home/pi")) + %base-user-accounts)) + (packages (cons* nss-certs + openssh + %base-packages)) + (services (cons* (service avahi-service-type) + (service dhcp-client-service-type) + (service ntp-service-type) + (service openssh-service-type + (openssh-configuration + (x11-forwarding? #t) + (authorized-keys + `(("pi" ,%my-public-key))))) + %base-services)) + (name-service-switch %mdns-host-lookup-nss))) + +raspberry-pi-64 -- cgit v1.3 From 08dc9f2ca2e96476aa51c906c8ba01ca5d033568 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Sun, 4 Dec 2022 00:37:11 -0500 Subject: gnu: Do not use 'local-file' in Raspberry Pi OS examples. As this breaks the 'tests/guix-system.sh' test. * gnu/system/examples/raspberry-pi-64-nfs-root.tmpl (%my-public-key): Delete variable. (raspberry-pi-64-nfs-root) [services]: Remove key from openssh-configuration. * gnu/system/examples/raspberry-pi-64.tmpl: Likewise. Reported-by: Vagrant Cascadian --- gnu/system/examples/raspberry-pi-64-nfs-root.tmpl | 7 +------ gnu/system/examples/raspberry-pi-64.tmpl | 7 +------ 2 files changed, 2 insertions(+), 12 deletions(-) (limited to 'gnu/system') diff --git a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl index 7bcac8ded0c..8c47c650f6e 100644 --- a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl +++ b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl @@ -21,9 +21,6 @@ raspberry-pi ssh) -(define %my-public-key - (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) - (define-public raspberry-pi-64-nfs-root (operating-system (host-name "raspberrypi-guix") @@ -66,9 +63,7 @@ (service ntp-service-type) (service openssh-service-type (openssh-configuration - (x11-forwarding? #t) - (authorized-keys - `(("pi" ,%my-public-key))))) + (x11-forwarding? #t))) %base-services)) (name-service-switch %mdns-host-lookup-nss))) diff --git a/gnu/system/examples/raspberry-pi-64.tmpl b/gnu/system/examples/raspberry-pi-64.tmpl index 7d2638dd808..3ad588207c9 100644 --- a/gnu/system/examples/raspberry-pi-64.tmpl +++ b/gnu/system/examples/raspberry-pi-64.tmpl @@ -20,9 +20,6 @@ raspberry-pi ssh) -(define %my-public-key - (local-file (string-append (getenv "HOME") "/.ssh/id_ecdsa.pub"))) - (define-public raspberry-pi-64 (operating-system (host-name "raspberrypi-guix") @@ -70,9 +67,7 @@ (service ntp-service-type) (service openssh-service-type (openssh-configuration - (x11-forwarding? #t) - (authorized-keys - `(("pi" ,%my-public-key))))) + (x11-forwarding? #t))) %base-services)) (name-service-switch %mdns-host-lookup-nss))) -- cgit v1.3 From 1603c78aa4657d9f6e3b7cf1daace40043ff3e9a Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Mon, 28 Nov 2022 13:57:58 -0500 Subject: system: Rename and move %base-packages-disk-utilities. Rationale: It is only used in INSTALLATION-OS and doesn't make sense to be used in another context, given that file systems now automatically pull their dependencies since commit 45eac6cdf5c8d9d7b0c564b105c790d2d2007799 (services: Add file system utilities to profile). * gnu/system.scm (%base-packages-disk-utilities): Deprecate and rename to... * gnu/system/install.scm (%installer-disk-utilities): ... this. (installation-os) [packages]: Adjust accordingly. --- gnu/system.scm | 19 ++----------------- gnu/system/install.scm | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 18 deletions(-) (limited to 'gnu/system') diff --git a/gnu/system.scm b/gnu/system.scm index 3478afcec47..1c119c31b66 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -38,6 +38,7 @@ #:use-module (guix gexp) #:use-module (guix records) #:use-module (guix packages) + #:use-module (guix deprecation) #:use-module (guix derivations) #:use-module (guix profiles) #:use-module ((guix utils) #:select (substitute-keyword-arguments)) @@ -49,9 +50,6 @@ #:use-module (gnu packages bash) #:use-module (gnu packages compression) #:use-module (gnu packages cross-base) - #:use-module (gnu packages cryptsetup) - #:use-module (gnu packages disk) - #:use-module (gnu packages file-systems) #:use-module (gnu packages firmware) #:use-module (gnu packages gawk) #:use-module (gnu packages guile) @@ -896,20 +894,7 @@ of PROVENANCE-SERVICE-TYPE to its services." ;; many people are familiar with, so keep it around. iw wireless-tools)) -(define %base-packages-disk-utilities - ;; A well-rounded set of packages for interacting with disks, - ;; partitions and filesystems, included with the Guix installation - ;; image. - (list parted gptfdisk ddrescue - ;; We used to provide fdisk from GNU fdisk, but as of version 2.0.0a - ;; it pulls Guile 1.8, which takes unreasonable space; furthermore - ;; util-linux's fdisk is already available, in %base-packages-linux. - cryptsetup mdadm - dosfstools - btrfs-progs - f2fs-tools - jfsutils - xfsprogs)) +(define-deprecated %base-packages-disk-utilities #f '()) (define %base-packages ;; Default set of packages globally visible. It should include anything diff --git a/gnu/system/install.scm b/gnu/system/install.scm index 003c49a3e71..d34d9743387 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -48,6 +48,9 @@ #:use-module (gnu packages bootloaders) #:use-module (gnu packages certs) #:use-module (gnu packages compression) + #:use-module (gnu packages cryptsetup) + #:use-module (gnu packages disk) + #:use-module (gnu packages file-systems) #:use-module (gnu packages fonts) #:use-module (gnu packages fontutils) #:use-module (gnu packages guile) @@ -458,6 +461,20 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m \x1b[1;33mUse Alt-F2 for documentation.\x1b[0m ") +(define %installer-disk-utilities + ;; A well-rounded set of packages for interacting with disks, partitions and + ;; file systems, included with the Guix installation image. + (list parted gptfdisk ddrescue + ;; We used to provide fdisk from GNU fdisk, but as of version 2.0.0a + ;; it pulls Guile 1.8, which takes unreasonable space; furthermore + ;; util-linux's fdisk is already available, in %base-packages-linux. + cryptsetup mdadm + dosfstools + btrfs-progs + f2fs-tools + jfsutils + xfsprogs)) + (define installation-os ;; The operating system used on installation images for USB sticks etc. (operating-system @@ -530,7 +547,7 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m font-dejavu font-gnu-unifont grub ; mostly so xrefs to its manual work nss-certs) ; To access HTTPS, use git, etc. - %base-packages-disk-utilities + %installer-disk-utilities %base-packages)))) (define* (os-with-u-boot os board #:key (bootloader-target "/dev/mmcblk0") -- cgit v1.3 From ed845e8250674f8ec545c19cebd298847fec81c2 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Mon, 28 Nov 2022 14:03:58 -0500 Subject: install: Add missing e2fsprogs utility. * gnu/system/install.scm (%installer-disk-utilities): Add e2fsprogs. Reported-by: Adam Kandur --- gnu/system/install.scm | 1 + 1 file changed, 1 insertion(+) (limited to 'gnu/system') diff --git a/gnu/system/install.scm b/gnu/system/install.scm index d34d9743387..f6f1923121c 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -471,6 +471,7 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m cryptsetup mdadm dosfstools btrfs-progs + e2fsprogs f2fs-tools jfsutils xfsprogs)) -- cgit v1.3 From ec9326f021e37aa6ae97d6bab0c39f44f24cd11b Mon Sep 17 00:00:00 2001 From: Gabriel Wicki Date: Wed, 23 Nov 2022 10:41:56 +0100 Subject: system: images: Add networking support to pine64 image. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/system/images/pine64.scm (pine64-barebones-os) [services]: Add dhcp-client-service-type and ntp-service-type to the list of services. [packages]: Add nss-certs to the list of packages. Signed-off-by: 宋文武 --- gnu/system/images/pine64.scm | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'gnu/system') diff --git a/gnu/system/images/pine64.scm b/gnu/system/images/pine64.scm index a2d471b8024..3feb69764d7 100644 --- a/gnu/system/images/pine64.scm +++ b/gnu/system/images/pine64.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2020 Mathieu Othacehe +;;; Copyright © 2022 Gabriel Wicki ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,9 +22,11 @@ #:use-module (gnu bootloader u-boot) #:use-module (gnu image) #:use-module (gnu packages linux) + #:use-module (gnu packages certs) #:use-module (guix platforms arm) #:use-module (gnu services) #:use-module (gnu services base) + #:use-module (gnu services networking) #:use-module (gnu system) #:use-module (gnu system file-systems) #:use-module (gnu system image) @@ -47,13 +50,17 @@ (mount-point "/") (type "ext4")) %base-file-systems)) - (services (cons (service agetty-service-type - (agetty-configuration - (extra-options '("-L")) ; no carrier detect - (baud-rate "115200") - (term "vt100") - (tty "ttyS0"))) - %base-services)))) + (services (cons* + (service agetty-service-type + (agetty-configuration + (extra-options '("-L")) ; no carrier detect + (baud-rate "115200") + (term "vt100") + (tty "ttyS0"))) + (service dhcp-client-service-type) + (service ntp-service-type) + %base-services)) + (packages (cons nss-certs %base-packages)))) (define pine64-image-type (image-type -- cgit v1.3 From aeecd06ab9f748b0b40573e5520ea6c642060e12 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Mon, 28 Nov 2022 13:57:58 -0500 Subject: system: Rename and move %base-packages-disk-utilities. Rationale: It is only used in INSTALLATION-OS and doesn't make sense to be used in another context, given that file systems now automatically pull their dependencies since commit 45eac6cdf5c8d9d7b0c564b105c790d2d2007799 (services: Add file system utilities to profile). * gnu/system.scm (%base-packages-disk-utilities): Deprecate and rename to... * gnu/system/install.scm (%installer-disk-utilities): ... this. (installation-os) [packages]: Adjust accordingly. --- gnu/system.scm | 19 ++----------------- gnu/system/install.scm | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 18 deletions(-) (limited to 'gnu/system') diff --git a/gnu/system.scm b/gnu/system.scm index 3891d5a4675..62c8e0c2b61 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -38,6 +38,7 @@ #:use-module (guix gexp) #:use-module (guix records) #:use-module (guix packages) + #:use-module (guix deprecation) #:use-module (guix derivations) #:use-module (guix profiles) #:use-module ((guix utils) #:select (substitute-keyword-arguments)) @@ -49,9 +50,6 @@ #:use-module (gnu packages bash) #:use-module (gnu packages compression) #:use-module (gnu packages cross-base) - #:use-module (gnu packages cryptsetup) - #:use-module (gnu packages disk) - #:use-module (gnu packages file-systems) #:use-module (gnu packages firmware) #:use-module (gnu packages gawk) #:use-module (gnu packages guile) @@ -898,20 +896,7 @@ of PROVENANCE-SERVICE-TYPE to its services." ;; many people are familiar with, so keep it around. iw wireless-tools)) -(define %base-packages-disk-utilities - ;; A well-rounded set of packages for interacting with disks, - ;; partitions and filesystems, included with the Guix installation - ;; image. - (list parted gptfdisk ddrescue - ;; We used to provide fdisk from GNU fdisk, but as of version 2.0.0a - ;; it pulls Guile 1.8, which takes unreasonable space; furthermore - ;; util-linux's fdisk is already available, in %base-packages-linux. - cryptsetup mdadm - dosfstools - btrfs-progs - f2fs-tools - jfsutils - xfsprogs)) +(define-deprecated %base-packages-disk-utilities #f '()) (define %base-packages ;; Default set of packages globally visible. It should include anything diff --git a/gnu/system/install.scm b/gnu/system/install.scm index 003c49a3e71..d34d9743387 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -48,6 +48,9 @@ #:use-module (gnu packages bootloaders) #:use-module (gnu packages certs) #:use-module (gnu packages compression) + #:use-module (gnu packages cryptsetup) + #:use-module (gnu packages disk) + #:use-module (gnu packages file-systems) #:use-module (gnu packages fonts) #:use-module (gnu packages fontutils) #:use-module (gnu packages guile) @@ -458,6 +461,20 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m \x1b[1;33mUse Alt-F2 for documentation.\x1b[0m ") +(define %installer-disk-utilities + ;; A well-rounded set of packages for interacting with disks, partitions and + ;; file systems, included with the Guix installation image. + (list parted gptfdisk ddrescue + ;; We used to provide fdisk from GNU fdisk, but as of version 2.0.0a + ;; it pulls Guile 1.8, which takes unreasonable space; furthermore + ;; util-linux's fdisk is already available, in %base-packages-linux. + cryptsetup mdadm + dosfstools + btrfs-progs + f2fs-tools + jfsutils + xfsprogs)) + (define installation-os ;; The operating system used on installation images for USB sticks etc. (operating-system @@ -530,7 +547,7 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m font-dejavu font-gnu-unifont grub ; mostly so xrefs to its manual work nss-certs) ; To access HTTPS, use git, etc. - %base-packages-disk-utilities + %installer-disk-utilities %base-packages)))) (define* (os-with-u-boot os board #:key (bootloader-target "/dev/mmcblk0") -- cgit v1.3 From ba4aed0f1feff98559e5712bf11190be78e2aadc Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Mon, 28 Nov 2022 14:03:58 -0500 Subject: install: Add missing e2fsprogs utility. * gnu/system/install.scm (%installer-disk-utilities): Add e2fsprogs. Reported-by: Adam Kandur --- gnu/system/install.scm | 1 + 1 file changed, 1 insertion(+) (limited to 'gnu/system') diff --git a/gnu/system/install.scm b/gnu/system/install.scm index d34d9743387..f6f1923121c 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -471,6 +471,7 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m cryptsetup mdadm dosfstools btrfs-progs + e2fsprogs f2fs-tools jfsutils xfsprogs)) -- cgit v1.3 From f59aa79ca342ef311a20dafc782adea6eed29b1a Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 6 Dec 2022 15:06:35 +0100 Subject: system: vm: Non-volatile 'run-vm.sh' creates a CoW image. Previously, copying the image would consume a lot of space and was I/O-intensive, to the point that the marionette connection timeout of 20s could be reached when running tests like "docker-system". * gnu/system/vm.scm (common-qemu-options): Pass 'format=' for each '-drive' option. (system-qemu-image/shared-store-script)[copy-image]: New variable. [builder]: Use it when VOLATILE? is false. --- gnu/system/vm.scm | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'gnu/system') diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm index c2f7efa966d..b7bccd72a48 100644 --- a/gnu/system/vm.scm +++ b/gnu/system/vm.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès +;;; Copyright © 2013-2022 Ludovic Courtès ;;; Copyright © 2016 Christine Lemmer-Webber ;;; Copyright © 2016, 2017 Leo Famulari ;;; Copyright © 2017 Mathieu Othacehe @@ -234,8 +234,8 @@ with '-virtfs' options for the host file systems listed in SHARED-FS." #$@(map virtfs-option shared-fs) #$@(if rw-image? - #~((format #f "-drive file=~a,if=virtio" #$image)) - #~((format #f "-drive file=~a,if=virtio,cache=writeback,werror=report,readonly=on" + #~((format #f "-drive file=~a,format=qcow2,if=virtio" #$image)) + #~((format #f "-drive file=~a,format=raw,if=virtio,cache=writeback,werror=report,readonly=on" #$image))))) (define* (system-qemu-image/shared-store-script os @@ -303,17 +303,26 @@ useful when FULL-BOOT? is true." "-m " (number->string #$memory-size) #$@options)) + (define copy-image + ;; Script that "copies" BASE-IMAGE to /tmp. Make a copy-on-write image, + ;; which is much cheaper than actually copying it. + (program-file "copy-image" + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + (unless (file-exists? #$rw-image) + (invoke #+(file-append qemu "/bin/qemu-img") + "create" "-b" #$base-image + "-F" "raw" "-f" "qcow2" #$rw-image)))))) + (define builder #~(call-with-output-file #$output (lambda (port) (format port "#!~a~%" #+(file-append bash "/bin/sh")) - (when (not #$volatile?) - (format port "~a~%" - #$(program-file "copy-image" - #~(unless (file-exists? #$rw-image) - (copy-file #$base-image #$rw-image) - (chmod #$rw-image #o640))))) + #$@(if volatile? + #~() + #~((format port "~a~%" #+copy-image))) (format port "exec ~a \"$@\"~%" (string-join #$qemu-exec " ")) (chmod port #o555)))) -- cgit v1.3 From 9ad14196ce48d5161fcaa7fc5fd26259e517cb30 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 6 Dec 2022 15:11:44 +0100 Subject: image: Clarify comment. * gnu/system/image.scm: Adjust comment. --- gnu/system/image.scm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'gnu/system') diff --git a/gnu/system/image.scm b/gnu/system/image.scm index f07a4a52174..d518a05a515 100644 --- a/gnu/system/image.scm +++ b/gnu/system/image.scm @@ -972,9 +972,9 @@ image, depending on IMAGE format." (G_ "~a: unsupported image format") image-format))))))) -;; -;; Image detection. -;; +;;; +;;; Image type discovery. +;;; (define (image-modules) "Return the list of image modules." -- cgit v1.3 From 755c4b496e24f2df5f1b0f4a3873e9e00bae1fdc Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Fri, 9 Dec 2022 16:40:53 +0100 Subject: system: Remove unused yggdrasil OS template. This file was added in fe1cd098d2b83737e96f19438612291f5a9316e4 but it's not referenced from anywhere, not even gnu/local.mk. Furthermore, we don't normally add full OS examples for the purposes of illustrating the use of a single service. * gnu/system/examples/yggdrasil.tmpl: Remove. --- gnu/system/examples/yggdrasil.tmpl | 60 -------------------------------------- 1 file changed, 60 deletions(-) delete mode 100644 gnu/system/examples/yggdrasil.tmpl (limited to 'gnu/system') diff --git a/gnu/system/examples/yggdrasil.tmpl b/gnu/system/examples/yggdrasil.tmpl deleted file mode 100644 index 4d34f49b54f..00000000000 --- a/gnu/system/examples/yggdrasil.tmpl +++ /dev/null @@ -1,60 +0,0 @@ -;; 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 admin curl networking screen) - -(operating-system - (host-name "ruby-guard-5545") - (timezone "Europe/Budapest") - (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) - (targets '("/dev/sdX")))) - (file-systems (cons (file-system - (device (file-system-label "my-root")) - (mount-point "/") - (type "ext4")) - %base-file-systems)) - (users (cons (user-account - (name "alice") - (comment "Bob's sister") - (group "users") - ;; adding her to the yggdrasil group means she can use - ;; yggdrasilctl to modify the configuration - (supplementary-groups '("wheel" "yggdrasil"))) - %base-user-accounts)) - - ;; Globally-installed packages. - (packages (cons* screen curl %base-packages)) - - ;; Add services to the baseline: a DHCP client and - ;; an SSH server. - ;; If you add an /etc/yggdrasil-private.conf, you can log in to ssh - ;; using your Yggdrasil IPv6 address from another machine running Yggdrasil. - ;; Alternatively, the client can sit behind a router that has Yggdrasil. - ;; That file is specifically _not_ handled by Guix, because we don't want its - ;; contents to sit in the world-readable /gnu/store. - (services - (append - (list - (service dhcp-client-service-type) - (service yggdrasil-service-type - (yggdrasil-configuration - (log-to 'stdout) - (log-level 'debug) - (autoconf? #f) - (json-config - ;; choose a few from - ;; https://github.com/yggdrasil-network/public-peers - '((peers . #("tcp://1.2.3.4:1337")))) - (config-file #f))) - (service openssh-service-type - (openssh-configuration - (port-number 2222)))) - %base-services))) -- cgit v1.3 From 90a2b8c64a0155a1cd663ee5408dc6bb09d64123 Mon Sep 17 00:00:00 2001 From: Tobias Geerinckx-Rice Date: Sun, 11 Dec 2022 01:00:00 +0100 Subject: install: Add lvm2-static system package. * gnu/system/install.scm (%installer-disk-utilities): Add lvm2-static. --- gnu/system/install.scm | 2 ++ 1 file changed, 2 insertions(+) (limited to 'gnu/system') diff --git a/gnu/system/install.scm b/gnu/system/install.scm index f6f1923121c..3f5352be87d 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -465,6 +465,8 @@ Access documentation at any time by pressing Alt-F2.\x1b[0m ;; A well-rounded set of packages for interacting with disks, partitions and ;; file systems, included with the Guix installation image. (list parted gptfdisk ddrescue + ;; Use the static LVM2 because it's already pulled in by the installer. + lvm2-static ;; We used to provide fdisk from GNU fdisk, but as of version 2.0.0a ;; it pulls Guile 1.8, which takes unreasonable space; furthermore ;; util-linux's fdisk is already available, in %base-packages-linux. -- cgit v1.3 From 491bddfa276cc9775adf325c07e5f82638f330e7 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Thu, 15 Dec 2022 13:39:35 -0500 Subject: system: examples: Add mode prop line. * gnu/system/examples/asus-c201.tmpl: Add a mode prop line. * gnu/system/examples/bare-bones.tmpl: Likewise. * gnu/system/examples/beaglebone-black.tmpl: Likewise. * gnu/system/examples/desktop.tmpl: Likewise. * gnu/system/examples/docker-image.tmpl: Likewise. * gnu/system/examples/lightweight-desktop.tmpl: Likewise. * gnu/system/examples/raspberry-pi-64-nfs-root.tmpl: Likewise. * gnu/system/examples/raspberry-pi-64.tmpl: Likewise. * gnu/system/examples/vm-image.tmpl: Likewise. --- gnu/system/examples/asus-c201.tmpl | 1 + gnu/system/examples/bare-bones.tmpl | 1 + gnu/system/examples/beaglebone-black.tmpl | 1 + gnu/system/examples/desktop.tmpl | 1 + gnu/system/examples/docker-image.tmpl | 1 + gnu/system/examples/lightweight-desktop.tmpl | 1 + gnu/system/examples/raspberry-pi-64-nfs-root.tmpl | 1 + gnu/system/examples/raspberry-pi-64.tmpl | 1 + gnu/system/examples/vm-image.tmpl | 1 + 9 files changed, 9 insertions(+) (limited to 'gnu/system') diff --git a/gnu/system/examples/asus-c201.tmpl b/gnu/system/examples/asus-c201.tmpl index 6b6aa706fad..019111c1674 100644 --- a/gnu/system/examples/asus-c201.tmpl +++ b/gnu/system/examples/asus-c201.tmpl @@ -1,3 +1,4 @@ +;; -*- mode: scheme; -*- ;; This is an operating system configuration template ;; for a "bare bones" setup for an ASUS C201PA. diff --git a/gnu/system/examples/bare-bones.tmpl b/gnu/system/examples/bare-bones.tmpl index 687d4c15730..45b4995574a 100644 --- a/gnu/system/examples/bare-bones.tmpl +++ b/gnu/system/examples/bare-bones.tmpl @@ -1,3 +1,4 @@ +;; -*- mode: scheme; -*- ;; This is an operating system configuration template ;; for a "bare bones" setup, with no X11 display server. diff --git a/gnu/system/examples/beaglebone-black.tmpl b/gnu/system/examples/beaglebone-black.tmpl index 90dab620627..40d0a76a379 100644 --- a/gnu/system/examples/beaglebone-black.tmpl +++ b/gnu/system/examples/beaglebone-black.tmpl @@ -1,3 +1,4 @@ +;; -*- mode: scheme; -*- ;; This is an operating system configuration template ;; for a "bare bones" setup on BeagleBone Black board. diff --git a/gnu/system/examples/desktop.tmpl b/gnu/system/examples/desktop.tmpl index 7055a8f92d4..10d0e54fa77 100644 --- a/gnu/system/examples/desktop.tmpl +++ b/gnu/system/examples/desktop.tmpl @@ -1,3 +1,4 @@ +;; -*- mode: scheme; -*- ;; This is an operating system configuration template ;; for a "desktop" setup with GNOME and Xfce where the ;; root partition is encrypted with LUKS, and a swap file. diff --git a/gnu/system/examples/docker-image.tmpl b/gnu/system/examples/docker-image.tmpl index bdc6afa6f0c..7123917af4e 100644 --- a/gnu/system/examples/docker-image.tmpl +++ b/gnu/system/examples/docker-image.tmpl @@ -1,3 +1,4 @@ +;; -*- mode: scheme; -*- ;; This is an operating system configuration template for a "Docker image" ;; setup, so it has barely any services at all. diff --git a/gnu/system/examples/lightweight-desktop.tmpl b/gnu/system/examples/lightweight-desktop.tmpl index d4330ecc8ea..4cb3c383113 100644 --- a/gnu/system/examples/lightweight-desktop.tmpl +++ b/gnu/system/examples/lightweight-desktop.tmpl @@ -1,3 +1,4 @@ +;; -*- mode: scheme; -*- ;; This is an operating system configuration template ;; for a "desktop" setup without full-blown desktop ;; environments. diff --git a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl index 8c47c650f6e..2203375270c 100644 --- a/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl +++ b/gnu/system/examples/raspberry-pi-64-nfs-root.tmpl @@ -1,3 +1,4 @@ +;; -*- mode: scheme; -*- ;; This is an operating-system configuration template of a ;; 64-bit minimal system for a Raspberry Pi with an NFS root file-system. diff --git a/gnu/system/examples/raspberry-pi-64.tmpl b/gnu/system/examples/raspberry-pi-64.tmpl index 3ad588207c9..185d25c4124 100644 --- a/gnu/system/examples/raspberry-pi-64.tmpl +++ b/gnu/system/examples/raspberry-pi-64.tmpl @@ -1,3 +1,4 @@ +;; -*- mode: scheme; -*- ;; This is an operating-system configuration template of a ;; 64-bit minimal system for a Raspberry Pi with local storage. diff --git a/gnu/system/examples/vm-image.tmpl b/gnu/system/examples/vm-image.tmpl index d46a27978c4..343287eaf69 100644 --- a/gnu/system/examples/vm-image.tmpl +++ b/gnu/system/examples/vm-image.tmpl @@ -1,3 +1,4 @@ +;; -*- mode: scheme; -*- ;; This is an operating system configuration for a VM image. ;; Modify it as you see fit and instantiate the changes by running: ;; -- cgit v1.3 From b1aef25453067004279c4267cf25e8d6d365890d Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Thu, 15 Dec 2022 23:54:10 +0100 Subject: install: Make sure uvesafb can be loaded. Fixes . Reported by pelzflorian (Florian Pelz) . Previously, the 'modprobe' executable would try and fail to load the module from /lib/modules/*. Set 'LINUX_MODULE_DIRECTORY' to make sure 'modprobe' looks for the module in the right place. * gnu/system/install.scm (uvesafb-shepherd-service)[modprobe]: New variable. In 'start' method, invoke it instead of KMOD/bin/modprobe. --- gnu/system/install.scm | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'gnu/system') diff --git a/gnu/system/install.scm b/gnu/system/install.scm index f6f1923121c..3dd9e0e87b5 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -284,13 +284,24 @@ templates under @file{/etc/configuration}."))) ;; appropriate options. The GUI installer needs it when the machine does not ;; support Kernel Mode Setting. Otherwise kmscon is missing /dev/fb0. (define (uvesafb-shepherd-service _) + (define modprobe + (program-file "modprobe-wrapper" + #~(begin + ;; Use a wrapper because shepherd 0.9.3 won't let us + ;; pass environment variables to the child process: + ;; . + (setenv "LINUX_MODULE_DIRECTORY" + "/run/booted-system/kernel/lib/modules") + (apply execl #$(file-append kmod "/bin/modprobe") + "modprobe" (cdr (command-line)))))) + (list (shepherd-service (documentation "Load the uvesafb kernel module if needed.") (provision '(maybe-uvesafb)) (requirement '(file-systems)) (start #~(lambda () (or (file-exists? "/dev/fb0") - (invoke #+(file-append kmod "/bin/modprobe") + (invoke #+modprobe "uvesafb" (string-append "v86d=" #$v86d "/sbin/v86d") "mode_option=1024x768")))) -- cgit v1.3 From c50cd1bbece27097456242f246f89c053e7cc1a2 Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 9 Nov 2022 04:05:53 +0800 Subject: images: wsl2: Create XDG_RUNTIME_DIR on first login. * gnu/system/images/wsl2.scm (wsl-boot-program): Create XDG_RUNTIME_DIR on first login and set it. Signed-off-by: Mathieu Othacehe --- gnu/system/images/wsl2.scm | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'gnu/system') diff --git a/gnu/system/images/wsl2.scm b/gnu/system/images/wsl2.scm index 80c2e775b49..d9aaa1a2716 100644 --- a/gnu/system/images/wsl2.scm +++ b/gnu/system/images/wsl2.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2022 Alex Griffin ;;; Copyright © 2022 Mathieu Othacehe +;;; Copyright © 2022 dan ;;; ;;; This file is part of GNU Guix. ;;; @@ -75,7 +76,11 @@ USER." (let* ((pw (getpw #$user)) (shell (passwd:shell pw)) (sudo #+(file-append sudo "/bin/sudo")) - (args (cdr (command-line)))) + (args (cdr (command-line))) + (uid (passwd:uid pw)) + (gid (passwd:gid pw)) + (runtime-dir (string-append "/run/user/" + (number->string uid)))) ;; Save the value of $PATH set by WSL. Useful for finding ;; Windows binaries to run with WSL's binfmt interop. (setenv "WSLPATH" (getenv "PATH")) @@ -88,9 +93,15 @@ USER." MS_REMOUNT #:update-mtab? #f) + ;; Create XDG_RUNTIME_DIR for the login user. + (unless (file-exists? runtime-dir) + (mkdir runtime-dir) + (chown runtime-dir uid gid)) + (setenv "XDG_RUNTIME_DIR" runtime-dir) + ;; Start login shell as user. (apply execl sudo "sudo" - "--preserve-env=WSLPATH" + "--preserve-env=WSLPATH,XDG_RUNTIME_DIR" "-u" #$user "--" shell "-l" args)))))) -- cgit v1.3 From 60d4652c5d33dd81ed05afd708e6a127584d59cd Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Fri, 9 Dec 2022 00:27:39 -0500 Subject: image: Enhance compatibility of the root ext4 partition. Generating a raw-with-offset image would previously not be bootable with U-Boot. * gnu/system/image.scm (root-partition) [file-system-options]: New field. --- gnu/system/image.scm | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gnu/system') diff --git a/gnu/system/image.scm b/gnu/system/image.scm index d518a05a515..afef79185fd 100644 --- a/gnu/system/image.scm +++ b/gnu/system/image.scm @@ -138,6 +138,9 @@ parent image record." (size 'guess) (label root-label) (file-system "ext4") + ;; Disable the metadata_csum and 64bit features of ext4, for compatibility + ;; with U-Boot. + (file-system-options (list "-O" "^metadata_csum,^64bit")) (flags '(boot)) (initializer (gexp initialize-root-partition)))) -- cgit v1.3 From 2127e56bd8b3ee8ae5b6cde1b7ed5bf50cf7127b Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 27 Dec 2022 17:50:57 +0100 Subject: system, home: Factorize default '.bashrc'. * gnu/system/shadow.scm (%default-bashrc): New variable. Source /etc/bashrc only if it exists. (default-skeletons): Use it. * gnu/home/services/shells.scm (guix-bashrc): Remove. (add-bash-configuration): Refer to '%default-bashrc' instead. --- gnu/home/services/shells.scm | 41 +++-------------------------------------- gnu/system/shadow.scm | 26 +++++++++++++++----------- 2 files changed, 18 insertions(+), 49 deletions(-) (limited to 'gnu/system') diff --git a/gnu/home/services/shells.scm b/gnu/home/services/shells.scm index b529c8e798e..d7dd579293a 100644 --- a/gnu/home/services/shells.scm +++ b/gnu/home/services/shells.scm @@ -19,6 +19,7 @@ (define-module (gnu home services shells) #:use-module (gnu services configuration) + #:autoload (gnu system shadow) (%default-bashrc) #:use-module (gnu home services utils) #:use-module (gnu home services) #:use-module (gnu packages shells) @@ -370,43 +371,6 @@ Used for executing user's commands at the exit of login shell. It won't be read in some cases (if the shell terminates by exec'ing another process for example).")) -;; TODO: Use value from (gnu system shadow) -(define guix-bashrc - "\ -# Bash initialization for interactive non-login shells and -# for remote shells (info \"(bash) Bash Startup Files\"). - -# Export 'SHELL' to child processes. Programs such as 'screen' -# honor it and otherwise use /bin/sh. -export SHELL - -if [[ $- != *i* ]] -then - # We are being invoked from a non-interactive shell. If this - # is an SSH session (as in \"ssh host command\"), source - # /etc/profile so we get PATH and other essential variables. - [[ -n \"$SSH_CLIENT\" ]] && source /etc/profile - - # Don't do anything else. - return -fi - -# Source the system-wide file. -if [[ -e /etc/bashrc ]]; then - source /etc/bashrc -fi - -# Adjust the prompt depending on whether we're in 'guix environment'. -if [ -n \"$GUIX_ENVIRONMENT\" ] -then - PS1='\\u@\\h \\w [env]\\$ ' -else - PS1='\\u@\\h \\w\\$ ' -fi -alias ls='ls -p --color=auto' -alias ll='ls -l' -alias grep='grep --color=auto'\n") - (define (add-bash-configuration config) (define (filter-fields field) (filter-configuration-fields home-bash-configuration-fields @@ -449,7 +413,8 @@ if [ -f ~/.bashrc ]; then source ~/.bashrc; fi ,@(list (file-if-not-empty 'bashrc (if (home-bash-configuration-guix-defaults? config) - (list (serialize-field 'aliases) guix-bashrc) + (list (serialize-field 'aliases) + (plain-file-content %default-bashrc)) (list (serialize-field 'aliases)))) (file-if-not-empty 'bash-logout))))) diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index 59f0a02c8b8..4360a5ebd1c 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès +;;; Copyright © 2013-2020, 2022 Ludovic Courtès ;;; Copyright © 2016 Alex Griffin ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen ;;; Copyright © 2020 Efraim Flashner @@ -63,7 +63,8 @@ user-group-id user-group-system?) - #:export (default-skeletons + #:export (%default-bashrc + default-skeletons skeleton-directory %base-groups %base-user-accounts @@ -118,14 +119,8 @@ (create-home-directory? #f) (system? #t)))) -(define (default-skeletons) - "Return the default skeleton files for /etc/skel. These files are copied by -'useradd' in the home directory of newly created user accounts." - - (let ((profile (plain-file "bash_profile" "\ -# Honor per-interactive-shell startup file -if [ -f ~/.bashrc ]; then . ~/.bashrc; fi\n")) - (bashrc (plain-file "bashrc" "\ +(define %default-bashrc + (plain-file "bashrc" "\ # Bash initialization for interactive non-login shells and # for remote shells (info \"(bash) Bash Startup Files\"). @@ -145,7 +140,7 @@ then fi # Source the system-wide file. -source /etc/bashrc +[ -f /etc/bashrc ] && source /etc/bashrc # Adjust the prompt depending on whether we're in 'guix environment'. if [ -n \"$GUIX_ENVIRONMENT\" ] @@ -157,6 +152,15 @@ fi alias ls='ls -p --color=auto' alias ll='ls -l' alias grep='grep --color=auto'\n")) + +(define (default-skeletons) + "Return the default skeleton files for /etc/skel. These files are copied by +'useradd' in the home directory of newly created user accounts." + + (let ((profile (plain-file "bash_profile" "\ +# Honor per-interactive-shell startup file +if [ -f ~/.bashrc ]; then . ~/.bashrc; fi\n")) + (bashrc %default-bashrc) (zprofile (plain-file "zprofile" "\ # Honor system-wide environment variables source /etc/profile\n")) -- cgit v1.3 From 086df6ef213d44d4b75c263033552eef6b2bd868 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 27 Dec 2022 21:52:59 +0100 Subject: system: Define default 'PS1' in /etc/bashrc rather than ~/.bashrc. Users can override 'PS1' in ~/.bashrc if they wish. Previously, on Guix Home, the "default" 'PS1' would be set in ~/.bashrc when 'home-bash-configuration-guix-defaults?' is true, preventing users from overriding it via the 'environment-variables' field of 'home-bash-extension'. * gnu/system/shadow.scm (%default-bashrc): Remove 'PS1' setting. * gnu/system.scm (operating-system-etc-service): Define PS1 in /etc/bashrc. * gnu/home/services/shells.scm (add-bash-configuration): When 'home-bash-configuration-guix-defaults?' is true, add a default 'PS1' to ~/.bash_profile. --- gnu/home/services/shells.scm | 9 +++++++++ gnu/system.scm | 3 +++ gnu/system/shadow.scm | 7 ------- 3 files changed, 12 insertions(+), 7 deletions(-) (limited to 'gnu/system') diff --git a/gnu/home/services/shells.scm b/gnu/home/services/shells.scm index d7dd579293a..3326eb37f49 100644 --- a/gnu/home/services/shells.scm +++ b/gnu/home/services/shells.scm @@ -407,6 +407,15 @@ if [ -f ~/.profile ]; then source ~/.profile; fi # Honor per-interactive-shell startup file if [ -f ~/.bashrc ]; then source ~/.bashrc; fi " + + ;; The host distro might provide a bad 'PS1' default--e.g., not taking + ;; $GUIX_ENVIRONMENT into account. Provide a good default here when + ;; asked to. The default can be overridden below via + ;; 'environment-variables'. + (if (home-bash-configuration-guix-defaults? config) + "PS1='\\u@\\h \\w${GUIX_ENVIRONMENT:+ [env]}\\$ '\n" + "") + (serialize-field 'bash-profile) (serialize-field 'environment-variables))) diff --git a/gnu/system.scm b/gnu/system.scm index 62c8e0c2b61..d67f9a615bf 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -1047,6 +1047,9 @@ fi (bashrc (plain-file "bashrc" "\ # Bash-specific initialization. +# Provide a default prompt. The user's ~/.bashrc can override it. +PS1='\\u@\\h \\w${GUIX_ENVIRONMENT:+ [env]}\\$ ' + # The 'bash-completion' package. if [ -f /run/current-system/profile/etc/profile.d/bash_completion.sh ] then diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index 4360a5ebd1c..2e879283685 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -142,13 +142,6 @@ fi # Source the system-wide file. [ -f /etc/bashrc ] && source /etc/bashrc -# Adjust the prompt depending on whether we're in 'guix environment'. -if [ -n \"$GUIX_ENVIRONMENT\" ] -then - PS1='\\u@\\h \\w [env]\\$ ' -else - PS1='\\u@\\h \\w\\$ ' -fi alias ls='ls -p --color=auto' alias ll='ls -l' alias grep='grep --color=auto'\n")) -- cgit v1.3