From: G V Raju (rajugv@INGVYSYABANK.COM)
Date: Wed Jan 07 2004 - 19:21:55 EST
Thanks to BV and Spencer Johnson
Regards
G V Raju
ING Vysya Bank - Data Center
-----Original Message-----
From: Spencer Johnson [mailto:Spencer.Johnson@2020LOG.COM]
Sent: Thursday, January 08, 2004 5:45 AM
To: aix-l@Princeton.EDU
Subject: Handy Control Book Script for AIX
Hi All,
As a follow up to post by Bill Versal I have a handy script for mapping out
the whole system, effectively a stretched out mksysb. I find it very handy
for quick reference when off site for configuration settings etc.
Have fun.
Spencer Johnson
Caudwell Distribution Group
#!/bin/ksh
#
# AIX Control Book for rs6000 Server
#
# Knocked together by Spencer Johnson
# Caudwell Distribution Group
#
#
book ()
{
title ()
{
echo
"\n\n_______________________________________________________________________
____________________"
echo "\n "$TITLE
echo
"\n_________________________________________________________________________
__________________\n\n"
}
# Set up Variables
lspv | grep vpath >/dev/null 2>&1
if [ $? -ne 0 ];then
export DISK=hdisk
else
export DISK=vpath
fi
echo "##############################"
echo "# AIX Control Book Creation #"
echo "##############################\n\n"
date
echo "\n\n\n C O N F I G U R A T I O N S U M M A R Y O U T P U
T\n\n\n"
echo "\n\nHostname: " `/bin/hostname -s`
echo "\n\nTime config_ run: " `/bin/date`
TITLE="PROCESSOR TYPE";title
TYPE=`uname -m|cut -c9-10`
NAME="Risc System/6000 Model ID:"
echo "$NAME $TYPE"
TITLE="LIST OF SYSTEM RESOURCES"; title
lsattr -EHl sys0
TITLE="PHYSICAL / LOGICAL {{ AVAILABLE }} DEVICE DETAILS ";title
lsdev -C | /bin/grep Available
TITLE="PHYSICAL / LOGICAL {{ DEFINED }} DEVICE DETAILS" ;title
lsdev -C |grep Defined|sort +3 -r
TITLE="LIST OF ADAPTERS ON SYSTEM";title
lsdev -Cc adapter
TITLE="HOT-PLUGGABLE DEVICES & SLOT NUMBERS";title
lsslot -c pci 1 2
if [ `lsdev -Cc tape|wc -l|awk '{print $1}'` -gt 0 ]
then
TITLE="LIST OF TAPE DRIVES";title
lsdev -Cc tape
TITLE="TAPE DRIVE BLOCK SIZES";title
lsdev -Cc tape|awk '{print $1}'|while read tape
do
block=`lsattr -El $tape|grep block|awk '{print $2}'`
echo "TAPE DRIVE: $tape BLOCK SIZE: $block"
done
fi
TITLE="DUMP DEVICES";title
sysdumpdev -l
TITLE="ESTIMATED DUMP SIZE";title
sysdumpdev -e
TITLE="NORMAL BOOTLIST";title
bootlist -m normal -o
TITLE="SERVICE BOOTLIST";title
bootlist -m service -o
TITLE="List of VPD (Vital Product Data)";title
lscfg -vp ; echo
TITLE="LICENSED PROGRAM PRODUCT HISTORY" ;title
/usr/bin/lslpp -h
TITLE="List of Installed AIX Programs (CS Format)"; title
lslpp -lc
TITLE="List of Installed AIX Programs"; title
lslpp -La
TITLE="List of Installed Patches and Fixes"; title
instfix -i| grep ML
TITLE="OS LICENSES"; title
lslicense
TITLE="DISKS ON SYSTEM";title
lsdev -Cc disk
TITLE="PAGING SPACES" ;title
lsps -a
TITLE="LIST OF MEMORY ON THE SYSTEM"; title
lsdev -Cc memory ; echo
lsattr -El sys0 -a realmem ; echo
lsattr -El mem0 ; echo
TITLE="SSA / DISK INFORMATION"; title
case `lsdev -Cc pdisk|wc -l|awk '{print $1}'` in
0 )
;;
* )
hdisks=`lsdev -Cc disk | grep SSA | cut -f1 -d" "`
hdisks=`lsdev -Cc disk -s ssar -F name`
pdisks=`lsdev -Cc pdisk | cut -f1 -d" "`
pdisks=`lsdev -Cc pdisk -F name`
touch /tmp/hdisk.$$ # Temporary file - hdisk & SN
touch /tmp/pdisk.$$ # Temporary file - pdisk & SN
touch /tmp/locn.$$
for i in $hdisks
do
print -n "$i " >> /tmp/hdisk.$$
lsattr -El $i -a connwhere_shad | cut -c20-27 >> /tmp/hdisk.$$
done
for i in $pdisks
do
print -n "$i " >> /tmp/pdisk.$$
lsattr -El $i -a connwhere_shad | cut -c20-27 >> /tmp/pdisk.$$
done
for i in $pdisks
do
print -n "$i " >> /tmp/locn.$$
serno=`lsattr -El $i -a connwhere_shad | cut -c20-27`
loc=`lscfg -vl $i|grep $i|cut -c 32-33`
echo $serno $loc >> /tmp/locn.$$
done
for i in $pdisks
do
print -n "$i " >> /tmp/encl.$$
serno=`lsattr -El $i -a connwhere_shad | cut -c20-27`
enc=`lscfg -vl $i|grep $i|cut -c 27-30`
echo $serno $enc >> /tmp/encl.$$
done
# Print header
print "hdisk\tpdisk\tEncl Loc\tSize (MB)\tSerial Number\tPVID\t\t\tVG"
echo "-----\t-----\t--------\t---------\t-------------\t----\t\t\t--"
# Get PVID and VG for each hdisk and print it out
for i in $hdisks
do
sn=`grep $i /tmp/hdisk.$$ | cut -f2 -d" "`
sn=`grep "$i " /tmp/hdisk.$$ | awk '{ print $2 }'`
pdisk=`grep $sn /tmp/pdisk.$$ | cut -f1 -d" "`
pdisk=`grep $sn /tmp/pdisk.$$ | awk '{ print $1 }'`
locn=`grep $sn /tmp/locn.$$ | cut -f3 -d" "`
locn=`grep $sn /tmp/locn.$$ | awk '{ print $3 }'`
encl=`grep $sn /tmp/encl.$$ | cut -f3 -d" "`
encl=`grep $sn /tmp/encl.$$ | awk '{ print $3 }'`
pvid=`lspv | grep $i | sed -e 's/ \{2,\}/ /g' | cut -f2 -d" "`
pvid=`lspv | grep "$i " | awk '{ print $2 }'`
vg=`lspv | grep $i | sed -e 's/ \{2,\}/ /g' | cut -f3 -d" "`
vg=`lspv | grep "$i " | awk '{ print $3 }'`
size=`lsattr -l $i -E|grep size |awk '{print $2}'`
print "$i\t$pdisk\t$encl $locn \t$size\t\t$sn\t$pvid\t$vg"
done
# rm /tmp/pdisk.$$ /tmp/hdisk.$$
if [ -f /tmp/sysinfo/ls7133 ]
then
echo "\nSSA CABLING DIAGRAM"
echo "-------------------"
/tmp/sysinfo/ls7133 |grep '|'
else
continue
fi
continue
;;
esac
TITLE="List of Volume Groups and Related information"; title
lsvg | while read VG
do
echo "\n\n####################################### $VG
#################################################"
TITLE="lsvg $VG" ; title
lsvg $VG
TITLE="lsvg -p $VG" ; title
lsvg -p $VG
TITLE="lsvg -l $VG" ; title
lsvg -l $VG
done
TITLE="List all Physical Volumes (PVs)";title
if [ $DISK = "vpath" ];then
for type in vpath hdisk
do
echo;lspv | grep $type;echo
lspv|grep $type| while read disk id vg
do
echo "\n\n#######################################
$disk #################################################"
if [ $vg != "None" ] ; then
TITLE="lspv $disk";title
lspv $disk
TITLE="lspv -l $disk";title
lspv -l $disk
TITLE="lspv -p $disk";title
lspv -p $disk
fi
done
done
TITLE="/usr/bin/datapath query device ";title
/usr/bin/datapath query device
TITLE="/usr/bin/lsvp -a";title
/usr/bin/lsvp -a
TITLE="/usr/bin/lsvp -d";title
/usr/bin/lsvp -d|grep -v "checking device "
TITLE="/usr/bin/lsess ";title
/usr/bin/lsess
TITLE="/usr/bin/lssdd ";title
/usr/bin/lssdd
TITLE="/usr/bin/ls2105";title
/usr/bin/ls2105
else
lspv|grep $DISK| while read disk id vg
do
echo "\n\n####################################### $disk
#################################################"
if [ $vg != "None" ] ; then
TITLE="lspv $disk" ; title
lspv $disk
TITLE="lspv -l $disk" ; title
lspv -l $disk
TITLE="lspv -p $disk" ; title
lspv -p $disk
TITLE="lqueryvg -AtP -p /dev/$disk" ; title
lqueryvg -AtP -p /dev/$disk
fi
done
fi
TITLE="Relationship Between pdisks and hdisks" ; title
for i in $(lsdev -CS1 -cpdisk -sssar -F name)
do
echo "$i: "$(ssaxlate -l $i)
done
TITLE="List of Logical Volume Details";title
lsdev -C|grep "Logical volume"|while read LV rest
do
echo "\n\n####################################### $LV
#################################################"
TITLE="lslv $LV " ; title
lslv $LV
TITLE="lslv -l $LV " ; title
lslv -l $LV
TITLE="lslv -m $LV " ; title
lslv -m $LV
TITLE="getlvcb -AT $LV" ; title
getlvcb -AT $LV
done
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
banner LVM CHECKING
echo "\n\n\n*******************************************"
echo "*** LVM CHECKING ***"
echo "*******************************************\n\n\n"
LV_LIST=`lsvg -o | lsvg -il|grep -v ':'|grep -v 'LV NAME'|awk '{print $1}'`
echo "Checking LV mirroring, mirror strictness, mirror parallel schedule
policy .........."
for LV in $LV_LIST
do
############################
# Check if LV is mirrored #
############################
count=`lslv -m $LV| grep -v ':'| grep -v LP| sed -n 1p |wc -w`
if [ $count -gt 3 ]
then
#####################################################
# If it is mirrored then check for strict mirroring #
#####################################################
lslv -m $LV|grep -v ':'|grep -v LV| awk '$3 == $5 {print "WARNING
'$LV' LP "$1" is not strictly mirrored"}'
###########################################
# Now check for Paralell mirror scheduling#
###########################################
sched_pol=`lslv $LV | grep SCHED|awk '{print $5}'`
if [ $sched_pol != "parallel" ]
then
echo "WARNING $LV is set to mirror in $sched_pol mode not parallel"
echo "WARNING This could have a performance impact please
investigate"
fi
else
echo "WARNING $LV is not mirrored please investigate"
fi
done
echo "Checking all LVs are syncd............"
for LV in $LV_LIST
do
#######################################
# Check all LVs are syncd #
#######################################
SYNCSTATE=`lslv $LV| grep 'LV STATE:'| awk '{print $6}'| cut -d"/" -f2`
if [ $SYNCSTATE != "syncd" ]
then
echo "Warning $LV is not syncd please investigate"
fi
done
echo "Checking jfslog LVs have mirror write consistency set off for
performance."
JFSLOG_LIST=`lsvg -o | lsvg -il |grep jfslog| awk '{print $1}'`
for jfslog in $JFSLOG_LIST
do
MWC=`lslv $jfslog | grep CONSIST| awk '{print $4}'`
if [ $MWC != "off" ]
then
echo "WARNING the jfslog $jfslog has Mirror Write Consistency on"
echo "This may have performance implications please investigate"
fi
done
###########################
# Volume Group Checks #
###########################
echo "Checking Quorum settings.........."
VG_LIST=`lsvg -o`
for VG in $VG_LIST
do
NUM_PV=`lspv | grep $VG|wc -l`
if [ $NUM_PV -lt 3 ]
then
QUOR=`lsvg $VG|grep QUOR|awk '{print $5}'`
if [ $QUOR -gt 1 ]
then
# Quorum is on
echo "WARNING There are only $NUM_PV PVs in $VG and Quorum is set
on"
fi
else
QUOR=`lsvg $VG|grep QUOR|awk '{print $5}'`
ODD_EVEN=`expr $NUM_PV - $NUM_PV / 2 \* 2`
if [ $QUOR -lt 2 ]
then
# Quorum must be off
echo "WARNING There are $NUM_PV PVs in $VG and Quorum is set off"
if [ $ODD_EVEN -eq 0 ]
then
# There are an even number of PVs
echo "There are an even number of PVs in $VG so this may be"
echo "OK if it is mirrored across SSA drawers"
else
# There are an odd number of PVs
echo "There are an odd number of PVs in $VG so investigate"
fi
else
# Quorum must be on
if [ $ODD_EVEN -eq 0 ]
then
echo "WARNING There are an even number of PVs in $VG and Quorum
is on"
echo "WARNING if these disks are mirrored across SSA drawers
please investigate"
echo "WARNING as this may cause a problem in the event of a
drawer failure"
fi
fi
fi
done
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
TITLE="MOUNTED FILESYSTEMS" ;title
mount
TITLE="Document the File Systems";title
lsfs ; echo
lsjfs ; echo
TITLE="Document the Disk Allocation";title
df -kv
TITLE="Document the filesystems";title
cat /etc/filesystems
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
TITLE="Running WIT Program";title
# Page Space(s)
echo "\n\n";lsps -a | awk 'BEGIN {
getline;
print $0
print "---------- --------------- ------------ ------ -----
------ ---- ----"
}
{ # ON EVERY RECORD
print $0
sum += $4
}
END {
print " ------"
if ( sum < 1000 ) {
printf("
%5d MBytes\n\n", sum)
}
else {
printf("
%5d GBytes\n\n", sum/1000)
}
}'
# Volume Group, LVM and Filesystems
for vg in `lsvg`
do
echo "Volume Group: "$vg
echo " PP Size: "`lsvg $vg | grep "PP SIZE" | awk '{ print $6
}'`" MBytes/PP"
for pv in `lsvg -p $vg | sed 1,2d | awk '{ print $1 }'`
do
echo "$pv `lspv $pv | fgrep 'FREE PP' | tr -d ":" | sed
's/ //'`" | awk '{
printf(" %8s: %s %s %s %s %s %s
%s\n",$1,$4,$2,$3,$5,$6,$7,$8)
}'
done | awk '{
gsub(/\(/,"",$5)
gsub(/\)/,"",$6)
sum += $5
printf(" %8s%5s %s %s =%6s MB\n",$1,$2,$3,$4,$5)
}
END {
printf(" ------\n")
printf(" %6s MBytes\n",sum)
# drr #
}'
echo "\nFilesystems: Total (KB) Free (KB)
%Free"
echo " ---------- ---------
-----"
lsvg -l $vg | grep "jfs "|grep -v N\/A | awk '{ print $7 }' |
xargs -n1 df -k | grep -v Filesystem| awk '
$2 > 0 {
printf ("%-30s%12d%12d%7d%%\n",$7,$2,$3,$3/$2*100)
total += $2
free += $3
}
END {
print(" ----------
---------")
printf(" %10d
%9d\n\n",total,free)
}'
done
# Installed Memory
echo "Memory Config:\n"
for mem in `$LSCFG -v | grep mem[0-7] | cut -c3-6`
do
$LSATTR -l $mem -E | awk '/^size/ { printf("%4d MByte memory
card\n", $2);
}'
done
$LSATTR -l sys0 -E | awk '/realmem/ { printf("----\n%4d MBytes Total
Memory",
$2/1024); }'
echo "; \c"
/usr/bin/rmss -p
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~###
TITLE="Document the paging space activation";title
cat /etc/swapspaces
TITLE="DOCUMENT ALL PRINTERS";title
function is_ext {
if [[ -x /usr/lib/lpd/pio/etc/piolsvp ]]
then
/usr/lib/lpd/pio/etc/piolsvp -p 2>/dev/null
else
/usr/bin/lsallq
fi
}; is_ext
TITLE="Printer Configuration File /etc/qconfig";title
cat /etc/qconfig
TITLE="Document the network printing";title
cat /etc/hosts.lpd
TITLE="Document the users on the system";title
lsuser -c ALL|grep -v ^#
TITLE="Document the Security settings";title
echo "cat /etc/security/login.cfg"
TITLE="cat /etc/security/group";title
cat /etc/security/group
TITLE="cat /etc/security/limits";title
cat /etc/security/limits
TITLE="cat /etc/security/user";title
cat /etc/security/user
TITLE="cat /etc/security/passwd" ;title
cat /etc/security/passwd
TITLE="cat /etc/passwd" ; title
cat /etc/passwd
TITLE="cat /etc/group" ;titile
cat /etc/group
TITLE="cat /usr/lib/security/mkuser.default";title
cat /usr/lib/security/mkuser.default
TITLE="cat /usr/lib/security/mkuser.sys";title
cat /usr/lib/security/mkuser.sys
TITLE="Document the valid group attributes";title
lsgroup -c ALL | sed '/^#.*/d' | tr ':' '\011'
TITLE="List ALL System Resouces";title
lssrc -a ; echo
TITLE="RC.SHUTDOWN FILE";title
cat /etc/rc.shutdown
TITLE="INETD.CONF FILE";title
cat /etc/inetd.conf
TITLE="SENDMAIL.CF FILE";title
cat /etc/sendmail.cf
TITLE="SYSLOG.CONF FILE";title
cat /etc/syslog.conf
TITLE="RC.LOCAL FILE";title
cat /usr/local/etc/rc.local
TITLE="Document the system wide profile";title
cat /etc/security/.profile
TITLE="Document the system wide environment";title
cat /etc/environment
TITLE="Document the cron jobs";title
for cron in `ls -1 /var/spool/cron/crontabs/`
do
echo
"\n###################################################################"
echo
"###################################################################"
echo "Cron Listing for User $cron"
echo
"###################################################################"
echo
"###################################################################"
cat /var/spool/cron/crontabs/$cron ; echo
done
TITLE="Document the system startup file";title
cat /etc/inittab
TITLE="Document the hostnames";title
cat /etc/hosts
TITLE="Document the remote login authority";title
cat /etc/hosts.equiv
if [ -f /etc/resolv.conf ]
then
TITLE="Document the /etc/resolv.conf file";title
cat /etc/resolv.conf
fi
if [ -f /etc/netsvc.conf ]
then
TITLE="Document the /etc/netsvc.conf file";title
cat /etc/netsvc.conf
fi
TITLE="Listing of /dev";title
ls -l /dev
TITLE="LISTING OF NETWORK INTERFACES";title
lsdev -Cc if
TITLE="NETWORK INTERFACE DETAILS";title
interfaces=`lsdev -Cc if -S a|awk '{print $1}'`
for i in $interfaces
do
ifconfig $i
done
if [ `lsdev -C|grep ent[0-9]|wc -l|awk '{print $1}'` -gt 0 ]
then
TITLE="NETWORK ADAPTER SPEED";title
lsdev -C|grep ent[0-9]|awk '{print $1}'|while read device
do
echo "$device `lsattr -El $device|grep media_speed|awk
'{print $2}'"
done
fi
TITLE="NETWORK STATIC ROUTES";title
netstat -rn;echo
netstat -v
TITLE="NETWORK CONFIGURATION VALUES";title
no -a
TITLE="ARP INFORMATION";title
arp -a
TITLE="NETWORK CONFIGURATION INFORMATION" ;title
netstat -i ; echo
netstat -a ; echo
if [ -f /bosinst.data ]
then
TITLE="DOCUMENT THE SYSTEM/MKSYSB /bosinst.data FILE";title
cat /bosinst.data
fi
if [ -f /image.data ]
then
TITLE="DOCUMENT THE SYSTEM/MKSYSB /image.data FILE";title
cat /image.data
fi
lsvg | grep -v rootvg| while read VG
do
if [ -f /tmp/vgdata/$VG/${VG}.data ]
then
TITLE="DOCUMENT THE ${VG}.data FILE for $VG Volume Group";title
cat /tmp/vgdata/$VG/${VG}.data
fi
done
}
book >/tmp/AIX_Control_Book.log 2>&1
/usr/local/bin/mpack -s"AIX Control Book for `hostname` on `lsattr -El
sys0|grep modelname|awk '{print $2}'` Server" /tmp/AIX_Control_Book.log
2020_UNIX@2020log.com
**
***************************************************************
Disclaimer :-
This email is confidential and intended solely for the use of the
individual to whom it is addressed. Any views or opinions are solely
those of the author and do not necessarily represent those of
20:20 Logistics Ltd, Dextra Solutions Ltd, The Discovery Store Ltd,
The Mobile Phone Repair Company Ltd and Caudwell Group.
If you are not the intended recipient, be advised that you have
received this email in error and that any use, dissemination,
forwarding, printing or copying is strictly prohibited. If you
have received this email in error please delete it from your system
and notify the sender immediately.
***************************************************************
This archive was generated by hypermail 2.1.7 : Wed Apr 09 2008 - 22:17:28 EDT