Halloween by Robert Burns (an excerpt)

An excerpt of the poem Halloween by Robert Burns.

Upon that night, when fairies light
On Cassilis Downans dance,
Or owre the lays, in splendid blaze,
On sprightly coursers prance;
Or for Colean the route is ta’en,
Beneath the moon’s pale beams;
There, up the cove, to stray and rove,
Among the rocks and streams
To sport that night.

Among the bonny winding banks,
Where Doon rins, wimplin’ clear,
Where Bruce ance ruled the martial ranks,
And shook his Carrick spear,
Some merry, friendly, country-folks,
Together did convene,
To burn their nits, and pou their stocks,
And haud their Halloween
Fu’ blithe that night.

The lasses feat, and cleanly neat,
Mair braw than when they’re fine;
Their faces blithe, fu’ sweetly kythe,
Hearts leal, and warm, and kin’;
The lads sae trig, wi’ wooer-babs,
Weel knotted on their garten,
Some unco blate, and some wi’ gabs,
Gar lasses’ hearts gang startin’
Whiles fast at night.

It’s Halloween time

It’s that wonderful time of year again, Halloween! A time of magic, mystery, fun, and all manner of good-natured tomfoolery!

As a kid growing up, Halloween meant going trick-or-treat.  We had costumes, oftentimes homemade, which were pretty cool.  I remember a tiger somewhere in there.

We got to harass our neighbors for food that wasn’t good for us, we got to play tricks on other kids at school, we got to have parties with other kids, and we could get away with some things that we couldn’t at other times of the year.  It was a time for scary stories, for scary movies, and for a generally boo-riffic good time.

As I got older and went to college Halloween was still a time for parties, but of a more adult nature. And now instead of going to other people’s house getting treats, parents were bringing their kids to mine.  I went through many bags of mini-size candybars, candy corn, and other not-so-healthy goodies.

Then there are the Halloween TV specials.  “It’s the Great Pumpkin, Charlie Brown” is a annual favorite.  Other shows that I have enjoyed watching, either by myself or with others (and/or their kids), included the Halloweentown series on the Disney Channel and A Disney Halloween, among others.  There have always been the classic horror movies as well, such as The Mummy and Frankenstein.

So no matter what memories you may have of Halloween or how you choose to celebrate it, I wish you all a wonderful All Hallow’s Eve!

Rest in Peace, Steve Jobs

On Wednesday, October 5, 2011, the world lost a true visionary.

It was with great sadness that I heard of the passing of Steve Jobs, after a long struggle with pancreatic cancer.  He was a impresario in the world of computers and technology, constantly pushing the boundaries, always coming up with “one more thing.”

Seldom has there been an individual that has shaped the course of the technological world in the way that Steve has done.  While everyone may not agree with the way in which he guided Apple, Inc., there can be little doubt in anyone’s mind that his vision of the future has left an indelible mark on the fabric of society.  From the garage of a small house came the seed that sparked a revolution in computers.

What a computer is to me is the most remarkable tool that we have ever come up with. It’s the equivalent of a bicycle for our minds.
– Steve Jobs, 1991

I wish his family and his wife Laurene my condolences in the time of their loss.

Network port troubleshooting with Perl

Recently I had a need to test network communication between two different services over a specific port for a clustered application.  Since I didn’t want to have to initiate an application failover just to test the network communication, I decided to use a simple Perl script to listen for inbound communication on the cluster node being tested from the development environment.

What the code does is to open a specific port for listening.  I used the basic telnet client to send traffic from the source machine (client) to the destination machine (server).

Here are the code listings for the script for both Solaris 10 and AIX 6.1.

Solaris 10

#!/usr/bin/perl -w
 
use strict;
use warnings;
use IO::Socket;
 
# Local host bind address (hostname/ipaddr)
my $LOCALADDR = 10.0.0.1
# Local host bind port
my $PORT = 10240;
 
my $sock = new IO::Socket::INET (
    LocalHost => $LOCALADDR,
    LocalPort => $PORT,
    Proto => 'tcp',
    Listen => 1,
    Reuse => 1,
);
 
die "Could not create socket: $!\n" unless $sock;
 
my $new_sock = $sock->accept();
while(<$new_sock>) {
    print $_;
}
 
close($sock);

AIX 6.1

#!/usr/bin/perl -w
 
use strict;
use warnings;
 
use IO::Socket;
use Net::hostent;              # for OO version of gethostbyaddr
 
# Local host bind address (hostname/ipaddr)
my $LOCALADDR = 10.0.0.1
# Local host bind port
my $PORT = 10240;
 
my $server = IO::Socket::INET->new(
    Proto => 'tcp',
    LocalHost => $LOCALADDR,
    LocalPort => $PORT,
    Listen => 1,
    Reuse => 1 )
or die "can't setup server";
 
print "SERVER Waiting for client connection on port $PORT\n";
 
my $new_sock = $server->accept();
while(<$new_sock>) {
    print $_;
}
 
close($server);

Patch Solaris 10 over NFS

One of the things that many system administrators encounter in the quest for maintaining up-to-date servers is the need to apply regular maintenance releases.  With some operating systems, Mac OS X for instance, the patches are released in two forms:

  • a delta update, which contains only the changes necessary to bring the system up-to-date from the current running release level
  • a combo (cumulative, full, etc.) update, which contains all changes for the current release branch

If you are lucky enough to be using an OS that gives you delta updates then you may not ever run into an issue where you don’t have enough internal drive space to update the OS.  However, if you are running an OS, like Solaris, that uses cumulative clusters then this becomes more interesting.

One situation I recently encountered was a need to patch a Solaris 10 Sparc system that did not have sufficient internal drive space to store the unzipped patch cluster for patching the system in single-user mode.  (You are patching in single-user mode right?)

The most obvious question would be: why not add another drive?  Another obvious question might be: why not patch from cd/dvd?  Well, adding a new drive to this system was not a viable solution since there were no available drives to install.  Installing from DVD would have been a possible solution, if the patches had been unzipped and burned to disc prior to the maintenance window.

The next available option was to install the patches over the network.  When patching a machine in single-user mode this becomes a little more problematic, since network resources and services are not generally available unless the server has been brought up in a multi-user mode.

After bringing the server up in single-user mode the next step was to start SSH and NFS so that the patch cluster could be installed over the NFS share.  Generally with Solaris 10 all you would need to do is execute the following command for both SSH and NFS client:

svcadm enable &lt;service name&gt;

Unfortunately with single-user mode this will fail to work, since the dependent services are not auto-started.  To accomplish this in single-user mode you need to add the -r flag which instructs svcadm to start the service and recursively start the dependent services.  If you want a little more checking, also add the -s flag which tells svcadm to wait for each service to enter an online or degraded state before returning.  Below are the commands for starting SSH and NFS along with the output of a service check to show the state after the command was executed.

SSH

# svcadm enable -rs svc:/network/ssh:default
Reading ZFS config: done.
# svcs -a | grep ssh
online         15:49:26 svc:/network/ssh:default

NFS

# svcadm enable -rs svc:/network/nfs/client:default
# svcs -a | grep nfs
disabled       15:11:34 svc:/network/nfs/cbd:default
disabled       15:11:34 svc:/network/nfs/mapid:default
disabled       15:11:35 svc:/network/nfs/server:default
online         15:50:35 svc:/network/nfs/status:default
online         15:50:35 svc:/network/nfs/nlockmgr:default
online         15:50:35 svc:/network/nfs/client:default
uninitialized  15:11:37 svc:/network/nfs/rquota:default

After this was done all that was left was to mount the exported file system and run the patch cluster installation script.  Since the cluster was not local to the system it took a little longer to install the cluster, but other than that everything went smoothly.