[Risolto] Creazione script per invio informazioni al forum

Bash, Perl, Python, Ruby, ...
Avatar utente
s3v
Hero Member
Hero Member
Messaggi: 5964
Iscritto il: 31/12/2008, 11:54

[Risolto] Creazione script per invio informazioni al forum

Messaggio da s3v »

Avevo pensato di creare uno script Bash per ottenere tutte le informazioni necessarie sulla configurazione di una rete wired o wireless in modo da poterle allegare ad una richiesta di aiuto.
I comandi da inserire che mi vengono ora in mente sono:

Codice: Seleziona tutto

cat /etc/debian_version
lsb_release -a
uname -a
cat /etc/network/interfaces
cat /etc/resolv.conf
route -n
ifconfig -a
iwconfig
iwlist scan
dpkg -l | grep -i firmware
dpkg -l | grep -i dhcp
lsmod
inoltre si dovrebbe cercare un modo per capire se NM (o wicd, o altri) è installato, è in esecuzione e qual è il suo file di configurazione; ma, non usandolo, non ho idea di come funzioni.
Altri comandi da suggerire?
In questo modo si evita di perdere i primi 5-6 messaggi con richieste di informazioni che, purtroppo, non tutti inviano al momento della richiesta d'aiuto.

Ciao

EDIT
**** Lo script è disponibile per il download e la modifica a questo indirizzo ***
Ultima modifica di s3v il 01/06/2013, 15:16, modificato 2 volte in totale.
Avatar utente
GipPasso
Hero Member
Hero Member
Messaggi: 3494
Iscritto il: 02/03/2006, 8:30
Località: Passo della Cisa (PR)
Contatta:

Re: Creazione script per invio informazioni al forum

Messaggio da GipPasso »

Si può usare banalmente un "dpkg -l" per capire chi è installato (con opportuni grep), e un "ps aux", anch'esso con grep per vedere cosa è in esecuzione.

I pacchetti wicd iniziano tutti con wicd, quindi questo si aggiunge facile.

I pacchetti networkmangar non so, ma cercando si trova subito una qualche regolarità.

Per lo stato di funzionamento si possono anche usare i comandi

Codice: Seleziona tutto

/etc/init.d/wicd status
e analogo.

GipPasso
Avatar utente
s3v
Hero Member
Hero Member
Messaggi: 5964
Iscritto il: 31/12/2008, 11:54

Re: Creazione script per invio informazioni al forum

Messaggio da s3v »

Prima bozza.
Potete testarlo e aggiungere altri comandi?
Ogni suggerimento è più che ben accetto.

Grazie

Codice: Seleziona tutto

#!/bin/bash

log=log.txt
ziplog=log.zip

if [[ $EUID -ne 0 ]]; then
 echo "Lo script deve essere lanciato da root"
 exit 1
fi 

if [ ! -f /usr/bin/zip ]; then
 echo "Installare il pacchetto zip"
 exit 1
fi

comandi=(
_unamea
_version
_dmesg
_lsmod
_lspci
_lsusb
_interfaces
_ifconfig
_routen
_resolvconf
_firmware
_dhcp
)

function spazi {
 echo "" >> $log
 echo "" >> $log
}

function _ok {
/bin/echo -n $1 && /bin/echo -e "\t\t\t\t\t\t[\e[01;32mOK\e[00m]"

}

function _error {
 /bin/echo -n $1 && /bin/echo -e "\t\t\t\t\t\t\e[01;31mFAIL\e[00m"
}

function nome_e_riga {
  echo $1 >> $log
  echo "==========================================" >> $log
}



function _unamea {
 if [ -x /bin/uname ]; then
  nome_e_riga "uname -a"
  /bin/uname -a >> $log && _ok "uname -a"
 else _error "uname -a"
 fi
}

function _version {
 if [ -f /etc/debian_version ]; then
  nome_e_riga "Versione Debian"
  cat /etc/debian_version >> $log && _ok "Versione Debian"
 else _error "Versione Debian" 
 fi
}

function _dmesg {
 if [ -x /bin/dmesg ]; then
  nome_e_riga "dmesg"
  dmesg >> $log && _ok "dmesg"
 else _error "dmesg"
 fi
}

function _lsmod {
 if [ -x /bin/lsmod ]; then
  nome_e_riga "lsmod"
  lsmod >> $log && _ok "lsmod"
 else _error "lsmod"
 fi
}

function _lspci {
 if [ -x /usr/bin/lspci ]; then
  nome_e_riga "lspci"
  lspci >> $log && _ok "lspci"
 else _error "lspci"
 fi
}

function _lsusb {
 if [ -x /usr/bin/lsusb ]; then
  nome_e_riga "lsusb"
  lsusb >> $log && _ok "lsusb"
 else _error "lsusb"
 fi
}

function _interfaces {
 if [ -f /etc/network/interfaces ]; then
  nome_e_riga "/etc/network/interfaces"
  ls -l /etc/network/interfaces >> $log
  echo "" >> $log
  cat /etc/network/interfaces >> $log && _ok "/etc/network/interfaces"
 else _error "/etc/network/interfaces"
 fi
}

function _ifconfig {
 if [ -x /sbin/ifconfig ]; then
  nome_e_riga "ifconfig"
  ifconfig >> $log && _ok "ifconfig"
  spazi
  nome_e_riga "ifconfig -a"
  ifconfig -a >> $log && _ok "ifconfig -a"
 else _error "ifconfig -a"
 fi
}

function _routen {
 if [ -x /sbin/route ]; then
  nome_e_riga "route -n"
  route -n >> $log && _ok "route -n"
 else _error "route -n"
 fi
}

function _resolvconf {
 if [ -f /etc/resolv.conf ]; then
  nome_e_riga "resolv.conf"
  ls -l /etc/resolv.conf >> $log
  echo "" >> $log
  cat /etc/resolv.conf >> $log && _ok "/etc/resolv.conf"
 else _error "/etc/resolv.conf"
 fi
}

function _firmware {
  nome_e_riga "grep firmware"
  dpkg -l | grep -i firmware >> $log && _ok "grep firmware"
}

function _dhcp {
  nome_e_riga "grep dhcp"
  dpkg -l | grep -i dhcp >> $log && _ok "grep dhcp"
}

for ((i=0; i<${#comandi[@]}; i++)); do
 ${comandi[$i]}
 spazi
done

zip $ziplog $log
chmod 666 $ziplog
rm $log

Avatar utente
s3v
Hero Member
Hero Member
Messaggi: 5964
Iscritto il: 31/12/2008, 11:54

Re: Creazione script per invio informazioni al forum

Messaggio da s3v »

Seconda bozza, ho allineato un po' l'output.
Se qualcuno può introdurre in particolare i comandi relativi al wireless (es. iwconfig e wpasupplicant) in quanto ho il notebook fuori uso.

Codice: Seleziona tutto

#!/bin/bash

log=log.txt
ziplog=log.zip

if [[ $EUID -ne 0 ]]; then
 echo "Lo script deve essere lanciato da root"
 exit 1
fi 

if [ ! -f /usr/bin/zip ]; then
 echo "Installare il pacchetto zip"
 exit 1
fi

comandi=(
_unamea
_version
_dmesg
_lsmod
_lspci
_lsusb
_interfaces
_ifconfig
_routen
_resolvconf
_firmware
_dhcp
)

function spazi {
 echo "" >> $log
 echo "" >> $log
}

function _ok {
 /bin/echo -e $1 "\033[35G\033[01;32mOK\033[0m"
}

function _error {
 /bin/echo -e $1 "\033[35G\033[01;31mERROR\033[0m"
}

function nome_e_riga {
  echo $1 >> $log
  echo "==========================================" >> $log
}



function _unamea {
 if [ -x /bin/uname ]; then
  nome_e_riga "uname -a"
  /bin/uname -a >> $log && _ok "uname -a"
 else _error "uname -a"
 fi
}

function _version {
 if [ -f /etc/debian_version ]; then
  nome_e_riga "Versione Debian"
  cat /etc/debian_version >> $log && _ok "Versione Debian"
 else _error "Versione Debian" 
 fi
}

function _dmesg {
 if [ -x /bin/dmesg ]; then
  nome_e_riga "dmesg"
  dmesg >> $log && _ok "dmesg"
 else _error "dmesg"
 fi
}

function _lsmod {
 if [ -x /bin/lsmod ]; then
  nome_e_riga "lsmod"
  lsmod >> $log && _ok "lsmod"
 else _error "lsmod"
 fi
}

function _lspci {
 if [ -x /usr/bin/lspci ]; then
  nome_e_riga "lspci"
  lspci >> $log && _ok "lspci"
 else _error "lspci"
 fi
}

function _lsusb {
 if [ -x /usr/bin/lsusb ]; then
  nome_e_riga "lsusb"
  lspci >> $log && _ok "lsusb"
 else _error "lsusb"
 fi
}

function _interfaces {
 if [ -f /etc/network/interfaces ]; then
  nome_e_riga "/etc/network/interfaces"
  ls -l /etc/network/interfaces >> $log
  echo "" >> $log
  cat /etc/network/interfaces >> $log && _ok "/etc/network/interfaces"
 else _error "/etc/network/interfaces"
 fi
}

function _ifconfig {
 if [ -x /sbin/ifconfig ]; then
  nome_e_riga "ifconfig"
  ifconfig >> $log && _ok "ifconfig"
  spazi
  nome_e_riga "ifconfig -a"
  ifconfig -a >> $log && _ok "ifconfig -a"
 else _error "ifconfig -a"
 fi
}

function _routen {
 if [ -x /sbin/route ]; then
  nome_e_riga "route -n"
  route -n >> $log && _ok "route -n"
 else _error "route -n"
 fi
}

function _resolvconf {
 if [ -f /etc/resolv.conf ]; then
  nome_e_riga "resolv.conf"
  ls -l /etc/resolv.conf >> $log
  echo "" >> $log
  cat /etc/resolv.conf >> $log && _ok "/etc/resolv.conf"
 else _error "/etc/resolv.conf"
 fi
}

function _firmware {
  nome_e_riga "grep firmware"
  dpkg -l | grep -i firmware >> $log && _ok "grep firmware"
}

function _dhcp {
  nome_e_riga "grep dhcp"
  dpkg -l | grep -i dhcp >> $log && _ok "grep dhcp"
}

for ((i=0; i<${#comandi[@]}; i++)); do
 ${comandi[$i]}
 spazi
done

zip $ziplog $log
chmod 666 $ziplog
rm $log

Avatar utente
GipPasso
Hero Member
Hero Member
Messaggi: 3494
Iscritto il: 02/03/2006, 8:30
Località: Passo della Cisa (PR)
Contatta:

Re: Creazione script per invio informazioni al forum

Messaggio da GipPasso »

Io userei ip al posto di ifconfig e route:

Codice: Seleziona tutto

ip add list
ip route list
perché, come dice wikipedia ifconfig è in via di dismissione in molte distribuzini maggiori.

Sono anch'io senza laptop per un po'. Il test fatto finora mostra uno script molto informativo.

GipPasso
Avatar utente
s3v
Hero Member
Hero Member
Messaggi: 5964
Iscritto il: 31/12/2008, 11:54

Re: Creazione script per invio informazioni al forum

Messaggio da s3v »

Grazie GipPasso, questa di ifconfig non la sapevo.
I comandi li aggiungo accanto a ifconfig, qualche informazione in più (anche ridondante) non fa male :)
Aggiungo anche "sources.list" mentre mi servirebbe sapere in che modo individuare il DE di riferimento; per KDE c'è il processo "kdeinit4" (però a KDE chiuso bisogna inventarsi qualcos'altro) ma per Gnome e tutti gli altri? Come si fa a determinare il DE che gira sulla macchina?

Ciao
Avatar utente
GipPasso
Hero Member
Hero Member
Messaggi: 3494
Iscritto il: 02/03/2006, 8:30
Località: Passo della Cisa (PR)
Contatta:

Re: Creazione script per invio informazioni al forum

Messaggio da GipPasso »

Soprattutto quando non gira. Se ne possono avere diversi installati.
Io non ho gestori di login grafici e per sapere che gestore di finestre mi viene eseguito se non ne specifico uno alternativo in .xinit o .Xsession mi basta dare

Codice: Seleziona tutto

update-alternatives --display x-window-manager
Questa è però una informazione dipendende da talmente tante altre variabili che secondo me non dovrebbe essere cercata in questa prima fase.

Potremmo piuttosto cercare di capire se chi gestisce la rete è network-manager, wicd o se è configurata staticamente (altre soluzioni io non le conosco).
Che ne dite?

GipPasso
Ombra
wiki member
wiki member
Messaggi: 479
Iscritto il: 11/08/2007, 18:06
Località: Bologna

Re: Creazione script per invio informazioni al forum

Messaggio da Ombra »

Avevo pensato di creare uno script Bash per ottenere tutte le informazioni necessarie sulla configurazione di una rete wired o wireless..
In questo modo si evita di perdere i primi 5-6 messaggi con richieste di informazioni
bella idea, io mi ero limitato a pensare a una guida ( che avrei scritto tra chissà quanto tempo) ma lo script è un ulteriore passo avanti: purtroppo col bash/dash sono una schiappa, dunque evito di mettere mano allo script.
Ho visto che hai messo un sacco di comandi dall' output lungo ( mi sembra non filtrati ): nell'ottica di predere ancora meno tempo si potrebbe aggiungere all'inizio una sezione "mi sento fortunato" in cui mettere comandi che con un po' di fortuna evidenziano nelle prime 10/15 righe del log i problemi più comuni.
Per esempio io sul mio pc con questi 3 prendo tutto quello che c'è di relativo wireless ( e anche altro)

Codice: Seleziona tutto

dmesg | grep firmware
che evidenzia il (non) caricamento di un eventuale firmware

Codice: Seleziona tutto

dmesg | grep phy
nome del modulo e del chip

Codice: Seleziona tutto

dmesg | grep wlan
che da info sul nome dell'interfaccia wireless, ma anche su eventuali problemi di udev (caso raro) nel rinominarla
EDIT: in effetti quest'ultimo funziona solo se l'interfaccia viene rinominata, quindi è inutile

In ogni caso ora provo il tuo script sul portatile
EDIT2: lo script funziona alla perfezione su portatile e desktop (testing e sid)
Avatar utente
s3v
Hero Member
Hero Member
Messaggi: 5964
Iscritto il: 31/12/2008, 11:54

Re: Creazione script per invio informazioni al forum

Messaggio da s3v »

GipPasso ha scritto:Potremmo piuttosto cercare di capire se chi gestisce la rete è network-manager, wicd o se è configurata staticamente
Mi sembra la soluzione migliore.
Qualcuno che utilizza NM e/o wicd può postare i loro processi in esecuzione?
Ombra ha scritto: Ho visto che hai messo un sacco di comandi dall' output lungo ( mi sembra non filtrati ): nell'ottica di predere ancora meno tempo si potrebbe aggiungere all'inizio una sezione "mi sento fortunato" in cui mettere comandi che con un po' di fortuna evidenziano nelle prime 10/15 righe del log i problemi più comuni.
Ci avevo pensato ma servono anche le righe immediatamente prima e immediatamente dopo. E comunque c'è sempre il rischio di lasciar sfuggire qualcosa.
Ombra ha scritto: EDIT2: lo script funziona alla perfezione su portatile e desktop (testing e sid)
Grazie del test.
Puoi postare l'utilizzo del comando "iwconfig" e il percorso del file "wpasupplicant.conf" (se c'è)?

Ciao
mirko.pagliai
Hero Member
Hero Member
Messaggi: 4102
Iscritto il: 15/03/2010, 23:46

Re: Creazione script per invio informazioni al forum

Messaggio da mirko.pagliai »

Codice: Seleziona tutto

root@mirko-laptop:~# /etc/init.d/network-manager status
NetworkManager is running.

Codice: Seleziona tutto

root@mirko-laptop:~# /etc/init.d/network-manager stop
Stopping network connection manager: NetworkManager
root@mirko-laptop:~# /etc/init.d/network-manager status
could not access PID file for NetworkManager ... failed!
Di conseguenza dovrebbe essere sufficiente questo:

Codice: Seleziona tutto

/etc/init.d/network-manager status | grep "is running"
Ombra
wiki member
wiki member
Messaggi: 479
Iscritto il: 11/08/2007, 18:06
Località: Bologna

Re: Creazione script per invio informazioni al forum

Messaggio da Ombra »

Puoi postare l'utilizzo del comando "iwconfig" e il percorso del file "wpasupplicant.conf" (se c'è)?
Non ho capito bene cosa intendi con "utilizzo", cmq posto gli output, se intendevi altro specifica che ti accontento
PC Desktop
/etc/wpasupplicant.conf
esiste ma è commentato, la configurazione da un po' di tempo la tengo tutta dentro interfaces

Codice: Seleziona tutto

#iwconfig
eth3      IEEE 802.11bg  ESSID:"pippo90"  
          Mode:Managed  Frequency:2.432 GHz  Access Point: 54:E6:FC:DF:06:9C   
          Bit Rate=54 Mb/s   Tx-Power=20 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=33/70  Signal level=-77 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:15   Missed beacon:0

lo        no wireless extensions.

eth1      no wireless extensions.

eth0      no wireless extensions.
PC Portatile

wpasupplicant.conf non esiste

Codice: Seleziona tutto

# iwconfig
lo        no wireless extensions.

wlan0     IEEE 802.11bgn  ESSID:"pippo90"  
          Mode:Managed  Frequency:2.432 GHz  Access Point: 54:E6:FC:DF:06:9C   
          Bit Rate=54 Mb/s   Tx-Power=16 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on
          Link Quality=37/70  Signal level=-73 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:8   Missed beacon:0

eth0      no wireless extensions.
Avatar utente
s3v
Hero Member
Hero Member
Messaggi: 5964
Iscritto il: 31/12/2008, 11:54

Re: Creazione script per invio informazioni al forum

Messaggio da s3v »

Grazie dei test e dei preziosi suggerimenti.
Questa è la terza bozza. Ho aggiunto il comando "iwlist scan", "sources.list", "ip addr list/route", qualcosa sul firmware, network manager.
Quest'ultimo e "iwlist" servirebbe testarlo perché io non posso farlo; inoltre bisognerebbe vedere se lo script funziona anche con "sudo".
Cosa si potrebbe aggiungere?

Ciao
Allegati
script.zip
script per log - 3a bozza
(1.46 KiB) Scaricato 635 volte
Ombra
wiki member
wiki member
Messaggi: 479
Iscritto il: 11/08/2007, 18:06
Località: Bologna

Re: Creazione script per invio informazioni al forum

Messaggio da Ombra »

Dunque mi sono sbagliato, lo script funziona solo con bash, con dash (che mi sembra sia diventato di default) da errore; non me ne ero accorto perchè come shell di sistema uso ancora bash ::)

Codice: Seleziona tutto

# dash rete
rete: 7: rete: [[: not found
rete: 22: rete: Syntax error: "(" unexpected
Quest'ultimo e "iwlist" servirebbe testarlo perché io non posso farlo; inoltre bisognerebbe vedere se lo script funziona anche con "sudo".
Cosa si potrebbe aggiungere?
posso essere utile solo in parte (non uso sudo ne networkmanager o simili): lo script con bash funziona, durante l'esecuzione restituisce ERROR sull'ultima voce (network manager) e nel log riporta che non è installato (vero);
per quanto riguarda lo scan con iwlist non so se sia utile, perchè se l'interfaccia non è "up" non fa alcuna scansione (vale per tutti i chip che ho io, non so se è generalizzabile)

Codice: Seleziona tutto

# iwlist scan
eth3      Interface doesn't support scanning : Network is down

lo        Interface doesn't support scanning.

eth1      Interface doesn't support scanning.

eth0      Interface doesn't support scanning.
così non aggiunge nulla rispetto a iwconfig

Per sudo e networkmanager se sta sera riesco a fare dei test senza incasinarmi le configurazioni edito qui
EDIT: ho provato una volta con sudo e sembra che funzioni tutto; anche per network-manager sembra tutto ok, rileva correttamente se è installato e se è in esecuzione
Avatar utente
s3v
Hero Member
Hero Member
Messaggi: 5964
Iscritto il: 31/12/2008, 11:54

Re: Creazione script per invio informazioni al forum

Messaggio da s3v »

@Ombra
Grazie mille!

Posto la quarta versione dello script. Ho aggiunto "ping", "/etc/hosts", "iptables -L".
A me non viene in mente altro. Forse solo un ping verso il gateway oltre a quello verso i DNS di BigG.
Se funziona si mette da qualche parte a disposizione.
Ombra ha scritto:Dunque mi sono sbagliato, lo script funziona solo con bash, con dash (che mi sembra sia diventato di default) da errore; non me ne ero accorto perchè come shell di sistema uso ancora bash ::)
Sì, lo script richiede l'interprete Bash. Ma penso che sia installato di default da tutte le distribuzioni.
Inoltre Bash è la shell predefinita di login per Debian (grep tuo_utente /etc/passwd) mentre Dash è l'interprete richiamato nel caso in cui lo script inizi con "#!/bin/sh" e, praticamente, serve solo per velocizzare gli script all'avvio del sistema.
A script terminato vediamo di renderlo portabile per altri interpreti, anche se alcuni costrutti di Bash sono parecchio comodi e veloci (es. &>>) :P

"iwlist scan" funziona con l'interfaccia wireless attiva?

Ciao
Allegati
script.zip
Script per log - 4a bozza
(1.57 KiB) Scaricato 652 volte
Ombra
wiki member
wiki member
Messaggi: 479
Iscritto il: 11/08/2007, 18:06
Località: Bologna

Re: Creazione script per invio informazioni al forum

Messaggio da Ombra »

Provata anche l'ultima versione, funziona tutto :) se hai bisogno ti mando uno o due log, tanto ormai sono pieno :P
"iwlist scan" funziona con l'interfaccia wireless attiva?
quello che intendo dire è che prima bisogna dare

Codice: Seleziona tutto

#ifup wlan0
e poi andare di iwlist scan, altrimenti a me non fa la scansione.
Ripeto, non sono sicuro che sia una cosa generale, magari è una limitazione del mio chip wireless o magari è che con la mania di installare il minimo indispensabile mi sono perso qualche libreria, anzi se qualcuno smentisce mi fa un favore così vedo di capire cosa non va nelle mie installazioni :)
Rispondi