aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014-2020, 2022, 2024 Ludovic Courtès <ludo@gnu.org>
;;;
;;; 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/>.

(define-module (gnu services avahi)
  #:use-module (gnu services)
  #:use-module (gnu services base)
  #:use-module (gnu services shepherd)
  #:use-module (gnu services dbus)
  #:use-module (gnu system shadow)
  #:use-module (gnu packages avahi)
  #:use-module (gnu packages admin)
  #:use-module (guix deprecation)
  #:use-module (guix records)
  #:use-module (guix gexp)
  #:export (avahi-configuration
            avahi-configuration?

            avahi-configuration-avahi
            avahi-configuration-debug?
            avahi-configuration-host-name
            avahi-configuration-publish?
            avahi-configuration-publish-workstation?
            avahi-configuration-ipv4?
            avahi-configuration-ipv6?
            avahi-configuration-wide-area?
            avahi-configuration-domains-to-browse

            avahi-service-type))

;;; Commentary:
;;;
;;; This module provides service definitions for the Avahi
;;; "zero-configuration" tool set.
;;;
;;; Code:

(define-record-type* <avahi-configuration>
  avahi-configuration make-avahi-configuration
  avahi-configuration?
  (avahi             avahi-configuration-avahi    ;file-like
                     (default avahi))
  (debug?            avahi-configuration-debug?   ;Boolean
                     (default #f))
  (host-name         avahi-configuration-host-name ;string | #f
                     (default #f))
  (publish?          avahi-configuration-publish? ;boolean
                     (default #t))

  ;; The default for this was #t in Avahi 0.6.31 and became #f in 0.7.  For
  ;; now we stick to the old default.
  (publish-workstation? avahi-configuration-publish-workstation? ;Boolean
                        (default #t))

  (ipv4?             avahi-configuration-ipv4?    ;Boolean
                     (default #t))
  (ipv6?             avahi-configuration-ipv6?    ;Boolean
                     (default #t))
  (wide-area?        avahi-configuration-wide-area? ;Boolean
                     (default #f))
  (domains-to-browse avahi-configuration-domains-to-browse ;list of strings
                     (default '())))

(define* (configuration-file config)
  "Return an avahi-daemon configuration file based on CONFIG, an
<avahi-configuration>."
  (define (bool value)
    (if value "yes\n" "no\n"))

  (define host-name (avahi-configuration-host-name config))

  (plain-file "avahi-daemon.conf"
              (string-append
               "[server]\n"
               (if host-name
                   (string-append "host-name=" host-name "\n")
                   "")

               "browse-domains=" (string-join
                                  (avahi-configuration-domains-to-browse
                                   config))
               "\n"
               "use-ipv4=" (bool (avahi-configuration-ipv4? config))
               "use-ipv6=" (bool (avahi-configuration-ipv6? config))
               "[wide-area]\n"
               "enable-wide-area=" (bool (avahi-configuration-wide-area? config))
               "[publish]\n"
               "disable-publishing="
               (bool (not (avahi-configuration-publish? config)))
               "publish-workstation="
               (bool (avahi-configuration-publish-workstation? config)))))

(define %avahi-accounts
  ;; Account and group for the Avahi daemon.
  (list (user-group (name "avahi") (system? #t))
        (user-account
         (name "avahi")
         (group "avahi")
         (system? #t)
         (comment "Avahi daemon user")
         (home-directory "/var/empty")
         (shell (file-append shadow "/sbin/nologin")))))

(define %avahi-activation
  ;; Activation gexp.
  #~(begin
      (use-modules (guix build utils))
      (mkdir-p "/run/avahi-daemon")))

(define (avahi-shepherd-service config)
  "Return a list of <shepherd-service> for CONFIG."
  (let ((config (configuration-file config))
        (debug? (avahi-configuration-debug? config))
        (avahi  (avahi-configuration-avahi config)))
    (list (shepherd-service
           (documentation "Run the Avahi mDNS/DNS-SD responder.")
           (provision '(avahi-daemon))
           (requirement '(user-processes dbus-system networking))

           (start #~(make-systemd-constructor
                     (list #$(file-append avahi "/sbin/avahi-daemon")
                           #$@(if debug? #~("--debug") #~())
                           "-f" #$config)
                     (list (endpoint
                            (make-socket-address
                             AF_UNIX
                             "/run/avahi-daemon/socket")))
                     #:lazy-start? #f
                     #:log-file "/var/log/avahi-daemon.log"))
           (stop #~(make-systemd-destructor))
           (actions (list (shepherd-configuration-action config)))))))

(define avahi-service-type
  (let ((avahi-package (compose list avahi-configuration-avahi)))
    (service-type (name 'avahi)
                  (description
                   "Run @command{avahi-daemon}, a host and service discovery
daemon that implements the multicast DNS (mDNS) and DNS service
discovery (DNS-SD) protocols.  Additionally, extend the C library's name
service switch (NSS) with support for @code{.local} host name resolution.")
                  (extensions
                   (list (service-extension shepherd-root-service-type
                                            avahi-shepherd-service)
                         (service-extension dbus-root-service-type
                                            avahi-package)
                         (service-extension account-service-type
                                            (const %avahi-accounts))
                         (service-extension activation-service-type
                                            (const %avahi-activation))
                         (service-extension nscd-service-type
                                            (const (list nss-mdns)))

                         ;; Provide 'avahi-browse', 'avahi-resolve', etc. in
                         ;; the system profile.
                         (service-extension profile-service-type
                                            avahi-package)))
                  (default-value (avahi-configuration)))))

;;; avahi.scm ends here
ommit/Makefile.am?id=0685042c4601e7e7a88aab9c1cbfbfb4092a5aa2'>import: Add binary npm importer....* guix/scripts/import.scm: (importers): Add "npm-binary". * doc/guix.texi (Invoking guix import): Document npm-binary importer. * guix/import/npm-binary.scm: New file. * guix/scripts/import/npm-binary.scm: New file. * tests/npm-binary.scm: New file. * Makefile.am: Add them. Co-authored-by: Timothy Sample <samplet@ngyro.com> Co-authored-by: Lars-Dominik Braun <lars@6xq.net> Change-Id: I98a45068cf5b9c42790664cc743feaa7ac76f807 Jelle Licht 2024-04-30gnu: Remove linux-libre 6.7....* gnu/packages/linux.scm (linux-libre-6.7-version, linux-libre-6.7-gnu-revision, deblob-scripts-6.7, linux-libre-6.7-pristine-source, linux-libre-6.7-source, linux-libre-headers-6.7, linux-libre-6.7): Remove variables. * gnu/packages/aux-files/linux-libre/6.7-arm.conf, gnu/packages/aux-files/linux-libre/6.7-arm64.conf, gnu/packages/aux-files/linux-libre/6.7-i686.conf, gnu/packages/aux-files/linux-libre/6.7-x86_64.conf: Delete files. * Makefile.am (AUX_FILES): Remove aforementioned .conf files. Change-Id: Ic69a65e1fbfa59d893e85d26950f33195ea9fbe1 Signed-off-by: Leo Famulari <leo@famulari.name> Wilko Meyer 2024-04-19maint: Generate doc/version[-LANG].texi using `mdate-from-git.scm'....This replaces Automake's `build-aux/mdate-sh' with our own `build-aux/mdate-from-git.scm' to use reproducible timestamps from Git instead. * build-aux/mdate-from-git.scm: New script. * bootstrap: Use it to replace build-aux/mdate-sh. * Makefile.am (EXTRA_DIST): Add it. Change-Id: I17d0a7de9ffea397129c0db1728f86e28a4e245f Janneke Nieuwenhuizen 2024-04-19maint: Support running `./bootstrap' from a tarball....This fixes VERSION being empty in ./configure, which may to documentation having empty version strings. * Makefile.am (EXTRA_DIST): Add build-aux/git-version-gen. Change-Id: If127519811b25e2df0f5caa6a83a4f860fd34eb2 Janneke Nieuwenhuizen 2024-04-19maint: Cater for running `make dist' from a tarball....* Makefile.am: Use in_git_p conditional to disable Autotools' cache consistency assert and removal when bulding from tarball. (dist): Depend on doc-pot-update again when building from tarball. (dist-hook): Remove dependencies on gen-ChangeLog and gen-AUTHORS when building from tarball. (gen-ChangeLog, gen-AUTHORS): Remove guarding for building from tarball. Use set -e to avoid silently failing. (gen-tarball-version): Use $(SOURCE_DATE_EPOCH) instead of re-generating it using git; this also works running from a tarball. Change-Id: I9ebdd28a70837f6a4db610c4816bb283d176e2d9 Janneke Nieuwenhuizen 2024-04-19maint: Support `make doc-pot-update' from a tarball....* build-aux/xgettext.scm: Move setting of environment variables to shell header. (main): Use SOURCE_DATE_EPOCH as fallback for timestamp. This fixes running from a tarball. * Makefile.am (EXTRA_DIST): Add it. Change-Id: Ic487587b22495868fd2a21545a13dc9e3458299c Janneke Nieuwenhuizen 2024-04-19maint: Resurrect running `make' from a tarball....This is a follow-up to commit 8b972da068708a8b17f3ab153ea940690ca49ca9 Makefile.am: Auto-configure Git on 'make'. * configure.ac (in_git_p): New conditional. * Makefile.am (nodist_noinst_DATA): Use it to only enable this when building from Git. Change-Id: I09a90a59a4933a8cdb04124467d38209171f2a57 Janneke Nieuwenhuizen 2024-04-17guix: Add xtensa-ath9k-elf platform....* Makefile.am (MODULES): Add guix/platforms/xtensa.scm. * guix/platforms/xtensa.scm (xtensa-ath9k-elf): New variable. * doc/guix.texi: Add xtensa-ath9k-elf documentation. Change-Id: I51eef245142ed58613340c16d4bf7266e6bf6adb Signed-off-by: Ludovic Courtès <ludo@gnu.org> Jean-Pierre De Jesus DIAZ 2024-04-17maint: Use "ustar" format for tarball again....This is a follow-up to commit b0c33b1997e4a02e048ceac445b156b3a1eed76d maint: Use reproducible timestamps and name for tarball. * Makefile.am (am__tar): Add --format=ustar. Change-Id: I1e499c413703105704f49a84868ec10de69846fb Janneke Nieuwenhuizen 2024-04-14maint: Ensure generated file reproducibility for dist....* doc/local.mk (doc-clean): New target. (DIST_CONFIGURE_FLAGS): New variable. (auto-clean): Use them in new target. * Makefile.am (dist-doc-pot-update): Use it in new target. (dist): Change to depend on it to clean possibly stale files, instead of doc-pot-update directly. Add a toplevel check to ensure that Autotools cache is up to date. Change-Id: I2ff2d88db9fe1e708ab65e33e1f3d7ecee882cb4 Janneke Nieuwenhuizen 2024-04-14maint: Generate AUTHORS and ChangeLog reproducibly....* Makefile.am (gen-ChangeLog): Set LC_ALL=en_US.UTF-8 TZ=UTC0. (gen-AUTHORS): Likewise. Change-Id: I109ceffdf07b8dde6385b6b509366c47564c9f31 Janneke Nieuwenhuizen 2024-04-14maint: Use reproducible timestamps and name for tarball....* Makefile.am (gen-tarball-version): Add reproducible timestamp to tarball. (am__tar): Use it in new variable, overriding the Automake default. (GZIP_ENV): New variable, overriding the Automake default. Janneke Nieuwenhuizen 2024-04-14maint: Cater for running `make dist' from a worktree....* Makefile.am (gen-ChangeLog): Check for existance of `.git', rather than it being a directory. (gen-AUTHORS): Likewise. Change-Id: I1b7f8cc147084c1804deb7be9d36e5eeda2599cb Janneke Nieuwenhuizen 2024-03-27Merge branch 'master' into emacs-teamLiliana Marie Prikler 2024-03-22gnu: Add linux-libre 6.8....* gnu/packages/linux.scm (linux-libre-6.8-version, linux-libre-6.8-gnu-revision, deblob-scripts-6.8, linux-libre-6.8-pristine-source, linux-libre-6.8-source, linux-libre-headers-6.8, linux-libre-6.8): New variables. * gnu/packages/aux-files/linux-libre/6.8-arm.conf, gnu/packages/aux-files/linux-libre/6.8-arm64.conf, gnu/packages/aux-files/linux-libre/6.8-i686.conf, gnu/packages/aux-files/linux-libre/6.8-x86.conf: New files. * Makefile.am (AUX_FILES): Add them. Signed-off-by: Leo Famulari <leo@famulari.name> Change-Id: I338eb725e0b991c67e4d98bd1ef0c441d3d8f0c6 Wilko Meyer 2024-03-02Merge branch 'master' into emacs-teamLiliana Marie Prikler 2024-02-24gnu: emacs: Check integrity of native-compiled files....In the previous commit, we've added a patch that potentially messes with how built-in (especially preloaded) Lisp libraries are loaded. Thus, we might want to assert that these files still load fine, as reported when querying the builtin documentation of functions provided by them. * gnu/packages/aux-files/emacs/comp-integrity.el: New file. * gnu/Makefile.am (dist_noinst_DATA): Register it here. * gnu/packages/emacs.scm (emacs-no-x)[#:phases]: Add ‘validate-comp-integrity’. Liliana Marie Prikler 2024-01-22gnu: Remove linux-libre 4.14....* gnu/packages/linux.scm (linux-libre-4.14-version, linux-libre-4.14-gnu-revision, deblob-scripts-4.14, linux-libre-4.14-pristine-source, linux-libre-4.14-source, linux-libre-headers-4.14, linux-libre-4.14, linux-libre-arm-generic-4.14, linux-libre-arm-omap2plus-4.14): Remove variables. * gnu/packages/aux-files/linux-libre/4.14-arm.conf, gnu/packages/aux-files/linux-libre/4.14-i686.conf, gnu/packages/aux-files/linux-libre/4.14-x86_64.conf: Delete files. * Makefile.am (AUX_FILES): Remove aforementioned .conf files. * gnu/tests/base.scm (%test-linux-libre-4.14): Remove variable. Change-Id: I40393b5f46b989848d569c929f1d9c986736553e Wilko Meyer 2024-01-22guix: Add ork1-elf platform....* doc/guix.texi: Document or1k-elf platform. * guix/platforms/or1k.scm (or1k-elf): New variable. * Makefile.am (MODULES): Add guix/platforms/or1k.scm. Change-Id: I3f71a0fa97f1ebd2bbdbf6cd00a93b477a123648 Jean-Pierre De Jesus DIAZ 2024-01-17gnu: Add linux-libre 6.7....* gnu/packages/linux.scm (linux-libre-6.7-version, linux-libre-6.7-gnu-revision, deblob-scripts-6.7, linux-libre-6.7-pristine-source, linux-libre-6.7-source, linux-libre-headers-6.7, linux-libre-6.7): New variables. * gnu/packages/aux-files/linux-libre/6.7-arm.conf, gnu/packages/aux-files/linux-libre/6.7-arm64.conf, gnu/packages/aux-files/linux-libre/6.7-i686.conf, gnu/packages/aux-files/linux-libre/6.7-x86.conf: New files. * Makefile.am (AUX_FILES): Add them. * Makefile.am: Update my copyright header. Change-Id: I88b633933875f64bd2859774419e077d8f36d75b Signed-off-by: Leo Famulari <leo@famulari.name> Wilko Meyer 2023-12-18build-system: Add ‘composer-build-system’....* guix/build-system/composer.scm: New file. * guix/build/composer-build-system.scm: New file. * gnu/packages/aux-files/findclass.php: New file. * Makefile.am: Add them. * doc/guix.texi (Build Systems): Document it. Co-authored-by: Julien Lepiller <julien@lepiller.eu> Signed-off-by: Ludovic Courtès <ludo@gnu.org> Change-Id: Ie6a05b42ff04d3ad774a0a20278a77e4820bb8f6 Nicolas Graves 2023-12-18guix: import: Add composer importer....* guix/import/composer.scm: New file. * guix/scripts/import/composer.scm: New file. * guix/tests/composer.scm: New file. * Makefile.am: Add them. * guix/scripts/import.scm: Add composer importer. * doc/guix.texi (Invoking guix import): Mention it. Change-Id: I44a89b8cc80ef5b4a3cd15e8fbba4a18c1cea0b1 Co-authored-by: Julien Lepiller <julien@lepiller.eu> Co-authored-by: Ludovic Courtès <ludo@gnu.org> Nicolas Graves 2023-12-18Makefile.am: Sort build-system modules alphabetically....* Makefile.am (MODULES): Sort guix/build-system modules alphabetically. Change-Id: I7625f87bda9fa714e6b4b29b6cf055948a859e91 Efraim Flashner 2023-12-18gnu: Register new files....* gnu/local.mk (GNU_SYSTEM_MODULES): Register gnu/packages/elixir-xyz.scm. * Makefile.am (MODULES): Register guix/build-system/mix.scm, guix/build/mix-build-system.scm. Change-Id: I69c8fbaa6b16d658d5f6a43d1d39d680dd28ffe9 Efraim Flashner 2023-07-23gnu: Remove linux-libre 6.5....This kernel series is no longer supported upstream. * gnu/packages/linux.scm (linux-libre-6.5-version, linux-libre-6.5-gnu-revision, deblob-scripts-6.5, linux-libre-6.5-pristine-source, linux-libre-6.5-source, linux-libre-headers-6.5, linux-libre-6.5): Remove variables. * gnu/packages/aux-files/linux-libre/6.5-arm.conf, gnu/packages/aux-files/linux-libre/6.5-arm64.conf, gnu/packages/aux-files/linux-libre/6.5-i686.conf, gnu/packages/aux-files/linux-libre/6.5-x86_64.conf: Delete files. * Makefile.am (AUX_FILES): Remove them. Change-Id: I142c28a82ab4afbdc62f5bfcd69382a4d2a0ea8c Leo Famulari 2023-12-11guix: Add avr platform....* Makefile.am (MODULES): Add avr platform module. * doc/guix.texi: Add documentation for avr platform. * guix/platforms/avr.scm (avr): New variable. Change-Id: I0f425eac61a71390b618e093f5a034ad4205a6f4 Signed-off-by: Efraim Flashner <efraim@flashner.co.il> Jean-Pierre De Jesus DIAZ 2023-07-23gnu: Add linux-libre 6.6.1....* gnu/packages/linux.scm (linux-libre-6.6-version, linux-libre-6.6-gnu-revision, deblob-scripts-6.6, linux-libre-6.6-pristine-source, linux-libre-6.5-source, linux-libre-headers-6.6, linux-libre-6.6): New variables. * gnu/packages/aux-files/linux-libre/6.6-arm.conf, gnu/packages/aux-files/linux-libre/6.6-arm64.conf, gnu/packages/aux-files/linux-libre/6.6-i686.conf, gnu/packages/aux-files/linux-libre/6.6-x86_64.conf: New files. * Makefile.am (AUX_FILES): Add them. Change-Id: I37b2b98b8a2ec745137e92380f34e69082c5e662 Signed-off-by: Leo Famulari <leo@famulari.name> Wilko Meyer 2023-11-08build-system: Add vim-build-system....* guix/build-system/vim.scm, * guix/build/vim-build-system.scm: New modules. * Makefile.am (MODULES): Register new files. * doc/guix.texi: Document it. Co-authored-by: Efraim Flashner <efraim@flashner.co.il> Signed-off-by: Efraim Flashner <efraim@flashner.co.il> Jonathan Scoresby 2023-10-23build: Fix it....* Makefile.am (.git/config): Add missing "\". Change-Id: I0d1435ef33d9e6f2246631fa0eb8cbb617ea8fb5 Clément Lassieur 2023-10-22build: Avoid git config 'include' duplicates....* Makefile.am (.git/config): Invoke git config --replace-all with a value-pattern instead of --add. Change-Id: Id6e19b15d3772105128eb9b48d0f4e039ae3d988 Reported-by: Liliana Marie Prikler <liliana.prikler@gmail.com> Maxim Cournoyer 2023-10-22build: Add a commit-msg hook that embeds Change-Id in commit messages....Partially implements <https://issues.guix.gnu.org/66027>. This will make it possible to track a merged commit back to its original posting on the mailing list, and open the door to new opportunities such as closing fully merged series automatically. * Makefile.am (COMMIT_MSG_MAGIC): New variable. (.git/hooks/commit-msg): New target. * etc/git/commit-msg: New file. * doc/contributing.texi (Configuring Git): Document Change-Id. Series-changes: 3 - Clarify documentation text, as suggested by Simon Change-Id: Ia92fa958eae600fdd4e180bad494c85db8bb4dd6 Reviewed-by: Simon Tournier <zimon.toutoune@gmail.com> Maxim Cournoyer 2023-07-23gnu: Remove linux-libre 6.4....* gnu/packages/linux.scm (linux-libre-6.4-version, linux-libre-6.4-gnu-revision, deblob-scripts-6.4, linux-libre-6.4-pristine-source, linux-libre-6.4-source, linux-libre-headers-6.4, linux-libre-6.4): Remove variables. * gnu/packages/aux-files/linux-libre/6.4-arm.conf, gnu/packages/aux-files/linux-libre/6.4-arm64.conf, gnu/packages/aux-files/linux-libre/6.4-i686.conf, gnu/packages/aux-files/linux-libre/6.4-x86_64.conf: Delete files. * Makefile.am (AUX_FILES): Remove them. Leo Famulari 2023-10-21build-system: Add zig-build-system....* guix/build-system/zig.scm: New file. * guix/build/zig-build-system.scm: New file. * Makefile.am: Add them. * doc/guix.texi: Document it. * etc/snippets/yas/scheme-mode/guix-package (build-system): Add zig-build-system. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Ekaitz Zarraga 2023-07-23gnu: Add linux-libre 6.5....* gnu/packages/linux.scm (linux-libre-6.5-version, linux-libre-6.5-gnu-revision, deblob-scripts-6.5, linux-libre-6.5-pristine-source, linux-libre-6.5-source, linux-libre-headers-6.5, linux-libre-6.5): New variables. * gnu/packages/aux-files/linux-libre/6.5-arm.conf, gnu/packages/aux-files/linux-libre/6.5-arm64.conf, gnu/packages/aux-files/linux-libre/6.5-i686.conf, gnu/packages/aux-files/linux-libre/6.5-x86_64.conf: New files. * Makefile.am (AUX_FILES): Add them. Leo Famulari 2023-09-18maint: Support `guix shell' in Guix's git archive with manifest.scm....* manifest.scm: New file. * Makefile.am (EXTRA_DIST): Add it. * doc/contributing.texi (Building from Git): Mention using it. Janneke Nieuwenhuizen