[proyecto] Script recopilador de información para asistencia técnica

Iniciado por Festor, 11 Diciembre 2009, 12:01 PM

0 Miembros y 2 Visitantes están viendo este tema.

Festor

Bueno, no hace mucho se me ocurrió intentar hacer una forma "sencilla" e "intuitiva" para que los novatos en Linux (y los no tan novatos) puedan proporciona más información en sus post sobre los posibles problemas que tengan con su sistema Linux...

La idea de este script es que funcione en la mayor cantidad de distros Linux y en especial las orientadas al usuario final, es decir, que sea lo más independiente posible... pero dado que no tengo todo el tiempo del mundo para andar virtualizando distros y testeando el script pues lo libero para que lo pruebe quien quiera...

De momento lo he probado en Ubuntu 9.04 y 9.10 (GNOME y KDE) y en Fedora 12 (GNOME) y parece que no da problemas salvo por algunas cosas como que:
-En Fedora hay ciertos archivos que no son accesibles (ni si quiera en modo lectura) desde un usuario no-root...
-El script aun no reconoce la posible existencia de GRUB2 y presupone que si se utiliza GRUB siempre se utilizará la versión antigua...

ah! Otra cosa.. ya sé que hay comandos que requieren de root y que proporcionarían más información pero en un principio no tengo intención de "obligar" al usuario a recurrir a root para usar este script....

Por último decir que no soy un experto en bash así que es más que probable que existan mejores formas (menos código o más ordenado) de hacer lo que hace este script por ello estoy abierto a cualquier idea, corrección, sugerencia y/o aportación...

En principio estas son algunas de las cosas que me gustaría implementar...
- idear alguna forma para añadir las etiquetas [ code ] a la salida de los comandos de forma que al recibir la información esta ya venga en un formato adecuado para su visualización en el foro.
- ¿algún sistema para subir la información a pastebins?
- ...

Dentro de poco espero subirlo a un servidor para que se pueda descargar e instalar de una forma más cómoda.

Aquí tenéis un captura de como se ver en una terminal:


Código (bash) [Seleccionar]
#!/bin/bash
#   Script recopilador de informacion by Festor para la comunidad de elhacker.net
#
#   Una forma rapida y sencilla de acceder a los principales comandos y archivos que proporcionan
#  informacion sobre el sistema con el fin de que un usuario, sin tener apenas conocimiento del sistema,
#  pueda proporcionar mas datos en el caso de que tenga algun problema con su sistema linux.
#
#   La idea es que al elegir una opcion el contenido del fichero o la salida del comando se vuelque en un fichero
#  de texto plano para simplificar su manejo y posible edicion. De esta forma uno puede copiar y pegar
#  la informacion de una manera un poco mas "facil"... :-/
#
#   Este script es de libre distribucion, edicion y uso, es decir, podeis hacer lo que os de la gana con el... xD
#

# Gestores de paquetes de software y directorios de ficheros de configuracion de repositorios
yum=/usr/bin/yum
yum_conf=/etc/yum.conf
yum_repos=/etc/yum.repos.d
dpkg=/usr/bin/dpkg
dpkg_sources=/etc/apt/sources.list
dpkg_repos=/etc/apt/sources.list.d

# Gestores de arranque
lilo=/etc/lilo.conf
grub=/boot/grub/menu.lst

# Otros ficheros importantes
xorg=/etc/X11/xorg.conf
fstab=/etc/fstab

# La idea es que su uso fuera intuitivo... pero por si acaso avisamos de como funciona...
function visualizar_ayuda {
 tput cup 5 4; echo -e " En la pantalla principal elige la opcion deseada pulsando la tecla"
 tput cup 6 4; echo -e "que corresponde a la letra resaltada, acto seguido aparecera un menu"
 tput cup 7 4; echo -e "desplegable en el que debes seleccionar la accion a realizar en base"
 tput cup 8 4; echo -e "al numero resaltado de su izquierda. Espero que te sea de utilidad!!"
 tput cup 10 4; echo -e "by Festor... ^_^"
 tput cup 11 4; echo -e "para la comunidad de elhacker.net"
}

# Meto el menu en una funcion porque lo vamos a llamar repetidas veces
function menu {
 clear
 tput cup 0 4; echo -e "---------------------------------------------------------"
 tput cup 1 4; echo -e "..:: Bienvenido al script recopilador de informacion ::.."
 tput cup 2 4; echo -e "---------------------------------------------------------"
 tput cup 3 1; echo -e "Info del sistema"
 tput cup 3 1; echo -e "\033[1;32mI\033[0m"
 tput cup 3 20; echo -e "Redes"
 tput cup 3 20; echo -e "\033[1;32mR\033[0m"
 tput cup 3 28; echo -e "Hardware"
 tput cup 3 28; echo -e "\033[1;32mH\033[0m"
 tput cup 3 39; echo -e "Programas"
 tput cup 3 39; echo -e "\033[1;32mP\033[0m"
 tput cup 3 51; echo -e "Ayuda"
 tput cup 3 51; echo -e "\033[1;32mA\033[0m"
 tput cup 3 59; echo -e "Salir"
 tput cup 3 59; echo -e "\033[1;32mS\033[0m"
}

# Dado que no queremos ensuciar el directorio actual con decenas de ficheros nos pasamos a /tmp
cd /tmp

# Llamamos al menu
menu

# Esto sirve para que la ayuda se muestre en la primera ejecucion del script.
# En sucesivas ejecuciones no deberia aparecer mas la ayuda al menos que se borre el
# fichero "ayuda_leida" de /tmp (lo cual ocurre cuando reinicias la computadora).
if ! [[ -e ayuda_leida ]]; then visualizar_ayuda && echo "Ya deberias saber como funciona el script" > ayuda_leida ; fi

# El funcionamiento es sencillo, despues de cada "case" se llama de nuevo al menu
# para crear una ilusion de un menu desplegable.
# No hay que olvidarse de que uno puede estar usando letras minusculas o mayusculas (= Bloq Mayus activado)
while [[ "$opcion" != 's' ]] && [[ "$opcion" != 'S' ]]; do
 read -s -n1 opcion

 case $opcion in
  I|i)
    menu
    tput cup 4 1; echo -e "(1) Distribucion Linux"
    tput cup 4 2; echo -e "\033[1;32m1\033[0m"
    tput cup 5 1; echo -e "(2) Lista de particiones"
    tput cup 5 2; echo -e "\033[1;32m2\033[0m"
    tput cup 6 1; echo -e "(3) Gestor de arranque"
    tput cup 6 2; echo -e "\033[1;32m3\033[0m"
    tput cup 7 1; echo -e "(4) Usuarios logueados"
    tput cup 7 2; echo -e "\033[1;32m4\033[0m"
    tput cup 8 1; echo -e "(5) Registro del nucleo (dmesg)"
    tput cup 8 2; echo -e "\033[1;32m5\033[0m"

    read -s -n1 subopcion
    case $subopcion in
1|2|3|4|5) case $subopcion in
                    # Nombre y version de la distribucion que usas mas la version del kernel Linux que tienes instalado.
                    1)cat /etc/issue > LinuxDistro.txt && uname -r >> LinuxDistro.txt && xdg-open LinuxDistro.txt;;
                    # Se que la info del fstab puede no ser la más actual ya que es estatica pero para acceder al 'fdisk -l' necesitas de root.
                    2)cat $fstab > fstab.txt && xdg-open fstab.txt;;
                    # Dado que no hay un gestor de arranque universal comprobamos cual es el que esta instalado.
                    3)if [[ -e "$grub" ]] ; then cat $grub > MenuGrub.txt && xdg-open MenuGrub.txt ; fi ;
                      if [[ -e "$lilo" ]] ; then cat $lilo > MenuLilo.txt && xdg-open MenuLilo.txt ; fi
                      ;;
                    4)who > UsersLogged.txt && xdg-open UsersLogged.txt;;
                    5)dmesg > KernelLog.txt && xdg-open KernelLog.txt;;
                  esac;
                  menu;;
     *)menu;;
    esac;;

  R|r)
    menu
    tput cup 4 20; echo -e "(1) ifconfig"
    tput cup 4 21; echo -e "\033[1;32m1\033[0m"
    tput cup 5 20; echo -e "(2) Wifi & Wireless"
    tput cup 5 21; echo -e "\033[1;32m2\033[0m"

    read -s -n1 subopcion
    case $subopcion in
      1|2) case $subopcion in
             1)ifconfig > ifconfig.txt && xdg-open ifconfig.txt;;
             2)iwconfig > iwconfig.txt && if ! [[ -s iwconfig.txt ]]; then echo -e "Posibles causas por las que ifconfig no ha devuelto informacion:\n->Tu equipo carece de un dispositivo wireless.\n->Tu equipo dispone de hardware wireless pero no hay un controlador/modulo accesible." > iwconfig.txt; fi && xdg-open iwconfig.txt;;
           esac;
           menu;;
      *)menu;;
    esac;;

  H|h)
    menu
    tput cup 4 28; echo -e "(1) Perifericos internos (lspci)"
    tput cup 4 29; echo -e "\033[1;32m1\033[0m"
    tput cup 5 28; echo -e "(2) Perifericos externos (lsusb)"
    tput cup 5 29; echo -e "\033[1;32m2\033[0m"
    tput cup 6 28; echo -e "(3) Servidor grafico (Xorg)"
    tput cup 6 29; echo -e "\033[1;32m3\033[0m"
    tput cup 7 28; echo -e "(4) Aceleracion grafica 3D"
    tput cup 7 29; echo -e "\033[1;32m4\033[0m"
    if [[ -e /usr/bin/lshw ]]; then
    tput cup 8 28; echo -e "(5) Informacion mas detallada"
    tput cup 8 29; echo -e "\033[1;32m5\033[0m"
    fi

    read -s -n1 subopcion
    case $subopcion in
      1|2|3|4|5) case $subopcion in
                     1)lspci -k > HardwarePCI.txt && xdg-open HardwarePCI.txt;;
                     2)lsusb > HardwareUSB.txt && xdg-open HardwareUSB.txt;;
                     3)if [[ -e "$xorg" ]] ; then cat $xorg > Xorg.txt && xdg-open Xorg.txt ; fi;;
                     4)glxinfo | grep direct > DirectRendering.txt && xdg-open DirectRendering.txt;;
                     5)lshw -short -sanitize > GeneralInfo.txt && xdg-open GeneralInfo.txt;;
                     esac;
                     menu;;
      *)menu;;
    esac;;

  P|p)
    menu
    tput cup 4 39; echo -e "(1) Repositorios en uso"
    tput cup 4 40; echo -e "\033[1;32m1\033[0m"
    tput cup 5 39; echo -e "(2) Paquetes de software instalados"
    tput cup 5 40; echo -e "\033[1;32m2\033[0m"

    read -s -n1 subopcion
    case $subopcion in
      # La idea es simple: primero comprobamos si hay algun gestor instalado que este soportado
      # y luego averiguamos cual comprobandolos uno a uno.
      1|2) if [[ -e "$dpkg" || -e "$yum" ]] ; then
              case $subopcion in
                1)if [[ -e "$dpkg_sources" ]] ; then cat $dpkg_sources $dpkg_repos/*.list > AptSources.txt && xdg-open AptSources.txt ; fi ;
                  if [[ -e "$yum_conf" ]] ; then cat $yum_conf $yum_repos/*.repo > YumSources.txt && xdg-open YumSources.txt ; fi ;;
                2)if [[ -e "$dpkg" ]] ; then dpkg -l > DebPkgList.txt && xdg-open DebPkgList.txt ; fi ;
                  if [[ -e "$yum" ]] ; then yum list installed > RpmPkgList.txt && xdg-open RpmPkgList.txt ; fi ;;
              esac;
           else
             echo -e "Lo siento, tu gestor de paquetes (si es que tienes alguno) aun no esta soportado..\nPor favor, contacta con el creador de este script para ver si se puede arreglar" > ErrorProgramas.txt && xdg-open ErrorProgramas.txt
fi
           menu;;
      *)menu;;
    esac;;

  A|a)
    menu
    visualizar_ayuda

    read -s -n1 subopcion
    case $subopcion in
      *)menu;;
    esac;;

# Cualquiera opcion no valida implica volver al menu.
   *)
     menu;;
 esac

done

# Aunque estemos trabajando en /tmp es recomendable borrar los (posibles) ficheros creados ya que si
# volvemos a ejecutar el script sin reiniciar el sistema es posible que causen "problemas".
rm -f LinuxDistro.txt LinuxKernel.txt fstab.txt MenuGrub.txt MenuLilo.txt UsersLogged.txt KernelLog.txt \
     ifconfig.txt iwconfig.txt HardwarePCI.txt HardwareUSB.txt Xorg.txt DirectRendering.txt GeneralInfo.txt \
     AptSources.txt YumSources.txt ErrorProgramas.txt DebPkgList.txt RpmPkgList.txt

clear
exit

isseu


Festor

Cita de: isseu en 11 Diciembre 2009, 12:16 PM
Muy buen aporte
Te ganaste un -->  ;-)

La verdad es que el "aporte" en principio esta incompleto, la idea es intentar mejorarlo entre todos...  :-\

rh3nt0n

Hola Festor;
Me parece una estupenda iniciativa, tanto para poder ayudar a los usuarios GNU/Linux, como para poder aprender mas sobre shell-script.
Le he estado echando un ojo, y creo que se podría sacar algo bastante curioso y útil de ello.
Por mi parte intentare modificar la parte de Redes, especialmente la parte de información wireless, ya que es la parte que mas "controlo".
Te sugiero que le pongas una chincheta al hilo para no tener que andar buscándolo... además en principio tendría que estar a mano, para que cualquier usuario pueda encontrarlo fácilmente y poder proporcionar información en referencia a la duda que pueda postear en el foro.
Saludos
Reconoce tu tierra, tu ritmo, reconoce te a ti mismo.

Festor

Cita de: rh3nt0n en 12 Diciembre 2009, 12:05 PMTe sugiero que le pongas una chincheta al hilo para no tener que andar buscándolo...

Hecho, aunque espero subirlo pronto a un servidor de descarga directa para que se pueda instalar y ejecutar de una forma más cómoda.

rh3nt0n

Habla con el brujo,supongo que no tendrá inconveniente en colgarlo en la zona de descargas...pero no creo que sea tan difícil copiar el código, pegarlo en un archivo de texto, llamarlo asistencia_tecnica.sh y darle permisos de ejecución desde la consola... diría que es hasta beneficioso para el user.
Saludos
Reconoce tu tierra, tu ritmo, reconoce te a ti mismo.

[u]nsigned

Hola, bueno se me dio por proba tu Script Festor, y me eh topado con algo..

El script lo guarde como /home/faku/Documentos/infoMenu.sh

Al darle permisos de ejecucion chmod +x infoMenu.sh y ejecutarlo mediante ./infoMenu.sh todo bien. Pero al llamarlo desde sh me da el siguiente error:

faku@faku-desktop:~/Documentos$ sh infoMenu.sh
infoMenu.sh: 32: function: not found



    -e  En la pantalla principal elige la opcion deseada pulsando la tecla
    -e que corresponde a la letra resaltada, acto seguido aparecera un menu
    -e desplegable en el que debes seleccionar la accion a realizar en base
    -e al numero resaltado de su izquierda. Espero que te sea de utilidad!!

    -e by Festor... ^_^
    -e para la comunidad de elhacker.net
infoMenu.sh: 39: Syntax error: "}" unexpected
faku@faku-desktop:~/Documentos$


Saludos

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

Festor

[quote author=nsigned link=topic=277602.msg1383535#msg1383535 date=1263255297]
Al darle permisos de ejecucion chmod +x infoMenu.sh y ejecutarlo mediante ./infoMenu.sh todo bien. Pero al llamarlo desde sh me da el siguiente error:

faku@faku-desktop:~/Documentos$ sh infoMenu.sh[/quote]

Es que el script está escrito en Bash (comando bash) no en Bourne Shell (comando sh) por lo que las "pequeñas" diferencias que existen entre uno y otro interprete pueden dar lugar a problemas

Así que, dos cosas:
-> Sobra la extensión .sh, a decir verdad no es necesario usar extensiones con los scripts ya que el encabezado del propio script (#!/bin/bash) es el que se encarga de llamar al interprete que necesite.
-> Para llamarlo, así como para llamar a cualquier script, después de darle los permisos necesarios de ejecución, deberías usar ./ es decir:

Código (bash) [Seleccionar]
./info

Y si sigue dándote problemas entonces... ¿podrías decirme en que distro Linux lo has probado? ¿En tu sistema existe el comando tput?

ah! y gracias por probarlo! cualquier comentario aporte y/o sugerencia siempre es bienvenido ;D

P-Joe

Cita de: Festor en 12 Enero 2010, 11:18 AM
Y si sigue dándote problemas entonces... ¿podrías decirme en que distro Linux lo has probado? ¿En tu sistema existe el comando tput?
En el mío no, o eso creo (Ubuntu 11.04). ¿Para qué sirve?
Ten principios y no finales. // http://www.bitgamia.com/
Intel Core Duo Quad Q9550
Gigabyte EG45M-UD2H (G45 motherboard)
WDC Caviar Green SATA 3 Gb/s IntelliPower 500GB

CloudswX

Pues yo lo he probado en mi Ubuntu 10.10 y funciona de pelos, tremendo aporte gente asi contaremos con mas informacion a la hora de postear algun problema.

Saludos por alla.


«Dios no juega a los dados, usa /dev/random.»
twitter: @cloudswx