[Pkg-cups-devel] Bug#509518: cups-pdf: does not reliably create pdf-queue

Manny Vindiola mannyv at gmail.com
Mon Dec 22 22:12:59 UTC 2008


Package: cups-pdf
Version: 2.4.8-4
Severity: normal
Tags: patch
User: ubuntu-devel at lists.ubuntu.com
Usertags: origin-ubuntu intrepid ubuntu-patch

We applied these changes in Ubuntu and thought you might consider doing the same:
Sometime due to restart/configuration race condition the PDF-printer (queue) is not created
We have modified the postinstall so that it no longer restarts cups and installs a pdf queue and printer.
Patches are attached.

*** /tmp/tmpowFKGE
In Ubuntu, we've applied the attached patch to achieve the following:

  * Merge from debian unstable (LP: #310290), remaining changes:
    - debian/postinst, debian/prerm: Let PDF print queue being created
      automatically when installing the package and being removed
      automatically when uninstalling the package.
    - debian/postinst: Updated PPD file name to the new one used by the
      upstream package (LP: #241701). Updated the name of the CUPS startup
      script to "cups".

We thought you might be interested in doing the same. 


-- System Information:
Debian Release: lenny/sid
  APT prefers intrepid-updates
  APT policy: (500, 'intrepid-updates'), (500, 'intrepid-security'), (500, 'intrepid-backports'), (500, 'intrepid')
Architecture: i386 (i686)

Kernel: Linux 2.6.27-9-generic (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
-------------- next part --------------
diff -u cups-pdf-2.4.8/debian/changelog cups-pdf-2.4.8/debian/changelog
diff -u cups-pdf-2.4.8/debian/postinst cups-pdf-2.4.8/debian/postinst
--- cups-pdf-2.4.8/debian/postinst
+++ cups-pdf-2.4.8/debian/postinst
@@ -14,9 +14,81 @@
 		chown nobody:nogroup /var/spool/cups-pdf/ANONYMOUS
 		chmod 1777 /var/spool/cups-pdf/ANONYMOUS
 		chmod 0700 /usr/lib/cups/backend/cups-pdf
+		# This package needs the CUPS daemon running to actually work
 		if [ -f /etc/init.d/cups ]
 		then
-			invoke-rc.d cups force-reload || invoke-rc.d cups start || /bin/true
+			lpstat -r > /dev/null 2>&1 || invoke-rc.d cups start || /bin/true
+		fi
+		if lpstat -r > /dev/null 2>&1
+		then
+		        # Create a PDF CUPS queue if we have none yet (only
+		        # if CUPS daemon is running)
+			if [ -z "`LC_ALL=C lpstat -v 2>/dev/null | grep 'cups-pdf:/'`" ]
+			then
+				# Find a name for the PDF queue
+				queue=PDF
+				number=0
+				while LC_ALL=C lpstat -v 2>/dev/null | cut -d ':' -f 1 | cut -d ' ' -f 3 | grep -q ^$queue\$
+				do
+					number=$(($number + 1))
+					queue="PDF$number"
+				done
+				# Find system's default paper size
+				size="`LC_ALL=C paperconf 2>/dev/null`" || size=a4
+				# Create the queue
+				lpadmin -h localhost -p $queue -E -v cups-pdf:/ -m lsb/usr/cups-pdf/CUPS-PDF.ppd -o printer-is-shared=no -o PageSize=$size 2>/dev/null || :
+				# Set the PDF printer as default when there is not
+				# already a default printer
+				#if [ -z "`LC_ALL=C lpstat -d 2>/dev/null | grep 'system default destination:'`" ]
+				#then
+				#	lpadmin -d $queue 2>/dev/null || :
+				#fi
+			fi
+		else
+		        # Create a PDF CUPS queue if we have none yet (for the
+		        # case that CUPS is not running or even not installed)
+			if [ -z "`grep 'DeviceURI cups-pdf:/' /etc/cups/printers.conf 2> /dev/null`" ]
+			then
+				# Find a name for the PDF queue
+				queue=PDF
+				number=0
+				while grep -q "Printer $queue>" /etc/cups/printers.conf
+				do
+					number=$(($number + 1))
+					queue="PDF$number"
+				done
+				# Find system's default paper size
+				size="`LC_ALL=C paperconf 2>/dev/null`" || size=a4
+				# Create the queue
+				time=`date +%s`
+				mkdir -p /etc/cups/ppd
+				cat << EOF >> /etc/cups/printers.conf
+<Printer $queue>
+Info Print into PDF file
+DeviceURI cups-pdf:/
+State Idle
+StateTime $time
+Accepting Yes
+Shared No
+JobSheets none none
+QuotaPeriod 0
+PageLimit 0
+KLimit 0
+OpPolicy default
+ErrorPolicy retry-job
+</Printer>
+EOF
+				cp /usr/share/ppd/cups-pdf/CUPS-PDF.ppd /etc/cups/ppd/$queue.ppd
+				ucsize=`echo $size | perl -p -e 's/^(\S)(\S*)/uc($1) . $2/e'`
+				perl -p -i -e 's/^(\*DefaultPageSize:\s*)\S+/$1'$ucsize'/' /etc/cups/ppd/$queue.ppd
+				perl -p -i -e 's/^(\*DefaultPageRegion:\s*)\S+/$1'$ucsize'/' /etc/cups/ppd/$queue.ppd
+				perl -p -i -e 's/^(\*DefaultImageableArea:\s*)\S+/$1'$ucsize'/' /etc/cups/ppd/$queue.ppd
+				perl -p -i -e 's/^(\*DefaultPaperDimension:\s*)\S+/$1'$ucsize'/' /etc/cups/ppd/$queue.ppd
+				if [ -f /etc/init.d/cups ]
+				then
+				    lpstat -r > /dev/null 2>&1 || invoke-rc.d cups start || /bin/true
+				fi
+			fi
 		fi
 	;;
 
diff -u cups-pdf-2.4.8/debian/postrm cups-pdf-2.4.8/debian/postrm
--- cups-pdf-2.4.8/debian/postrm
+++ cups-pdf-2.4.8/debian/postrm
@@ -13,10 +13,6 @@
 		then
 			rm -rf /var/spool/cups-pdf
 		fi
-		if [ -f /etc/init.d/cups ]
-		then
-			invoke-rc.d cups force-reload || invoke-rc.d cups start || /bin/true
-		fi
 	;;
 
 	abort-upgrade|upgrade|failed-upgrade|remove|disappear)
only in patch2:
unchanged:
--- cups-pdf-2.4.8.orig/debian/prerm
+++ cups-pdf-2.4.8/debian/prerm
@@ -0,0 +1,29 @@
+#! /bin/sh
+# prerm script for cups-pdf
+
+set -e
+
+case "$1" in
+	remove)
+		# Remove all PDF queues (only if CUPS daemon is running)
+		if `lpstat -r > /dev/null 2>&1`
+		then
+			for queue in `LC_ALL=C lpstat -v 2>/dev/null | grep 'cups-pdf:/' | cut -d ':' -f 1 | cut -d ' ' -f 3`
+			do
+				lpadmin -x $queue 2>/dev/null || :
+			done
+		fi
+		;;
+	upgrade|deconfigure)
+		;;
+	failed-upgrade)
+		;;
+	*)
+		echo "prerm called with unknown argument \`$1'" >&2
+		exit 1
+		;;
+esac
+
+#DEBHELPER#
+
+exit 0


More information about the Pkg-cups-devel mailing list