aboutsummaryrefslogtreecommitdiff
# GNU Guix --- Functional package management for GNU
# Copyright © 2012-2016, 2018-2020, 2024 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
# Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
#
# This file is part of GNU Guix.
#
# GNU Guix is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or (at
# your option) any later version.
#
# GNU Guix is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

#
# Integration of the `guix-daemon' code taken from upstream Nix.
#

BUILT_SOURCES += %D%/libstore/schema.sql.hh
CLEANFILES += %D%/libstore/schema.sql.hh

noinst_LIBRARIES = libformat.a libutil.a libstore.a

# Use '-std=c++11' for 'std::shared_ptr', 'auto', lambdas, and more.
AM_CXXFLAGS = -Wall -std=c++11

libformat_a_SOURCES =				\
  %D%/boost/format/free_funcs.cc		\
  %D%/boost/format/parsing.cc			\
  %D%/boost/format/format_implementation.cc

libformat_headers =				\
  %D%/boost/throw_exception.hpp			\
  %D%/boost/format.hpp				\
  %D%/boost/assert.hpp				\
  %D%/boost/format/macros_default.hpp		\
  %D%/boost/format/format_fwd.hpp		\
  %D%/boost/format/format_class.hpp		\
  %D%/boost/format/exceptions.hpp		\
  %D%/boost/format/group.hpp			\
  %D%/boost/format/feed_args.hpp		\
  %D%/boost/format/internals_fwd.hpp		\
  %D%/boost/format/internals.hpp

libformat_a_CPPFLAGS =				\
  -I$(top_srcdir)/nix

libutil_a_SOURCES =				\
  %D%/libutil/archive.cc			\
  %D%/libutil/affinity.cc			\
  %D%/libutil/serialise.cc			\
  %D%/libutil/util.cc				\
  %D%/libutil/hash.cc

libutil_headers =				\
  %D%/libutil/affinity.hh			\
  %D%/libutil/hash.hh				\
  %D%/libutil/serialise.hh			\
  %D%/libutil/util.hh				\
  %D%/libutil/archive.hh			\
  %D%/libutil/types.hh

libutil_a_CPPFLAGS =				\
  -I$(top_builddir)/nix				\
  -I$(top_srcdir)/%D%/libutil			\
  $(libformat_a_CPPFLAGS)			\
  $(LIBGCRYPT_CPPFLAGS)

libstore_a_SOURCES =				\
  %D%/libstore/gc.cc				\
  %D%/libstore/globals.cc			\
  %D%/libstore/misc.cc				\
  %D%/libstore/references.cc			\
  %D%/libstore/store-api.cc			\
  %D%/libstore/optimise-store.cc		\
  %D%/libstore/local-store.cc			\
  %D%/libstore/build.cc				\
  %D%/libstore/pathlocks.cc			\
  %D%/libstore/derivations.cc			\
  %D%/libstore/builtins.cc			\
  %D%/libstore/sqlite.cc

libstore_headers =				\
  %D%/libstore/references.hh			\
  %D%/libstore/pathlocks.hh			\
  %D%/libstore/globals.hh			\
  %D%/libstore/worker-protocol.hh		\
  %D%/libstore/derivations.hh			\
  %D%/libstore/misc.hh				\
  %D%/libstore/local-store.hh			\
  %D%/libstore/sqlite.hh			\
  %D%/libstore/builtins.hh			\
  %D%/libstore/store-api.hh

libstore_a_CPPFLAGS =				\
  $(libutil_a_CPPFLAGS)				\
  -I$(top_srcdir)/%D%/libstore			\
  -I$(top_builddir)/%D%/libstore		\
  -DNIX_STORE_DIR=\"$(storedir)\"		\
  -DNIX_STATE_DIR=\"$(localstatedir)/guix\"	\
  -DNIX_LOG_DIR=\"$(localstatedir)/log/guix\"	\
  -DGUIX_CONFIGURATION_DIRECTORY=\"$(sysconfdir)/guix\"		\
  -DNIX_BIN_DIR=\"$(bindir)\"			\
  -DDEFAULT_CHROOT_DIRS="\"\""

libstore_a_CXXFLAGS = $(AM_CXXFLAGS)		\
  $(SQLITE3_CFLAGS)

bin_PROGRAMS = guix-daemon

guix_daemon_SOURCES =				\
  %D%/nix-daemon/nix-daemon.cc			\
  %D%/nix-daemon/guix-daemon.cc

guix_daemon_CPPFLAGS =				\
  -DLOCALEDIR=\"$(localedir)\"			\
  $(libutil_a_CPPFLAGS)				\
  -I$(top_srcdir)/%D%/libstore

guix_daemon_LDFLAGS = 				\
  $(LIBGCRYPT_LDFLAGS)

guix_daemon_LDADD =				\
  libstore.a libutil.a libformat.a -lz		\
  $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS)

guix_daemon_headers =				\
  %D%/nix-daemon/shared.hh

if HAVE_LIBBZ2

guix_daemon_LDADD += -lbz2

endif HAVE_LIBBZ2

noinst_HEADERS =						\
  $(libformat_headers) $(libutil_headers) $(libstore_headers)	\
  $(guix_daemon_headers)

%D%/libstore/schema.sql.hh: guix/store/schema.sql
	$(AM_V_GEN)$(GUILE) --no-auto-compile -c		\
	  "(use-modules (rnrs io ports))			\
	   (call-with-output-file \"$@\"			\
	     (lambda (out)					\
	       (call-with-input-file \"$^\"			\
	         (lambda (in)					\
	           (write (get-string-all in) out)))))"

# The '.service' files for systemd.
systemdservicedir = $(libdir)/systemd/system
nodist_systemdservice_DATA =			\
  etc/gnu-store.mount				\
  etc/guix-daemon.service			\
  etc/guix-publish.service			\
  etc/guix-gc.service

etc/%.mount: etc/%.mount.in	\
			 $(top_builddir)/config.status
	$(AM_V_GEN)$(MKDIR_P) "`dirname $@`";	\
	$(SED) -e 's|@''storedir''@|$(storedir)|' <	\
	       "$<" > "$@.tmp";		\
	mv "$@.tmp" "$@"

etc/guix-%.service: etc/guix-%.service.in	\
			 $(top_builddir)/config.status
	$(AM_V_GEN)$(MKDIR_P) "`dirname $@`";	\
	$(SED) -e 's|@''localstatedir''@|$(localstatedir)|' \
	       -e 's|@''GUIX_SUBSTITUTE_URLS''@|$(GUIX_SUBSTITUTE_URLS)|' \
	       < "$<" > "$@.tmp";		\
	mv "$@.tmp" "$@"

# The service script for sysvinit.
sysvinitservicedir = $(sysconfdir)/init.d
nodist_sysvinitservice_DATA = etc/init.d/guix-daemon

etc/init.d/guix-daemon: etc/init.d/guix-daemon.in	\
			 $(top_builddir)/config.status
	$(AM_V_GEN)$(MKDIR_P) "`dirname $@`";	\
	$(SED) -e 's|@''localstatedir''@|$(localstatedir)|' \
	       -e 's|@''GUIX_SUBSTITUTE_URLS''@|$(GUIX_SUBSTITUTE_URLS)|' \
	       < "$<" > "$@.tmp";		\
	mv "$@.tmp" "$@"

# The service script for openrc.
openrcservicedir = $(sysconfdir)/openrc
nodist_openrcservice_DATA = etc/openrc/guix-daemon

etc/openrc/guix-daemon: etc/openrc/guix-daemon.in	\
			 $(top_builddir)/config.status
	$(AM_V_GEN)$(MKDIR_P) "`dirname $@`";	\
	$(SED) -e 's|@''localstatedir''@|$(localstatedir)|' <	\
	       "$<" > "$@.tmp";		\
	mv "$@.tmp" "$@"

# The '.conf' jobs for Upstart.
upstartjobdir = $(libdir)/upstart/system
nodist_upstartjob_DATA = etc/guix-daemon.conf etc/guix-publish.conf

etc/guix-%.conf: etc/guix-%.conf.in	\
			 $(top_builddir)/config.status
	$(AM_V_GEN)$(MKDIR_P) "`dirname $@`";	\
	$(SED) -e 's|@''localstatedir''@|$(localstatedir)|' \
	       -e 's|@''GUIX_SUBSTITUTE_URLS''@|$(GUIX_SUBSTITUTE_URLS)|' \
	        < "$<" > "$@.tmp";		\
	mv "$@.tmp" "$@"

CLEANFILES +=					\
  $(nodist_systemdservice_DATA)			\
  $(nodist_upstartjob_DATA)			\
  $(nodist_sysvinitservice_DATA)		\
  $(nodist_openrcservice_DATA)

EXTRA_DIST +=					\
  %D%/AUTHORS					\
  %D%/COPYING					\
  etc/gnu-store.mount.in			\
  etc/guix-daemon.service.in			\
  etc/guix-daemon.conf.in			\
  etc/guix-publish.service.in			\
  etc/guix-publish.conf.in			\
  etc/guix-gc.service.in			\
  etc/guix-gc.timer				\
  etc/init.d/guix-daemon.in			\
  etc/openrc/guix-daemon.in

if CAN_RUN_TESTS

AM_TESTS_ENVIRONMENT +=				\
  top_builddir="$(abs_top_builddir)"

TESTS +=					\
  tests/guix-daemon.sh

endif CAN_RUN_TESTS

clean-local:
	-if test -d "$(GUIX_TEST_ROOT)"; then		\
	  find "$(GUIX_TEST_ROOT)" | xargs chmod +w;	\
	 fi
	-rm -rf "$(GUIX_TEST_ROOT)"
orking support to pine64 image....* 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: 宋文武 <iyzsong@member.fsf.org> Gabriel Wicki 2022-12-05install: Add missing e2fsprogs utility....* gnu/system/install.scm (%installer-disk-utilities): Add e2fsprogs. Reported-by: Adam Kandur <kefironpremise@gmail.com> Maxim Cournoyer 2022-12-05system: 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. Maxim Cournoyer 2022-12-04gnu: 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 <vagrant@debian.org> Maxim Cournoyer 2022-12-01gnu: 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 <maxim.cournoyer@gmail.com> Stefan 2022-12-01linux-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. Ricardo Wurmus 2022-11-28system: 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. Ludovic Courtès 2022-11-18linux-initrd: raw-initrd: Add keyword argument #:pre-mount....* 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 <ludo@gnu.org> Hilton Chain 2022-11-04system: image: Define correct docker image arch when cross building...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 <othacehe@gnu.org> Thiago Jung Bauermann 2022-10-23system: Support bare-bones serial console....* gnu/system/examples/bare-bones.tmpl (operating-system): Add a ttyS0 console to kernel-arguments. Tobias Geerinckx-Rice 2022-10-13system: Use a valid license as the dummy license....* gnu/system/images/wsl2.scm (dummy-package)[license]: Do not use #F. Ricardo Wurmus 2022-09-26file-systems: Add cgroup2 to %pseudo-file-system-types....* gnu/system/file-systems.scm (%pseudo-file-system-types): Add cgroup2. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Hilton Chain 2022-09-25system: images: Add a TODO comment....* gnu/system/image.scm (system-tarball-image): Add it. Mathieu Othacehe 2022-09-24system: images: Add wsl2 module....* gnu/system/images/wsl2.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. * doc/guix.texi ("System Images"): Document it. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Alex Griffin 2022-09-24system: image: Add wsl2 support....* gnu/image.scm (<image>)[format]: Add wsl2 support. * gnu/system/image.scm (wsl2-image, wsl2-image-type): New variables. (image->root-file-system): Add wsl2 image support. (system-image): Ditto. Alex Griffin 2022-09-24system: image: Add tarball support....* gnu/image.scm (<image>)[fields]: Add tarball to the supported formats. * gnu/system/image.scm (tarball-image, tarball-image-type): New variables. (system-tarball-image): New procedure. (image->root-file-system): Add tarball image support. (system-image): Ditto. * doc/guix.texi ("System Images"): Document it. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Alex Griffin 2022-09-24platforms: x86: Rename Hurd hurd to i586-gnu....* guix/platforms/x86.scm (hurd): Rename it to ... (i586-gnu): ... this variable. * gnu/system/images/hurd.scm (hurd-disk-image, hurd-barebones-disk-image, hurd-barebones-qcow2-image): Adapt those. Mathieu Othacehe 2022-09-24image: Make the operating-system field mandatory....Make the operating-system field mandatory as creating an image without it makes no sense. Introduce a new macro, image-without-os for the specific cases where the image is only created to be inherited from afterwards. * gnu/image.scm (<image>)[operating-system]: Make it mandatory. * gnu/system/image.scm (image-without-os): New macro. (efi-disk-image, efi32-disk-image, iso9660-image, docker-image, raw-with-offset-disk-image): Use it. * gnu/system/images/hurd.scm (hurd-disk-image): Ditto. Mathieu Othacehe 2022-09-16system: install: Do not load amdgpu in the installer image....* gnu/system/install.scm (installation-os): Add amdgpu to modprobe.blacklist. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Antero Mejr 2022-09-07system: images: Define the platform in image-types....Running the following command where my-pine.scm contains an operating-system declaration: guix system image --image-type=pine64-raw my-pine.scm returns: guix system: error: package linux-libre-arm64-generic@5.18.19 does not support x86_64-linux That's because there's no platform defined in the pine64-raw image-type, hence the guix system image tries to build the image for the host architecture. * gnu/system/images/novena.scm (novena-image-type): Use the armv7-linux platform. * gnu/system/images/pine64.scm (pine64-image-type): Use the aarch64-linux platform. * gnu/system/images/pinebook-pro.scm (pinebook-pro-image-type): Use the aarch64-linux platform. * gnu/system/images/rock64.scm (rock64-image-type): Use the aarch64-linux platform. Mathieu Othacehe 2022-09-07system: image: Update my copyright....* gnu/system/image.scm: Update it. Mathieu Othacehe 2022-09-07system: image: Remove an unused variable....* gnu/system/image.scm (sytem-image): Remove it. Mathieu Othacehe 2022-08-10gnu: system: file-systems: Add shared flag....* gnu/build/file-systems.scm (mount-flags->bit-mask, mount-file-system): Handle shared flag. * gnu/system/file-systems.scm (invalid-file-system-flags): Add shared to known flags. * guix/build/syscalls.scm (MS_SHARED): New variable. * doc/guix.texi (File Systems): Document shared flag. Oleg Pykhalov 2022-08-09linux-container: container-script: Parse command line options....* gnu/system/linux-container.scm (container-script): Accept command line options to bind mount host directories into the container. * doc/guix.texi (Invoking guix system): Document options. Ricardo Wurmus 2022-08-09maint: Use a pretty version string in ISO and VM images....* gnu/system/examples/vm-image.tmpl: Use the 'GUIX_DISPLAYED_VERSION' environment variable in 'label'. * gnu/system/install.scm (%installation-os): Likewise. * Makefile.am (release): Set 'GUIX_DISPLAYED_VERSION'. Ludovic Courtès 2022-08-09system: install: Always use 'current-guix'....Fixes <https://issues.guix.gnu.org/53210>. Reported by Mathieu Othacehe <othacehe@gnu.org>. * gnu/system/install.scm (%installation-services): Set 'guix' to use (current-guix) in 'guix-configuration'. * gnu/system/examples/vm-image.tmpl: Likewise. * gnu/tests/install.scm (operating-system-with-current-guix): Remove. (run-install, installation-os-for-gui-tests): Remove its uses. * Makefile.am (release): Remove intermediate use of 'update-guix-package.scm' and subsequent 'git commit' invocation. Ludovic Courtès 2022-07-01image: Raise an error when an image lacks a bootable partition....* gnu/system/image.scm (find-root-partition): Raise an error when 'find' returns #f. Ludovic Courtès 2022-07-01image: Avoid use of the deprecated 'gpt' option of genimage....* gnu/system/image.scm (system-disk-image)[genimage-type-options]: Use 'partition-table-type' instead of the deprecated 'gpt' option. Ludovic Courtès 2022-07-01image: Add default value for partition initializer....Previously, the default value would lead to a wrong-type-to-apply crash. * gnu/system/image.scm (system-disk-image)[image-builder]: When 'partition-initializer' returns #f, fall back to INITIALIZE-ROOT-PARTITION. * gnu/tests/base.scm (run-root-unmount-test)[test-image]: Remove 'initializer' field of partition. * gnu/image.scm (<partition>)[initializer]: Add comment. Ludovic Courtès 2022-07-01image: 'system-image' throws when given an incorrect image format....Previously 'system-image' would return *unspecified* in that case, leading to a wrong-type-arg error crash down the road. * gnu/system/image.scm (system-image): Add 'else' clause. Ludovic Courtès 2022-06-24image: Add support for 32bit UEFI....* gnu/bootloader/grub.scm (grub-efi32-bootloader): New variable. (install-grub-efi32): New variable. * gnu/build/bootloader.scm (install-efi): Add a 'targets' keyword argument. (install-efi-loader): Likewise. * gnu/build/image.scm (initialize-efi32-partition): New procedure. * gnu/packages/bootloaders.scm (grub-efi32): New variable. * gnu/system/image.scm (esp32-partition): New variable (efi32-disk-image): New variable. (efi32-raw-image-type): New variable. (system-disk-image)[partition-image]: Set '#:grub-efi32' when calling the partition initializer. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Denis 'GNUtoo' Carikli 2022-06-07gnu: install: Add uvesafb service only on targets that support v86d....Fixes <https://issues.guix.gnu.org/55806>. * gnu/system/install.scm (%installation-services): Refactor into a procedure, so that it can capture the system it's installing for. Conditionally add uvesafb-service-type based on whether v86d is supported by the target architecture. (installation-os)[services]: Use the %installation-service procedure. (uvesafb-shepherd-service): Remove %host-type checks. Signed-off-by: Florian Pelz <pelzflorian@pelzflorian.de> Josselin Poiret 2022-05-31gnu: Remove wicd....The last release is from 2017, stuck on Python 2. * gnu/packages/wicd.scm: Delete file. * gnu/packages/patches/wicd-bitrate-none-fix.patch: Delete file. * gnu/packages/patches/wicd-get-selected-profile-fix.patch: Likewise. * gnu/packages/patches/wicd-urwid-1.3.patch: Likewise. * gnu/packages/patches/wicd-wpa2-ttls.patch: Likewise. * gnu/local.mk: De-register them. * gnu/services/networking.scm: Remove wicd service... * doc/guix.texi: ... and its documentation. * gnu/system/linux-container.scm (containerized-operating-system) <services-to-drop>: Remove wicd-service-type. Maxim Cournoyer 2022-05-31image: Add fat32 support....* gnu/build/image.scm (make-vfat-image): Pass fs-bits as an argument and force 1kb logical sector size only if "ESP" flag is set. (make-partition-image): Add "fat32" partition type, support explicit "fat16" type with vfat alias. * gnu/system/image.scm (partition->dos-type partition): Return file system IDs for "fat16" and "fat32" partitions. (partition->gpt-type partition): Ditto. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Pavel Shlyak 2022-05-25images: hurd: Adjust module imports....Follow-up to a9dcd60bc11afb3934c11fbad159a16f0f223fd1. * gnu/system/images/hurd.scm: Adjust module imports to changes in code structure. Efraim Flashner 2022-05-25Move (gnu platform) and (gnu platforms ...) to guix/....* gnu/platform.scm: * gnu/platforms/arm.scm: * gnu/platforms/hurd.scm: * gnu/platforms/mips.scm: * gnu/platforms/powerpc.scm: * gnu/platforms/riscv.scm: * gnu/platforms/s390.scm: * gnu/platforms/x86.scm: Move to guix/. * Makefile.am: * doc/guix.texi (Porting to a New Platform): * etc/release-manifest.scm: * gnu/ci.scm: * gnu/image.scm: * gnu/local.mk: * gnu/packages/bioinformatics.scm: * gnu/packages/bootstrap.scm: * gnu/packages/cross-base.scm: * gnu/packages/instrumentation.scm: * gnu/packages/linux.scm: * gnu/system/image.scm: * gnu/system/images/hurd.scm: * gnu/system/images/novena.scm: * gnu/system/images/pine64.scm: * gnu/system/images/pinebook-pro.scm: * gnu/system/images/rock64.scm: * guix/scripts/build.scm: * guix/scripts/system.scm: * guix/self.scm: Update (gnu platform...) to (guix platform...). Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Josselin Poiret