Script Conexión Redes Inálambricas.

d
Nombre: Ina.bash
Descripción: Script que permite conectarse a una red inalámbrica ya sea por medio de WEP o WPA
Autor: @WizardIP
NOTA: Se recomienda el uso de WPA y WPA2 con autenticación basada en direcciones MAC.
#!/bin/bash
#Ina.bash


if [ $EUID -ne 0 ]; then
                echo "Ejecutar con sudo"
                exit 1
fi

if [ `whereis wpa_supplicant | cut -d: -f2 | cut -d" " -f2` !=  "/sbin/wpa_supplicant" ]; then
         echo "Favor de instalar wpa_supplicant"
         exit 0
fi


if [ $# -eq 0 ]; then
               echo "Faltan parámetros"
               echo "Uso: sudo $0 [ - Parámetro ]"
         echo "-wep: Conectar usando WEP" "-wep  [ ESSID ] [ Clave ]" 
        echo "-wpa: Conectar usando WPA [ REQUIERE ARCHIVO DE CONFIGURACIÓN Y wpa_supplicant ]"
               exit 1
fi

if [ $# -ne 3 ] && [ $1 == "-wep" ]; then
 echo "Faltan parámetros en el uso de WEP"
 echo "Uso $0 -wep [ ESSID ] [ Clave ]"
 exit 1
fi

case $1 in
 -wep)
  echo "Conectando..."
  ifconfig [ interface de red ] down
  iwconfig [ interface de red ] essid $2 key s: $3
  ifconfig [ interface de red ] up
  ping -c www.google.com
  echo "Conectado!"
  exit 0
  ;;

 -wpa)
  echo "Conectando..."
  ifconfig [ interface de red ] down
  wpa_supplicant -c [ archivo de configuración ] -B -i [ interface de red ] 
  ifconfig [ interface de red ] up
  dhclient [ interface de red ]
  ping -c3 www.google.com
  echo "Conectado!"
  exit 0
  ;;

 *)
  echo "Parámetro desconocido"
  echo "Uso: sudo $0 [ - Parámetro ]"
                echo "-wep: Conectar usando WEP" "-wep  [ ESSID ] [ Clave ]" 
                echo "-wpa: Conectar usando WPA [ REQUIERE ARCHIVO DE CONFIGURACIÓN Y WPA_SUPPLICANT ]"
  exit 1
  ;;
esac
exit 0
El archivo de configuración se puede hacer de la siguiente manera: 
vi wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="Nombre de la red"
key_mgmt=WPA-PSK
psk="Clave WPA de la red"
}
Permisos:
chmod 700 Ina.bash
chmod 600 wpa_supplicant.conf
Ejecución:
./Ina.bash -wep [ ESSID ] [ Clave ]
./Ina.bash -wpa
Leer más...

Script para descargar videos de Youtube de manera grafica

d
Autor: http://www.frankrock.it
# frankrock74@gmail.com
Descripción: Script que nos permite descargar de manera grafica videos de Youtube dando el nombre nosotros mismos, haciendo uso de zenity para posteriormente reproducir con mplayer
Traducido por: @GeekScripting

Requerimientos

Tener instalado Zenity, youtube-dl, y mplayer

Para hacer uso del mismo dar permisos, y ademas cambiar la dirección home/frankrock por la tuya =)

#!/bin/sh
# Questo script serve per scaricare video da youtube
# basta inserire indirizzo del video e il nome scelto per il video...
# By http://www.frankrock.it
# frankrock74@gmail.com
#Traducido por GeekSripting

echo 'GeekSripting'
echo

var=`zenity --entry --title="By FrankRock.it" --text="Ingresa la direccion del video de Youtube:"`

if [ $? = 0 ] ; then

varname=`zenity --entry --title="By FrankRock.it" --text="Ingresa el nombre del Video"`

if [ $? = 0 ] ; then

#echo date >> /home/frankrock/Video_Scaricati/Video_Scaricati.txt
echo "$varname": "$var" >> /home/frankrock/Video/Video_Scaricati.txt
echo >> /home/frankrock/Video/Video_Scaricati.txt

youtube-dl "$var" | zenity --progress --pulsate --auto-close --auto-kill --title="By FrankRock.it" --text="Se esta descargando el video $varname \n Atencion!"

mv *.flv "$varname".flv

zenity --question --title="By FrankRock.it" --text="Deseas ver el video $varname ahora?"

if [ $? = 0 ] ; then

mplayer -identify -fs ./"$varname".flv
mv "$varname".flv /home/frankrock/Video/

else

mplayer -identify ./"$varname".flv
mv "$varname".flv /home/frankrock/Video/

fi
fi
fi

zenity --info --title="By FrankRock.it" --text="Operacion Completa\! \n Script By FrankRock.it v 1.0"

exit 0
Leer más...

Script Compartir Internet móvil

d
Autor: Uremix
Descripción: Script que nos permite compartir internet.
Basado en : BrianDB


Crea un archivo iptables.conf:

#!/bin/bash
 
# Dispositivo de red de internet
EXIF="ppp0"
 
# Dispositivo de red local
INIF="eth0"
 
iptables --flush
iptables -A INPUT -i $INIF -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXIF -j MASQUERADE
 
# Aceptar paquetes para reenviar procedentes de internet de conexiones ya establecidas
 
iptables -A FORWARD -i $INIF -o $EXIF -j ACCEPT
iptables -A FORWARD -i $EXIF -o $INIF -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $INIF -j ACCEPT
iptables -P OUTPUT ACCEPT
 
echo 1 > /proc/sys/net/ipv4/ip_forward

Dar permisos al archivo.

$ chmod -v 755 iptables.conf

Darle permisos de ejecucion:

$ chmod -v 755 iptables.conf

Ejecutamos el script como root:

$ sudo ./iptables.conf

Verificamos que se han definido las reglas:


$ iptables -L -n -v

Revisar que el gateway principal sea la salida del ppp0


$ route -n

Si deseamos que las reglas se apliquen al iniciar el equipo:

$ iptables-save

Verificaciones:

 En la maquina que es el gateway verificar si tiene salida a Internet

$ dig  //Esto nos dira si podemos resolver nombres.
$ ping google.com

Realizar una traza de ruta desde una maquina de nuestra LAN(eth0). Si llega a nuestro gateway y no pasa volver a ejecutar el escript del Iptables.

$ traceroute 8.8.8.8

Nota: en caso de no conectar verificar que las maquinas clientes estén en la misma red que eth0.


Leer más...

Script Music Shuffle

d
Autor:VH-BIL & Me
Descripción: Script que nos permite escuchar de forma aleatorio nuestra colección de musica que tengamos almacenada, en el equipo o Discos Externos.
Script: Random-Music.sh

#!/bin/bash

# Random-Music.sh
# Creator: Inameiname
# Initial Command Creator: nothingspecial
# Original 'Music Shuffle' Creator: VH-BIL & Me
# Version: 1.0
#


# Set IFS so that it won't consider spaces as entry separators.
# Without this, spaces in file/folder names can make the loop go wacky.
IFS=$'\n'

# See if the Nautilus environment variable is empty
if [ -z $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ]; then
    # ================================================================================
    #    Project      : Music Shuffle
    #    Author       : VH-BIL & Me
    #    Date         : 10th Nov 2009 & 9th Sep 2010
    #    Info         :
    # The "DestPath" variable holds the path of where to write all the
    # playlists.
    #
    # The variable "MixedDestPath" holds the path and filename for the playlist
    # of the mixed Music.
    #
    # The "Music_Count" variable is then number of individual Music files to be
    # displayed in the menu.
    #
    # Arrays "Music_Name" and "Music_Path" hold information about the Music files in
    # the menu. "Music_Name" is the name of the Music file and "Music_Path" is the path
    # to where all the Music is stored. The number of Music files must
    # be recorded in "Music_Count"
    #
    # The "Mixed_Count" variable is the number of Music files to be put combined
    # into the mixed Music playlist.
    #
    # Just like the "Music_Name" and "Music_Path" variables the "Mixed_Name" and
    # Mixed_Path hold the name and file path of the Music files to be in the
    # mixed Music playlist.
    #
    # This is one of the first scripts I have made. I work as a programmer
    # but as a C# programmer. I wanted an easy way of playing my Music files shuffled
    # while not having to update playlists when adding new .
    # ================================================================================

    tty -s; if [ $? -ne 0 ]; then gnome-terminal -e "$0"; rm -R $HOME/.gnome2/nautilus-scripts/.playlists/; exit; fi

    # The Destination Path Of All The Playlists
    DestPath="$HOME/.gnome2/nautilus-scripts/.playlists/"
    # The Path And Filename Of The Mixed Music Playlist
    MixedDestPath="$HOME/.gnome2/nautilus-scripts/.playlists/MixedMusic.plist"

    mkdir $DestPath && touch $HOME/.gnome2/nautilus-scripts/.playlists/MixedMusic.plist && touch $HOME/.gnome2/nautilus-scripts/.playlists/"My Music Library (on PC)".plist && touch $HOME/.gnome2/nautilus-scripts/.playlists/"My Music Library (on external hard drive)".plist

    # Colour Codes
    black='\E[30;40m'
    red='\E[31;40m'
    green='\E[32;40m'
    yellow='\E[33;40m'
    blue='\E[34;40m'
    magenta='\E[35;40m'
    cyan='\E[36;40m'
    white='\E[37;40m'

    # My Music Libraries
    Music_Count=2 # change if need be
    Music_Name[0]="My Music Library (on PC)"
    Music_Path[0]="$HOME/Music/"
    Music_Name[1]="My Music Library (on external hard drive)"
    Music_Path[1]="/media/path/to/your/drive/and/folder/"
#     Music_Name[2]=""
#     Music_Path[2]="/media/path/to/your/drive/and/folder/"
#     Music_Name[3]=""
#     Music_Path[3]="/media/path/to/your/drive/and/folder/"
#     Music_Name[4]=""
#     Music_Path[4]="/media/path/to/your/drive/and/folder/"
#     Music_Name[5]=""
#     Music_Path[5]="/media/path/to/your/drive/and/folder/"
#     Music_Name[6]=""
#     Music_Path[6]="/media/path/to/your/drive/and/folder/"
#     Music_Name[7]=""
#     Music_Path[7]="/media/path/to/your/drive/and/folder/"
#     Music_Name[8]=""
#     Music_Path[8]="/media/path/to/your/drive/and/folder/"
#     Music_Name[9]=""
#     Music_Path[9]="/media/path/to/your/drive/and/folder/"
#     Music_Name[10]=""
#     Music_Path[10]="/media/path/to/your/drive/and/folder/"
#     Music_Name[11]=""
#     Music_Path[11]="/media/path/to/your/drive/and/folder/"
#     Music_Name[12]=""
#     Music_Path[12]="/media/path/to/your/drive/and/folder/"
#     Music_Name[13]=""
#     Music_Path[13]="/media/path/to/your/drive/and/folder/"
#     Music_Name[14]=""
#     Music_Path[14]="/media/path/to/your/drive/and/folder/"
#     Music_Name[15]=""
#     Music_Path[15]="/media/path/to/your/drive/and/folder/"


    # Mixed Music
    Mixed_Count=2
    Mixed_Name[0]="My Music Library (on PC)"
    Mixed_Path[0]="$HOME/Music/"
    Mixed_Name[1]="My Music Library (on external hard drive)"
    Mixed_Path[1]="/media/path/to/your/drive/and/folder/"


    DisplayMenu()
    {
      echo -en $white
      clear
      echo -en $white
      echo "Music Shuffle Script"
      echo -en $red
      echo "================="
      echo
      for ((cnt=0 ; cnt<=Music_Count-1 ; cnt++))
      do
        if [ $cnt -lt 10 ]
        then
          echo -en $cyan
          echo -n "("
          echo -en $blue
          echo -n $cnt
          echo -en $cyan
          echo -n ")  "
          echo -en $white
          echo ${Music_Name[cnt]}
        else
          echo -en $cyan
          echo -n "("
          echo -en $blue
          echo -n $cnt
          echo -en $cyan
          echo -n ") "
          echo -en $white
          echo ${Music_Name[cnt]}
        fi
      done
        if [ $Music_Count -lt 10 ]
        then
          echo -en $cyan
          echo -n "("
          echo -en $blue
          echo -n $Music_Count
          echo -en $cyan
          echo -n ")  "
          echo -en $white
          echo "Mixed Music"
        else
          echo -en $cyan
          echo -n "("
          echo -en $blue
          echo -n $Music_Count
          echo -en $cyan
          echo -n ") "
          echo -en $white
          echo "Mixed Music"
        fi
        let "Music_Count += 1"
        if [ $Music_Count -lt 10 ]
        then
          echo -en $cyan
          echo -n "("
          echo -en $blue
          echo -n $Music_Count
          echo -en $cyan
          echo -n ")  "
          echo -en $white
          echo "Display Mixed Music"
        else
          echo -en $cyan
          echo -n "("
          echo -en $blue
          echo -n $Music_Count
          echo -en $cyan
          echo -n ") "
          echo -en $white
          echo "Display Mixed Music"
        fi
        let "Music_Count -= 1"
      echo
      echo -n "Make A Selection :"
    }

    DisplayMixedMusic()
    {
      echo
      for ((cnt=0 ; cnt<=Mixed_Count-1 ; cnt++))
      do
        echo -en $white
        echo ${Mixed_Name[cnt]}
      done
      echo
    }

    ShuffleEpisode()
    {
      cd /
      find "${Music_Path[$1]}" > "$DestPath${Music_Name[$1]}.plist"
      mplayer -playlist "$DestPath${Music_Name[$1]}.plist" -shuffle
    }

    MixedMusic()
    {
      echo "" > $MixedDestPath
      cd /
        for ((cnt=0 ; cnt<=Mixed_Count-1 ; cnt++))
      do
        find "${Mixed_Path[$cnt]}" > "$DestPath${Mixed_Name[$cnt]}.plist"
        echo "" > $MixedDestPath"_cat"
        cat "$DestPath${Mixed_Name[$cnt]}.plist" $MixedDestPath > $MixedDestPath"_cat"
        rm $MixedDestPath
        mv $MixedDestPath"_cat" $MixedDestPath
      done
      mplayer -playlist $MixedDestPath -shuffle
    }

    DisplayMenu
    read input

    if [ $input -eq $Music_Count ]
    then
      MixedMusic
    fi

    let "Music_Count += 1"
    if [ $input -eq $Music_Count ]
    then
      DisplayMixedMusic
    fi
    let "Music_Count -= 1"

    if [ $input -lt $Music_Count ]
    then
      ShuffleEpisode $input
    fi
fi

# Loop through the list (from either Nautilus or the command line)
for ARCHIVE_FULLPATH in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
    NEWDIRNAME=${ARCHIVE_FULLPATH%.*}
    FILENAME=${ARCHIVE_FULLPATH##*/}
    NAME=${ARCHIVE_FULLPATH##*/.*}

    # open a terminal window and run the important stuff
    tty -s; if [ $? -ne 0 ] ; then gnome-terminal -e "$0"; exit; fi
    mplayer -loop 0 -quiet -shuffle -playlist <(find -L $ARCHIVE_FULLPATH -type f | egrep -i '(\.mp3|\.wav|\.flac|\.ogg|\.m4a|\.aac|\.mpa|\.mid|\.aif|\.iff|\.m3u|\.ra)')

done

Es necesario tener mplayer instalado y estar situado en ~/.gnome/nautilus-scripts con los permisos respectivos
Leer más...

Space Invaders

d
Nombre: Space.bash
Autor: Steve Parker.
Descripción: Script que emula el famoso juego de 1978.
Visto en nixshell
Y el libro Shell Scripting de Steve Parker, Capítulo 17. Página 464.
#!/bin/bash
stty -echo
tput civis
clear
cat - << EOF



           SPACE

   LEFT:      a
   RIGHT:     l
   FIRE:      f

   QUIT:      q

                            Press any key.
EOF
read -s -n 1
row0=( 0 30 30 30 30 30 30 30 30 )
row1=( 0 20 20 20 20 20 20 20 20 )
row2=( 0 15 15 15 15 15 15 15 15 )
row3=( 0 10 10 10 10 10 10 10 10 )
row4=( 0 5 5 5 5 5 5 5 5 )
row5=( 0 1 1 1 1 1 1 1 1 )

aliens1=( '\033[1;32m|0|\033[0m' '\033[1;34m\-/\033[0m'
          '\033[1;35m:x:\033[0m' '\033[1;38m:#:\033[0m'
          '\033[1;33m!|!\033[0m' '\033[1;39m:-:\033[0m' )
aliens2=( '\033[1;32m:0:\033[0m' '\033[1;34m/-\\\033[0m'
          '\033[1;35m-x-\033[0m' '\033[1;38m-#-\033[0m'
          '\033[1;33m:|:\033[0m' '\033[1;39m-:-\033[0m' )

score=0

# farthest right that the *leftmost* alien can go to
MAXRIGHT=46
# furthest right that the ship can go to
FARRIGHT=73

# Ship's current position (x-axis)
ship=30
# Cannon column; remains the same even if ship moves
cannonX=$ship
# Cannon height; 0 means it's ready to fire
cannonY=0
# Positive direction to right, Negative to left
direction=1
offset=20
bottom=20
ceiling=4
MAXCEILING=6
DELAY=0.4

drawrow()
{
  # draw a row of aliens; return the index of any alien killed
  # note that only one alien can be killed at any time.
  alientype=$1
  shift
  let row="$alientype * 2 + $ceiling"
  aliensonrow=`echo $@ | tr ' ' '+' | bc`
  if [ $aliensonrow -eq 0 ]; then
    # Nothing to do here. In particular, do not detect failure.
    # Just clear the previous line (it may contain the final explosion
    # on that row) and return.
    tput cup $row 0
    printf "%80s" " "
    return 0
  fi
  if [ $row -eq $bottom ]; then
    tput cup `expr $bottom - 4` 6
    trap exit ALRM
    clear
    echo "YOU LOSE"
    sleep $DELAY
    stty echo
    tput cnorm
    exit 1
  fi
  declare -a thisrow
  thisrow=( `echo $@` )

  tput cup 0 0
  printf "Score: %-80d" $score

  killed=0
  # Clear the previous line
  tput cup `expr $row - 1` 0
  printf "%80s" " "

  tput cup $row 0
  printf "%80s" " "
  tput cup $row 0
  printf "%-${offset}s"

  # Don't do this calculation in the for loop, it is slow even without expr
  if (( $offset % 2 == 0 )); then
    thisalien=${aliens1[$alientype]}
else
    thisalien=${aliens2[$alientype]}
  fi

  # there are 8 aliens per row.
  for i in `seq 1 8`
  do
    value=${thisrow[$i]}
    avatar=$thisalien
  
    if [ $value -gt 0 ]; then
      # detect and mark a collision
      if [ $row -eq $cannonY ]; then
        let LEFT="$i * 4 + $offset - 4"
        let RIGHT="$i * 4 + $offset - 1"
        if [ $cannonX -ge $LEFT ] && [ $cannonX -le $RIGHT ]; then
          killed=$i
 avatar='\033[1;31m***\033[0m'
          ((score=$score + $value))
          cannonY=0
        fi
      fi
    fi

    if [ $value -eq 0 ]; then
      printf "    " 
    else
        echo -en "${avatar} "
    fi
  done
  return $killed
}

drawcannon()
{
  # move the cannon up one
  if [ $cannonY -eq 0 ]; then
    # fell off the top of the screen
    return
  fi

  tput cup $cannonY $cannonX
  printf " "
  ((cannonY=cannonY-1))
  tput cup $cannonY $cannonX
  echo -en "\033[1;31m*\033[0m"
}

drawship()
{
  tput cup $bottom 0
  printf "%80s" " "
  tput cup $bottom $ship 
  # Show cannon state by its color in the spaceship
  if [ $cannonY -eq 0 ]; then
    col=31
  else
    col=30
  fi
  echo -en "|--\033[1;${col}m*\033[0m--|"
}

move()
{
  # shift aliens left or right
  # move cannon, check for collision
  (sleep $DELAY && kill -ALRM $$) &
  # Change direction if hit the side of the screen
  if [ $offset -gt $MAXRIGHT ] && [ $direction -eq 1 ]; then
    # speed up if hit the right side of the screen
    DELAY=`echo $DELAY \* 0.90 | bc`
    direction=-1
    ((ceiling++))
  elif [ $offset -eq 0 ] && [ $direction -eq -1 ]; then
    direction=1
  fi

  ((offset=offset+direction))
  drawrow 0 ${row0[@]}
  row0[$?]=0
  drawrow 1 ${row1[@]}
  row1[$?]=0
  drawrow 2 ${row2[@]}
  row2[$?]=0
  drawrow 3 ${row3[@]}
  row3[$?]=0
  drawrow 4 ${row4[@]}
  row4[$?]=0
  drawrow 5 ${row5[@]}
  row5[$?]=0

  aliensleft=`echo ${row0[@]} ${row1[@]} ${row2[@]} ${row3[@]}\
         ${row4[@]} ${row5[@]} \
      | tr ' ' '+' | bc`
  if [ $aliensleft -eq 0 ]; then

    tput cup 5 5
    trap exit ALRM
    echo "YOU WIN" 
    sleep $DELAY
    #tput echo 
    tput cnorm
    echo; echo; echo
    exit 0
  fi
  drawcannon
  drawship
}

trap move ALRM
clear
drawship
# Start the aliens moving...

move

while :

do
  read -s -n 1 key
  case "$key" in
    a) 
       [ $ship -gt 0 ] && ((ship=ship-1)) 
 drawship
 ;;
    l)
       [ $ship -lt $FARRIGHT ] && ((ship=ship+1)) 
 drawship
 ;;
    f)
 if [ $cannonY -eq 0 ]; then
          let cannonX="$ship + 3"
   cannonY=$bottom
        fi
 ;;
    q)
 clear
 echo "Goodbye!"
 tput cnorm
 stty echo
 trap exit ALRM
 sleep $DELAY
 exit 0
 ;;
  esac
done
Permisos: chmod 700 space.bash 
Ejecución: ./space.bash
Movimientos del juego LEFT: a
RIGHT: l
FIRE: f
QUIT: q
Leer más...

Script Nautilus DropBox Shared

d
Autor: Kalpa
Descripción: Script que nos permite compartir directamente un archivo a nuestra carpeta de DropBox. Para hacer uso de el lo copiamos en .gnome2/nautilus-scripts y se da los permisos respectivos.

#!/bin/sh
#
# W.H. Kalpa Pathum 
# 1st June, 2010
#

# Dropbox directory
DROPBOX_DIR="$HOME/Dropbox/"

# creates a temporary file
file_list=$(mktemp)

# writes the URIs of the selected file to the temp file
echo $NAUTILUS_SCRIPT_SELECTED_URIS | sed 's/ \//\n/g' > $file_list

# iterete through the file list
for file in $(cat $file_list)
  do
 # extract the last filed from the URI, that is the file name
    filename="$(echo $file | awk -F'/' '{print $NF}' | sed 's/%20/ /g')"
    
    # creates the symbolic link
    ln -s "$(pwd)/$filename" "$DROPBOX_DIR$filename"
    
    # sets the emblem
    gvfs-set-attribute -t stringv "$filename" metadata::emblems default
    done

exit 0
Leer más...

Extraer audio de Youtube.

d
Nombre: Youtube2Mp3.bash
Autor: @WizardIP
Descripción: Script que permite extraer audio de vídeos de Youtube
Motor del Script visto en Command Line Fu

#!/bin/bash
if [ $# -eq 0 ]
        then
               echo "¿Y el link?"
               echo "Uso: $0 [ URL del vídeo ]"
        exit 1
fi

url=$1
regexp='(https?\:\/\/([a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*)(\/\w+)+)'
if [[ $1 =~ $regexp  ]]; then
ifyoutubedl=`type -p youtube-dl`
        if [ -z $ifyoutubedl ]; then

                echo -e "\n\nyoutube-dl necesita estar instalado\n"
                exit 1
        else
        youtube-dl -t --extract-audio --audio-format mp3 $1
        echo "Sonido extraído"
        ls | grep *.mp3
        exit 0
        fi
else
        echo "No es una URL"
        exit 1
fi
exit 0

Permisos: chmod 700 Youtube2mp3.bash 

Ejecución ./Youtube2Mp3.bash. [ URL del vídeo ]
Leer más...

Tic Tac Toe

d
Nombre:ttt.bash
Autor: Chris F.A. Johnson
Descripción: Script que permite jugar Tic Tac Toe en la terminal contra la máquina.
Visto en cfaj
#!/bin/bash
# Sat Jul 12 16:52:30 EDT 2003
# NAME: ttt
# Copyright 2003, Chris F.A. Johnson
# Released under the terms of the GNU General Public License

ESC=$'\e'

tictactoe() {
[ $verbose -ge 1 ] && echo tictactoe $* >&2
    board=`printf "%9.9s" "        "`
    mvnum=1
    remainder=" 1 2 3 4 5 6 7 8 9 "
    show "$board"
    while :
    do
      status
      eval \$player$P
      [ $? -ne 0 ] && return
      put $_MOVE "$board"
      board=$_PUT
#      show "$board"
      mkbold "$_MOVE"
      printat 0 0 $mvnum
      printat $prompt
      sleep $pause &
      mlist="$mlist $_MOVE"
      remainder=${remainder/ $_MOVE / }

      checkboard "$board" && {
   mkbold $win
   printat $prompt "$cle"
   eval winner \$player$P
   return
      }

      [ $mvnum -eq 9 ] && {
   B=$U mkbold "$_MOVE"
   winner "Neither player"
   return
      }
      wait
      B=$U mkbold "$_MOVE"
      if [ $P = O ]
      then
   P=X
   OP=O
      else
   P=O
          OP=X
      fi
      mvnum=$(( $mvnum + 1 ))
    done
}

winner() {
[ $verbose -ge 1 ] && echo winner $* >&2
     printat $prompt "$cle $* wins\n\n"
}

status() {
[ $verbose -ge 1 ] && echo status $* >&2
    if [ $verbose -ge 1 ]
    then
 printat 4 0
 printf "${cle}Move: %s Player: %s Board: \"%s\"  Last move: %s  Move list: %s" \
     "$mvnum" "$P" "${board// /-}" "$_MOVE" "$mlist"
    else
 false
    fi
}

show() {
[ $verbose -ge 1 ] && echo show $* >&2
    printat 0 0 $mvnum
    printat 0 $top  ##$(( ($LINES - 5) / 2 ))
    printf "  %${margin}.${margin}s | %1s | %1s\n" "${1:0:1}" "${1:1:1}" "${1:2:1}"
    printf "%${margin}.${margin}s---+---+---\n" " "
    printf "  %${margin}.${margin}s | %1s | %1s\n" "${1:3:1}" "${1:4:1}" "${1:5:1}"
    printf "%${margin}.${margin}s---+---+---\n" " "
    printf "  %${margin}.${margin}s | %1s | %1s\n" "${1:6:1}" "${1:7:1}" "${1:8:1}"
}

put() {
[ $verbose -ge 1 ] && echo put $1 \""$2"\" >&2
   local n=$(( $1 - 1 ))
   _PUT=${2:-$board}
   [ "${_PUT:$n:1}" = " " ] &&
            _PUT=${_PUT:0:$n}$P${_PUT:$1}
}

checkboard() {
[ $verbose -ge 1 ] && echo checkboard \"$*\" >&2
    case $1 in
 $P??$P??$P??) win="1 4 7" ;;
 ?$P??$P??$P?) win="2 5 8" ;;
 ??$P??$P??$P) win="3 6 9" ;;
 ??$P?$P?$P??) win="3 5 7" ;;
        $P???$P???$P) win="1 5 9" ;;
 $P$P$P??????) win="1 2 3" ;;
 ???$P$P$P???) win="4 5 6" ;;
 ??????$P$P$P) win="7 8 9" ;;
        *) false ;;
    esac
}

mkbold() {
[ $verbose -ge 1 ] && echo mkbold $* >&2
  for sq in $*
  do
    row=$(( ($sq - 1) / 3 ))
    col=$(( ($sq - 1) % 3 + 1 ))
    printat $(( ($col * 4) + $margin - 2 )) $(( ($row * 2) + $top ))
    printf "${B}$P${U}"
  done
}

human() {
[ $verbose -ge 1 ] && echo human $* >&2
   while :
   do
       key "Select ($remainder)"
#       case $_MOVE in
#   "$ESC") read -sn1; read -sn1 kp; continue ;;
#       esac
       _MOVE=$_KEY
       case $_MOVE in
    1|2|3|4|5|6|7|8|9) [ "${board:_MOVE-1:1}" = " " ] && break ;;
    q|Q|x|X) echo; return 5 ;;
    p) printat $prompt
       KEYECHO= KEYMAX=$(( $COLUMNS - 10 )) key "Enter delay in seconds"
       pause=$_KEY
       ;;
    "") set -- $remainder
        _MOVE=$1
        [ $verbose -ge 1 ] && echo "|$_MOVE|" >&2
        break ;;
    *) printat $prompt
       printf "\r%s%s\r" "  "$cle" $_MOVE: Invalid move"
       sleep 1
       printf "%s\r" "$cle" ;;
       esac
   done
}

randy() {
[ $verbose -ge 1 ] && echo randy $* >&2
    randstr $remainder
    _MOVE=$_RANDSTR
}

key() {
[ $verbose -ge 1 ] && echo key $* >&2
    printat $prompt "$cle$CVIS$beep"
    read -${KEYECHO}n$KEYMAX -p "${1:-PAK}: " _KEY 2>&1
    printf "$CINV"
}

getkey() {
    local OKchars=${1:-${remainder// /}}
    local kp2 kp3
    stty -echo
    while :
      do
      prompt="==>"
      prompt
      IFS= read -r -sn1 -p " " kp 2>&1 || exit 2 #cleanup
      case $OKchars in
          *"$kp"*)
              case $kp in
                  $ESC)
                      read -st1 -n1 kp2
                      case $kp2 in
                          \[) read -st1 -n1 kp3
                              case $kp3 in
                                  A) kp=$UP; break ;;
                                  B) kp=$DN; break ;;
                                  C) kp=$RT; break ;;
                                  D) kp=$LF; break ;;
                              esac
                              ;;
                       esac
                       ;;
                  *) break ;;
              esac
              ;;
       esac
    done
    _KEY=$kp
}

randstr() {
[ $verbose -ge 1 ] && echo randstr $* >&2
#    [ -n "$1" ] || return 1
    n=$(( ($RANDOM % $#) + 1 ))
    eval _RANDSTR=\${$n}
}

isblock() {
[ $verbose -ge 1 ] && echo isblock $* >&2
    win=
    block=
    for _MOVE in $remainder
    do
        P=$OP put $_MOVE
 P=$OP checkboard "$_PUT" && return
    done
    _MOVE=
}

block() {
[ $verbose -ge 1 ] && echo block $* >&2
    block=
    for _MOVE in $remainder
    do
        put $_MOVE
 checkboard "$_PUT" && return
        P=$OP put $_MOVE
 P=$OP checkboard "$_PUT" && block=$_MOVE
    done
    [ "$block" ] && { _MOVE=$block; return; }
    randy
}

computer() {
[ $verbose -ge 1 ] && echo computer $* >&2
   local r c
   case $mvnum in
       1) randstr 1 3 7 9
   _MOVE=$_RANDSTR ;;
       2)
    if [ "${board:4:1}" = " " ]
    then
        _MOVE=5
    else
        randstr 1 3 7 9
        _MOVE=$_RANDSTR
    fi
    ;;
       3)  r=${mlist// /}
    c='1 3 7 9'
    randstr ${c//[$r]/}
#    randstr ${remainder//[$r]/}
    _MOVE=$_RANDSTR
    ;;
       4)
    isblock
    [ "$_MOVE" ] && return
     r=${mlist// /}
     c='2 4 6 8'
     randstr ${remainder//[$r]/}
     _MOVE=$_RANDSTR
     ;;
       *) block ;;
   esac
}

printat() { #== print arguments 3-... at Y=$2 X=$1
[ $verbose -ge 1 ] && echo printat $* >&2
    [ $# -lt 2 ] && return 1
    local y=$2
    local x=$1
    shift 2
    msg="$*"
    printf "\e[%d;%dH%b" $y $x "$msg"
}

version()
{
    echo "    $progname, version $version
    Copyright $copyright, $author $email
    This is free software, released under the terms of the GNU General
    Public License.  There is NO warranty; not even for MERCHANTABILITY or
    FITNESS FOR A PARTICULAR PURPOSE.
"
}

usage()
{
echo "
    ${B}NAME${U}:  $progname - Tic-Tac-Toe

    ${B}USAGE${U}: $progname [OPTIONS]

    ${B}OPTIONS${U}:

        -x player1         - specify first player
        -o player2         - specify second player
        -c player1,player2 - specify both players
        -p seconds         - time to pause between moves

        -h, --help       - help: print this message
        -H, --help_long  - help: print more detailed message (if available)
        -v, --verbose    - sends messsages to \$HOME/tttlog
        -V, --version    - print version information

    Copyright 2003, Chris F.A. Johnson
"
}

verbose=0
longusage=0
version="1.0"
copyright=2003
author="Chris F.A. Johnson"
progname=${0##*/}
P=X
OP=O

playerX=human
playerO=computer
co=
li=

if tput ce >/dev/null 2>&1
then ## e.g. FreeBSD
    co=co
    li=li
elif tput el 2>/dev/null
then ## e.g. Linux
    co=cols
    li=lines
fi

UNBOLD=$'\E[0m'
standout=$'\E[0;1;7m'
cle=$'\E[K'
clb=$'\E[1K'
ULINE=$'\E[0;4m'
REVERSE=$'\E[0;7m'
BLINK=$'\E[0;5m'
BOLD=$'\E[0;1m'
CINV=$'\E[0;8m'

R=$REVERSE
U=$UNBOLD
B=$BOLD
BR=$B$R
Cl=$'\f'
if [ "$co" ]
then
    tput reset
    COLUMNS=${COLUMNS:=`tput $co`}
else
    COLUMNS=${COLUMNS:-80}
fi
top=6
margin=11
prompt="3 $(( $top + 9 ))"
beep=  #$'\a'
pause=1
KEYMAX=1
KEYECHO=s

while getopts vVhH-:xoX:O:c:p: var
do
 case "$var" in

     x) playerX=human
 playerO-computer
 ;;
     o) playerO=human
 playerX=computer
 ;;
     X) playerX=$OPTARG ;;
     O) playerO=$OPTARG ;;
     c|C) playerO=${OPTARG#*,}
   playerX=${OPTARG%,*}
   ;;
     p) pause=$OPTARG ;;

    -) case $OPTARG in
         help) usage; exit ;;
         verbose) verbose=$(( $verbose + 1 )) ;;
         version) version; exit ;;
       esac
       ;;
    h) usage; exit ;;
    H) longusage=1; usage; exit ;;
    v) verbose=$(( $verbose + 1 )) ;;
    V) version; exit ;;
    *);;
 esac
done
shift $(( $OPTIND - 1 ))

if [ "$co" ]
then
    COLUMNS=`tput $co`
else
    COLUMNS=${COLUMNS:-80}
fi
margin=11  ##$(( ($COLUMNS - 11) / 2 ))
clear

if [ $verbose -ge 1 ]
then
    exec 2>$HOME/tttlog
    set -x
fi

tictactoe
printat $prompt "\n$CVIS\n"
Permisos: chmod 700 tt.bash 
Ejecución: ./ttt.bash
Leer más...

LINUXexplo

d
Nombre: LINUXexplo.bash
Autor: Joe Santoro
Modificado por Facundo M. de la Cruz [ @_tty0 ]
Descripción: Script que permite recolectar información de un sistema Linux para soporte remoto
Éste Script es una versión para Linux del Solaris Explorer (SUNWexplo) Script
Visto en tty0
#!/bin/bash 

##############################################################################
#        Copyright (c) J.S Unix Consultants Ltd
##############################################################################
# FILE             : LINUXexplo
# Last Change Date : 03-18-2012
# Author(s)        : Joe Santoro
# Date Started     : 15th April, 2004
# Email            : linuxexplo [ at ] unix-consultants.com
# Web              : http://www.unix-consultants.com/examples/scripts/linux/linux-explorer 
#
# Usage            : ./LINUXexplo [-d] [-v] [-g] [-s] [-h] [-V]
#
# Purpose          : This script is a Linux version of the Solaris explorer 
#                    (SUNWexplo) script.
#
#      Used to collect information about a linux system build for remote 
#      support supposes. 
#      This script is a general purpose script for ALL linux 
#      systems and therefore NOT tied into any one distro.
#
#############################################################################
#
# Modified by Facundo M. de la Cruz [ fdelacruz@dc-solutions.com.ar ]
#
#############################################################################
#
# Changelog (bug fixes and new features):
#
#                   - SELiunx support improved by FMDLC - 03182012
#                   - Systemd support added by FMDLC    - 03182012
#                   - Added contact form by FMDLC       - 03182012
#                   - Added ARP gathering info by FMDLC - 03182012
#                   - Added kickstart copy by FMDLC     - 03182012
#                   - GPG support added by FMDLC        - 03182012
#                   - Improved release copy by FMDLC    - 03182012
#                   - Improved YUM support by FMDLC     - 03182012
#                   - Improved resolv.conf copy by FMDLC- 03182012
#                   - Added README file by FMDLC        - 03252012
#                   - Added DM discovery by FMDLC       - 04062012
#                   - Added netstat -in by FMDLC        - 04062012
#                   - Improved dmsetup support by FMDLC - 04102012
#                   - Fixed vmstat bug by FMDLC         - 04102012
# 
##############################################################################
#
# J.S UNIX CONSULTANTS LTD  MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE 
# SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT 
# LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE, OR NON-INFRINGEMENT. J.S UNIX CONSULTANTS LTD SHALL 
# NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
#
##############################################################################

  COPYRIGHT="Copyright (c) J.S Unix Consultants Ltd"
  MYVERSION="0.108"
     MYDATE="$(/bin/date +'%Y.%m.%d.%m.%H.%M')" # Date and time now
     MYNAME=$(basename $0)
     WHOAMI=$(/usr/bin/whoami)        # The user running the script
     HOSTID=$(/usr/bin/hostid)        # The Hostid of this server
 MYHOSTNAME=$(/bin/uname -n)          # The hostname of this server
MYSHORTNAME=$(echo $MYHOSTNAME | cut -f 1 -d'.')
    TMPFILE="/tmp/$(basename $0).$$"  # Tempory File
     TOPDIR="/opt/LINUXexplo"         # Top level output directory

VERBOSE=1           # Set to see the scripts progress used 
                    # only if connected  to a terminal session.

FULLSOFT=0          # Set to Verify Software installation
                    # this takes a very long time
              
GPG_ID="57260789"   # GPG/PGP Public key ID. Set to encrypt and 
                    # sing the tarball. 

SUPPORT="bofh@foobar.net" # Support email
#
# Ensure that we are the root user
#
[ ${UID} != 0 ] && echo "You must be root to run this program." && exit 1 

#
# Set the path for the script to run.
#
PATH=/bin:/usr/sbin:/sbin:/usr/sbin:/usr/local/bin:$PATH

if [ -d /opt/VRTSvcs/bin ] ; then
 PATH=$PATH:/opt/VRTSvcs/bin
fi

export PATH

# Remove any temporary files we create
trap '$RM -f $TMPFILE >/dev/null 2>&1; exit' 0 1 2 3 15

##############################################################################
#
#      Function : Usage
#
#         Notes : N/A
#
##############################################################################

function ShowUsage 
{
     #-------------------------------------------------------------------
     #   Show help message
     #-------------------------------------------------------------------
 echo 
 echo "$MYNAME Version $MYVERSION - $COPYRIGHT " 
 echo 
 echo " usage:   $MYNAME [option] "
 echo 
 echo "  -d      Target directory for explorer files"
  echo "    -g      GPG support"
 echo "  -v      Verbose output"
 echo "  -s      Verify Package Installation"
 echo "  -h      This help message"
 echo "  -V      Version Number of LINUXexplo"
 echo 
 exit 0
}

##############################################################################
#
#      Function : Echo
#
#    Parameters : String to display what function is about to run
#
#        Output : Print what section we are about to collect data for
#
#         Notes : N/A
#
##############################################################################

function Echo () 
{

 if [ -t 0 ] ; then

  if [ ${VERBOSE} -ne 0 ] ; then
   echo "$*"
  fi

  if [ ${VERBOSE} -gt 1 ] ; then
   echo "Press Return to Continue.........."
   read A 
  fi
 fi
}

##############################################################################
#
#      Function : mywhich
#
#    Parameters : name of program 
#
#        Output : path of executable
#
#         Notes : Return back the location of the executable
#    I need this as not all linux distros have the files
#    in the same location.
#
##############################################################################

function mywhich ()
{
 local command=$1
 local mypath=$(which $command 2>/dev/null)

 if [  "$mypath" =   "" ] ; then
#  echo "Command $command not found" >> $NOTFNDLOG 2> /dev/null
  echo "NOT_FOUND"
 elif [ ! -x "$mypath" ] ; then
  echo "Command $command not executable" >> $NOTFNDLOG 2> /dev/null
  echo "NOT_FOUND"
 else
  echo "$mypath"
 fi
}

##############################################################################
#
#      Function : findCmds
#
#    Parameters : None
#
#        Output : None 
#
#         Notes :       Goes and find each of the commands I want to use and 
#   stores the information into the various variables which 
#   is the uppercase version of the command itself. 
#
#   I need this as not all linux distros have the files
#   in the same location.
#
##############################################################################

function findCmds 
{
 # Standard commands
            AWK=$(mywhich awk       )
       BASENAME=$(mywhich basename  ) 
            CAT=$(mywhich cat       )
      CHKCONFIG=$(mywhich chkconfig ) 
             CP=$(mywhich cp        )
            CUT=$(mywhich cut       )
          CHMOD=$(mywhich chmod     )
           DATE=$(mywhich date      )
             DF=$(mywhich df        )  
          DMESG=$(mywhich dmesg     )
           ECHO=$(mywhich echo      ) 
           FILE=$(mywhich file      )
           FIND=$(mywhich find      )
           FREE=$(mywhich free      )
           GREP=$(mywhich grep      )
          EGREP=$(mywhich egrep     )
             LS=$(mywhich ls        )
          MKDIR=$(mywhich mkdir     )
           LAST=$(mywhich last      )
         LOCALE=$(mywhich locale    )
         PSTREE=$(mywhich pstree    )
             PS=$(mywhich ps        )
             RM=$(mywhich rm        )
          SLEEP=$(mywhich sleep     )
          MOUNT=$(mywhich mount     )
             MV=$(mywhich mv        )
           SORT=$(mywhich sort      )
             LN=$(mywhich ln        )
      SYSTEMCTL=$(mywhich systemctl )
           TAIL=$(mywhich tail      )
          UNAME=$(mywhich uname     )
         UPTIME=$(mywhich uptime    ) 
            WHO=$(mywhich who       )
            ZIP=$(mywhich zip       )
           GZIP=$(mywhich gzip      ) 
           GAWK=$(mywhich gawk      ) 
            SED=$(mywhich sed       ) 
         GUNZIP=$(mywhich gunzip    )
   # Selinux
       SESTATUS=$(mywhich sestatus  )
      GETSEBOOL=$(mywhich getsebool )
       SEMANAGE=$(mywhich semanage  )
  # Systemd
        SYSTEMD=$(mywhich systemd         )
      SYSTEMCTL=$(mywhich systemctl       )
    SYSTEMDCGLS=$(mywhich systemd-cgls    )
SYSTEMDLOGINCTL=$(mywhich systemd-loginctl)
   # GPG
        GPG_BIN=$(mywhich gpg)
   # Samba
      TESTPARM=$(mywhich testparm ) 
        WBINFO=$(mywhich wbinfo   ) 
   # Apache
     APACHECTL=$(mywhich apachectl  ) 
    APACHE2CTL=$(mywhich apache2ctl ) 
   # Packages
      APTCONFIG=$(mywhich apt-config  ) 
            RPM=$(mywhich rpm         )
         ZYPPER=$(mywhich zypper      )
           DPKG=$(mywhich dpkg        )
     DPKG_QUERY=$(mywhich dpkg-query  )
         EMERGE=$(mywhich emerge      )
            YUM=$(mywhich yum         )
   # Kernel Info
        MODINFO=$(mywhich modinfo     )
         SYSCTL=$(mywhich sysctl      )
          KSYMS=$(mywhich ksyms       )
 # H/W Info
           ACPI=$(mywhich acpi       )
        CARDCTL=$(mywhich cardclt    )  
       DUMPE2FS=$(mywhich dumpe2fs   )
      DMIDECODE=$(mywhich dmidecode  ) 
          FDISK=$(mywhich fdisk      ) 
          BLKID=$(mywhich blkid      ) 
         HDPARM=$(mywhich hdparm     )
       HOSTNAME=$(mywhich hostname   )
         HWINFO=$(mywhich hwinfo     ) 
        HWCLOCK=$(mywhich hwclock    )
          LSMOD=$(mywhich lsmod      ) 
          LSPCI=$(mywhich lspci      )
          LSPNP=$(mywhich lspnp      ) 
        IPVSADM=$(mywhich ipvsadm    ) 
          LSUSB=$(mywhich lsusb      ) 
          LSDEV=$(mywhich lsdev      )
          LSHAL=$(mywhich lshal      ) 
         LSRAID=$(mywhich lsraid     )
          MDADM=$(mywhich mdadm      ) 
       PROCINFO=$(mywhich procinfo   )
        POWERMT=$(mywhich powermt    )
       SMARTCTL=$(mywhich smartclt   )
         SFDISK=$(mywhich sfdisk     )
         HWPARM=$(mywhich hwparm     )
        SCSI_ID=$(mywhich scsi_id    ) 
       ISCSIADM=$(mywhich iscsiadm   ) 
      MULTIPATH=$(mywhich multipath  )
        DMSETUP=$(mywhich dmsetup    )
           NTPQ=$(mywhich ntpq       )
           SYSP=$(mywhich sysp       ) 
        _3DDIAG=$(mywhich 3Ddiag     ) 
           LSHW=$(mywhich lshw       )
        SYSTOOL=$(mywhich systool    )
         SWAPON=$(mywhich swapon     )
 # Disks
            LVM=$(mywhich lvm           )
      LVDISPLAY=$(mywhich lvdisplay     )
            VGS=$(mywhich vgs           )
         PVSCAN=$(mywhich pvs           )
         VGSCAN=$(mywhich vgscan        )
      VGDISPLAY=$(mywhich vgdisplay     )
    LVMDISKSCAN=$(mywhich lvmdiskscan   )
         PVSCAN=$(mywhich pvscan        )
  DEBUGREISERFS=$(mywhich debugreiserfs )  
         HDPARM=$(mywhich hdparm        )  
       EXPORTFS=$(mywhich exportfs      )  
       REPQUOTA=$(mywhich repquota      )  
        TUNE2FS=$(mywhich tune2fs       ) 
 # Veritas FS
      PVDISPLAY=$(mywhich pvdisplay  )
           VXDG=$(mywhich vxdg       )
         VXDISK=$(mywhich vxdisk     )
        VXPRINT=$(mywhich vxprint    )
       VXLICREP=$(mywhich vxlicrep   )
 # Veritas Cluster
       HASTATUS=$(mywhich hastatus  )
          HARES=$(mywhich hares     )
          HAGRP=$(mywhich hagrp     )
         HATYPE=$(mywhich hatype    )
         HAUSER=$(mywhich hauser    )
        LLTSTAT=$(mywhich lltstat   )
      GABCONFIG=$(mywhich gabconfig )
           HACF=$(mywhich hacf      )
 # Redhat Cluster
        CLUSTAT=$(mywhich clustat   )
      CLUSVCADM=$(mywhich clusvcadm )
        MKQDISK=$(mywhich mkqdisk   )
 # CRM Cluster
            CRM=$(mywhich crm       )
        CRM_MON=$(mywhich crm_mon   )
     CRM_VERIFY=$(mywhich crm_verify)
       CIBADMIN=$(mywhich cibadmin  )
 # Network
       IFCONFIG=$(mywhich ifconfig  )
       IWCONFIG=$(mywhich iwconfig  )
        NETSTAT=$(mywhich netstat   )
        NFSSTAT=$(mywhich nfsstat   ) 
          ROUTE=$(mywhich route     ) 
        YPWHICH=$(mywhich ypwhich   )
            IP=$(mywhich ip         )
            ARP=$(mywhich arp       )
        MIITOOL=$(mywhich mii-tool  ) 
       IPTABLES=$(mywhich iptables  )
       IPCHAINS=$(mywhich ipchains  )
        ETHTOOL=$(mywhich ethtool   ) 
          BRCTL=$(mywhich brctl     ) 
 # Tuning
         IOSTAT=$(mywhich iostat   ) 
         VMSTAT=$(mywhich vmstat   ) 
           IPCS=$(mywhich ipcs     ) 
       MODPROBE=$(mywhich modprobe )
         DEPMOD=$(mywhich depmod   )
 # Other
       RUNLEVEL=$(mywhich runlevel )
           LSOF=$(mywhich lsof     )
            LPQ=$(mywhich lpq      ) 
            TAR=$(mywhich tar     )
         XVINFO=$(mywhich xvinfo   )
       POSTCONF=$(mywhich postconf )
 # Virtual Server
             XM=$(mywhich xm       )
          VIRSH=$(mywhich virsh    )
 # Gentoo 
      RC_UPDATE=$(mywhich rc-update)
}

##############################################################################
#                   Get the command line options
##############################################################################

while getopts "d:vhgV" OPT
do
    case "$OPT" in
      d)  if [ $OPTARG = "/" ] ; then
            echo "ERROR: root directory selected as target! "
            echo "Exiting."
            exit 1
        elif [ $OPTARG != "" ] ; then
         TOPDIR=${OPTARG%%/}
          fi 
    ;;
      g)  
          GPG=1
      ;;
      v)  VERBOSE=1
      ;;
      s)  FULLSOFT=1
      ;;
      h)  ShowUsage
      ;;
      V)  echo 
         echo "LINUXexplo Version : $MYVERSION" 
         echo
         exit 0
      ;;
    esac

done

##############################################################################
#                               MAIN 
##############################################################################

# Go away and find ALL my commands for this script
findCmds

if [[ ${GPG} -eq 1 ]] && [ ! -x ${GPG_BIN} ]; then
  echo "Sorry your system doesn't have GPG support. Install it before."
  exit 1
fi
   LOGTOP="${TOPDIR}/linux"
   LOGDIR="${LOGTOP}/explorer.${HOSTID}.${MYSHORTNAME}-${MYDATE}"
  TARFILE="${LOGDIR}.tgz"
NOTFNDLOG="${LOGDIR}/command_not_found.out"

if [ ! -d $LOGDIR ] ; then
 /bin/mkdir  -p $LOGDIR
fi

echo 
echo "$MYNAME - $MYVERSION"
echo 
echo "This program will gather system information and can take several"
echo "minutes to finish."
echo 
echo "You must complete some questions before start."
echo "It will produce a .tgz or .tgz.gpg file output and a directory"
echo "on your /opt/LINUXexplo/linux/ directory".
echo 
echo "Please follow the support instruction for submit this information"
echo "For contact the support please send a email to <$SUPPORT>"
echo 
echo "**********************************************************************"
echo "Personal information"
echo "**********************************************************************"
read -p "Company: " COMPANY
read -p "Your name: " NAME
read -p "Email: " EMAIL
read -p "Telephone: " TELEPHONE
read -p "Movil: " MOVIL
read -p "City: " CITY
read -p "Zipcode: " ZIPCODE
read -p "Country: " COUNTRY
echo 
echo "**********************************************************************"
echo "System information"
echo "**********************************************************************"
read -p "Server type (physical/virtual): " SERVER
read -p "Linux distribution: " LINUX
read -p "Problem description (small): " PROBLEM
read -p "System description (small): " SYSTEM
read -p "Enviroment (testing/production/workstation): " ENVIROMENT
echo 
read -p "Are you sure to continue? (Y/n)" REPLY 
if [[ "$REPLY"  = [Yy] ]]; then
    echo 
    Echo "Starting support gathering process."
else
    Echo "Aborting."
    exit 0
fi
echo 
cat << EOF > /tmp/README
-----------------------------------------------------------------------------
$MYNAME - $MYVERSION
-----------------------------------------------------------------------------
This directory contains system configuration information. 
Information was gathered on $MYDATE

Contact support made by: $NAME from $COMPANY
-----------------------------------------------------------------------------
CONTACT INFORMATION
-----------------------------------------------------------------------------
Company  : $COMPANY
Name     : $NAME
Email    : $EMAIL
Telephone: $TELEPHONE
Movil    : $MOVIL
City     : $CITY
Zipcode  : $ZIPCODE
Country  : $COUNTRY
----------------------------------------------------------------------------
SYSTEM INFORMATION
----------------------------------------------------------------------------
Date               : $($DATE "+%Y.%m.%d.%H.%M")
Command Line       : $0 $@
Hostname           : $MYHOSTNAME
Host Id            : $HOSTID 
System type        : $SERVER
Linux distribution : $LINUX
System platafform  : $($UNAME -m)
Kernel Version     : $($UNAME -r)
Eviroment          : $ENVIROMENT
System description : $SYSTEM

Problem description: $PROBLEM
----------------------------------------------------------------------------
Uptime:
$(${UPTIME})

swapon -s:
$($SWAPON -s | $GREP -v "Filename")

vmstat:
$($VMSTAT -t 2> /dev/null || $VMSTAT 2> /dev/null)
----------------------------------------------------------------------------
EOF

Echo "[*] Creating Explorer Directory: $LOGDIR"
if [ -d "$LOGTOP" ]; then
  if [[ "${LOGTOP}" != "/" && "${LOGTOP}" != "/var" && "${LOGTOP}" != "/usr" ]]; then
   if [ ${VERBOSE} -gt 0 ]; then echo "[*] Removing ${LOGTOP}"; fi
    $RM -rf ${LOGTOP}
  fi
fi

#  make sure this is a linux system
if [ "$($UNAME -s)" != "Linux" ]; then
 echo "ERROR: This script is only for Linux systems "
 exit 1
fi

# Make the directory I'm going to store my files 
if [ ! -d $LOGDIR ]; then
 $MKDIR -p $LOGDIR
 
 if [ $? -ne 0 ]; then
  echo "ERROR: Creating directory $LOGDIR"
  exit 1
 else
  $CHMOD 750 $LOGDIR
 fi
fi

mv /tmp/README ${LOGDIR}/README
echo "$MYVERSION" > ${LOGDIR}/rev

# Create the default directories I'm going to use.
for Dir in etc system disks lp var logs hardware boot clusters virtual
do
 if [ ! -d ${LOGDIR}/${Dir} ]; then
  $MKDIR -p ${LOGDIR}/${Dir}
  if [ $? -ne 0 ]; then
   echo "ERROR: Creating directory $LOGDIR"
   exit 1
  else
   $CHMOD 750 ${LOGDIR}/${Dir}
  fi
 fi
done

##############################################################################
# We need the password file and the group file so that we can work out who 
# owns what file.  
# Notice we are not copying the shadow file !!
##############################################################################

$CP -p /etc/passwd ${LOGDIR}/etc/passwd
$CP -p /etc/group  ${LOGDIR}/etc/group
if [ -f /etc/sudoers ]; then
 $CP -p /etc/sudoers ${LOGDIR}/etc/sudoers
fi

##############################################################################
# Release Section
##############################################################################

Echo "[*] Release Section"

if [ -f "/etc/debian_version" ] || [ -f "/etc/redhat-release" ]; then
  $CP -p "/etc/debian_version" ${LOGDIR}/system 2> /dev/null || $CP -p /etc/redhat-release ${LOGDIR}/system 2> /dev/null
fi

if [ -f /etc/issue ]; then
  $CP -p "/etc/issue" ${LOGDIR}/system/issue
fi

if [ -f /etc/issue.net ]; then
 $CP -p "/etc/issue.net" ${LOGDIR}/etc/issue.net 
fi

if [ -f /etc/motd ]; then
 $CP -p "/etc/motd" ${LOGDIR}/etc/motd
fi

#############################################################################
# Installation kickstart and log copy
#############################################################################

if [ -f "/root/anaconda-ks.cfg" ]; then 
  $MKDIR -p "${LOGDIR}/Installation"
  $CP -p "/root/anaconda-ks.cfg" ${LOGDIR}/Installation/anaconda-ks.cfg
fi

##############################################################################
# Hardware/Proc Section
##############################################################################

Echo "[*] Hardware/Proc Section"

# Collecting information from the proc directory
$MKDIR -p ${LOGDIR}/proc
$FIND /proc -type f -print 2>/dev/null | \
        $GREP -v "/proc/kcore"    | \
        $GREP -v "/proc/bus/usb"  | \
        $GREP -v "/proc/xen/xenbus"  | \
        $GREP -v "/proc/acpi/event"  | \
        $GREP -v "pagemap"  | \
        $GREP -v "clear_refs"  | \
        $GREP -v "/proc/kmsg" > $TMPFILE  

for i in $($CAT $TMPFILE)
do
         Dirname=$(dirname $i)
        Filename=$(basename $i)

        if [ ! -d ${LOGDIR}${Dirname} ]; then
                $MKDIR -p ${LOGDIR}${Dirname}
        fi
        if [ -e "$i" ] ; then
   $CAT "$i" > ${LOGDIR}${Dirname}/${Filename} 2>&1
        fi
done

$RM -f $TMPFILE

##############################################################################
#           Device Information
##############################################################################

if [ -x $CARDCTL ]; then
 $CARDCTL info   > ${LOGDIR}/hardware/cardctl-info.out   2>&1
 $CARDCTL status > ${LOGDIR}/hardware/cardctl-status.out 2>&1
 # $CARDCTL ident> ${LOGDIR}/hardware/cardctl-ident.out 2>&1
fi

if [ -x $LSPCI ]; then 
 $LSPCI    > ${LOGDIR}/hardware/lspci.out   2>&1
 $LSPCI -n > ${LOGDIR}/hardware/lspci-n.out 2>&1

 $LSPCI | while read line
 do
         Bus=$(/bin/echo $line 2>/dev/null | awk '{ print $1 }')
         $LSPCI -vv -s $Bus > ${LOGDIR}/hardware/lspci_-vv_-s_${Bus}.out 2>&1
 done
fi

# Get the port names from the HDA cards
for i in /sys/class/scsi_host/host*/device/fc_host\:host*/port_name 
do
 if [ -f $i ]; then
  name=$( echo $i | sed 's/\//_/g' | sed 's/^_//g')
         echo "Port Name : $(cat $i )" >> ${LOGDIR}/hardware/cat_${name}.out
 fi
done

# Get a listing of the /dev directory
$MKDIR ${LOGDIR}/dev

$LS -laR /dev  > ${LOGDIR}/dev/ls_-laR_dev.out

if [ -x "$LSUSB" ]; then
 $LSUSB -xv > ${LOGDIR}/hardware/lsusb_-xv.out 2>&1
 $LSUSB -tv > ${LOGDIR}/hardware/lsusb_-tv.out 2>&1
fi

if [ -x "$LSDEV" ]; then
 $LSDEV -type adaptor > ${LOGDIR}/hardware/lsdev_-type_adaptor.out 2>&1
fi

if [ -x "$ACPI" ]; then
 $ACPI -V > ${LOGDIR}/hardware/acpi-V.out 2>&1
fi

if [ -x $FREE ]; then 
 $FREE    > ${LOGDIR}/hardware/free.out
 $FREE -k > ${LOGDIR}/hardware/free_-k.out
fi

$LS -laR /dev > ${LOGDIR}/hardware/ls-laR_dev.out

if [ -d /udev ]; then
        $LS -laR /udev > ${LOGDIR}/hardware/ls-laR_udev.out
fi

# Tape information
if [ -f /etc/stinit.def ]; then 
 $CP -p /etc/stinit.def ${LOGDIR}/etc/stinit.def
fi

# Global Devices list
if [ -x "$LSHAL" ]; then
 $LSHAL > ${LOGDIR}/hardware/lshal.out
fi

if [ -x /usr/share/rhn/up2date_client/hardware.py ]; then
 /usr/share/rhn/up2date_client/hardware.py > ${LOGDIR}/hardware/hardware.py.out 2>&1
fi

if [ -x "$SMARTCTL" ]; then
 for device in $( $LS /dev/hd[a-z] /dev/sd[a-z] /dev/st[0-9] /dev/sg[0-9]  2> /dev/null)
 do
  name=$( echo $device | sed 's/\//_/g' )
  ${SMARTCTL} -a $device 2>/dev/null 1> ${LOGDIR}/hardware/smartctl-a_${name}.out
 done
fi

##############################################################################
# Collect Hardware information from the hwinfo program if installed
##############################################################################

if [ -x $HWINFO ]; then
 $HWINFO                 > ${LOGDIR}/hardware/hwinfo.out                 2>&1
 $HWINFO  --isapnp       > ${LOGDIR}/hardware/hwinfo_--isapnp.out        2>&1
 $HWINFO  --scsi         > ${LOGDIR}/hardware/hwinfo_--scsi.out          2>&1 
 $HWINFO  --framebuffer  > ${LOGDIR}/hardware/hwinfo_--framebuffer.out   2>&1
fi

if [ -x "$PROCINFO"  ]; then
 $PROCINFO  > ${LOGDIR}/hardware/procinfo.out 2>&1
fi

if [ -x "$DMIDECODE" ]; then
 $DMIDECODE  > ${LOGDIR}/hardware/dmidecode.out 2>&1
fi

if [ -x $LSHW  ]; then
 $LSHW > ${LOGDIR}/hardware/lshw.out 2>&1
fi

##############################################################################
# Boot Section
##############################################################################

Echo "[*] Boot Section"

if [ -x "/sbin/lilo" ]; then
 /sbin/lilo -q > $LOGDIR/system/lilo_-q  2>&1
fi

$LS -alR /boot > ${LOGDIR}/system/ls-alR_boot.out 2>&1
$MKDIR -p ${LOGDIR}/boot/grub

for i in  /boot/grub/menu.lst /boot/grub/grub.conf \
  /boot/grub.conf /boot/grub/device.map 
do
 if [ -f ${i} ]; then
  $CP -p ${i} ${LOGDIR}/${i}
 fi
done

if [ -f /etc/inittab ]; then
 $CP -p /etc/inittab ${LOGDIR}/etc/inittab
fi

##############################################################################
# /etc Config Files Section
##############################################################################

Echo "[*] /etc Config Files Section"

for i in $( $FIND /etc -name "*.conf" -o -name "*.cf" -o -name "*.cnf" ) 
do
        dirname="$(dirname $i)"
        filename="$(basename $i)"

 if [ ! -d ${LOGDIR}/${dirname} ]; then
  $MKDIR -p ${LOGDIR}/${dirname}
 fi

 $CP -p $i ${LOGDIR}/${dirname}/${filename}
done

if [ -f /etc/nologin.txt ]; then
 $CP -p /etc/nologin.txt ${LOGDIR}/etc/nologin.txt
fi

$CP -p /etc/securetty ${LOGDIR}/etc/securetty
$CP -p /etc/shells ${LOGDIR}/etc/shells

if [ -f  /etc/krb.realms ]; then
 $CP -p /etc/krb.realms ${LOGDIR}/etc/krb.realms
fi

##############################################################################
# Copy the /etc/profile.d scripts 
##############################################################################

if [ -d /etc/profile.d ]; then
 $CP -Rp /etc/profile.d ${LOGDIR}/etc
fi

##############################################################################
# Copy the /etc/modprobe.d scripts 
##############################################################################

if [ -d /etc/profile.d ]; then
 $CP -Rp /etc/modprobe.d ${LOGDIR}/etc
fi

##############################################################################
# New in Fedora 9 
##############################################################################

if [ -d /etc/event.d ]; then
 $CP -Rp /etc/event.d ${LOGDIR}/etc
fi

##############################################################################
# Get all the pcmcia config information
##############################################################################

if [ -d /etc/pcmcia ]; then
 if [ ! -d ${LOGDIR}/pcmcia ]; then
  $MKDIR -p ${LOGDIR}/etc/pcmcia 
 fi
 $CP -R -p /etc/pcmcia/*.opts ${LOGDIR}/etc/pcmcia 
fi

##############################################################################
# Performance/System Section
##############################################################################

Echo "[*] Performance/System Section"

if [ -e /proc/loadavg ]; then
 $CAT /proc/loadavg > ${LOGDIR}/system/loadavg.out
fi

if [ -e /proc/stat ]; then
 $CAT /proc/stat > ${LOGDIR}/system/stat.out
fi

$DATE     > ${LOGDIR}/system/date.out
$FREE     > ${LOGDIR}/system/free.out
$PS auxw  > ${LOGDIR}/system/ps_auxw.out
$PS -lef  > ${LOGDIR}/system/ps_-elf.out
$PSTREE   > ${LOGDIR}/system/pstree.out
$HOSTNAME > ${LOGDIR}/system/hostname.out
$IPCS -a  > ${LOGDIR}/system/ipcs_-a.out
$IPCS -u  > ${LOGDIR}/system/ipcs_-u.out
$IPCS -l  > ${LOGDIR}/system/ipcs_-l.out
$UPTIME   > ${LOGDIR}/system/uptime.out
ulimit -a > ${LOGDIR}/system/ulimit_-a.out

if [ -x $VMSTAT ]; then
 $VMSTAT -s > ${LOGDIR}/system/vmstat_-s.out
fi

##############################################################################
# OK not sure where this should go so I've put it here instead
##############################################################################

if [ "$LSOF" != "" ]; then
 $LSOF > ${LOGDIR}/system/lsof.out 2>&1
fi

##############################################################################
# Kernel Section
##############################################################################

Echo "[*] Kernel Section"

$SYSCTL -A> ${LOGDIR}/etc/sysctl_-A.out   2>&1
$UNAME -a > ${LOGDIR}/system/uname_-a.out 2>&1
$RUNLEVEL > ${LOGDIR}/system/runlevel.out 2>&1
$WHO -r   > ${LOGDIR}/system/who_-r.out   2>&1

if [ -f /etc/conf.modules ]; then
 $CP -p /etc/conf.modules ${LOGDIR}/etc/conf.modules
fi

if [ ! -d ${LOGDIR}/kernel/info ]; then
 $MKDIR -p ${LOGDIR}/kernel/info
fi

$LSMOD | while read line
do 
 kernmod=$( echo $line | $AWK '{ print $1 }' )
 $MODINFO $kernmod  > ${LOGDIR}/kernel/info/${kernmod}.out 2>&1
done

$LSMOD > ${LOGDIR}/kernel/lsmod.out 2>&1

if [ -x $KSYMS ]; then 
 $KSYMS > ${LOGDIR}/kernel/ksyms.out 2>&1
fi

$CP -p /lib/modules/$($UNAME -r)/modules.dep ${LOGDIR}/kernel/modules.dep

$MODPROBE -n -l -v  > ${LOGDIR}/kernel/modprobe_-n-l-v.out  2>&1
$DEPMOD -av         > ${LOGDIR}/kernel/depmod_-av.out       2>&1
$CAT /proc/modules  > ${LOGDIR}/kernel/modules.out          2>&1

##############################################################################
# Just incase we have a debian system
##############################################################################

if [ -f /etc/kernel-pkg.conf ]; then
 $CP -p /etc/kernel-pkg.conf ${LOGDIR}/etc/kernel-pkg.conf
fi
                                                                                
if [ -f /etc/kernel-img.conf ]; then
 $CP -p /etc/kernel-img.conf ${LOGDIR}/etc/kernel-img.conf
fi

##############################################################################
# Get the kernel configuration details from a 2.6 kernel
##############################################################################

if [ -f /proc/config.gz ]; then
 gunzip -c /proc/config.gz > ${LOGDIR}/kernel/config 
fi

##############################################################################
# Hot Plug Section
##############################################################################

Echo "[*] Hot Plug Section"

if [ -d /etc/hotplug ]; then
 if [ ! -d ${LOGDIR}/etc/hotplug ]; then
  $MKDIR -p  ${LOGDIR}/etc/hotplug
 fi
 cd /etc/hotplug
 $CP -Rp * ${LOGDIR}/etc/hotplug/
fi

##############################################################################
# Disk Section
##############################################################################

Echo "[*] Disk Section"

# Check to see what is mounted
$DF -k     > ${LOGDIR}/disks/df_-k.out     2>&1
$DF -h     > ${LOGDIR}/disks/df_-h.out     2>&1
$DF -ki    > ${LOGDIR}/disks/df_-ki.out    2>&1
$DF -aki   > ${LOGDIR}/disks/df_-aki.out   2>&1
$DF -akih  > ${LOGDIR}/disks/df_-akih.out  2>&1

if [ -x $SWAPON ]; then
 $SWAPON -s > ${LOGDIR}/disks/swapon_-s.out 2>&1
fi

$MOUNT   > ${LOGDIR}/disks/mount.out     2>&1
$MOUNT -l > ${LOGDIR}/disks/mount_-l.out  2>&1

$CAT /proc/mounts > ${LOGDIR}/disks/mounts.out 2>&1

# fstab Information
$CP -p /etc/fstab ${LOGDIR}/disks/fstab 2>&1

# Display any quotas that my have been set
$REPQUOTA -av > ${LOGDIR}/disks/repquota_-av 2>&1

##############################################################################
# Disk Format Information
##############################################################################

DISKLIST=$($FDISK -l  2>/dev/null | grep "^/dev" | sed 's/[0-9]//g' | awk '{ print $1 }' | sort -u)

if [ -x $FDISK ]; then
 $FDISK -l > ${LOGDIR}/disks/fdisk_-l.out 2>&1
fi

if [ -x $SFDISK ]; then
  $SFDISK -d > ${LOGDIR}/disks/sfdisk_-d.out 2>&1
 $SFDISK -l > ${LOGDIR}/disks/sfdisk_-l.out 2>&1
 $SFDISK -s > ${LOGDIR}/disks/sfdisk_-s.out 2>&1
fi

if [ -x $BLKID ]; then
 $BLKID > ${LOGDIR}/disks/blkid.out 2>&1
fi

for DISK in $DISKLIST
do
 NEWDISK=$(/bin/echo $DISK |  sed s'/\/dev\///g' )
 if [ -x $HDPARM ]; then $HDPARM -vIi $DISK > ${LOGDIR}/disks/hdparm_-vIi_${NEWDISK}.out 2>&1; fi
 if [ -x $SFDISK ]; then $SFDISK  -l  $DISK > ${LOGDIR}/disks/sfdisk_-l_-${NEWDISK}.out  2>&1; fi
 if [ -x $FDISK  ]; then $FDISK   -l  $DISK > ${LOGDIR}/disks/fdisk_-l_-${NEWDISK}.out   2>&1; fi
done

if [ -x "$DUMPE2FS" ]; then
 PARTS=$($FDISK -l 2>/dev/null | grep "^/dev" | awk '{ print $1 }')
 for parts in $PARTS; do
    name=$(/bin/echo $parts | sed 's/\//_/g')
    $DUMPE2FS $parts > ${LOGDIR}/disks/dumpe2fs${name}.out 2>&1
 done
fi

##############################################################################
# Collect Detailed SCSI information about the disks
##############################################################################

if [ -x "$SCSI_ID" ]; then
    for i in $($LS sd[a-z] 2>/dev/null)
    do
        if [ -b /dev/${i} ] ; then
         disk_name=$(/bin/echo /dev/${i} | sed 's/\//_/g')
            $SCSI_ID -g -p 0x80 -d /dev/${i} -s /block/${i} \
                 > ${LOGDIR}/disks/scsi_id_-g_-p_0x80_${disk_name}.out 2>&1

            $SCSI_ID  -g -p 0x83 -d /dev/${i} -s /block/${i} \
                 > ${LOGDIR}/disks/scsi_id_-g_-p_0x83_${disk_name}.out 2>&1
        fi
    done
fi

if [ -x $SYSTOOL ]; then
    $SYSTOOL -c scsi_host -v  > ${LOGDIR}/disks/systool_-c_scsi_host_-v.out 2>&1
fi

##############################################################################
# If we are using multi-pathings then print out the 
# multi-pathing information
##############################################################################

if [ -x "$MULTIPATH" ]; then
  $MULTIPATH -ll  > ${LOGDIR}/disks/multipath_-ll.out 2>&1
  $MULTIPATH -v2  > ${LOGDIR}/disks/multipath_-v2.out 2>&1
fi

if [ -x "$DMSETUP" ]; then
 $DMSETUP ls         > ${LOGDIR}/disks/dmsetup_ls.out        2>&1
  $DMSETUP ls --tree  > ${LOGDIR}/disks/dmsetup_ls--info.out  2>&1
  $DMSETUP info       > ${LOGDIR}/disks/dmsetup_info.out      2>&1
  $DMSETUP info       > ${LOGDIR}/disks/dmsetup_info-C.out    2>&1
  $DMSETUP deps       > ${LOGDIR}/disks/dmsetup_deps.out      2>&1
  $DMSETUP targets    > ${LOGDIR}/disks/dmsetup_targets.out   2>&1
fi

# Check to see what iscsi devices have
if [ -x "$ISCSIADM" ]; then
 $ISCSIADM -m session > ${LOGDIR}/disks/iscsiadm_-m_session.out 2>&1
fi

# Check to see what emc powerpath devices we have 
if [ -x "$POWERMT" ]; then
 mkdir -p ${LOGDIR}/disks/emcpower
 $POWERMT check_registration       >${LOGDIR}/disks/emcpower/powermt_check_registration.out 2>&1
 $POWERMT display path             >${LOGDIR}/disks/emcpower/powermt_display_path.out 2>&1
 $POWERMT display ports            >${LOGDIR}/disks/emcpower/powermt_display_ports.out 2>&1
 $POWERMT display paths class=all  >${LOGDIR}/disks/emcpower/powermt_display_paths_class=all.out 2>&1
 $POWERMT display ports dev=all    >${LOGDIR}/disks/emcpower/powermt_display_ports_dev=all.out 2>&1
 $POWERMT display dev=all          >${LOGDIR}/disks/emcpower/powermt_display_dev=all.out 2>&1

 # Get the partition details for the EMC devices
 for emcdevice in $(ls /dev/emcpower*)
 do
         emc_disk_name=$(/bin/echo ${emcdevice} | sed 's/\//_/g')
        $FDISK -l $emcdevice > ${LOGDIR}/disks/emcpower/fdisk_-l_${emc_disk_name}.out 2>&1
 done
fi

##############################################################################
# Veritas Volume Manager / Symantec Veritas Storage Foundation  Information
##############################################################################
#
# Changes - "Vincent S. Cojot"  - 04-11-2008 
#           added licence checks
#           VxVM/VxFS Configuration Backups
#           Some minor bug fixes
#
##############################################################################

if [ -d /etc/vx/licenses/lic ]; then
    Echo "[*] Veritas Volume Manager / Symantec Veritas Storage Foundation Section"
    Echo "[*] VxVM/VxFS/VCS/VVR licensing Section"
 
    if [ ! -d  ${LOGDIR}/etc/vx/licenses/lic ]; then
        $MKDIR -p ${LOGDIR}/etc/vx/licenses/lic
    fi
 
    $CP -Rp /etc/vx/licenses/lic ${LOGDIR}/etc/vx/licenses/ 
    $VXLICREP -e > ${LOGDIR}/system/vxlicrep_-e.out 2>&1
fi

if [ -d /etc/vx/cbr/bk ]; then
    Echo "[*] VxVM/VxFS Configuration Backups"

    if [ ! -d  ${LOGDIR}/etc/vx/cbr/bk ]; then
        $MKDIR -p ${LOGDIR}/etc/vx/cbr/bk
    fi

    $CP -Rp /etc/vx/cbr/bk ${LOGDIR}/etc/vx/cbr/
fi

if [ -d /dev/vx ]; then
    Echo "[*] VxVM live configuration"

 if [ ! -d  ${LOGDIR}/disks/vxvm ]; then
  $MKDIR -p ${LOGDIR}/disks/vxvm
  $MKDIR -p ${LOGDIR}/disks/vxvm/logs
  $MKDIR -p ${LOGDIR}/disks/vxvm/disk_groups
 fi

 $LS -laR /dev/vx >  ${LOGDIR}/disks/vxvm/ls-lR_dev_vx.out 2>&1

 if [ -x $VXDISK  ]; then
  $VXDISK list    > ${LOGDIR}/disks/vxvm/vxdisk_list.out    2>&1
  $VXDISK -o alldgs list > ${LOGDIR}/disks/vxvm/vxdisk_-o_alldgs_list.out 2>&1
  $VXPRINT -Ath   > ${LOGDIR}/disks/vxvm/vxprint_-Ath.out   2>&1
  $VXPRINT -h     > ${LOGDIR}/disks/vxvm/vxprint_-h.out     2>&1
  $VXPRINT -hr    > ${LOGDIR}/disks/vxvm/vxprint_-hr.out    2>&1
  $VXPRINT -th    > ${LOGDIR}/disks/vxvm/vxprint_-th.out    2>&1
  $VXPRINT -thrL  > ${LOGDIR}/disks/vxvm/vxprint_-thrL.out  2>&1
 fi

 if [ -x $VXDG ]; then
  $VXDG -q list > ${LOGDIR}/disks/vxvm/vxdg_-q_-list.out 2>&1
 fi

    #------------------------------------------------------------------------
    # Collect individual volume information
    #------------------------------------------------------------------------

 for i in $($VXDG -q list|awk '{print $1}')
 do
  $VXDG list $i     > ${LOGDIR}/disks/vxvm/disk_groups/vxdg_list_${i}.out
  $VXDG -g $i free  > ${LOGDIR}/disks/vxvm/disk_groups/vxdg_-g_free_${i}.out
  $VXPRINT -vng $i  > ${LOGDIR}/disks/vxvm/disk_groups/vxprint_-vng_${i}.out
  VOL=$(cat ${LOGDIR}/disks/vxvm/disk_groups/vxprint_-vng_${i}.out)

  $VXPRINT -hmQqg $i $VOL  \
   > ${LOGDIR}/disks/vxvm/disk_groups/vxprint_-hmQqg_4vxmk=${i}.out 2>&1
  $VXPRINT -hmQqg $i   \
   > ${LOGDIR}/disks/vxvm/disk_groups/vxprint_-hmQqg=${i}.out 2>&1
 done
fi

##############################################################################
# Get the filesystems Characteristics
##############################################################################

for i in $($DF -kl | grep ^/dev | awk '{ print $1 }')
do
 if [ -x $TUNE2FS  ]; then 
    name=$(/bin/echo $i | sed 's/\//_/g')
  $TUNE2FS  -l $i > ${LOGDIR}/disks/tunefs_-l_${name}.out 2>&1 
 fi
done


##############################################################################
# NFS Information
##############################################################################

# Copy NFS config files around
if [ -f /etc/auto.master ]; then
 $CP -p /etc/auto* ${LOGDIR}/etc
fi

# lets see what we have really exported 
if [ -x $EXPORTFS ]; then
 $EXPORTFS -v > ${LOGDIR}/disks/exportfs_-v.out 2>&1
fi

# This is what we have configured to be exported 
if [ -f /etc/exports ]; then
 $CP -p /etc/exports ${LOGDIR}/etc/exports
fi

if [ -x "$NFSSTAT" ]; then
 $NFSSTAT -a > ${LOGDIR}/disks/nfsstat_-a.out 2>&1
fi

##############################################################################
# Raid Information
##############################################################################

if [ -f /etc/raidtab ]; then
 $CP -p /etc/raidtab ${LOGDIR}/etc/raidtab
fi

$MKDIR ${LOGDIR}/disks/raid 

if [ -x "$LSRAID" ]; then
 for i in $( $LS /dev/md[0-9]* 2>/dev/null )
 do
         name=$(/bin/echo $i | sed 's/\//_/g')
      $LSRAID -a $i > ${LOGDIR}/disks/raid/lsraid_-a_${name}.out > /dev/null 2>&1
 done
fi

if [ -x "$MDADM" ]; then
 for i in $( $LS /dev/md[0-9]* 2>/dev/null )
 do
         name=$( echo $i | sed 's/\//_/g' )
        $MDADM --detail /dev/$i > ${LOGDIR}/disks/raid/mdadm_--detail_${name}.out > /dev/null 2>&1

            if [ ! -s ${LOGDIR}/disks/raid/mdadm--detail_${name}.out ]; then
              $RM -f ${LOGDIR}/disks/raid/mdadm--detail_${name}.out
            fi
 done
fi

##############################################################################
# LVM Information
##############################################################################

LVMDIR=${LOGDIR}/disks/lvm
$MKDIR -p ${LVMDIR} 

if [ -x "$LVDISPLAY" ]; then
 $LVDISPLAY -vv  > ${LVMDIR}/lvdisplay_-vv.out  2>&1
 $VGDISPLAY -vv  > ${LVMDIR}/vgdisplay_-vv.out  2>&1
 $VGSCAN -vv     > ${LVMDIR}/vgscan_-vv.out     2>&1
 $LVMDISKSCAN -v > ${LVMDIR}/lvmdiskscan_-v.out 2>&1
 $PVSCAN -v      > ${LVMDIR}/pvscan_-v.out      2>&1
 $PVDISPLAY -v   > ${LVMDIR}/pvdisplay_-v.out   2>&1
 $VGS -v         > ${LVMDIR}/vgs-v.out          2>&1
 $PVSCAN -v      > ${LVMDIR}/pvscan-v.out       2>&1
fi

if [ -x "$LVM" ]; then
 $LVM dumpconfig  > ${LVMDIR}/lvm_dumpconfig.out 2>&1
 $LVM lvs         > ${LVMDIR}/lvm_lvs.out        2>&1

  # Map every DM device to a disk
  $LVDISPLAY | $AWK  '/LV Name/{n=$3} /Block device/{d=$3; sub(".*:","dm-",d); print d,n;}' > ${LVMDIR}/devices.out 2>&1
fi

##############################################################################
# DM Information
##############################################################################

# Work out which dm device is being used by each filesystem
grep dm-[0-9] /proc/diskstats | awk '{print $1, $2, $3}' | while read line
do
  Major=$(echo $line | awk '{print $1}')
  Minor=$(echo $line | awk '{print $2}')
 Device=$(echo $line | awk '{print $3}')

 List=$(ls -la /dev/mapper | grep "${Major},  ${Minor}" | awk '{print $(NF)}')
 echo "$Device = $List " >> ${LOGDIR}/disks/dm-info.out
done 

##############################################################################
# Software Section
##############################################################################

Echo "[*] Software Section"
$MKDIR -p ${LOGDIR}/software/rpm-packages

#
# Systemd 
# 
if [ -x "$SYSTEMCTL" ]; then 
  $MKDIR ${LOGDIR}/software/systemd

  # systemd checks
  $SYSTEMD  --dump-configuration-items > ${LOGDIR}/software/systemd/systemd_--dump-configuration-items.out 2>&1
  $SYSTEMD  --test                     > ${LOGDIR}/software/systemd/systemd_--test.out                     2>&1 

  # systemd-cgls tree
  if [ -x "$SYSTEMDCGLS" ]; then
    $SYSTEMDCGLS  > ${LOGDIR}/software/systemd/systemd-cgls.out 2>&1
  fi

  if [ -x "$SYSTEMDLOGINCTL" ]; then
    $SYSTEMDLOGINCTL --all     > ${LOGDIR}/software/systemd/systemd-loginctl_--all.out     2>&1
    $SYSTEMDLOGINCTL show-seat > ${LOGDIR}/software/systemd/systemd-loginctl_show-seat.out 2>&1
    $SYSTEMDLOGINCTL show-user > ${LOGDIR}/software/systemd/systemd-loginctl_show_user.out 2>&1
  fi

  # Now systemctl checks
  $SYSTEMCTL --version        > ${LOGDIR}/software/systemd/systemctl_--version.out        2>&1
  $SYSTEMCTL                  > ${LOGDIR}/software/systemd/systemctl.out                  2>&1 
  $SYSTEMCTL --all            > ${LOGDIR}/software/systemd/systemctl_--all.out            2>&1 
  $SYSTEMCTL list-unit-files  > ${LOGDIR}/software/systemd/systemctl_list-unit-files.out  2>&1 
  $SYSTEMCTL list-jobs        > ${LOGDIR}/software/systemd/systemctl_list-jobs.out        2>&1 
  $SYSTEMCTL dump             > ${LOGDIR}/software/systemd/systemctl_dump.out             2>&1
  $SYSTEMCTL show-environment > ${LOGDIR}/software/systemd/systemctl_show-environment.out 2>&1

  if [ -d ${LOGDIR}/etc/systemd ]; then
    $LN -s ${LOGDIR}/etc/systemd ${LOGDIR}/software/systemd/etc-systemd 2>&1
  fi
fi

if [ -x "$RPM" ]; then
 if [ -x "$CHKCONFIG" ]; then
  $CHKCONFIG --list > ${LOGDIR}/software/chkconfig--list.out 2>&1
 fi

 # Short Description of all packages installed
 echo "Package_Name  Version  Size  Description"  > ${LOGDIR}/software/rpm-qa--queryformat.out
 echo "===================================================================================" >> ${LOGDIR}/software/rpm-qa--queryformat.out
 $RPM -qa --queryformat '%-25{NAME}  %-16{VERSION} %-10{RELEASE} %-10{DISTRIBUTION}  %-10{SIZE} %-10{INSTALLTIME:date} %{SUMMARY}\n' | sort >> ${LOGDIR}/software/rpm-qa--queryformat.out 2>&1

 # Long Description of all packages installed
 $RPM -qa > ${LOGDIR}/software/rpm_-qa 2>&1
 $CAT ${LOGDIR}/software/rpm_-qa | while read line 
 do
   $RPM -qi  $line > ${LOGDIR}/software/rpm-packages/${line}.out 2>&1
  if [ $? -ne 0 ]; then
   echo "ERROR: ${line} problem"
  fi
 done

 # print a list os installed packages sorted by install time:
 $RPM -qa -last | tac > ${LOGDIR}/software/rpm-packages/rpm_-qa_-last.out

 #############################################################
 # If you enable verification then this then it's going to 
 # take a some time to complete........
 #############################################################
 if [ ${FULLSOFT} -gt 0 ]; then
   $RPM -Va > ${LOGDIR}/software/rpm-Va.out 2>&1
 fi
fi

if [ -f /usr/lib/rpm/rpmrc ]; then 
 $CP -p /usr/lib/rpm/rpmrc ${LOGDIR}/software/rpmrc
fi

# Make a copy of the yum config files so that we can compare them
YUMDIR=${LOGDIR}/software/yum

if [ -d /etc/yum.repos.d ]; then
 $MKDIR -p $YUMDIR/yum.repos.d
 $CP /etc/yum.repos.d/* $YUMDIR/yum.repos.d/
fi

if [ -x "$YUM" ]; then
  $YUM list installed       > ${YUMDIR}/yum_list_installed.out        2>&1
  $YUM info installed       > ${YUMDIR}/yum_info_installed.out        2>&1
  $YUM repolist all         > ${YUMDIR}/yum_repolist_all.out          2>&1
  $YUM repolist enabled     > ${YUMDIR}/yum_repolist_enabled.out      2>&1
  $YUM repolist disabled    > ${YUMDIR}/yum_repolist_disabled.out     2>&1
  $YUM -v repolist all      > ${YUMDIR}/yum_-v_repolist_all.out       2>&1
  $YUM -v repolist enabled  > ${YUMDIR}/yum_-v_repolist_enabled.out   2>&1
  $YUM -v repolist disabled > ${YUMDIR}/yum_-v_repolist_disabled.out  2>&1
fi

##############################################################################
# Some Debian specific info here for packages
##############################################################################

if [ -f /var/lib/dpkg/available ]; then
 $MKDIR -p ${LOGDIR}/var/lib/dpkg

 if [ -d /etc/apt ]; then
  $MKDIR -p ${LOGDIR}/etc/apt
 fi

 if [ -f /etc/apt/sources.list ]; then
  $CP -p /etc/apt/sources.list ${LOGDIR}/etc/apt/sources.list
 fi

 if [ -f /etc/apt/apt.conf ]; then
  $CP -p /etc/apt/apt.conf ${LOGDIR}/etc/apt/apt.conf
 fi

 if [ -f /etc/apt/apt.conf ]; then
  $CP -p /etc/apt/apt.conf ${LOGDIR}/etc/apt/apt.conf
 fi

 if [ -f /var/lib/dpkg/status ]; then
  $CP -p /var/lib/dpkg/status ${LOGDIR}/var/lib/dpkg/status
 fi

 if [ -x "$DPKG" ]; then
   $DPKG  --list            > ${LOGDIR}/software/dpkg_--list.out
   $DPKG  -all              > ${LOGDIR}/software/dpkg_-al.out
   $DPKG  --get-selections  > ${LOGDIR}/software/dpkg_-get-selections.out
 fi
 
 if [ -x "$DPKG_QUERY" ]; then
   $DPKG_QUERY -W  > ${LOGDIR}/software/dpkg-query_-W.out
 fi

 if [ -x /usr/bin/apt-config ]; then
  /usr/bin/apt-config dump > ${LOGDIR}/software/apt-config_dump.out
 fi 
fi

##############################################################################
# Some SuSE specific info here for packages
##############################################################################

if [ -x "$ZYPPER" ]; then
 $ZYPPER repos         > ${LOGDIR}/software/zypper_repos         2>&1
 $ZYPPER locks         > ${LOGDIR}/software/zypper_locks         2>&1
 $ZYPPER patches       > ${LOGDIR}/software/zypper_patches       2>&1
 $ZYPPER packages      > ${LOGDIR}/software/zypper_packages      2>&1
 $ZYPPER patterns      > ${LOGDIR}/software/zypper_patterns      2>&1
 $ZYPPER products      > ${LOGDIR}/software/zypper_products      2>&1
 $ZYPPER services      > ${LOGDIR}/software/zypper_services      2>&1
 $ZYPPER licenses      > ${LOGDIR}/software/zypper_licenses      2>&1
 $ZYPPER targetos      > ${LOGDIR}/software/zypper_targetos      2>&1
 $ZYPPER list-updates  > ${LOGDIR}/software/zypper_list-updates  2>&1
fi

##############################################################################
# This Section is for Gentoo - so we can work out what packages are installed
# Provided by Adam Bills 
##############################################################################

GENTOPKGS=${LOGDIR}/software/gento_kgs.out
if [ -d  /var/db/pkg ]; then

 ( find /var/db/pkg -type f -name environment.bz2 | while read x; do bzcat $x | \
  awk -F= '{
   if ($1 == "CATEGORY"){
    printf "%s ", $2;
   }
   if ($1 == "PN"){
    printf "%s ",$2;
   }

   if ($1 == "PV"){
    print $2;
   }
  }'; done

 ) >> $GENTOPKGS
fi

#  Show the bootup info
if [ -x $RC_UPDATE ]; then 
 $RC_UPDATE show >> ${LOGDIR}/software/rc-update_show.out
fi

##############################################################################
# sysconfig Section
##############################################################################

Echo "[*] Sysconfig Section"
if [ -d /etc/sysconfig ]; then
 if [ ! -d ${LOGDIR}/etc/sysconfig ]; then
  $MKDIR -p ${LOGDIR}/etc/sysconfig
 fi
 $CP -p -R /etc/sysconfig/* ${LOGDIR}/etc/sysconfig
fi

##############################################################################
# RHN Section
##############################################################################

if [ -d /etc/sysconfig/rhn ]; then
 Echo "[*] RedHat Network Section"
 RDIR=${LOGDIR}/rhn
 $MKDIR -p ${RDIR} 
 if [ -d  /etc/rhn ]; then
     $CP -pR /etc/rhn/ ${LOGDIR}/etc/rhn/
     if [ -f /etc/sysconfig/rhn/systemid ]; then
      if [ -x /usr/bin/xsltproc ]; then
       /usr/bin/xsltproc $UTILDIR/text.xsl $RDIR/systemid \
        > $ROOT/$RHNDIR/systemid 2>&1 
      fi
     fi
    fi
fi

##############################################################################
# Systems Log Section
##############################################################################

Echo "[*] Systems Log Section"
$CP -R -p /var/log/* ${LOGDIR}/logs
$DMESG  > ${LOGDIR}/logs/dmesg.out
$LAST   > ${LOGDIR}/logs/lastlog

##############################################################################
#   SELINUX
##############################################################################

Echo "[*] SElinux Section"
SELINUXDIR=${LOGDIR}/selinux
$MKDIR -p ${SELINUXDIR} 

if [ -x $SESTATUS ]; then
  $SESTATUS > ${SELINUXDIR}/sestatus.out
 $SESTATUS -bv > ${SELINUXDIR}/sestatus_-bv.out 2>&1
fi

if [ -x $SEMANAGE ]; then
  $SEMANAGE fcontext -l | tee ${SELINUXDIR}/semanage_fcontext_-l.out &> /dev/null
  $SEMANAGE port -l     | tee ${SELINUXDIR}/semanage_port_-l.out      &> /dev/null
  $SEMANAGE login -l    | tee ${SELINUXDIR}/semanage_login_-l.out     &> /dev/null
  $SEMANAGE user -l     | tee ${SELINUXDIR}/semanage_user_-l.out      &> /dev/null
  $SEMANAGE node -l     | tee ${SELINUXDIR}/semanage_node_-l.out      &> /dev/null
  $SEMANAGE interface -l| tee ${SELINUXDIR}/semanage_interface_-l.out &> /dev/null
  $SEMANAGE boolean -l  | tee ${SELINUXDIR}/semanage_boolean_-l.out   &> /dev/null
fi

if [ -x $GETSEBOOL ]; then
 $GETSEBOOL -a > ${LOGDIR}/selinux/getsebool_-a.out 2>&1
else
 echo "getsebool not installed" > ${LOGDIR}/selinux/getsebool_-a.out 2>&1
fi

##############################################################################
# Virtual Servers Information
##############################################################################

VIRT=${LOGDIR}/virtual

#------------------------------------------------------------------------
# Xen
#------------------------------------------------------------------------

if [ -d /etc/xen ]; then
 Echo "[*] Xen Section"
 $MKDIR -p ${VIRT}/xen
 XENETC=${LOGDIR}/xen

 if [ ! -d $XENETC ]; then
  mkdir -p $XENETC 
 fi

 $CP -Rp /etc/xen/* ${XENETC}/
 $MKDIR -p ${VIRT}/xen

 if [ -x $XM  ]; then
  $XM list  > $VIRT/xen/xm_list.out  2>&1
  $XM info  > $VIRT/xen/xm_info.out  2>&1
  $XM logs  > $VIRT/xen/xm_log.out  2>&1
  $XM dmesg  > $VIRT/xen/xm_dmesg.out 2>&1
  $XM vcpu-list > $VIRT/xen/xm_vcpu-list.out 2>&1

  for myHost in $($XM list  2>/dev/null | egrep -v "VCPUs |^Domain-0")
  do
   $XM network-list $myHost> $VIRT/xen/xm_network-list_${myHost}.out 2>&1
   $XM uptime $myHost      > $VIRT/xen/xm_uptime_${myHost}.out       2>&1
   $VIRSH dominfo $myHost  > $VIRT/xen/virsh_dominfo_${myHost}.out   2>&1
  done
 fi
fi

##############################################################################
# VirtLib Information
##############################################################################

#------------------------------------------------------------------------
# Virtlib
#------------------------------------------------------------------------

if [ -x $VIRSH ]; then
 Echo "[*] LibVirt Section"
 $MKDIR -p ${VIRT}/libvirt
 $VIRSH  list --all 2>/dev/null | \
  grep -v "Id Name"            | \
  egrep -v "\--|^$"            | \
  awk '{print $2}'             | while read line
  do 
   $VIRSH dominfo $line >> ${VIRT}/libvirt/virsh_dominfo_${line}.out 2>&1
   $VIRSH dumpxml $line >> ${VIRT}/libvirt/virsh_dumpxml_${line}.out 2>&1
  done
 $VIRSH  list --all > ${VIRT}/libvirt/virsh_list_--all.out 2>&1
fi

##############################################################################
# yp services
##############################################################################

Echo "[*] YP Services Section"
YPDIR=${LOGDIR}/yp
$MKDIR -p ${YPDIR} 

if [ -x "$YPWHICH" ]; then
 $YPWHICH -m > ${YPDIR}/ypwhich-m.out 2>&1
fi

if [ -f /etc/domainname ]; then
 $CP -p /etc/domainname ${LOGDIR}/etc/

 $LS -lR /var/yp/$(cat /etc/domainname) > ${YPDIR}/ls_-lR.out 2>&1

fi

##############################################################################
# Networking Section
##############################################################################

Echo "[*] Networking Section"
for i in $($LS -d /etc/host* )
do
 filename=$(basename $i)
 $CP -p  $i ${LOGDIR}/etc/${filename}
done

for i in $( $LS -d /etc/ftp* 2>/dev/null )
do
 filename=$(basename $i)
 $CP -p $i ${LOGDIR}/etc/$filename
done

$CP -p /etc/services ${LOGDIR}/etc/services

if [ -f /etc/HOSTNAME ]; then
 $CP -p /etc/HOSTNAME ${LOGDIR}/etc/HOSTNAME 
fi

if [ -f /etc/hostname ]; then
 $CP -p /etc/hostname ${LOGDIR}/etc/hostname 
fi

if [ -f /etc/networks ]; then
 $CP -p /etc/networks ${LOGDIR}/etc/networks 
fi

if [ -f /etc/hosts.allow ]; then
 $CP -p /etc/hosts.allow ${LOGDIR}/etc/hosts.allow
fi

if [ -f /etc/hosts.deny ]; then
 $CP -p /etc/hosts.deny ${LOGDIR}/etc/hosts.deny
fi

if [ -f /etc/shells ]; then
 $CP -p /etc/shells ${LOGDIR}/etc/shells
fi

if [ -f /etc/network/interfaces ]; then
 if [ ! -d ${LOGDIR}/etc/network/interfaces ]; then
   $MKDIR -p ${LOGDIR}/etc/network/interfaces
 fi
 $CP -p /etc/network/interfaces ${LOGDIR}/etc/network/interfaces
fi

$MKDIR -p ${LOGDIR}/network
$IFCONFIG  -a > ${LOGDIR}/network/ifconfig_-a.out 2>&1
$ARP -an > ${LOGDIR}/network/arp_-an.out 2>&1

if [ -f "${LOGDIR}/etc/resolv.conf" ]; then
  $LN -s ${LOGDIR}/etc/resolv.conf ${LOGDIR}/network/resolv.conf 2>&1
fi

$NETSTAT -rn    > ${LOGDIR}/network/netstat_-rn.out     2>&1
$NETSTAT -lan   > ${LOGDIR}/network/netstat_-lan.out    2>&1
$NETSTAT -lav   > ${LOGDIR}/network/netstat_-lav.out    2>&1
$NETSTAT -tulpn > ${LOGDIR}/network/netstat_-tulpn.out  2>&1
$NETSTAT -ape   > ${LOGDIR}/network/netstat_-ape.out    2>&1
$NETSTAT -uan   > ${LOGDIR}/network/netstat_-uan.out    2>&1
$NETSTAT -s     > ${LOGDIR}/network/netstat_-s.out      2>&1
$NETSTAT -in    > ${LOGDIR}/network/netstat_-in.out     2>&1
$ROUTE -nv      > ${LOGDIR}/network/route_-nv.out       2>&1  

if [ -x "$IP" ]; then
  $IP  add > ${LOGDIR}/network/ip_add.out    2>&1
  $IP  route> ${LOGDIR}/network/ip_route.out  2>&1
  $IP  link > ${LOGDIR}/network/ip_link.out   2>&1
  $IP  rule > ${LOGDIR}/network/ip_rule.out   2>&1
fi

if [ -x "$IWCONFIG" ]; then
  $IWCONFIG > ${LOGDIR}/network/iwconfig.out 2>&1
fi

if [ -x "${MIITOOL}" ]; then
  ${MIITOOL} > ${LOGDIR}/network/mii-tool.out 2>&1
fi

# Collect bridging information
if [ -x "${BRCTL}" ]; then
  $BRCTL show > ${LOGDIR}/network/brctl_show.out 2>&1
  for myBridge in $($BRCTL show | grep -v "STP enabled" |  grep ^[a-zA-Z] | awk '{ print $1}') 
  do
    $BRCTL showmacs $myBridge > ${LOGDIR}/network/btctl_showmacs_${myBridge}.out 2>&1
    $BRCTL showstp  $myBridge > ${LOGDIR}/network/btctl_showstp_${myBridge}.out 2>&1
  done       
fi

##############################################################################
# Get the iptable information
##############################################################################

if [ -x "$IPTABLES" ]; then
 $IPTABLES -L             > ${LOGDIR}/network/iptables-L.out
 $IPTABLES -t filter -nvL  > ${LOGDIR}/network/iptables-t_filter-nvL.out
 $IPTABLES -t mangle -nvL  > ${LOGDIR}/network/iptables-t_mangle-nvL.out
 $IPTABLES -t nat -nvL    > ${LOGDIR}/network/iptables_-t_nat_-nvL.out
else
 echo "no iptables in kernel" > ${LOGDIR}/network/iptables-NO-IP-TABLES
fi

##############################################################################
# List the ipchains rules
##############################################################################

if [ -x "$IPCHAINS" ]; then
 $IPCHAINS -L -n > ${LOGDIR}/network/ipchains_-L_-n.out
fi

##############################################################################
# Lets now check the network cards speeds
##############################################################################

if [ -x "$ETHTOOL" ]; then
 for version in 4 6
 do
  INTERFACES=$( cat /proc/net/dev | grep "[0-9]:" | awk -F: '{print $1 }' )
  for i in $INTERFACES 
  do
          $ETHTOOL $i    >  ${LOGDIR}/network/ethtool_ipv${version}_${i}.out    2>&1
          $ETHTOOL -i $i >> ${LOGDIR}/network/ethtool_ipv${version}_-i_${i}.out 2>&1
          $ETHTOOL -S $i >> ${LOGDIR}/network/ethtool_ipv${version}_-S_${i}.out 2>&1
  done
 done
fi

##############################################################################
# xinetd Section
##############################################################################

Echo "[*] xinetd Section"
if [ -d /etc/xinet.d ]; then
 XINETD=${LOGDIR}/etc/xinet.d
 $MKDIR -p ${XINETD}

 for i in $($LS -d /etc/xinetd.d/* )
 do
  filename=$(basename $i)
  $CP -p $i  ${XINETD}/$filename
 done
fi

if [ -f /etc/xinetd.log ]; then
 $CP -p /etc/xinetd.log ${LOGDIR}/etc/xinetd.log
fi

##############################################################################
# DNS Section
##############################################################################

Echo "[*] DNS Section"
if [ -f /etc/named.boot ]; then
 $CP -p  /etc/named.boot ${LOGDIR}/etc/named.boot
fi

DNSDIR=""
if [ "${DNSDIR}" != "" ]; then
 if [ ! -d ${LOGDIR}${DNSDIR} ]; then
  $MKDIR -p ${LOGDIR}${DNSDIR} 
 fi
 cd ${DNSDIR}
  $TAR cf - . 2>/dev/null | ( cd ${LOGDIR}${DNSDIR} ; tar xpf - ) > /dev/null 2>&1
fi

##############################################################################
#   Cluster Section
##############################################################################

CLUSTERDIR=${LOGDIR}/clusters
Echo "[*] Cluster Section"

#--------------------------------------------------------------------
# Oracles OCFS2 cluster filesystems
#--------------------------------------------------------------------
if [ -f /etc/ocfs2/cluster.conf ]; then
 if [ ! -d ${LOGDIR}/etc/ocfs2 ]; then
  $MKDIR -p ${LOGDIR}/etc/ocfs2
 fi
 $CP -p /etc/ocfs2/cluster.conf ${LOGDIR}/etc/ocfs2/cluster.conf
 $MKDIR -p ${CLUSTERDIR}/ocfs2
 $CP -p /etc/ocfs2/cluster.conf ${CLUSTERDIR}/ocfs2/cluster.conf
fi

#--------------------------------------------------------------------
# Redhat Cluster
#--------------------------------------------------------------------
if [ -x $CLUSTAT ]; then
 Echo "[*] Veritas Cluster Section"
 MyClusterDir=${CLUSTERDIR}/redhat
 mkdir -p ${CLUSTERDIR}/redhat
 $CLUSTAT    > $MyClusterDir/clustat.out         2>&1
 $CLUSTAT -f > $MyClusterDir/clustat_-f.out      2>&1
 $CLUSTAT -l > $MyClusterDir/clustat_-l.out      2>&1
 $CLUSTAT -I > $MyClusterDir/clustat_-I.out      2>&1
 $CLUSTAT -v > $MyClusterDir/clustat_-v.out      2>&1
 $CLUSTAT -x > $MyClusterDir/clustat_-x.out      2>&1
  $CLUSVCADM -v > $MyClusterDir/clusvcadm_-x.out  2>&1
  $CLUSVCADM -S > $MyClusterDir/clusvcadm_-S.out  2>&1
fi

# List out Quorum devices
if [ -x $MKQDISK ] ; then
 $MKQDISK -L >> $MyClusterDir/mkqdisk_-L.out 2>&1
fi

# Copy the cluster config files over
if [ -f /etc/cluster.xml ]; then
 $CP -p /etc/cluster.xml ${LOGDIR}/etc/cluster.xml
 $CP -p /etc/cluster.xml $MyClusterDir/cluster.xml
fi

if [ -d /etc/cluster ]; then
 $CP -Rp /etc/cluster/* ${LOGDIR}/etc/cluster/
 $CP -p /etc/cluster/* $MyClusterDir/
fi

#--------------------------------------------------------------------
# Veritas Cluster
#--------------------------------------------------------------------

if [ -f /etc/VRTSvcs/conf/config/main.cf ]; then
    Echo "[*] Veritas Cluster Section"
    VCSDIR=${CLUSTERDIR}/veritas

    if [ ! -d $VCSDIR ]; then
        $MKDIR -p ${VCSDIR}
    fi

    $MKDIR -p ${LOGDIR}/etc/VRTSvcs/conf/config
    $CP -p /etc/VRTSvcs/conf/config/* ${LOGDIR}/etc/VRTSvcs/conf/config

    if [ -d /var/VRTSvcs/log ]; then
  $MKDIR -p ${LOGDIR}/var/VRTSvcs/log
  $CP -p /var/VRTSvcs/log/* ${LOGDIR}/var/VRTSvcs/log
    fi

    $HASTATUS -sum>   ${VCSDIR}/hastatus_-sum.out 2>&1
    $HARES -list  >   ${VCSDIR}/hares_-list.out   2>&1
    $HAGRP -list  >   ${VCSDIR}/hagrp_-list.out   2>&1
    $HATYPE -list >   ${VCSDIR}/hatype_-list.out  2>&1
    $HAUSER -list >   ${VCSDIR}/hauser_-list.out  2>&1
    $LLTSTAT -vvn >   ${VCSDIR}/lltstat_-vvn.out  2>&1
    $GABCONFIG -a >   ${VCSDIR}/gabconfig_-a.out  2>&1
    
    $HACF -verify /etc/VRTSvcs/conf/config/main.cf > ${VCSDIR}/hacf-verify.out 2>&1 
    
    $CP -p /etc/llthosts  ${LOGDIR}/etc
    $CP -p /etc/llttab    ${LOGDIR}/etc
    $CP -p /etc/gabtab    ${LOGDIR}/etc
fi

#--------------------------------------------------------------------
# CRM/PaceMaker Cluster
#--------------------------------------------------------------------
Echo "[*] CRM Cluster Section"
CRMDIR=${CLUSTERDIR}/crm

if [ -x $CRM_MON ]; then 
 $MKDIR -p ${CRMDIR}
 $CRM_MON --version > ${CRMDIR}/crm_mon_--version.out

 if [ -x $CRM ]; then 
  $CRM status             > ${CRMDIR}/crm_status.out
  $CRM configure show     > ${CRMDIR}/crm_configure_show.out
  $CRM configure show xml > ${CRMDIR}/crm_configure_show_xml.out
  $CRM ra classes         > ${CRMDIR}/crm_ra_classes.out
  $CRM ra list ocf heartbeat > ${CRMDIR}/crm_ra_list_ocf_heartbeat.out
  $CRM ra list ocf pacemaker > ${CRMDIR}/crm_ra_list_ocf_pacemaker.out
 fi
 
  if [ -x $CRM_VERIFY ]; then $CRM_VERIFY -L > ${CRMDIR}/crm_verify_-L.out; fi
 if [ -x $CIBADMIN ]; then $CIBADMIN -Ql > ${CRMDIR}/cibadmin_-Ql.out; fi
fi

##############################################################################
#   Crontab Section
##############################################################################

Echo "[*] Crontab Section"
$MKDIR -p ${LOGDIR}/etc/cron
$CP -R -p /etc/cron*  ${LOGDIR}/etc

if [ -d /var/spool/cron ]; then
    $MKDIR -p ${LOGDIR}/var/spool/cron
    cd /var/spool/cron
    $TAR cf - . | ( cd ${LOGDIR}/var/spool/cron ; tar xpf - )
fi

##############################################################################
# Printer Section
##############################################################################

Echo "[*] Printer Sectiona"

PRINTDIR=${LOGDIR}/lp
$MKDIR -p ${PRINTDIR}
$MKDIR -p ${PRINTDIR}/general
$MKDIR -p ${LOGDIR}/etc/printcap

if [ -x /usr/bin/lpstat ]; then 
 /usr/bin/lpstat -t > ${PRINTDIR}/lpstat_-t.out 2>&1
fi

if [ -x /usr/sbin/lpc ]; then 
 /usr/sbin/lpc status > ${PRINTDIR}/lpstat_status.out 2>&1
fi

if [ -f /etc/printcap ]; then
 $CP /etc/printcap ${LOGDIR}/etc/printcap
fi

if [ -d /etc/cups ]; then
 $MKDIR -p ${LOGDIR}/etc/cups
 $CP -p -R /etc/cups/* ${LOGDIR}/etc/cups
fi

/usr/bin/lpq > ${PRINTDIR}/general/lpq.out 2>&1

if [ -x /usr/bin/lpq.cups ]; then
 /usr/bin/lpq.cups > ${PRINTDIR}/lpq.cups.out 2>&1
fi

##############################################################################
# openldap Section
##############################################################################

Echo "[*] Openldap Section"

if [ -d /etc/openldap ]; then
 $MKDIR -p ${LOGDIR}/etc/openldap
 $CP -p -R /etc/openldap/* ${LOGDIR}/etc/openldap
fi

##############################################################################
# pam Section
##############################################################################

Echo "[*] PAM Section"

$MKDIR -p ${LOGDIR}/etc/pam 
$CP -p -R /etc/pam.d/* ${LOGDIR}/etc/pam/

##############################################################################
# Sendmail Section
##############################################################################

Echo "[*] Sendmail Section"

$MKDIR -p ${LOGDIR}/etc/mail

if [ -f /etc/sendmail.cf ]; then
 $CP -p /etc/sendmail.cf ${LOGDIR}/etc/sendmail.cf
fi
                                                                                
if [ -f /etc/sendmail.cw ]; then
 $CP -p /etc/sendmail.cw ${LOGDIR}/etc/sendmail.cw
fi

if [  -d /etc/mail ]; then
 for i in $($LS -d /etc/mail/* | $GREP -v \.db) ; do
  $CP -R -p $i ${LOGDIR}/etc/mail
 done
fi

if [ -f /etc/aliases ]; then
 $CP -p /etc/aliases ${LOGDIR}/etc/aliases
fi

if [ -f /etc/mail/aliases ]; then
 $CP -p /etc/mail/aliases ${LOGDIR}/etc/mail/aliases
fi

##############################################################################
# Postfix Section
##############################################################################

Echo "[*] Postfix Section"

if [ -d /etc/postfix ]; then
 POSTDIR=${LOGDIR}/etc/postfix
 $MKDIR -p $POSTDIR
 $CP -p -R /etc/postfix/* ${POSTDIR}
 $POSTCONF -v > ${POSTDIR}/postconf_-v.out 2>&1
 $POSTCONF -l > ${POSTDIR}/postconf_-l.out 2>&1
fi

##############################################################################
# Exim Section
##############################################################################

Echo "[*] Exim Section"

if [ -d /etc/exim ]; then
  EXIMDIR=${LOGDIR}/etc
  $CP -p -R /etc/exim  ${EXIMDIR}
fi

##############################################################################
# Time Section
##############################################################################

Echo "[*] Time Section"

TIMEDIR=${LOGDIR}/etc/time

if [ ! -d ${TIMEDIR} ]; then
 $MKDIR -p ${TIMEDIR}
fi

$DATE > ${TIMEDIR}/date

if [ -f /etc/timezone ]; then 
 $CP -p /etc/timezone ${TIMEDIR}/timezone
fi

if [ -f /usr/share/zoneinfo ]; then 
 $CP -p /usr/share/zoneinfo ${TIMEDIR}/zoneinfo
fi

if [ -f /etc/ntp.drift ]; then
 $CP -p /etc/ntp.drift ${TIMEDIR}/ntp.drift
fi

if [ -x $HWCLOCK ]; then
 $HWCLOCK --show > ${TIMEDIR}/hwclock_--show.out 
fi

if [ -x $NTPQ  ]; then
 $NTPQ -p > ${TIMEDIR}/ntpq_-p.out 2>&1
fi

if [ -f /etc/ntp/step-tickers ]; then 
 $CP -p /etc/ntp/step-tickers ${LOGDIR}/etc
fi

if [ -f /etc/ntp/ntpservers ]; then
 $CP -p /etc/ntp/ntpservers   ${LOGDIR}/etc
fi

##############################################################################
# PPP Section
##############################################################################

Echo "[*] PPP Section"

PPPDIR=${LOGDIR}/etc/ppp
if [ ! -d ${PPPDIR} ]; then
 $MKDIR -p ${PPPDIR}
 $MKDIR -p ${PPPDIR}/peers
fi

if [ -d /etc/ppp ]; then
 $CP -R -p /etc/ppp/* ${PPPDIR} 2>&1
fi

if [ -d /etc/wvdial ] ; then
 $CP -p /etc/ppp/options.* ${PPPDIR} > /dev/null 2>&1
 $CP -p -R /etc/ppp/peers/* ${PPPDIR}/peers > /dev/null 2>&1
fi

##############################################################################
# Apache Section
##############################################################################

Echo "[*] Apache Section"

if [ -d /etc/httpd ]; then
 APACHEDIR=${LOGDIR}/httpd
else
 APACHEDIR=${LOGDIR}/apache
fi

if [ ! -d $APACHEDIR ]; then
 $MKDIR -p ${APACHEDIR}
fi

if [ -x $APACHECTL ]; then
 $APACHECTL status > ${APACHEDIR}/apachectl_status.out 2>&1
fi

if [ -x $APACHE2CTL ]; then
 $APACHE2CTL status > ${APACHEDIR}/apache2ctl_status.out 2>&1
fi

##############################################################################
# Samba Section
##############################################################################

Echo "[*] Samba Section"

SAMBADIR=${LOGDIR}/disks/samba

if [ ! -d ${SAMBADIR} ]; then
 $MKDIR -p ${SAMBADIR}
fi

if [ -x $TESTPARM  ]; then
 echo "y" | $TESTPARM > ${SAMBADIR}/testparm.out 2>&1
fi

if [ -x $WBINFO ]; then
 $WBINFO -g > ${SAMBADIR}/wbinfo_-g.out 2>&1
  $WBINFO -u > ${SAMBADIR}/wbinfo_-g.out 2>&1
fi

##############################################################################
# OpenSSH Section
##############################################################################

Echo "[*] OpenSSH Section"

SSHDIR=${LOGDIR}/etc/ssh
$MKDIR -p ${SSHDIR}

if [ -f /etc/nologin ]; then
 $CP -p /etc/nologin ${LOGDIR}/etc/nologin
fi

if [ -d /etc/ssh/ssh_config ]; then
 $CP -p /etc/ssh/ssh_config ${SSHDIR}/ssh_config
fi

if [ -d /etc/ssh/sshd_config ]; then
 $CP -p /etc/ssh/sshd_config ${SSHDIR}/sshd_config
fi

##############################################################################
# X11 Section
##############################################################################

Echo "[*] X11 Section"

XDIR=${LOGDIR}/X  
$MKDIR -p $XDIR

if [ -d /etc/X11 ]; then
 $CP -R -p /etc/X11 ${LOGDIR}/etc
fi

if [ -x $SYSP ]; then
 $SYSP -c          > ${XDIR}/sysp_-c.out
 $SYSP -s mouse    > ${XDIR}/sysp_-s_mouse.out
 $SYSP -s keyboard > ${XDIR}/sysp_-s_keyboard.out
fi

if [ -x $_3DDIAG ]; then
 $_3DDIAG > ${XDIR}/3Ddiag.out
fi

##############################################################################
# This section is for removing any information 
# about hardcoded passwords inserted in files.
##############################################################################

if [ -f /etc/wvdial.conf ]; then 
 $CAT /etc/wvdial.conf | sed -e /^Password/d  > ${LOGDIR}/etc/wvdial.conf 
fi

##############################################################################
# Tar Up Support Directory | GPG support
##############################################################################

cd ${LOGTOP}
$TAR czf ${TARFILE} . > /dev/null 2>&1  

if [[ ${GPG} -eq "1" ]]; then 
  #--------------------------------------------------------------------------
  # Import GPG public key:   (0x57260789) 
  #                          Facundo M. de la Cruz
  #                           [ fdelacruz@dc-solutions.com.ar ] 
  #--------------------------------------------------------------------------
  echo "[*] Importing GPG public key: $GPG_ID"
  gpg --import << EOF  
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.12 (GNU/Linux)

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
AAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0
NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKT
lJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL
/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB
CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpj
ZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIR
AxEAPwD3kzqO9R/alOenFUGuDiq5nBZ+e/8ASlcVy/PfBAMAE+lVGvi3OMCqF3cb
SuK4Xxh8TNM8Kt9mffd6gRn7NGQNo7bm7fqfagZ6E93l1wcnOBWRf+KdLsJfKu9Q
s4pP7jzqGJ+hNfN3iDx3rniqcm5uPs9oPuW0D7V/Hux+v6VzE0pib5CMemKQ7H1R
b+MNM1CUx2tzA5H9yVX/AJE4qK61q3i1C3gYjdNnaQOCQM18sJdTRuHjYq6nIZeC
D61al1jU7ySMz3k7kNkZc9aLAfVMd0knKKMeopzTZ7V5p8NPGC6pBNp13L/pcbbk
LH/WL7fTFdz+63Sbldzu4yGbsPXigRcMmelRlqjTAHEYjHpx/SgHLt7YH9f60DGc
G5YgDIQfjk//AFqeeaanJdvVv5cf40+gBhUUmwU/FGKAIjHRUtFAHW7hjrVfcN8n
+9/Snbhgcj8qhBy0n+9/QUEHP+NNdTw9oE+olQ7xriNCfvOTgD86+XrmW81fVpri
ZnnupnLu2OpP9K9x+N5kXwvZOpOwXY3D/gLYrz3wdpoS2W5KZklOcn0qZS5Vc2pQ
53Yy7fwpqNwisUWMH0GcVYvPCEllbrLcS7mb7oNepWkICruYeuBWd4i05r6GN4V3
FD90dawVRtnXKhFLQ8yOlCJBhQeccjpWdcWwjTf3zxXYXSLtIxtYHJB+lc9fpiIL
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
EHvKMZD4F6S7F7vVQw==
=kL5L
-----END PGP PUBLIC KEY BLOCK-----
EOF
  $GPG_BIN -e -r ${GPG_ID} ${TARFILE}
  TARFILE="${TARFILE}.gpg"
fi

if [ -t 0 ]; then
  $CAT <<- EOF

**********************************************************************
The Tar file ${TARFILE} 
has been created for support purposes.
 
You can email the tar file to those providing you 
with technical support to <$SUPPORT>
**********************************************************************
EOF
fi
Permisos: chmod 700 LINUXexplo.bash 
Ejecución: # ./LINUXexplo.bash [ parámetros ] (Requiere privilegios de root)
El script tardará unos minutos en recolectar la información y creará un log y un .tgz en la ruta:
/opt/LINUXexplo/linux/
NOTA: Se debe reemplazar la llave pública GPG por la del administrador o usuario que ejecute el script.
Leer más...