From: Danny Milosavljevic <dannym@scratchpost.org>
To: Andy Wingo <wingo@igalia.com>
Cc: guix-devel@gnu.org
Subject: cups-service v2
Date: Wed, 23 Mar 2016 10:07:54 +0100 [thread overview]
Message-ID: <20160323100754.3798241b@scratchpost.org> (raw)
In-Reply-To: <20160323014033.42a019e1@scratchpost.org>
I think I have most of the parts now. Not sure how to tie them together, though:
diff --git a/gnu/services/printing.scm b/gnu/services/printing.scm
new file mode 100644
index 0000000..d8f6924
--- /dev/null
+++ b/gnu/services/printing.scm
@@ -0,0 +1,147 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015 Mark H Weaver <mhw@netris.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 printing)
+ #:use-module (gnu services)
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu packages cups)
+ #:use-module (guix gexp)
+ #:use-module (guix records)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-9)
+ #:use-module (srfi srfi-26)
+ #:use-module (ice-9 match)
+ #:export (cups-service))
+
+(define (default-cups-files-config data-dir)
+ ;; generate cups-files.conf [for cupsd -s ...], especially dynamically set DataDir.
+ (mixed-text-file "cups-files.conf"
+ "AccessLog syslog\n"
+ "ErrorLog syslog\n"
+ "PageLog syslog\n"
+ "FatalErrors all\n"
+ "SyncOnClose Yes\n"
+ "User nobody\n"
+ "Group lp\n"
+ ; FIXME SystemGroup lpadmin sys system root
+ ; FIXME ConfigFilePerm
+ ;; DataDir /var/lib/cupsd/data
+ (string-append "DataDir " data-dir "\n") ; /gnu/store/1h53jmsx7gm7b2sfk0h0k6bgmp8fhv0i-cups-2.1.0/share/cups
+ (string-append "DocumentRoot " /gnu/store/1h53jmsx7gm7b2sfk0h0k6bgmp8fhv0i-cups-2.1.0 "/share/doc/cups\n")
+ "CacheDir /var/cache/cups\n"
+ "StateDir /var/run/cups\n"
+ ; FIXME FontPath /zzz
+ "Printcap /etc/printcap\n"
+ "PrintcapFormat bsd\n"
+ "RequestRoot /var/spool/cups\n"
+ ;;/gnu/store/1h53jmsx7gm7b2sfk0h0k6bgmp8fhv0i-cups-2.1.0/lib/cups
+ "ServerBin /home/dannym/.guix-profile/lib/cups\n" ; FIXME
+ "ServerRoot /etc/cups\n" ; FIXME
+))
+
+;; TODO same with /usr/lib/cups
+(define (data-directory packages)
+ "Return a directory containing
+ @file{banners}
+ @file{charsets}
+ @file{drv} (most important)
+ @file{fonts}
+ @file{ipptool}
+ @file{locale}
+ @file{mime}
+ @file{model} (empty)
+ @file{ppdc}
+ @file{ppd-updaters}
+ @file{profiles} (empty)
+ @file{templates}
+ @file{usb}
+ merged from the packages
+ "
+ (computed-file "usr-share-cups"
+ #~(begin
+ (use-modules (guix build union) (srfi srfi-26))
+ (union-build #$output
+ (map (cut string-append <> "/share/cups")
+ (list #$@packages))))
+ #:modules '((guix build union))))
+
+(define-record-type* <cups-configuration>
+ cups-configuration make-cups-configuration
+ cups-configuration?
+ (printers cups-configuration-printers)
+ (provision cups-configuration-provision)
+ (cups cups-configuration-cups (default cups))
+ (actions cups-configuration-actions (default '()))) ; package list
+
+; TODO cupsd -c /etc/cupsd.conf -F
+; TODO what user should cupsd run as? (Debian: root)
+; TODO cups-browsed (Debian: also as root)
+; TODO list of printers; paper size, printer vendor and model, interface (if necessary).
+; TODO binding to network interface; running the config html page; auth there; auth in general?
+; TODO support scanners and hpaio thing as sane dll
+
+;
+;
+;
+; merge: /var/lib/hp ? no
+; merge: /etc/hp ? no
+; merge: /usr/share/hal/fdi ? useless.
+; merge: /etc/udev/rules.d ? done.
+; merge: /lib/systemd/system ? useless.
+; merge: /lib/cups/filter
+; merge: /lib/cups/backend
+; merge: mime.types
+; merge: /share/applications
+; merge: /usr/share/ppd/HP via DRV into DataDir.
+; merge: drv into DataDir
+
+(define cups-shepherd-service
+ (match-lambda
+ (($ <cups-configuration> printers provision cups)
+ (let ((loopback? (memq 'loopback provision)))
+ (list
+ (shepherd-service
+ (requirement '(udev networking)) ; TODO check actual config and reduce
+ (documentation "Bring up printing services.")
+ (provision provision)
+ (start #~(make-forkexec-constructor
+ (list (string-append #$cups "/sbin/cupsd")
+ "-s" (default-cups-files-config "/tmp") ; FIXME merged datadir
+ ; FIXME "-c" cups config
+ "-f")))
+ (stop #~(make-kill-destructor))))))))
+
+(define cups-service-type
+ (service-type (name 'cups)
+ (extensions
+ (list (service-extension shepherd-root-service-type cups-shepherd-service)))
+ (compose concatenate)
+ (extend (lambda (config actions)
+ (cups-configuration
+ (inherit config)
+ (actions
+ (append (cups-configuration-actions config)
+ actions)))))))
+
+(define* (cups-service #:key printers (provision '(printing)) )
+ "Return a printing service that starts cups."
+ (service cups-service-type
+ (cups-configuration (printers printers)
+ (provision provision))))
+
next prev parent reply other threads:[~2016-03-23 9:08 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-12 18:12 Using cups Danny Milosavljevic
2016-03-13 22:10 ` Ludovic Courtès
2016-03-15 20:05 ` Danny Milosavljevic
2016-03-15 21:19 ` hplip package (work in progress) Danny Milosavljevic
2016-03-16 8:19 ` Andy Wingo
2016-03-16 8:45 ` Andy Wingo
2016-03-20 0:19 ` Danny Milosavljevic
2016-03-21 22:07 ` [PATCH v2] Add hplip Danny Milosavljevic
2016-03-22 8:28 ` Andy Wingo
2016-03-22 10:30 ` [PATCH v3] " Danny Milosavljevic
2016-03-22 10:56 ` Andy Wingo
2016-03-22 19:12 ` [PATCH v4] " Danny Milosavljevic
2016-03-22 23:51 ` cups-service Danny Milosavljevic
2016-03-23 0:40 ` cups-service Danny Milosavljevic
2016-03-23 9:07 ` Danny Milosavljevic [this message]
2016-04-29 15:09 ` cups-service v2 Ludovic Courtès
2016-03-23 8:45 ` [PATCH v4] Add hplip Andy Wingo
2016-03-23 9:39 ` [PATCH v5] " Danny Milosavljevic
2016-03-23 11:36 ` [PATCH v6] " Danny Milosavljevic
2016-03-23 20:46 ` Efraim Flashner
2016-03-23 23:56 ` [PATCH v7] " Danny Milosavljevic
2016-04-04 21:45 ` Ludovic Courtès
2016-04-10 20:57 ` Danny Milosavljevic
2016-04-29 15:07 ` Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160323100754.3798241b@scratchpost.org \
--to=dannym@scratchpost.org \
--cc=guix-devel@gnu.org \
--cc=wingo@igalia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.