Rethinking the Printing Stack for Wheezy / Precise
Now that most printing packages are under few team umbrellas; now that both Ubuntu and Debian will both be unfrozen for some period, it's clearly a good time to take a step back and look at the big picture.
(Note that this is obviously partial and that everything here should be subject to discussion.)
Overall goal
Whatever the issues might be, there is certainly a set of common goals we should agree on:
- the "print-server" tasksel task should install CUPS and all printer drivers (with Recommends to be able to remove them afterwards)
- there should be very few "printing" top-level packages, that all install:
- one print server (CUPS, lpd, …)
- the printers database (foomatic-db{,-compressed})
- all printer drivers.
- at each level of the stack, the binary packages should be named coherently and dependencies between and within the levels should be coherent and logical.
- it should be possible to sanely move from one print server to another without needing to uninstall the whole stack of databases and printing drivers.
Issues and proposed solutions
CUPS-specificity
As far as I can tell, Ubuntu only has CUPS as available print server, so it's clearly more a challenge for Debian.
Current specificities:
dh_pyppd compresses PPDs to a CUPS-specific directory ( /usr/lib/cups/driver ), which obfuscates the availability of those PPDs to users of other print server users.
Proposal: Compress to /usr/share/ppd/compressed/ instead, with a symlink to /usr/lib/cups/driver.
?MartinPitt: cups already expects PPDs to be in /usr/share/ppd/*/; it is wrong to install PPDs into /usr/lib/cups/driver/, and I'm not even sure that cups looks there.
DidierRaboud: From initial tests, it seems that cups doesn't 'see' compressed PPDs under /usr/share/ppd/; to be investigated.
- …
Package naming inconsistencies
Many printing-related packages are not named consistently; in particular drivers.
Current inconsistencies:
- There is currently no printing drivers naming policy. Printer driver binary packages names carry no consistent link back to the printers they drive.
- As examples:
foo2zjs enables FLOSS-printing to some HP printers
epson-escpr enables printing to Epson Inkjet printers
rastertosag-gdi enables printing to Ricoh Aficio SP110* printers
- …
Proposal: Addressed by "Action 1" below.
- As examples:
Dependencies mess
As an image can be worth thousand words:
Depends are blue, Recommends are black and Suggests are gray.
Something (to be discussed) should be done about this.
Lack of clear entry-point
Currently, when one wants a "working printing stack", there is no clear "root" package that provides that. If one takes a look at the print-server task, then foo2zjs is a direct dependency of it, for an unknown reason; same goes for hp-ppd.
Action proposal
Iff binary package renames and a big refactoring of the inter-relations in-between the various packages are both agreed on, the sanest plan would be:
- Agree on a plan common to Debian, Ubuntu and whatever other derivatives would like to take part of the discussion;
- Alter packages, create new binaries, upload to Debian unstable, trough the NEW queue;
- Test global upgradeability from previous releases to unstable frequently enough;
- Sync to Ubuntu precise; test upgreadability from oneiric and from past LTS.
- Then, if possible, do any change in Debian unstable and sync to (or back) to Ubuntu.
Action 1 - Rename printing driver packages
Status: Implemented, besides out-of-team packages
Rename binary packages to printer-driver-${Identifier}.
- ${Identifier} is short-name for the driver, probably upstream's name for it.
Details
- In the process:
- Short and long description are unified in form and content
Description: printer driver for …
- Archive sections and priorities are unified:
Section: text
Priority: optional or extra
- Package relationships are unified
No Recommends on foomatic-db* (wrong way)
Take care of the driver/<driver> file created by dh_pyppd. From 0.4.9-6~, dh_pyppd strips ^printer-driver- from the package name to create the file, hence the DRIVER_REGEXP of the ppd-updater file must be handled accordingly (e.g. ^m2300w: and not ^printer-driver-m2300w: ). Make sure to Build-Depends: pyppd (>= 0.4.9-6~) if the functionality depends on that.
- Short and long description are unified in form and content
- Transitional packages are provided
- The renamed (with new name)
Replaces+Breaks the old name with << ${Debian-revision}~
- The dummy package (with old name)
- Depends (unversioned) on the new.
- Made empty.
Architecture: all
Section: oldlibs
Priority: extra
Description: transitional dummy package for ${Identifier} printer driver
- The renamed (with new name)
- Source packages are not renamed.
A printer-driver-all package, Recommending all known printer drivers is created, using a new source package. To ease testing transitions, this source package might provide a printer-driver-all-enforce which has Depends instead of Recommends, making sure that the Recommends can be satisfied for the package.
Unless explicitly needed, any database or spooler should not have a direct relationship on any specific printer-driver-*, probably only needing a Recommends on the printer-driver-all.
Package renames |
|||
Old binary package name |
New binary package name |
Comment |
Status |
c2050 |
printer-driver-c2050 |
|
Done. |
c2esp |
printer-driver-c2esp |
|
Done. |
cjet |
printer-driver-cjet |
Not under Team's umbrella |
Renaming asked: 647531 |
epson-escpr |
printer-driver-escpr |
|
Done. |
foo2zjs |
printer-driver-foo2zjs |
|
Done. |
m2300w |
printer-driver-m2300w |
|
Done. |
ptouch-driver |
printer-driver-ptouch |
|
Done. |
pxljr |
printer-driver-pxljr |
|
Done. |
splix |
printer-driver-splix |
Not under Team's umbrella |
Renaming asked: 647534 |
min12xww |
printer-driver-min12xww |
Not under Team's umbrella |
Renaming asked: 647538 |
pnm2ppa |
printer-driver-pnm2ppa |
|
Done. |
rastertosag-gdi |
printer-driver-sag-gdi |
|
Done. |