guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Name service switch configuration


From: Mark H Weaver
Subject: Re: Name service switch configuration
Date: Wed, 25 Feb 2015 02:37:49 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux)

Hi Ludovic!

address@hidden (Ludovic Courtès) writes:

> Commit 996ed73 adds support to configure libc’s name service switch
> (NSS).  To enable something like nss-mdns (for the resolution of
> ‘.local’ names), one needs two things:
>
>   1. Add this snippet to the ‘operating-system’ declaration:
>
>      (name-service-switch (name-service-switch
>                             (hosts (list %files
>                                          (name-service
>                                            (name "mdns_minimal")
>                                            (reaction (lookup-specification
>                                                       (not-found => return))))
>                                          (name-service
>                                            (name "dns"))
>                                          (name-service
>                                            (name "mdns"))))))
>
>    2. Arrange to have ‘nscd-service’ called with:
>
>         #:name-services (list nss-mdns)
>
> And that works!

Sounds great, except that it doesn't work for me :-(

I've done as you recommended, and "avahi-browse -avr" successfully shows
names of *.local hosts, but if I try to do name lookups on those names,
they always fail.

I've attached my OS configuration.  Any ideas?

      Mark

;; GNU Guix operating system configuration for jojen

(use-modules (gnu)
             (gnu services)
             (guix gexp)
             (guix store)
             (guix monads))

(use-package-modules base bash admin wicd pulseaudio avahi vim linux)
(use-service-modules xorg avahi dbus networking)

(define (temperature-regulation-service)
  (with-monad %store-monad
    (return
     (service
      (documentation "Regulate temperature on an overclocked Libreboot X60.")
      (provision '(temperature-regulation))
      (requirement '(user-processes))
      (start #~(lambda _
                 (let ((pid (primitive-fork)))
                   (if (positive? pid)
                       pid
                       (let ()
                         (define (current-temp)
                           (call-with-input-file
                               "/sys/class/thermal/thermal_zone0/temp"
                             read))
                         (define (set-cpu1-online! online?)
                           (call-with-output-file
                               "/sys/devices/system/cpu/cpu1/online"
                             (lambda (port)
                               (write (if online? 1 0) port))))
                         (let loop ()
                           (let ((temp (current-temp)))
                             (cond ((< temp 88000) (set-cpu1-online! #t))
                                   ((> temp 92000) (set-cpu1-online! #f))))
                           (sleep 2)
                           (loop)))))))
      (stop #~(make-kill-destructor))
      (respawn? #t)))))

(define (powertop-auto-tune-service)
  (let ((powertop #~(string-append #$powertop "/sbin/powertop")))
    (with-monad %store-monad
      (return
       (service
        (documentation "Run powertop --auto-tune.")
        (provision '(powertop-auto-tune))
        (requirement '(user-processes))
        (start #~(lambda _
                   (zero? (system* #$powertop "--auto-tune")))))))))

(define (hdparm-service device)
  (let ((hdparm #~(string-append #$hdparm "/sbin/hdparm")))
    (with-monad %store-monad
      (return
       (service
        (documentation "Disable power management on drive.")
        (provision (list (symbol-append 'hdparm- (string->symbol device))))
        (requirement '(user-processes))
        (start #~(lambda _
                   (let ((pid (primitive-fork)))
                     (if (positive? pid)
                         pid
                         (let loop ()
                           (unless (zero? (system* #$hdparm "-B" "255" 
#$device))
                             (format (current-error-port)
                                     "hdparm failed!~%"))
                           (sleep 15)
                           (loop))))))
        (stop #~(make-kill-destructor))
        (respawn? #t))))))

(define (anti-caps-lock-service)
  (let ((dumpkeys #~(string-append #$kbd  "/bin/dumpkeys"))
        (loadkeys #~(string-append #$kbd  "/bin/loadkeys"))
        (grep     #~(string-append #$grep "/bin/grep"))
        (sed      #~(string-append #$sed  "/bin/sed"))
        (bash     #~(string-append #$bash "/bin/bash")))
    (with-monad %store-monad
      (return
       (service
        (documentation "Change caps-lock to control on the ttys.")
        (provision '(anti-caps-lock))
        (requirement '(user-processes))
        (start
         #~(lambda _
             (zero? (system* #$bash "-c"
                             (string-append #$dumpkeys " | "
                                            #$grep " Caps_Lock | "
                                            #$sed " s/Caps_Lock/Control/g | "
                                            #$loadkeys))))))))))

(define (sound-volume-service)
  (let ((amixer #~(string-append #$alsa-utils "/bin/amixer")))
    (with-monad %store-monad
      (return
       (service
        (documentation "Initialize sound volume to maximum.")
        (provision '(sound-volume-service))
        (requirement '(user-processes))
        (start
         #~(lambda _
             (zero? (system* #$amixer "-q" "set" "Master" "100%")))))))))

(operating-system
  (host-name "jojen")
  (timezone "US/Eastern")
  (locale "en_US.utf8")

  (bootloader (grub-configuration (device "/dev/sda")
                                  (default-entry 0)
                                  (timeout 1)))

  (swap-devices '("/dev/sda5"))
  (file-systems (cons* (file-system (device "jojen-root")
                                    (title 'label)
                                    (mount-point "/")
                                    (type "ext4"))
                       (file-system (device "jojen-videos")
                                    (title 'label)
                                    (mount-point "/home/mhw/Videos")
                                    (type "ext4")
                                    (flags '(no-dev no-suid)))
                       %base-file-systems))

  (users (list (user-account
                (name "mhw")
                (uid 1000)
                (group "mhw")
                (supplementary-groups
                 '("wheel" "users" "audio" "video" "dialout" "netdev"))
                (home-directory "/home/mhw"))))
  (groups (cons* (user-group
                  (name "mhw")
                  (id 1000))
                 %base-groups))

  (name-service-switch (name-service-switch
                        (hosts (list %files
                                     (name-service
                                      (name "mdns_minimal")
                                      (reaction (lookup-specification
                                                 (not-found => return))))
                                     (name-service
                                      (name "dns"))
                                     (name-service
                                      (name "mdns"))))))

  (packages (cons* vim iproute iw wicd pulseaudio avahi
                   %base-packages))

  (services
   (let ((motd (text-file "motd" "
This is the GNU operating system, welcome!\n\n")))
     (list (slim-service)
           (dbus-service (list avahi pulseaudio wicd))
           (wicd-service)
           (avahi-service)
           (nscd-service #:name-services (list nss-mdns))
           (tor-service)
           (bitlbee-service)

           (temperature-regulation-service)
           (powertop-auto-tune-service)
           (hdparm-service "/dev/sda")
           (anti-caps-lock-service)
           (sound-volume-service)

           (console-font-service "tty1")
           (console-font-service "tty2")
           (console-font-service "tty3")
           (console-font-service "tty4")
           (console-font-service "tty5")
           (console-font-service "tty6")

           (mingetty-service "tty1" #:motd motd)
           (mingetty-service "tty2" #:motd motd)
           (mingetty-service "tty3" #:motd motd)
           (mingetty-service "tty4" #:motd motd)
           (mingetty-service "tty5" #:motd motd)
           (mingetty-service "tty6" #:motd motd)
           (static-networking-service "lo" "127.0.0.1"
                                      #:provision '(loopback))
           (syslog-service)
           (guix-service)

           ;; The LVM2 rules are needed as soon as LVM2 or the device-mapper is
           ;; used, so enable them by default.  The FUSE and ALSA rules are
           ;; less critical, but handy.
           (udev-service #:rules (list lvm2 fuse alsa-utils))))))

reply via email to

[Prev in Thread] Current Thread [Next in Thread]