Tag Archives: linux

When CUPS stops printing ~ lp: Too many active jobs

I got a nasty surprise this morning. I run a batch routine that generates a couple of thousand or so letters from E-Business Suite every night and then prints them – via CUPS –  to a series of networked printers. This has worked since the year dot. It has never let me down…. until that is, this morning when it let me down big style.

The first 500 letters were queued and then subsequently printed. The other 2500 were rejected by CUPS. (I should mention at this point that the letters are printed individually thus each letter generates a print job meaning 3000 or so print jobs should’ve been created and subsequently printed off).

After the first 500 letters went of to CUPS I started to see a message in my application log:

lp: Too many active jobs

I have never seen this message before. Well weird considering the number of print jobs that have gone through the system.

To cut a long story short the solution to my print problem was to change a parameter in cupsd.conf

By default CUPS will queue a maximum of 500 print jobs before rejecting further print requests. To quote directly from the CUPS manual :

The MaxJobs directive controls the maximum number of jobs that are kept in memory. Once the number of jobs reaches the limit, the oldest completed job is automatically purged from the system to make room for the new one. If all of the known jobs are still pending or active then the new job will be rejected.

Setting the maximum to 0 disables this functionality. The default setting is 500.

So I added MaxJobs 0 to my cupsd.conf file, restarted CUPS, did a fairly large scale test (about 1000 jobs sent) and all is well. I’ll update this post at some point as I’ve heard setting MaxJobs 0 can have unpleasant side effects in terms of Memory and CPU consumption.


How to Get your .Net Framework 4 C# application to use a proxy (with NTLM Authentication)

 I’d been working on an .net framework application that accessed a web resource internal to my organisation – ie, on the internal network where I work. There was no need to use a proxy. Then all of a sudden I was asked to re-write the code for this application to enable it to use a proxy (one that did NTLM authentication) as the resource was being scrapped and we were to buy other resources and access it over the web [via our proxy].

Here’s how I did it. Call this function from your class at a point before it starts making http requests and you should be okay. NB: this code works on our wholly Microsoft Windows network with NTLM authentication everywhere including the proxy server.

This works for me. Haven’t tried it with anything other than IE + XP + IAS though.

Best of luck.

static void setProxy()
    WebProxy proxy = (WebProxy)WebProxy.GetDefaultProxy();
    if(proxy.Address != null)
        proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
        WebRequest.DefaultWebProxy = new System.Net.WebProxy(proxy.Address, proxy.BypassProxyOnLocal, proxy.BypassList, proxy.Credentials);
I think this was the final code snippet.. Anyway, Give it a blast and let me know how you get on if you want to. Feel free to leave a comment. If you like it then link to it, if you don’t then tell a colleague.. 🙂


At What Speed is my HBA operating?

If you use Redhat Enterprise Linux (5.4 in my case) and you want to know what speed your HBA is operating at then check out the link below for details on how to do it. That pesky systool command raises is useful little head once more.



My First Ever Install of TSM Client 6.2.1 on Redhat Enterprise Linux (5.5 32Bit)

For the first time ever I was given the pleasure/task of installing TSM on a couple of the servers I’m responsible for. Our TSM chap had only ever installed the client on Windows so was no help to me whatsoever. I also found IBM’s documentation quite poor – though their Redbooks are okay. Anyway, a few details for you. This is TSM Client 6.2.1 (32bit) running on Redhat Enterprise Linux 5.5. The hardware platform is IBM x3650 with 64GB of RAM. NB: I’m going to use a script to backup TSM so I won’t be setting up the scheduler. Here’s how it went down..

  1. Create a directory to house the TSM tarball and rpms. My
    directory of choice is /root/TSM

[root@myServer ~]# mkdir TSM

[root@myServer ~]# cd TSM

  1. Acquire your TSM installer/tarball/rpms and transfer to
    it/them to /root/TSM using the tool of your choice – be it
    ftp/sftp/scp/cp or whatever other means you have a your disposal.
    I used scp from our master TSM server.

[root@myServer ~]scp tsm@tsmserver:/tsm/

  1. Untar the TSM client tarball

[root@myServer ~]tar -xf

  1. Lets have a look-see what files we have…

[root@myServer TSM]# ls -al
total 196612
drwxr-xr-x 2 root root 4096 Dec 14 12:29 .
drwxr-xr-x 3 root root 4096 Dec 14 12:29 ..
-rw-r–r– 1 root root 100536320 Dec 14 12:29
-rw-r–r– 1 root root 1086705 Dec 14 12:29 gskcrypt32-
-rw-r–r– 1 root root 1255938 Dec 14 12:29 gskcrypt64-
-rw-r–r– 1 root root 7080355 Dec 14 12:29 gskssl32-
-rw-r–r– 1 root root 7172566 Dec 14 12:29 gskssl64-
-rw-r–r– 1 root root 118183 Dec 14 12:29 NOTICES.TXT
-rw-r–r– 1 root root 10528 Dec 14 12:29 README_api_enu.htm
-rw-r–r– 1 root root 10389 Dec 14 12:29 README_enu.htm
-rw-r–r– 1 root root 8530 Dec 14 12:29 README_hsm_enu.htm
-rw-r–r– 1 root root 2204226 Dec 14 12:29 TIVsm-API64.i386.rpm
-rw-r–r– 1 root root 8108314 Dec 14 12:29 TIVsm-API.i386.rpm
-rw-r–r– 1 root root 16616211 Dec 14 12:29 TIVsm-BA.i386.rpm
-rw-r–r– 1 root root 56849218 Dec 14 12:29 TIVsm-HSM.i386.rpm
[root@myServer TSM]#

  1. Install the rpms. We need All of the 32bit rpms except for
    TIVsm-HSM.i386.rpm. We’re going to use yum to do
    the install because, well, firstly because I like it and secondly
    it’ll sort out your package dependencies for you.

[root@myServer TSM]# yum -y localinstall
gskssl32- gskcrypt3
2- TIVsm-API.i386.rpm TIVsm-BA.i386.rpm

Loaded plugins: rhnplugin, security
Setting up Local Package Process
Examining gskssl32- gskssl32-8.0-13.3.i386
Marking gskssl32- to be installed
Examining gskcrypt32- gskcrypt32-8.0-13.3.i386
Marking gskcrypt32- to be installed
Examining TIVsm-API.i386.rpm: TIVsm-API-6.2.1-0.i586
Marking TIVsm-API.i386.rpm to be installed
Examining TIVsm-BA.i386.rpm: TIVsm-BA-6.2.1-0.i586
Marking TIVsm-BA.i386.rpm to be installed
Resolving Dependencies
–> Running transaction check
—> Package TIVsm-API.i586 0:6.2.1-0 set to be updated
—> Package TIVsm-BA.i586 0:6.2.1-0 set to be updated
—> Package gskcrypt32.i386 0:8.0-13.3 set to be updated
—> Package gskssl32.i386 0:8.0-13.3 set to be updated
–> Finished Dependency Resolution
Dependencies Resolved

Package        Arch     Version       Repository                          Size
TIVsm-API      i586     6.2.1-0       /TIVsm-API.i386                     23 M
TIVsm-BA       i586     6.2.1-0       /TIVsm-BA.i386                      34 M
gskcrypt32     i386     8.0-13.3      /gskcrypt32-     2.6 M
gskssl32       i386     8.0-13.3      /gskssl32-        19 M

Transaction Summary
Install       4 Package(s)
Upgrade       0 Package(s)

Total size: 79 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing     : gskcrypt32 [########################################## ] 1/4
Installing     : gskssl32 [############################################ ] 2/4
Installing     : TIVsm-API [########################################### ] 3/4
Postinstall of the API

TSM Linux API installation complete.

Be sure to set up the configuration files!

Installing     : TIVsm-BA [############################################ ] 4/4
Postinstall of the Backup Archive client

TSM Linux client installation complete.

Be sure to set up the system configuration file
before starting the client!

TIVsm-API.i586 0:6.2.1-0  TIVsm-BA.i586 0:6.2.1-0  gskcrypt32.i386 0:8.0-13.3
gskssl32.i386 0:8.0-13.3


  1. Now I’ll do a very basic configuration of TSM – please not I will not be setting up the scheduler!

[root@myServer TSM]# cd /opt/tivoli/tsm/client/ba/bin/
[root@myServer bin]# ls -al dsm.*.smp
-r–r–r– 1 root bin 782 Apr 28 2010 dsm.opt.smp
-r–r–r– 1 root bin 971 Apr 28 2010 dsm.sys.smp
[root@myServer bin]# cp dsm.opt.smp dsm.opt
[root@myServer bin]# cp dsm.sys.smp dsm.sys

  1. Edit your dsm.sys file and make it look like the text below – note that I’m using the default port (1500), my TSM Server is – It doesn’t have a DNS entry yet.. – and my TSM Node is called myServer. Change these to suit your environment.

SErvername TSM_A

COMMMethod       TCPip

TCPPort   1500


Passwordaccess generate

TCPNodelay        YES

TCPBuffsize       32

TCPWindowsize     64

TXNByteLimit      25600

Nodename  myServer *bogus server name

InclExcl  /opt/tivoli/tsm/client/ba/bin/inclexcl.list

  1. Edit your dsm.opt file and make it look like the text below. My server has only local disk to I’ve set
    Domain to ALL-LOCAL.

SErvername TSM_A


Subdir YES

  1. Create the include/exclude file (this is completely empty at the moment. Edit this file according to your needs).

[root@myServer bin]# touch inclexcl.list

  1. Connect to the TSM Server for the first time. When Prompted for your “user id” (which should be the same as your NodeName as defined in dsm.sys). Enter your password whenprompted and you should be the proud recipient of a tsm> prompt

[root@myServer bin]# dsmc

IBM Tivoli Storage Manager Command Line Backup-Archive Client Interface

Client Version 6, Release 2, Level 1.0

Client date/time: 14/12/10 12:56:43

(c) Copyright by IBM Corporation and other(s) 1990, 2010. All Rights Reserved.


Please enter your user id :

Please enter password for user id “MYSERVER”: ********

Session established with server TSM_A: Windows
Server Version 6, Release 2, Level 1.1

Server date/time: 14/12/10 12:56:31 Last access: 14/12/10 12:56:31


  1. Run your first backup. You don’t have to do this but as you’ve installed the backup client you may as well. It’s worth checking with your TSM admin people if it’s ‘safe’ to perform a backup right now.

tsm> backup

Incremental backup of volume ‘/’
Incremental backup of volume ‘/oracle’
Incremental backup of volume ‘/boot’
ANS1898I ***** Processed     2,000 files *****
Directory–>               1,024 /boot/ [Sent]     
Normal File–>               163 /boot/.vmlinuz-2.6.18-194.26.1.el5.hmac [Sent]     
Normal File–>               158 /boot/.vmlinuz-2.6.18-194.el5.hmac [Sent]     
Normal File–>         1,243,713 /boot/System.map-2.6.18-194.26.1.el5 [Sent]     
Normal File–>         1,242,340 /boot/System.map-2.6.18-194.el5 [Sent]     
Normal File–>               185 /var/yp/nicknames [Sent]     
Successful incremental backup of ‘/’
Directory–>               4,096 /oracle/ [Sent]     
Directory–>              16,384 /oracle/lost+found [Sent]     
Successful incremental backup of ‘/oracle’
Total number of objects inspected:  102,143
Total number of objects backed up:  102,125
Total number of objects updated:          0
Total number of objects rebound:          0
Total number of objects deleted:          0
Total number of objects expired:          0
Total number of objects failed:           0
Total number of bytes inspected:      5.16 GB
Total number of bytes transferred:    5.14 GB
Data transfer time:                  117.98 sec
Network data transfer rate:        45,749.23 KB/sec
Aggregate data transfer rate:      21,568.04 KB/sec
Objects compressed by:                    0%
Total data reduction ratio:            0.31%
Elapsed processing time:           00:04:10

  1. When you’re finished type ‘quit’ at the tsm prompt to exit out of the TSM client.


And there you have it. My first ever encounter with a TSM client.I hope you found this useful…

A simple Kickstart File I thought I’d share with you

I recently took delivery of 18 servers each of which required a basic operating system installed and not much else – except for a /oracle filesystem creating. I thought i’d share the kickstart file with you plus one or two other things I needed to do to get kickstart working properly.

  1. setup a webserver to serve the kickstart files. I used IIS: I created a folder to contain the kickstart files on my webserver (D:\kickstart) and create a virtual directory (within an existing site) which pointed at that directory. permissions on the folder and virtual directory were set to read only with no script access.
  2. create the kickstart file (server1.ks) as detailed at the end of this post and save it in d:\kickstart on my webserver
  3. make sure the webserver is started..
  4. boot my server with an install DVD in it (I used an IBM RSA/IMM and mounted an iso image which presented itself to my server as a cd/dvd-rom). Make sure the server boots from the DVD!
  5. At the boot: prompt type linux ip= gateway= dns= netmask= ksdevice=eth0 ks=http://your.serv.er/kickstart/server1.ks ksdevice=eth0   NB: your settings will reflect the network settings in your kickstart file!
  6. Sit back and wait.. and your server will build – though on occassion I would be asked to ‘okay’ the disk configuration. Ultimately the process took about 10-15 minutes for me. Joy. If your server can’t find the kickstart file make sure the web server is up and the ethernet port you connect to is eth0 – unfortunately connecting up the other ethernet ports in your server to your switch is the quickest way to determine eth0, especially if you have a load of ethernet ports in your server. Or you can set ksdevice= to eth1, eth2 etc if you are gifted with lots of ethernet interfaces and have the time for re-editing kickstart files and rebooting ad nauseum.
Here’s the contents of my Kickstart file.. the limitations of the blogger.com column makes some lines spread across two or more lines. Please be aware of this if you copy any of the text below.

#Step thru the phases of the installation automatically (without prompting you – though you may be asked to confirm disk partitioning…)
#Skip The installation code/key
key –skip
# System authorization information
auth –useshadow –enablemd5
# System bootloader configuration
bootloader –location=mbr
# Clear the Master Boot Record
# Partition clearing information
clearpart –all –initlabel
# Use graphical install
# Firewall configuration
firewall –disabled
# Run the Setup Agent on first boot
firstboot –disable
# System keyboard
keyboard uk
# System language
lang en_GB
# Installation logging level
logging –level=info
# Use CDROM installation media
# Network information
# gateway is, server ip is, dns server is, netmask is, interface is active on boot and hostname is.. self explanatory..
network –bootproto=static –device=eth0 –gateway= –ip= –nameserver= –netmask= –onboot=on –hostname myserver.mydomain.com
network –device eth1 –onboot no –bootproto dhcp –hostname myserver.mydomain.com
# Reboot after installation
#Root password – Only set this if you know your password – use system-config-kickstart to create a root password and paste it below!
#rootpw –iscrypted $1$odxRDT6F$BHEEBLEPJJ43rvd3wKAQ4/
# SELinux configuration
selinux –disabled
# System timezone
timezone Europe/London
# Install OS instead of upgrade
# X Window System configuration information
xconfig –defaultdesktop=GNOME –depth=32 –resolution=1024×768 –startxonboot
# Disk partitioning information
# Create a 100MB boot partition
part /boot –bytes-per-inode=4096 –fstype=”ext3″ –size=100
# Create a 32GB Swap Partition (My particular machine has a *lot* of memory)
part swap –bytes-per-inode=4096 –fstype=”swap” –size=34816
# Create a 10GB root ‘/’ partition
part / –bytes-per-inode=4096 –fstype=”ext3″ –size=10240
# LV creation
# Create the partition to house the Volume Group (NB: I have massively oversized the maxsize parameter for growth purposes! Beware!!)
# This saves having to specify the VG size if you’re going to use the kickstart file across servers with different hard disk sizes
part pv.17 –size=1 –maxsize=1000000000 –grow
# Create the volume group
volgroup oraclevg –pesize=32768 pv.17
# Create the LV within the volume group (percent parameter set at 100% so that the LV will use ALL available space on the device! Beware!)
# This saves having to specify the LV size if you’re going to use the kickstart file across servers with different hard disk sizes and
# want to use all of the remaining disk space for the LV.
logvol /oracle –fstype ext3 –name=oraclelv –vgname=oraclevg –percent=100

# Nothing sophisticted about the packages section. tailor to your needs..

Let me know how you get on. If you get on.

How To Get The WWID of an HBA with Redhat Enterprise Linux

A bit of a problem presented itself to me the other day. A colleague called me on my mobile and asked me what the WWN of the first HBA in one of our servers was (He pointed out to me that the label on the HBA with this number on it was unreadable). Well, i don’t know about you but i don’t commit that kind of information to memory. So, what to do.. I scratched my head, had a coffee, nosed around the internet for a while and eventually stumbled across this solution.. here goes.. oh, I should tell you the Linux we use is Redhat Enterprise Linux 5.5 ..

Start a terminal sesson on your server as root.

type systool -vc fc_host

you should get some output like this:

Class Device = “host1”

Class Device path = “/sys/class/fc_host/host1”

fabric_name = “0x100000051e36281c”

issue_lip =

node_name = “0x2000001b328709b2”

port_id = “0x018680”

port_name = “0x2100001b328709b2”

port_state = “Online”

port_type = “NPort (fabric via point-to-point)”

speed = “4 Gbit”

supported_classes = “Class 3”

supported_speeds = “1 Gbit, 2 Gbit, 4 Gbit”

symbolic_name = “QLE2462 FW:v5.03.02 DVR:v8.”

system_hostname = “”

tgtid_bind_type = “wwpn (World Wide Port Name)”

uevent =


Anyway, the line you’re after is the port_name. If you chop ‘0x’ from the front of the port_name value you are left with the WWID/Number of your HBA. It’ll look more like a WWID if you insert a ‘:’ after every second character. So for me 0x2100001b328709b2 becomes 2100001b328709b2 which then becomes 21:00:00:1b:32:87:09:b2.

Voila, you have a WWID.