[advertisement]

Interested in putting your ad here?

Blog Entry

4th March 2004
Send to twitter Send to Facebook
My trusty computer companion of the last five years, Marian, has been replaced by a new hottie, Hillary. Marian, an aging celeron 400Mhz/256M/40G running RedHat 7.3, serviced me well, doing sendmail/fetchmail/web/mysql/perl developement chores. But times change and so must I. Hillary is a Athlon XP 2600 Barton 1.9Ghz/512M/80G RedHat 9.0 system that now runs everything like Marian used to -- BUT FASTER. So, hail Hillary.

A few notes:

  • My initial experiences with RedHat 9.0 bolster my long standing suspicion that RedHat hates Perl. Out of the box, perl 5.8.0 had trouble writing makefiles. This is related to a unicode issue that may be solved by setting one's environment variable to LANG=en_US. Rasberries to RedHat.
  • New Egg is a good place to buy computer parts CHEAP. I assembled Hillary from parts costing $343, including shipping & handling. The 400W power supply came with the LED-enhanced mid-tower case for $29. I bought the Biostart motherboard (LAN/Video/Audio on board) for $56. The CPU was $90. The 512MB DRR PC-2100 RAM was $72. The 80G Maxtor/ATA133 was $66. Good stuff. Unforuntately, debian's current stable release, Woody, is too freakin' old to recognized the onboard LAN. This makes it hard to use apt-get. Perhaps the fine folks running debian might consider shipping a 2.4 kernel before the 2.6 comes out. Woody ships with a 2.2 kernel from 2002.
  • I've taken to keeping a lot of system-y things in my home directory, like my DNS files and mon. This turns out to be really useful when you need to rsync your home directory. I also have a crazy perl script that starts personal services, like ssh tunnels, VNC, apache and mon. As a kind of a kludge, a cron job attempts to rerun the script every 2 minutes to make sure that these services are running, even if the machine is rebooted. I've included the script below, in case someone is interested. It's essentially a steroid-enhanced version of a shell script.

File: setup_jjohn #!/usr/bin/env perl # -*-cperl-*- # # start|stop processes that I need # use strict; use warnings; use File::Basename; use Getopt::Std; our $HOME = "/home/jjohn"; our $LASTRUN = "$HOME/etc/.jjohn_setup"; our %PROCS = ( '01 SSH tunnels' => { start => "$HOME/etc/ssh_mail_tunnel start", stop => "$HOME/etc/ssh_mail_tunnel stop", }, '02 MON' => { start => "$HOME/etc/mon/start_mon", stop => "killall mon", }, '99 VNC' => { start => "$HOME/bin/start_vnc", stop => "/usr/bin/vncserver -kill :1", }, '04 Fetchmail' => { start => "/usr/bin/fetchmail", stop => "killall fetchmail", }, '03 Apache'=> { start => "/usr/bin/sudo $HOME/src/apache-current/bin/apachectl start", stop => "/usr/bin/sudo $HOME/src/apache-current/bin/apachectl stop", }, ); my $opts = {}; getopts('h?fv', $opts); $|++; my $action = (lc pop @ARGV) || 'start'; my %dispatch = ( 'stop' => \&stop, 'start' => \&start, 'usage' => \&usage, 'status' => \&status, ); $action = 'usage' if $opts->{'?'} || $opts->{'h'}; if (exists $dispatch{$action}) { $dispatch{$action}->($opts); } else { start($opts); } exit; #--------------------------------------------------------------------- sub start { my ($opts) = @_; # Skip the LASTRUN check if the force flag is set unless ($opts->{f}) { # compare the boot time (/var/lock/subsys/local) to our last runtime if (-e $LASTRUN) { my $sysboot = (stat "/var/lock/subsys/local")[9]; my $lastrun = (stat $LASTRUN)[9]; # if we have run after system boot, bail if ($lastrun > $sysboot) { warn "Already ran since boot. Halting.\n" if $opts->{v}; return; } } } for my $proc (sort keys %PROCS) { printf "Starting %-25s:", $proc if $opts->{v}; my $ok = "OK"; if (system("$PROCS{$proc}->{start} 2>&1 > /dev/null")) { $ok = "FAILED"; } printf "%15s\n", $ok if $opts->{v}; } # print out PID to LASTRUN open my $pid, ">$LASTRUN" or die "can't open '$LASTRUN': $!\n"; select(((select $pid) => $|++)[0]); print $pid $$; close $pid; } # stop the services above sub stop { my ($opts) = @_; for my $proc (reverse sort keys %PROCS) { printf "Stopping %-25s:", $proc if $opts->{v}; my $ok = "OK"; if (system("$PROCS{$proc}->{stop} 2>&1 > /dev/null")) { $ok = "FAILED"; } printf "%15s\n",$ok if $opts->{v}; } unlink $LASTRUN; } sub usage { my $name = basename $0; print "$name - control services for jjohn USAGE: $name [OPTIONS] [ACTION] \$ $name -v start # start services with verbosity \$ $name stop # stop services silently \$ $name status # show boot time vs. last run of this program OPTIONS: h print this screen ? print this screen f force start, regardless of LASTRUN file v turn on verbose messages "; } sub status { my ($opts) = @_; my $lastrun = (stat $LASTRUN)[9]; my $boot = (stat "/var/lock/subsys/local")[9]; my $name = basename $0; my $ltime = (defined $lastrun) ? scalar localtime($lastrun) : "NEVER RUN"; my $btime = scalar localtime($boot); printf "%16s: %-20s\n%16s: %-20s\n", "system boot", $btime, "$name ran", $ltime; }

[Original use.perl.org post and comments.]

Blog archives

+ About this blog