Browse Source
services: Create /var/run/utmpx upon activation.
This fixes a bug whereby /var/run/utmpx would never be created, and thus
accounting information would be missing.
* gnu/services.scm (activation-script): Create /var/run/utmpx.
* gnu/tests/base.scm (run-basic-test)["utmpx entry"]: New test.
wip-git-https
Ludovic Courtès
5 years ago
No known key found for this signature in database
GPG Key ID: 90B11993D9AEBB5
2 changed files with
26 additions and
3 deletions
gnu/services.scm
gnu/tests/base.scm
@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
;;;
;;; This file is part of GNU Guix.
@ -340,6 +340,11 @@ ACTIVATION-SCRIPT-TYPE."
( activate-/bin/sh
( string-append # $ ( canonical-package bash ) "/bin/sh" ) )
;; Make sure the user accounting database exists. If it
;; does not exist, 'setutxent' does not create it and
;; thus there is no accounting at all.
( close-port ( open-file "/var/run/utmpx" "a0" ) )
;; Set up /run/current-system. Among other things this
;; sets up locales, which the activation snippets
;; executed below may expect.
@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -78,9 +78,11 @@ passed a gexp denoting the marionette, and it must return gexp that is
inserted before the first test . This is used to introduce an extra
initialization step, such as entering a LUKS passphrase . "
( define test
( with-imported-modules ' ( ( gnu build marionette ) )
( with-imported-modules ' ( ( gnu build marionette )
( guix build syscalls ) )
# ~ ( begin
( use-modules ( gnu build marionette )
( guix build syscalls )
( srfi srfi-1 )
( srfi srfi-26 )
( srfi srfi-64 )
@ -176,6 +178,22 @@ info --version")
( apply throw args ) ) ) ) )
marionette ) ) )
;; There should be one utmpx entry for the user logged in on tty1.
( test-equal "utmpx entry"
' ( ( "root" "tty1" #f ) )
( marionette-eval
' ( begin
( use-modules ( guix build syscalls )
( srfi srfi-1 ) )
( filter-map ( lambda ( entry )
( and ( equal? ( login-type USER_PROCESS )
( utmpx-login-type entry ) )
( list ( utmpx-user entry ) ( utmpx-line entry )
( utmpx-host entry ) ) ) )
( utmpx-entries ) ) )
marionette ) )
( test-assert "host name resolution"
( match ( marionette-eval
' ( begin