<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span>Hello,</span></div><div><span>Alan, thank you.</span></div><div><span></span> </div><div><span>I can see something better now. </span></div><div><span></span> </div><div><span>[eserica@netflow bin]$ /home/eserica/rancid/bin/h3crancid -d 10.3.4.5<br>executing /home/eserica/rancid/bin/hulogin -t 90 -c"display version ; display current-configuration" 10.3.4.5<br>executing /home/eserica/rancid/bin/hulogin -t 90 -c"display version ; display current-configuration" 10.3.4.5<br>10.3.4.5: missed cmd(s): display current-configuration,display version<br>10.3.4.5: missed cmd(s): display current-configuration,display version<br>10.3.4.5: End of run not found<br>10.3.4.5: End of run not found<br>#</span></div><div><br></div> <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div
style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div dir="ltr"> <div class="hr" style="margin: 5px 0px; padding: 0px; border: 1px solid rgb(204, 204, 204); height: 0px; line-height: 0; font-size: 0px;" contenteditable="false" readonly="true"></div> <font face="Arial" size="2"> <b><span style="font-weight: bold;">From:</span></b> Alan McKinnon <alan.mckinnon@gmail.com><br> <b><span style="font-weight: bold;">To:</span></b> Erica James <jameserica156@yahoo.com> <br><b><span style="font-weight: bold;">Cc:</span></b> rancid shrubbery <rancid-discuss@shrubbery.net> <br> <b><span style="font-weight: bold;">Sent:</span></b> Tuesday, September 17, 2013 11:19 AM<br> <b><span style="font-weight: bold;">Subject:</span></b> Re: [rancid] Rancid-missed cmds<br> </font> </div> <div class="y_msg_container"><br>Ah, I see it now. The PATH is set in rancid.conf correctly so it is<br>available when run from
cron.<br><br>You now need to add it to *your* path so it's available when you run the<br>command on the cli. Add it in your .bashrc or .profile as appropriate,<br>then log out, log in and run the test commands again. If rancid also<br>runs as a different user yu should add the same to that users<br>environment too.<br><br>These steps won't affect how rancid runs on a cron schedule, it will<br>only affect cli commands so our debugging efforts work<br><br><br>On 17/09/2013 08:08, Erica James wrote:<br>> Hello.<br>> I have checked in rancid's PATH.<br>> this is a portion of the rancid.conf file.<br>> BASEDIR=/home/eserica/rancid/var/rancid; export BASEDIR<br>> PATH=/home/eserica/rancid/bin:/usr/bin:.:/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin;<br>> export PATH<br>> <br>> <br>> <br>> *From:* Alan McKinnon <<a href="mailto:alan.mckinnon@gmail.com"
ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>><br>> *To:* Erica James <<a href="mailto:jameserica156@yahoo.com" ymailto="mailto:jameserica156@yahoo.com">jameserica156@yahoo.com</a>><br>> *Cc:* rancid shrubbery <<a href="mailto:rancid-discuss@shrubbery.net" ymailto="mailto:rancid-discuss@shrubbery.net">rancid-discuss@shrubbery.net</a>><br>> *Sent:* Monday, September 16, 2013 10:37 PM<br>> *Subject:* Re: [rancid] Rancid-missed cmds<br>> <br>> On 16/09/2013 16:32, Erica James wrote:<br>>> Alan,<br>>> <br>>> Thank you . Please see the below,<br>>> <br>>> 1. Can telnet to device and authenticate manually<br>>> <br>>> 2. /home/eserica/rancid/bin/hulogin -d 10.3.4.5 logs in successfully,<br>>> and enables properly. Prompt is correct as well<br>>> <br>>> 3. /home/eserica/rancid/bin/hulogin -t 90 -c"display<br>>> current-configuration ;
display version" 10.3.4.5 runs cleanly. commands<br>>> are run neatly. automatic login and logout<br>>> 4.[<a href="mailto:eserica@netflow" ymailto="mailto:eserica@netflow">eserica@netflow</a> <mailto:<a href="mailto:eserica@netflow" ymailto="mailto:eserica@netflow">eserica@netflow</a>> logs]$<br>> /home/eserica/rancid/bin/h3crancid -d 10.3.4.5<br>>> executing hulogin -t 90 -c"display version ; display<br>>> current-configuration" 10.3.4.5<br>>> executing hulogin -t 90 -c"display version ; display<br>>> current-configuration" 10.3.4.5<br>>> sh: hulogin: command not found<br>> <br>> ^^^^^^^^^^^^^^^^^^^^^^^^^^<br>> <br>> You almost certainly do not have "/home/eserica/rancid/bin/" in rancid's<br>> PATH. It is set in $RANCID_DIR/etc/rancid.conf.<br>> <br>> As to why this happened, it is very likely an installation failure.<br>> <br>> Did you install all of
rancid to /home/eserica/rancid, or is that just a<br>> convenient place to put rancid scripts you are testing?<br>> <br>> <br>> The rancid build system works almost perfectly every time. It uses<br>> autotools and is designed to install the entire package to<br>> /usr/local/rancid/ by default and for the scripts to be run by user<br>> "rancid". As with all Unix apps it is sensitive to ownership and<br>> permission errors<br>> <br>> The errors you are getting indicate a faulty install, possibly trying to<br>> do itmanually.<br>> <br>> <br>> <br>> <br>>> 10.3.4.5: missed cmd(s): display current-configuration,display version<br>>> 10.3.4.5: missed cmd(s): display current-configuration,display version<br>>> 10.3.4.5: End of run not found<br>>> 10.3.4.5: End of run not found<br>>> The router.db<br>>> 10.3.4.5:huawei:up<br>>> <br>>> The rancid-fe<br>>>
'huawei' => 'h3crancid',<br>>> <br>>> Don't understand why am getting such an output from<br>>> /home/eserica/rancid/bin/h3crancid -d 10.3.4.5<br>>> Any comments on the above?<br>>> <br>>> Still the same logs.<br>>> <br>>> Eserica<br>>> <br>>><br>>> *From:* Alan McKinnon <<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a><br>> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>>><br>>> *To:* rancid shrubbery <<a href="mailto:rancid-discuss@shrubbery.net" ymailto="mailto:rancid-discuss@shrubbery.net">rancid-discuss@shrubbery.net</a><br>> <mailto:<a href="mailto:rancid-discuss@shrubbery.net"
ymailto="mailto:rancid-discuss@shrubbery.net">rancid-discuss@shrubbery.net</a>>><br>>> *Sent:* Monday, September 16, 2013 4:33 PM<br>>> *Subject:* Re: [rancid] Rancid-missed cmds<br>>><br>>> The approach to fixing this is always the same, at this point nothing<br>>> rancid is outputting helps debug in the slightest - all it says is that<br>>> something went wrong, but we already know that.<br>>><br>>> Do the following:<br>>><br>>> 1. telnet to device and check you can auth manually<br>>> 2. "hulogin <device>" and check it logs in and enables properly, and<br>>> that the prompt etc on the screen is correct<br>>> 3. run "hulogin -t 90 -c"display current-configuration,display version"<br>>> <device>" and check that the commands do actually run correctly<br>>> 4. run "hurancid -d <device>" - this dumps a *complete* log in the<br>>> current
directory containing more info than the regular log you quoted<br>>> and often reveals the problem (but not always).<br>>><br>>><br>>> But first a few prior steps need to be verified:<br>>><br>>> - the command in #3 I pasted from your log output, and that has comma<br>>> separators. Your device might need semicolons, I have no idea as I don;t<br>>> know that vendors stuff<br>>> - the relevant line in router.db must contain the appropriate type<br>>> string in field 3<br>>> - you will have had to edit rancid-fe and add a line for huawei to a<br>>> perl hash. Without this, rancid-run doesn't know what parser script to<br>>> call and it cannot work.<br>>> - the device you have must be supported by the script you are using;<br>>> just because Huawei made it is no guarantee it works similarly to<br>>> anything else they might have
made.<br>>><br>>><br>>> If all of that checks out, then we need to look into the running perl<br>>> itself.<br>>><br>>> I believe we've been over most of this before, I don't recall getting a<br>>> definitive answer. You really do need to go through all these steps as<br>>> given, nothing else is going to get to the root of your problem.<br>>><br>>><br>>><br>>> On 16/09/2013 15:11, Erica James wrote:<br>>>> Hello<br>>>> I have a problem with rancid parsing script. Logs show missed cmd(s).<br>>>> Trying to get all of the configs.<br>>>> 10.3.4.5: missed cmd(s): display current-configuration,display version<br>>>> 10.3.4.5: End of run not found<br>>>> #<br>>>> All routers sucessfully completed.<br>>>> cvs diff: Diffing .<br>>>> cvs diff: Diffing configs<br>>>> cvs commit: Examining
.<br>>>> cvs commit: Examining configs<br>>>><br>>>> The script is for Huawei. The problem now seems to be that rancid is not<br>>>> collecting configs.<br>>>> Anyone with an idea on what to do?<br>>>><br>>>> Below is the rancid-script<br>>>><br>>>> #! /usr/bin/perl<br>>>> ##<br>>>> ## $Id$<br>>>> ##<br>>>> ## rancid 2.3.8<br>>>> ##<br>>>> ## Copyright (C) 1997-2004 by Terrapin Communications, Inc.<br>>>> ## All rights reserved.<br>>>> ##<br>>>> ## This software may be freely copied, modified and redistributed<br>>>> ## without fee for non-commerical purposes provided that this license<br>>>> ## remains intact and unmodified with any RANCID distribution.<br>>>> ##<br>>>> ## There is no warranty or other guarantee of fitness of this software.<br>>>>
## It is provided solely "as is". The author(s) disclaim(s) all<br>>>> ## responsibility and liability with respect to this software's usage<br>>>> ## or its effect upon hardware, computer systems, other software, or<br>>>> ## anything else.<br>>>> ##<br>>>> ## Except where noted otherwise, rancid was written by and is<br>>> maintained by<br>>>> ## Henry Kilmer, John Heasley, Andrew Partan, Pete Whiting, and Austin<br>>>> Schutz.<br>>>> ##<br>>>> #<br>>>> # hurancid - Interface to Huawei devices<br>>>> #<br>>>> # RANCID - Really Awesome New Cisco confIg Differ<br>>>> #<br>>>> # usage: rancid [-d] [-l] [-f filename | $host]<br>>>> #<br>>>> use Getopt::Std;<br>>>> getopts('dfl');<br>>>> $log = $opt_l;<br>>>> $debug = $opt_d;<br>>>> $file =
$opt_f;<br>>>> $host = $ARGV[0];<br>>>> $clean_run = 0;<br>>>> $found_end = 0;<br>>>> $timeo = 90; # hulogin timeout in seconds<br>>>><br>>>> my(%filter_pwds); # password filtering mode<br>>>> # This routine is used to print out the router configuration<br>>>> sub ProcessHistory {<br>>>> my($new_hist_tag,$new_command,$command_string,@string)=(@_);<br>>>> if((($new_hist_tag ne $hist_tag) || ($new_command ne $command))<br>>>> && defined %history) {<br>>>> print eval "$command \%history";<br>>>> undef %history;<br>>>> }<br>>>> if (($new_hist_tag) && ($new_command) &&
($command_string)) {<br>>>> if ($history{$command_string}) {<br>>>> $history{$command_string} =<br>>>> "mailto:$history%7B$command_string%<a href="mailto:7D@string" ymailto="mailto:7D@string">7D@string</a> <mailto:<a href="mailto:7D@string" ymailto="mailto:7D@string">7D@string</a>><br>> <mailto:<a href="mailto:7D@string" ymailto="mailto:7D@string">7D@string</a> <mailto:<a href="mailto:7D@string" ymailto="mailto:7D@string">7D@string</a>>>";<br>>>> } else {<br>>>> $history{$command_string} = "@string";<br>>>> }<br>>>> } elsif (($new_hist_tag) && ($new_command)) {<br>>>> $history{++$#history} = "@string";<br>>>> } else
{<br>>>> print "@string";<br>>>> }<br>>>> $hist_tag = $new_hist_tag;<br>>>> $command = $new_command;<br>>>> 1;<br>>>> }<br>>>><br>>>> sub numerically { $a <=> $b; }<br>>>><br>>>> # This is a sort routing that will sort numerically on the<br>>>> # keys of a hash as if it were a normal array.<br>>>> sub keynsort {<br>>>> local(%lines)=@_;<br>>>> local($i) = 0;<br>>>> local(@sorted_lines);<br>>>> foreach $key (sort numerically keys(%lines)) {<br>>>> $sorted_lines[$i] = $lines{$key};<br>>>> $i++;<br>>>> }<br>>>> @sorted_lines;<br>>>>
}<br>>>><br>>>> # This is a sort routing that will sort on the<br>>>> # keys of a hash as if it were a normal array.<br>>>> sub keysort {<br>>>> local(%lines)=@_;<br>>>> local($i) = 0;<br>>>> local(@sorted_lines);<br>>>> foreach $key (sort keys(%lines)) {<br>>>> $sorted_lines[$i] = $lines{$key};<br>>>> $i++;<br>>>> }<br>>>> @sorted_lines;<br>>>> }<br>>>><br>>>> # This is a sort routing that will sort on the<br>>>> # values of a hash as if it were a normal array.<br>>>> sub valsort{<br>>>> local(%lines)=@_;<br>>>> local($i) = 0;<br>>>> local(@sorted_lines);<br>>>> foreach $key (sort
values %lines) {<br>>>> $sorted_lines[$i] = $key;<br>>>> $i++;<br>>>> }<br>>>> @sorted_lines;<br>>>> }<br>>>><br>>>> # This is a numerical sort routing (ascending).<br>>>> sub numsort {<br>>>> local(%lines)=@_;<br>>>> local($i) = 0;<br>>>> local(@sorted_lines);<br>>>> foreach $num (sort {$a <=> $b} keys %lines) {<br>>>> $sorted_lines[$i] = $lines{$num};<br>>>> $i++;<br>>>> }<br>>>> @sorted_lines;<br>>>> }<br>>>><br>>>> # This is a sort routine that will sort on the<br>>>> # ip address when the ip address is anywhere in<br>>>> # the
strings.<br>>>> sub ipsort {<br>>>> local(%lines)=@_;<br>>>> local($i) = 0;<br>>>> local(@sorted_lines);<br>>>> foreach $addr (sort sortbyipaddr keys %lines) {<br>>>> $sorted_lines[$i] = $lines{$addr};<br>>>> $i++;<br>>>> }<br>>>> @sorted_lines;<br>>>> }<br>>>><br>>>> # These two routines will sort based upon IP addresses<br>>>> sub ipaddrval {<br>>>> my(@a) = ($_[0] =~ m#^(\d+)\.(\d+)\.(\d+)\.(\d+)$#);<br>>>> $a[3]+256*($a[2]+256*($a[1]+256*$a[0]));<br>>>> }<br>>>> sub sortbyipaddr {<br>>>> &ipaddrval($a) <=> &ipaddrval($b);<br>>>> }<br>>>><br>>>><br>>>> # This routine
processes a "show configuration"<br>>>> # This routine processes a "show configuration"<br>>>> sub WriteTerm {<br>>>> print STDERR " In WriteTerm: $_" if ($debug);<br>>>> #my($lineauto) = 0;<br>>>><br>>>> while (<INPUT>) {<br>>>> #print STDERR "History $_\n";<br>>>> <br>>>> tr/\015//d;<br>>>> last if(/^$prompt/);<br>>>> next if (/^(\s*|\s*$cmd\s*)$/);<br>>>> return(1) if (/^\s*\^\s*$/);<br>>>> return(1) if (/Line has invalid autocommand /);<br>>>> return(1) if (/(Invalid (input|command) detected|Type help or<br>> )/i);<br>>>> return(-1) if (/command authorization
failed/i);<br>>>> # the pager can not be disabled per-session on the PIX<br>>>> if (/^(<-+ More -+>)/) {<br>>>> my($len) = length($1);<br>>>> s/^$1\s{$len}//;<br>>>> }<br>>>> <br>>>> /^/ && next;<br>>>> ProcessHistory("COMMENTS","keysort","B1","# $_") && next;<br>>>> }<br>>>><br>>>> # end of config...is a comment.<br>>>> if (/^return/i) {<br>>>> $found_end = 1;<br>>>> return(1);<br>>>> }<br>>>> <br>>>>
return(0);<br>>>> }<br>>>><br>>>> # This routine copies everything with precefing "#"<br>>>> sub CopyComment {<br>>>> print STDERR " In CopyComment: $_" if ($debug);<br>>>><br>>>> while (<INPUT>) {<br>>>> tr/\015//d;<br>>>> last if (/^$prompt/);<br>>>><br>>>> ProcessHistory("","","","# $_");<br>>>> # end of config<br>>>> }<br>>>> return(0);<br>>>> }<br>>>><br>>>> # filter out "uptime" lines<br>>>> sub FilterUptime {<br>>>> print STDERR " In FilterUptime: $_" if ($debug);<br>>>><br>>>> while (<INPUT>) {<br>>>>
tr/\015//d;<br>>>> last if (/^$prompt/);<br>>>> #nmeongeza<br>>>> next if (/^(\s*|\s*$cmd\s*)$/);<br>>>> return(-1) if (/command authorization failed/i);<br>>>> /^VERSION\=>(\s+.*)$/ &&<br>>>> ProcessHistory("COMMENTS","keysort","C1","\#\n# Version: $1\n")<br>>>> && next;<br>>>> /^PATCH\=>(\s+.*)$/ &&<br>>>> ProcessHistory("COMMENTS","keysort","C2","\# Patch: $1\n")<br>>>> && next;<br>>>><br>>>> /^PRODUCT\=>(\s+.*)$/ &&<br>>>> ProcessHistory("COMMENTS","keysort","C3","\# Version: $1\n")<br>>>> && next;<br>>>> }<br>>>> return(0);<br>>>>
}<br>>>><br>>>><br>>>> # dummy function<br>>>> sub DoNothing {print STDOUT;}<br>>>><br>>>> # Main<br>>>> @commandtable = (<br>>>> {'display version' => 'FilterUptime'},<br>>>> {'display patch-information' => 'CopyComment'},<br>>>> {'display device' => 'CopyComment'},<br>>>> {'display device pic-status' => 'CopyComment'},<br>>>> {'display current-configuration' => 'WriteTerm'},<br>>>> );<br>>>><br>>>> # Use an
array to preserve the order of the commands and a hash for<br>>> mapping<br>>>> # commands to the subroutine and track commands that have been completed.<br>>>> @commands = map(keys(%$_), @commandtable);<br>>>> %commands = map(%$_, @commandtable);<br>>>><br>>>> $huaw_cmds=join(";",@commands);<br>>>> $cmds_regexp=join("|",@commands);<br>>>><br>>>> open(OUTPUT,">$host.new") || die "Can't open $host.new for writing:<br>> $!\n";<br>>>> select(OUTPUT);<br>>>> # make OUTPUT unbuffered if debugging<br>>>> if ($debug) { $| = 1; }<br>>>><br>>>> if ($file) {<br>>>> print STDERR "opening file $host\n" if ($debug);<br>>>> print STDOUT "opening file $host\n" if ($log);<br>>>> open(INPUT,"<$host") || die "open failed for $host: $!\n";<br>>>> } else
{<br>>>> print STDERR "executing hulogin -t $timeo -c\"$huaw_cmds\" $host\n"<br>>>> if ($debug);<br>>>> print STDOUT "executing hulogin -t $timeo -c\"$huaw_cmds\" $host\n"<br>>>> if ($debug);<br>>>> if (defined($ENV{NOPIPE}) && $ENV{NOPIPE} =~ /^YES/i) {<br>>>> system "hulogin -t $timeo -c \"$huaw_cmds\" $host </dev/null ><br>>>> $host.raw" || die "hulogin failed for $host: $!\n";<br>>>> open(INPUT, "< $host.raw") || die "hulogin failed for $host:<br>> $!\n";<br>>>> } else {<br>>>> open(INPUT,"hulogin -t $timeo -c \"$huaw_cmds\" $host </dev/null<br>>>> |") || die "hulogin failed for $host: $!\n";<br>>>> }<br>>>> }<br>>>><br>>>> # determine password
filtering mode<br>>>> if ($ENV{"FILTER_PWDS"} =~ /no/i) {<br>>>> $filter_pwds = 0;<br>>>> } elsif ($ENV{"FILTER_PWDS"} =~ /all/i) {<br>>>> $filter_pwds = 2;<br>>>> } else {<br>>>> $filter_pwds = 1;<br>>>> }<br>>>><br>>>> ProcessHistory("","","","#RANCID-CONTENT-TYPE: Huawei\n#\n");<br>>>> ProcessHistory("COMMENTS","keysort","B0","#\n");<br>>>> ProcessHistory("COMMENTS","keysort","F0","#\n");<br>>>> ProcessHistory("COMMENTS","keysort","G0","#\n");<br>>>> TOP: while(<INPUT>) {<br>>>> tr/\015//d;<br>>>><br>>>> #print STDERR ("CMD: $_\n");<br>>>> <br>>>> if (/\>\s?quit.*$/) {<br>>>> $clean_run=1;<br>>>>
last;<br>>>> }<br>>>><br>>>> if (/^Error:/) {<br>>>> print STDOUT ("$host hulogin error: $_");<br>>>> print STDERR ("$host hulogin error: $_") if ($debug);<br>>>> $clean_run=0;<br>>>> last;<br>>>> }<br>>>> <br>>>> while (/\>\007*\s*($cmds_regexp)\s*$/) {<br>>>> $cmd = $1;<br>>>><br>>>> if (!defined($prompt)) {<br>>>> $prompt = ($_ =~ /^([^>]+\>)/)[0];<br>>>> $prompt =~ s/([][}{)(file://])///$1/g;<br>>>> print STDERR ("PROMPT MATCH: $prompt\n") if ($debug);<br>>>>
}<br>>>> print STDERR ("HIT COMMAND:$_") if ($debug);<br>>>> if (! defined($commands{$cmd})) {<br>>>> print STDERR "$host: found unexpected command - \"$cmd\"\n";<br>>>> $clean_run = 0;<br>>>> last TOP;<br>>>> }<br>>>> $rval = &{$commands{$cmd}};<br>>>> delete($commands{$cmd});<br>>>> if ($rval == -1) {<br>>>> $clean_run = 0;<br>>>> last TOP;<br>>>> }<br>>>> }<br>>>> }<br>>>> print STDOUT "Done
$logincmd: $_\n" if ($log);<br>>>> # Flush History<br>>>> ProcessHistory("","","","");<br>>>> # Cleanup<br>>>> close(INPUT);<br>>>> close(OUTPUT);<br>>>><br>>>> if (defined($ENV{NOPIPE})) {<br>>>> #unlink("$host.raw") if (! $debug);<br>>>> }<br>>>> # check for completeness<br>>>> if (scalar(%commands) || !$clean_run || !$found_end) {<br>>>> if (scalar(%commands)) {<br>>>> printf(STDOUT "$host: missed cmd(s): %s\n", join(',',<br>>>> keys(%commands)));<br>>>> printf(STDERR "$host: missed cmd(s): %s\n", join(',',<br>>>> keys(%commands))) if ($debug);<br>>>> }<br>>>> if (!$clean_run || !$found_end) {<br>>>> print STDOUT "$host: End of run not
found\n";<br>>>> print STDERR "$host: End of run not found\n" if ($debug);<br>>>> system("/usr/bin/tail -1 $host.new");<br>>>> }<br>>>> #unlink "$host.new" if (! $debug);<br>>>> }<br>>>><br>>>><br>>><br>>><br>>> --<br>>> Alan McKinnon<br>>> <a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>><br>> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>>><br>>><br>>>
_______________________________________________<br>>> Rancid-discuss mailing list<br>>> <a href="mailto:Rancid-discuss@shrubbery.net" ymailto="mailto:Rancid-discuss@shrubbery.net">Rancid-discuss@shrubbery.net</a> <mailto:<a href="mailto:Rancid-discuss@shrubbery.net" ymailto="mailto:Rancid-discuss@shrubbery.net">Rancid-discuss@shrubbery.net</a>><br>> <mailto:<a href="mailto:Rancid-discuss@shrubbery.net" ymailto="mailto:Rancid-discuss@shrubbery.net">Rancid-discuss@shrubbery.net</a> <mailto:<a href="mailto:Rancid-discuss@shrubbery.net" ymailto="mailto:Rancid-discuss@shrubbery.net">Rancid-discuss@shrubbery.net</a>>><br>>> <a href="http://www.shrubbery.net/mailman/listinfo/rancid-discuss" target="_blank">http://www.shrubbery.net/mailman/listinfo/rancid-discuss</a><br>>><br>>><br>> <br>> <br>> -- <br>> Alan McKinnon<br>> <a href="mailto:alan.mckinnon@gmail.com"
ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a> <mailto:<a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a>><br>> <br>> <br>> <br><br><br>-- <br>Alan McKinnon<br><a href="mailto:alan.mckinnon@gmail.com" ymailto="mailto:alan.mckinnon@gmail.com">alan.mckinnon@gmail.com</a><br><br><br><br></div> </div> </div> </div></body></html>