aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Simon Streit <simon@netpanic.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 tests samba)
  #:use-module (gnu tests)
  #:use-module (gnu system)
  #:use-module (gnu system vm)
  #:use-module (gnu services)
  #:use-module (gnu services networking)
  #:use-module (gnu services samba)
  #:use-module (gnu packages samba)
  #:use-module (guix gexp)
  #:use-module (guix store)
  #:export (%test-samba
            %test-wsdd))


;;;
;;; The Samba service.
;;;

(define %samba-os
  (let ((base-os (simple-operating-system
                  (simple-service 'create-target-directory activation-service-type
                                  #~(begin
                                      (mkdir-p "/srv/samba/guest")
                                      (chown "/srv/samba/guest"
                                             (passwd:uid (getpw "nobody"))
                                             (passwd:gid (getpw "nobody")))))
                  (service dhcp-client-service-type)
                  (service samba-service-type
                           (samba-configuration
                            (config-file (plain-file "smb.conf" "
[global]
    workgroup = WORKGROUP
    server string = Samba Server
    server role = standalone server
    log file = /var/log/samba/log.%m
    logging = file

[guest]
    path = /srv/samba/guest
    read only = no
    guest ok = yes
    guest only = yes
")))))))
    (operating-system
      (inherit base-os)
      (packages (cons samba (operating-system-packages base-os))))))

(define* (run-samba-test)
  "Return a test of an OS running Samba service."

  (define vm
    (virtual-machine
     (operating-system (marionette-operating-system
                        %samba-os
                        #:imported-modules '((gnu services herd))))
     (port-forwardings '((8135 . 135)
                         (8137 . 137)
                         (8138 . 138)
                         (8445 . 445)))))

  (define test
    (with-imported-modules '((gnu build marionette))
      #~(begin
          (use-modules (gnu build marionette)
                       (srfi srfi-26)
                       (srfi srfi-64))

          (define marionette
            (make-marionette '(#$vm)))

          (test-runner-current (system-test-runner #$output))
          (test-begin "samba")

          (test-assert "samba-smbd running"
            (marionette-eval
             '(begin
                (use-modules (gnu services herd))
                (start-service 'samba-smbd))
             marionette))

          (test-assert "samba-nmbd running"
            (marionette-eval
             '(begin
                (use-modules (gnu services herd))
                (start-service 'samba-nmbd))
             marionette))

          (test-assert "samba-winbindd running"
            (marionette-eval
             '(begin
                (use-modules (gnu services herd))
                (start-service 'samba-winbindd))
             marionette))

          (test-assert "smbd service process id"
            (let ((pid
                   (number->string (wait-for-file "/var/run/samba/smbd.pid"
                                                  marionette))))
              (marionette-eval `(file-exists? (string-append "/proc/" ,pid))
                               marionette)))

          (test-assert "nmbd service process id"
            (let ((pid
                   (number->string (wait-for-file "/var/run/samba/nmbd.pid"
                                                  marionette))))
              (marionette-eval `(file-exists? (string-append "/proc/" ,pid))
                               marionette)))

          (test-assert "winbindd service process id"
            (let ((pid
                   (number->string (wait-for-file "/var/run/samba/winbindd.pid"
                                                  marionette))))
              (marionette-eval `(file-exists? (string-append "/proc/" ,pid))
                               marionette)))

          (test-assert "samba-smbd is listening for peers"
            (wait-for-tcp-port 445 marionette))

          (test-equal "smbclient connect"
            0
            (marionette-eval
             '(system* #$(file-append samba "/bin/smbclient")
                       "--list=localhost" "--no-pass")
             marionette))

          (test-equal "smbclient connect"
            0
            (marionette-eval
             '(system* #$(file-append samba "/bin/smbclient")
                       "--list=localhost" "--no-pass")
             marionette))

          (test-end))))

  (gexp->derivation "samba-test" test))

(define %test-samba
  (system-test
   (name "samba")
   (description "Connect to a running Samba daemon.")
   (value (run-samba-test))))


;;;
;;; The wsdd service.
;;;

(define %wsdd-os
  (let ((base-os (simple-operating-system
                  (service dhcp-client-service-type)
                  (service wsdd-service-type))))
    (operating-system
      (inherit base-os)
      (packages (cons wsdd (operating-system-packages base-os))))))

(define* (run-wsdd-test)
  "Return a test of an OS running wsdd service."

  (define vm
    (virtual-machine
     (operating-system (marionette-operating-system
                        %wsdd-os
                        #:imported-modules '((gnu services herd))))
     (port-forwardings '((3702 . 3702)
                         (5357 . 5357)))))

  (define test
    (with-imported-modules '((gnu build marionette))
      #~(begin
          (use-modules (gnu build marionette)
                       (srfi srfi-26)
                       (srfi srfi-64))

          (define marionette
            (make-marionette '(#$vm)))

          (test-runner-current (system-test-runner #$output))
          (test-begin "wsdd")

          ;; Here shall be more tests to begin with.

          (test-assert "wsdd running"
            (marionette-eval
             '(begin
                (use-modules (gnu services herd))
                (start-service 'wsdd))
             marionette))

          (test-end))))

  (gexp->derivation "wsdd-test" test))

(define %test-wsdd
  (system-test
   (name "wsdd")
   (description "Connect to a running wsdd daemon.")
   (value (run-wsdd-test))))
msg-avail'>...Conflicts: gnu/local.mk gnu/packages/build-tools.scm gnu/packages/certs.scm gnu/packages/check.scm gnu/packages/compression.scm gnu/packages/cups.scm gnu/packages/fontutils.scm gnu/packages/gnuzilla.scm gnu/packages/guile.scm gnu/packages/ibus.scm gnu/packages/image-processing.scm gnu/packages/linux.scm gnu/packages/music.scm gnu/packages/nss.scm gnu/packages/pdf.scm gnu/packages/python-xyz.scm gnu/packages/qt.scm gnu/packages/ruby.scm gnu/packages/shells.scm gnu/packages/tex.scm gnu/packages/video.scm gnu/packages/vulkan.scm gnu/packages/web.scm gnu/packages/webkit.scm gnu/packages/wm.scm Maxim Cournoyer 2023-03-30system: Remove obsolete GUIX_LOCPATH workaround....* gnu/system.scm (operating-system-environment-variables): Do not set GUIX_LOCPATH. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Bruno Victal 2023-03-20Merge remote-tracking branch 'origin/master' into core-updatesAndreas Enge 2023-03-16services: etc-service: Deprecate etc-service procedure....* gnu/services.scm (etc-service): Deprecate procedure. * gnu/system.scm (operating-system-etc-service): Replace etc-service with etc-service-type. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Bruno Victal 2023-03-13system: Remove redundant gexp-ungexp usage....* gnu/system.scm (os-release): Convert to variable. (operating-system-etc-service): Remove redundant gexp-ungexps. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Bruno Victal 2023-03-13system: Simplify nsswitch binding....* gnu/system.scm (operating-system-etc-service): Simplify nsswitch binding. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Bruno Victal 2023-03-02Merge remote-tracking branch 'savannah/master' into core-updates...Conflicts: gnu/local.mk gnu/packages/autotools.scm gnu/packages/cmake.scm gnu/packages/gnuzilla.scm gnu/packages/haskell.scm gnu/packages/pdf.scm gnu/packages/python-xyz.scm gnu/packages/samba.scm gnu/packages/tex.scm gnu/packages/tls.scm gnu/packages/wxwidgets.scm Christopher Baines 2023-03-03services: base: Deprecate 'host-name-service' procedure....* doc/guix.texi (operating-system Reference): Reorder cross-reference. Add an anchor to be used ... (Base services): ... here by host-name-service-type. Document host-name-service-type. * gnu/services/base.scm: Export host-name-service-type. (host-name-service): Deprecate procedure. * gnu/system.scm (operating-system-default-essential-services): Use host-name-service-type. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Bruno Victal 2023-02-23system: Do not export local-host-entries....Unlike the deprecated 'local-host-aliases', there's no use for local-host-entries since it's used to set the default value for hosts-service-type. Given that this service-type is expected to be extended, one presumes that when they explicitly override the service default value they do not have much interest in the 'local-host-entries' procedure. * gnu/system.scm: Do not export local-host-entries. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Bruno Victal 2023-02-09system: Deprecate hosts-file....* gnu/system.scm (operating-system-hosts-file): Deprecate procedure. (warn-hosts-file-field-deprecation): New procedure, helper for deprecated variable. (operating-system)[hosts-file]: Use helper to warn deprecated field. (local-host-aliases): Mark as deprecated. (local-host-entries): New procedure. (operating-system-default-essential-services, hurd-default-essential-services): Use hosts-service-type. Use '%operating-system-hosts-file' and 'local-host-entries'. (default-/etc/hosts): Remove procedure. (operating-system-etc-service): Remove hosts file. * doc/guix.texi (operating-system Reference) (Networking Services) (Virtualization Services): Rewrite documentation entries to use hosts-service-type. Co-authored-by: Ludovic Courtès <ludo@gnu.org> Bruno Victal 2023-01-30Merge remote-tracking branch 'origin/master' into core-updates... Conflicts: doc/guix.texi gnu/local.mk gnu/packages/admin.scm gnu/packages/base.scm gnu/packages/chromium.scm gnu/packages/compression.scm gnu/packages/databases.scm gnu/packages/diffoscope.scm gnu/packages/freedesktop.scm gnu/packages/gnome.scm gnu/packages/gnupg.scm gnu/packages/guile.scm gnu/packages/inkscape.scm gnu/packages/llvm.scm gnu/packages/openldap.scm gnu/packages/pciutils.scm gnu/packages/ruby.scm gnu/packages/samba.scm gnu/packages/sqlite.scm gnu/packages/statistics.scm gnu/packages/syndication.scm gnu/packages/tex.scm gnu/packages/tls.scm gnu/packages/version-control.scm gnu/packages/xml.scm guix/build-system/copy.scm guix/scripts/home.scm Efraim Flashner 2023-01-05system: 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. Ludovic Courtès 2022-12-05system: Add e2fsprogs to %base-packages-utils....Rationale: Even when not using an ext file system, the utilities provided by e2fsprogs are useful, for example to set the copy-on-write attribute of a Btrfs file system. * gnu/system.scm (%base-packages-utils): Add e2fsprogs. 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-11-27gnu: shadow: Merge in shadow-with-man-pages....* gnu/packages/admin.scm (shadow)[arguments]: Add phase to install the manpages. Make sure 'remove-groups comes after installing the manpages. [properties]: Remove field. (shadow-with-man-pages): Remove variable. * gnu/system.scm (%base-packages-utils): Replace shadow-with-man-pages with shadow. Efraim Flashner 2022-10-23gnu: Fix typos....* gnu/packages/emacs-xyz.scm (emacs-piem)[description]: Fix use of "This packages". * gnu/packages/tex.scm (texlive-hardwrap)[description]: Fix spelling of "arbitrary". * gnu/packages/cran.scm (r-shinymanager)[description]: Fix spelling of "authentication". * gnu/packages/lisp-xyz.scm (sbcl-utils-kt)[description]: Fix spelling of "developed". * gnu/packages/crates-io.scm (rust-fs-utils-1)[description]: Fix spelling of "filesystem". [synopsis]: Likewise. * gnu/packages/haxe.scm (neko)[description]: Fix spelling of "functions". * gnu/packages/animation.scm (swftools)[description]: Fix needless pluralization of "information". * gnu/packages/lisp-xyz.scm (sbcl-slot-extra-options)[description]: Fix spelling of "inheritance". * gnu/packages/emacs-xyz.scm (emacs-js-comint)[description]: Fix spelling of "interpreter". * gnu/packages/coq.scm (coq-mathcomp-finmap)[description]: Fix spelling of "library". * gnu/services/lightdm.scm (lightdm-configuration): Fix spelling of "mechanism". * gnu/packages/emacs-xyz.scm (emacs-citar-org-roam)[synopsis]: Fix spelling of "package". * gnu/packages/games.scm (freerct)[description]: Fix spelling of "responsibilities". * gnu/packages/statistics.scm (r-mixedpower)[description]: Fix spelling of "separate". * gnu/packages/accessibility.scm (espeakup)[description]: Fix spelling of "speech". * gnu/packages/bioinformatics.scm (r-skitools)[synopsis]: Fix spelling of "utilities". * gnu/packages/golang.scm (go-github-com-savsgio-gotils)[synopsis]: Fix spelling of "utilities". [description]: Likewise. * gnu/system.scm (boot-file-system-service os): Fix spelling of "utilities". Vagrant Cascadian 2022-10-23system: hurd: Boot with the statically-linked 'exec' server....This works around <https://issues.guix.gnu.org/58631>. * gnu/system.scm (hurd-multiboot-modules): Use '/hurd/exec.static' instead of 'ld.so /hurd/exec'. Ludovic Courtès 2022-10-11system: operating-system: Make the timezone field default to Etc/UTC....* gnu/system.scm (<operating-system>) [timezone]: Default to "Etc/UTC". Maxim Cournoyer 2022-09-28services: Add file system utilities to profile....* gnu/services/base.scm (file-system-type->utilities) (file-system-utilities): New procedures. (file-system-service-type): Extend 'profile-service-type' with 'file-system-utilities'. * gnu/system.scm (boot-file-system-service): New procedure. (operating-system-default-essential-services): Use it. (%base-packages): Remove 'e2fsprogs'. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Brice Waegeneire 2022-07-14gnu: system: Add fusermount3 to setuid-programs....Fixes <https://issues.guix.gnu.org/47716>. * gnu/system.scm (%setuid-programs): Add /bin/fusermount3 from the fuse-3 package. Reported-by: raingloom <raingloom@riseup.net> Maxim Cournoyer 2022-06-15system: <operating-system> compiler truly honors the 'system' argument....Fixes <https://issues.guix.gnu.org/55951>. * gnu/system.scm (operating-system-compiler): Parameterize '%current-system' and '%current-target-system' before calling 'operating-system-derivation'. * tests/system.scm ("lower-object, %current-system sensitivity"): New test. Ludovic Courtès 2022-06-06system: Fix typo, add doc....* gnu/system.scm (operating-system-kernel-arguments): Fix typo in doc. (boot-parameters->menu-entry): Add doc. Maxim Cournoyer 2022-05-21system: Improve warning when using LUKS mapped devices without UUIDs....This corrects two problems with the previous mapped devices warning: 1. It wasn't clear how to correct the situation. 2. The output would be repeated multiple times, as many times as the procedure is called during a system reconfigure. * gnu/system.scm (operating-system-bootloader-crypto-devices): Memoize procedure. Include the mapped devices source location information in the warnings. Add a hint to help users fix the warning. Maxim Cournoyer