PAR Wins!

New client, they set up a SuSE Enterprise Linux VM for me to install on. I approach this with trepidation. SLES is distinct from OpenSUSE, so I can't set up a VM at home for staging. Turns out my fears were misplaced; a PAR built on CentOS 5.8 runs on SLES 11.2 with only a minor problem. Colour me Impressed.

The minor problem was that some libraries aren't the same version. But a simple -l db -l gnutls -l gnutls-extra -l gnutls-openssl works around this. Of course, PAR::Packer only looks in LD_LIBRARY_PATH for libraries. MUST NOT BE SIDETRACKED INTO FIXING THIS.

Here's how to check shared libraries. First you build your PAR. Then extract it:

mkdir t
cd t
unzip ../your.par

Now scan that with the following code:


use strict;
use warnings;

use File::Finder;

my %already;
foreach my $lib ( File::Finder->name("*.so")->in('lib') ) {
    foreach my $line ( qx(ldd $lib) ) {
        chomp( $line );
        next unless $line =~ /(.+)\s+=>\s+(.+)\s\(0x/;
        my( $so, $file ) = ( $1, $2 );
        next if $file =~ m(^/lib);  # assume anything in /lib and /lib64 are OK
        next if $already{$file}++;
        print "rpm -qf $file # $lib\n";

This will produce some commands that you then paste into a command prompt on the remote computer. If one of the lines doesn't show up, you will have to include it in the PAR. Note that sometimes one distro will put the library in /usr/lib64 and another distro will put it in /lib64 which might cause false negatives. I wonder what the overhead of including EVERY library in the PAR would be. MUST NOT BE SIDETRACKED.


Installing fonts in CentOS

This is here because I keep forgetting:
fc-cache /path/to/fonts
. Also, under CentOS 6:
yum install dejavu-lgc-sans-mono-fonts \
 dejavu-sans-mono-fonts \
 gnu-free-mono-fonts \
 google-droid-sans-mono-fonts \
 liberation-mono-fonts \


cups-lpd and syslog

cups-lpd logs everything to syslog. This fills up /var/log/messages unnecessarily. I finally pulled out the source code and went about writing a patch so that it logs to a file. And then someone on #cups indirectly pointed out that cups-lpd uses LOG_LPR faculty and syslog can filter with these. The trick is these 2 lines in /etc/syslog.conf
*.info;lpr.!info;mail.none;news.none;authpriv.none;cron.none        /var/log/messages
lpr.*   /var/log/cups/cups-lpd_log
The first one sends *.info, EXCEPT lpr.info to /var/log/messages. The second one sends lpr.* to /var/log/cups/cups-lpd_log. Note that this means that any other program that uses LOG_LPR will also log to the same file.

But that's not all; xinetd also logs to syslog. But it can be easily convinced to log to a file, with the following /etc/xinetd.d/cups-lpd:

service printer
    disable = no
    socket_type = stream
    protocol = tcp
    wait = no
    user = lp
    server = /usr/lib/cups/daemon/cups-lpd
    server_args = -o job-sheets=none
    log_type = FILE /var/log/cups/cups-lpd_log
So there you have: how to prevent cups-lpd from logging to syslog.


Cogceco, you impress me

I got some postal mail from Cogceo. I thew it on the passenger seat and thought to myself "bet they are offering me a new, extra fast extra expensive bandwidth package." Because the cost of ISPs only ever goes up, unlike the cost of computers or the cost of renting a server, etc. Because there is zero competition amongst ISPs; for broadband I can have DSL or DOCSIS, provided by Bell or Cogeco. Both have resellers, but the basic rate is fixed by Bell or Cogeco. But I was wrong. The letter was to announce improved service (upload speed doubling) but not a rate increase. Yet.