[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
cups-service
From: |
Danny Milosavljevic |
Subject: |
cups-service |
Date: |
Wed, 23 Mar 2016 00:51:01 +0100 |
I added a cups-service to actually enable printing eventually, see below.
What it should do (and doesn't do yet) is union together several directories of
other packages.
The generated cups-files.conf should contain as "DataDir" (usually /usr/share)
the data directory that cupsd should use, which should contain all those
merged-together configs (as subdirs), and as "ServerBin" (usually
/usr/lib/cups) the actual executables. It is possible to pass the location of
cups-files.conf when starting up cupsd.
The subdirs in datadir are especially:
- drv/ for the driver infos. These contain ppd basenames, among lots of other
things. These are a variable number of files, but flat hierarchy.
- mime/ for mime types. These are a constant number of files (flat dir
hierarchy), to be concatenated each.
The PPDs are kinda difficult. A possibility is to put them into the directory
specified as "ServerRoot" (usually /etc/cups) as subdir "ppd" but I think
that's supposed to be for user customizations. Cups ppds are usually in
/usr/share/ppd . Cupsfilters ppds are usually in /usr/share/ppd/cupsfilters .
hplip ppds are usually in /usr/share/hplip (not yet sure how they get there in
the first place, though). cups-driverd get_file actually hard-codes
/usr/share/ppd sometimes but usually uses (string-append DataDir subdir name) -
but my Debian installation has none of the latter.
The subdirs in serverbin are:
- backend/ (flat dir hierarchy). Overwhelmingly ELF; one Python (what version?)
script.
- filter/ (flat dir hierarchy). Overwhelmingly ELF; a few Python (what
version?) scripts, one shell script.
- driver/ for the actual drivers (flat dir hierarchy). Most of those (all but
1) are python3 scripts. One ELF.
How do I find out where the cupsd executable is / ensure that it's actually
there?
Sources to be merged should be the packages:
- cups-filters
- cups
- hplip
- eventually foomatic
diff --git a/gnu/services/printing.scm b/gnu/services/printing.scm
new file mode 100644
index 0000000..4bc33a2
--- /dev/null
+++ b/gnu/services/printing.scm
@@ -0,0 +1,109 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <address@hidden>
+;;; Copyright © 2015 Mark H Weaver <address@hidden>
+;;;
+;;; 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))
+
+; TODO or just fetch the one from cups and modify it a bit.
+(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
+))
+
+(define-record-type* <cups>
+ cups make-cups
+ cups?
+ (printers cups-printers)
+ (provision cups-provision))
+
+; TODO cupsd -c /etc/cupsd.conf -s /etc/cups-files.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
+
+; FIXME extensions (list (service-extension ...
+; FIXME compose concatenate
+; FIXME extend (lambda (config actions)
+; 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.
+; TODO merge: /lib/cups/filter
+; TODO merge: /lib/cups/backend
+; TODO merge: mime.types
+; TODO merge: /share/applications
+; TODO merge: /usr/share/ppd/HP via DRV?
+; TODO merge: drv into DataDir
+
+(define cups-service-type
+ (shepherd-service-type
+ 'cups
+ (match-lambda
+ (($ <cups> printers provision)
+ (let ((loopback? (memq 'loopback provision)))
+ (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 "/sbin/cupsd") ; FIXME #$cups
+ "-s" (default-cups-files-config "/tmp") ; FIXME pass
merged datadir
+ ; FIXME "-c" cups config
+ "-f")))
+ (stop #~(make-kill-destructor))))))))
+
+(define* (cups-service #:key printers (provision '(printing)) )
+ "Return a printing service that starts cups."
+ (service cups-service-type
+ (cups (printers printers)
+ (provision provision))))
+
- Re: Using cups, (continued)
- Re: Using cups, Danny Milosavljevic, 2016/03/15
- hplip package (work in progress), Danny Milosavljevic, 2016/03/15
- Re: hplip package (work in progress), Andy Wingo, 2016/03/16
- Re: hplip package (work in progress), Andy Wingo, 2016/03/16
- Re: hplip package (work in progress), Danny Milosavljevic, 2016/03/19
- [PATCH v2] Add hplip, Danny Milosavljevic, 2016/03/21
- Re: [PATCH v2] Add hplip, Andy Wingo, 2016/03/22
- [PATCH v3] Add hplip, Danny Milosavljevic, 2016/03/22
- Re: [PATCH v3] Add hplip, Andy Wingo, 2016/03/22
- [PATCH v4] Add hplip, Danny Milosavljevic, 2016/03/22
- cups-service,
Danny Milosavljevic <=
- Re: cups-service, Danny Milosavljevic, 2016/03/22
- cups-service v2, Danny Milosavljevic, 2016/03/23
- Re: [PATCH v4] Add hplip, Andy Wingo, 2016/03/23
- [PATCH v5] Add hplip, Danny Milosavljevic, 2016/03/23
- [PATCH v6] Add hplip, Danny Milosavljevic, 2016/03/23
- Re: [PATCH v6] Add hplip, Efraim Flashner, 2016/03/23
- [PATCH v7] Add hplip, Danny Milosavljevic, 2016/03/23