Visualizzazione post con etichetta scripting. Mostra tutti i post
Visualizzazione post con etichetta scripting. Mostra tutti i post

venerdì 3 settembre 2010

L'opzione giusta: svcs -Ho state

Script banale di riavvio demone:
if [[ `svcs -l smb/server|grep -i ^state|egrep -v '_state|state_' == "maintenance" ]]

Sbagliato!! O per lo meno ... poco bello...
anzichè greppare e usare awk sempre e comunque perchè tanto funge, molto meglio usare le opzioni dei comandi ...

Un bel:
svcs -Ho state
ti fa ottenere il valore di "state", con -H si eliminano gli header per avere un output pulito da matchare.

venerdì 19 febbraio 2010

dmesg è sacro

Quando mi loggo su una macchina Unix, io DEVO digitare "dmesg". E' più forte di me. Ognuno ha i suoi riti, lancia ksh -o vi, da invio $random volte alternato al comando cd ...
Io digito dmesg e do invio. Su Linux, su Solaris ...

Su Aix non c'è!
E non c'è alog -o -t boot o errpt -a che tenga.
Per questo sono arrivato a farmelo da me:

root@localhost / #which dmesg
/usr/bin/dmesg
root@localhost / #file /usr/bin/dmesg
/usr/bin/dmesg: shell script
root@localhost / #cat /usr/bin/dmesg
#!/usr/bin/bash

cat /var/adm/messages
root@localhost / #dmesg
Jan 14 17:18:25 localhost user:warn|warning root: sdjskdjkjdkjkwejk
Jan 14 17:19:11 localhost auth|security:crit reboot: rebooted by root
Jan 14 17:19:12 localhost syslog:err|error syslogd: going down on signal 15
Jan 14 17:19:13 localhost mail:crit sendmail[225452]: My unqualified host name (loopback) unknown; sleeping for retry
Jan 14 17:26:01 localhost mail:crit sendmail[184410]: My unqualified host name (loopback) unknown; sleeping for retry
Jan 14 17:27:01 localhost mail:alert sendmail[184410]: unable to qualify my own domain name (loopback) -- using short name
Jan 14 17:35:56 localhost syslog:info syslogd: restart
Jan 15 00:50:10 localhost user:notice syslog: set by root
Jan 15 00:51:08 localhost user:notice last message repeated 4 times
Jan 15 00:52:27 localhost syslog:info syslogd: restart
Jan 15 01:08:40 localhost auth|security:crit halt: halted by root
Jan 15 01:08:40 localhost syslog:err|error syslogd: going down on signal 15
Jan 15 08:08:40 localhost syslog:info syslogd: restart
Jan 15 08:08:41 localhost mail:crit sendmail[184422]: My unqualified host name (loopback) unknown; sleeping for retry
Jan 15 08:08:41 localhost daemon:notice RMCdaemon[274650]: (Recorded using libct_ffdc.a cv 2):::Error ID: 6eKora0tF/I9/atf.S6.e.1...................:::Referen
ce ID: :::Template ID: a6df45aa:::Details File: :::Location: RSCT,rmcd.c,1.56,213 :::RMCD_INFO_0_ST The daemon is started.
Jan 15 08:08:45 localhost auth|security:notice su: from root to pconsole at /dev/tty??
Jan 16 03:14:33 localhost syslog:info syslogd: restart
Jan 16 03:14:35 localhost mail:crit sendmail[184410]: My unqualified host name (loopback) unknown; sleeping for retry
Jan 16 03:14:37 localhost user:info syslog: /usr/sbin/ifconfig -l
Jan 16 03:14:43 localhost daemon:notice RMCdaemon[213212]: (Recorded using libct_ffdc.a cv 2):::Error ID: 6eKora0H2GI9/npg/S6.e.1...................:::Referen
ce ID: :::Template ID: a6df45aa:::Details File: :::Location: RSCT,rmcd.c,1.56,213 :::RMCD_INFO_0_ST The daemon is started.
Jan 16 03:14:52 localhost auth|security:notice su: from root to pconsole at /dev/tty??
Jan 16 03:15:35 localhost mail:alert sendmail[184410]: unable to qualify my own domain name (loopback) -- using short name
Jan 16 03:15:35 localhost mail:info sendmail[184410]: starting daemon (AIX6.1/8.13.4): SMTP+queueing@00:30:00
Jan 16 03:17:22 localhost auth|security:info syslog: tty0: failed login attempt for alex
[ -- CUT -- ]

Ebbene si :)

Allo stesso modo pgrep:
root@localhost / #which pgrep
/usr/bin/pgrep
root@localhost / #file /usr/bin/pgrep
/usr/bin/pgrep: shell script
root@localhost / #cat /usr/bin/pgrep
#!/usr/bin/bash
# My Pgrep Work in Progress 0.1

if [ $1 = "-h" ];then
echo "Usage:\n";
echo "Useful options are f and N";
echo "ps options A and e are implicited";
echo "Es:\n";
echo "pgrep Nf blabla"
else
ps -Ae${1}|grep $2|awk '{print $1,$2,$8}'
fi

sabato 22 agosto 2009

Bash For loop con range numerico, in quanti modi

E io che esaltavo ksh per la sua semplicità e praticità.
Se devi fare un loop for governato da una sequenza numerica, con Bash hai una valanga di possibilità per l'implementazione. Ho odiato il secondo esempio per mesi prima di apprendere gli altri metodi, inoltre nelle vecchie versioni di Bash non esisteva seq o la forma "n .. n" presa proprio dalla Korn:

for I in {1..10}; do echo $I; done
for I in 1 2 3 4 5 6 7 8 9 10; do echo $I; done
for I in $(seq 1 10); do echo $I; done
for i in $(seq 10); do echo $I; done
for ((I=1; I <= 10 ; I++)); do echo $I; done


Do credito alla fonte per questa raccolta di esempi; visto che ogni volta mi dimentico la sintassi e ho bisogno di rivedermela, volevo da tempo aggiungerla qui.

venerdì 29 maggio 2009

Cisco IOS: scripting con Tcl

Mentre preparavo uno script perl per eseguire una serie di comandi da remoto sul mio Cisco, una ricerca su Google, mi porta a una scoperta molto interessante. Mi ha stupito, che, di ciò che segue, non ne ho mai sentito parola, ne da colleghi specializzati, ne durante lo studio sul programma CCNA, ne nei luoghi di discussione quali forums, irc chat ecc. IOS contiene un linguaggio di scripting: TCL, pronunciabile tickle. Non è certo il più famoso scripting language, ma c'è, ed è molto maturo. Basta, in enable mode, digitare tclsh: wallbox#tclsh wallbox(tcl)# e per uscire tclquit. E' disponibile dalle seguenti releases in poi nella versione 12.2 (25 della T) e 12.3 (2 della S). La CLI diventa ibrida ed è possibile quindi utilizzarla anche per digitare comandi IOS. Informazioni qui e qui

giovedì 19 marzo 2009

giovedì 11 dicembre 2008

Informazioni su StorageTek 6540 e Nagios Plugin

Ho trovato questa pagina, che dovrebbe essere un documento operativo sul 6540 di StorageTek; è in norvegese, ma potete incollare il seguente link qui e avere una grossolana traduzione in italico (o altro se si preferisce):
http://hpc.uio.no/index.php/Norstore_operational_document
Ci sono esempi dell'uso della riga di comando e anche una chicca:
il link a un plugin per Nagios per la CAM e la serie 6xxx degli array Sun Storagetek.
Praticamente, questo plugin è uno script perl che va a guardare nella directory dove la CAM mette gli allarmi (solitamente ogni allarme è custodito li sottoforma di file: un allarme - un file); non vedo indicato la directory degli allarmi, ma a memoria sta sotto /var/opt/SUNWsefms in una directory chiamata alarms o notifications (magari find può essere più preciso se gli chiedete).

Nello stesso sito anche altri plugin interessanti per il check di HBA scsi adaptec, Oracle health e MySQL performance, stato di servers HP Proliant ecc ecc

Insomma, una letta questa pagina, la merita.

giovedì 27 novembre 2008

Quanta RAM?

Come vedo quanta RAM c'è dentro quel server?
In un modo "scriptabile"?

Solaris:
prtconf -vp|grep Mem

Hp-uX:
dmesg|grep -i physical
cat /var/adm/syslog/syslog|grep -i physical
/usr/sam/lbin/getmem
print_manifest|grep -i physical

Linux:
cat /proc/meminfo |grep MemTotal:
top -n 1|grep Mem|awk '{print $1,$3}'

venerdì 10 ottobre 2008

Hp-uX: installare multipli depot in un colpo solo

E' frustrante tornare agli anni 90 a volte ... è il feeling che sento quando mi sloggo da una sessione ssh su una 25K con Solaris 10u5 per loggarmi su un Integrity con Hp-uX 11.31 (11i v3). Sapore di terminale "vetusto".
Niente guerre di religione ... tanto che Solaris è better è un dato di fatto :)

Sto avendo a che fare con Hp-uX in questi giorni. Come tutte le cose poco conosciute può essere terribilmente ostico ... quindi un pò di pacchettini da metter su per rendere l'esperienza più piacevole è un must.

uX ha i depot: swinstall è il tool per gestire l'installazione. Dopo aver fatto la guerra son riuscito a installare i pacchetti necessari. Mi son trovato a dover ovviare al problema di non riuscire a installare i pacchetti in un colpo solo; uno alla volta è terribile, ci va un sacco di tempo.

Alla fine, con swcopy e uno scriptino che mi sono prodotto apposta ho automatizzato il processo. E' sufficiente copiare i depot gzippati scaricati dal repository dell'uni dello stato dello Utah e lanciare:

# depota_pota

All'inizio ho create /staff e /staff/depot /staff/archives /staff/old , non serve altro.
#!/bin/sh

PKG_DIR="staff";
OLD="old";
DEPOT="depot";

cd /${PKG_DIR};
if [ `ls /$PKG_DIR|grep *.depot.gz` ]; then
gunzip *
fi

if [ `ls /$PKG_DIR/$DEPOT|grep catalog` ]; then
mv /$PKG_DIR/$DEPOT/* /$PKG_DIR/$OLD/
fi

for i in *.depot
do
swcopy -s ${PWD}/$i \* @ /${PKG_DIR}/${DEPOT}
done
swinstall -s
/${PKG_DIR}/${DEPOT}

Dalla GUI si selezionano i pacchetti, si marcano con 'm' e dal menù Actions si seleziona Install ... avanti avanti avanti!!




venerdì 3 ottobre 2008

bashing: break e continue

Questi due comandi sono fondamentali nell'uso dei loops in uno script.
Break permette l'uscita da un loop al contrario di continue che salta alla prossima iterazione. Passandogli un parametro è possibile, nei nested loops, controllare di quanti cicli uscire (break), o quante iterazioni saltare all'interno dello stesso loop (continue).

Maggiori informazioni nella mitica Advanced Bash Scripting Guide (ABS), sempre sotto virtuale braccio quando mi trovo a scriptare.

giovedì 28 agosto 2008

Raccolta scripts

Qui c'e' una raccolta di scripts che mi port sempre dietro e che ho collezionato e/o scritto col tempo. Son quasi tutti miei, quindi la qualita' non e' ottima, ma fano quello che devono fare. Alcuni sono piu' "generici" e adattabili al contesto, altri invece meno e sono difficilmente riciclabili; i contenuti cambiano col tempo, quando ho tempo li sistemo o aggiungo opzioni, quindi versiono e metto l'anno di produzione in tutti, in modo da riuscire ad aggiornarli piu' facilmente.

Alcuni contengono un help o commenti.

domenica 24 agosto 2008

Escapare caratteri speciali su Blogger

Nel post precedente dovevo digitare <<EOF ma non ci riuscivo. Veniva interpretato come tag errato. Dopo un breve ricerca ho trovato come fare l'escape di alcuni caratteri:

< diventa &lt;
> diventa &gt;
© diventa &copy;
& diventa &amp;
" diventa &quot;

Riassunti qua sopra. Grazie all'autore di Anilinux per il tip leggibile qui su Anilinux

sabato 23 agosto 2008

Eseguire comandi multipli in remoto via SSH

Bisogno di utilizzare una interfaccia grafica su un server remoto; capita sovente: si tratta di esportare il display dal server alla macchina dalla quale si sta lavorando. Oggi mi e' venuto in mente di automatizzare la procedura; ecco il risultato:
  • Prende due parametri, l'host e il comando da eseguire
  • Si collega, estrae l'ip dalla variabile SSH_CLIENT e aggiunge il numero del display
  • Dopo aver collezionato quanto gli serve si connette e esegue quanto desiderato. Il secondo parametro puo' consistere di qualsiasi comando, eseguibile o puo' essere vuoto
Interessante l'uso dell'EOF, preso da uno spunto letto in rete; a questo proposito e' da segnalare una cosetta: le variabili vanno trattate nel modo giusto perche' sia possibile l'uso corretto in remoto. A questo proposito e' necessario "escaparle" perche' non vengano parsate subito e vengano passate nel modo giustoAd esempio: la terza riga dal fondo stampa a schermo il valore di DISPLAY sul server remoto. Senza il \ davanti restituirebbe il valore che ha in locale.

#!/bin/bash
HOST="$1";
COMMAND="$2";
LOGINFROM=`ssh -q $HOST env|grep SSH_CLIENT|awk '{print $1}'|cut -f2 -d"="`
REMIP="${LOGINFROM}:0"
ssh -q $HOST <<EOF
export DISPLAY=${REMIP};
echo \$DISPLAY
$COMMAND
EOF

mercoledì 30 luglio 2008

Chi prompt if proxy

alias whox='who -Hup'
alias whon='who'


Mi piace mettere questo nel .profile se posso. Le opzioni Hup forniscono l'output più utile in assoluto.

root@xxxxx # whox
NAME LINE TIME IDLE PID COMMENTS
root pts/1 lug 30 23:21 . 22957 (10.x.x.x)
sam-fsd . lug 30 05:46 17:41 7917 id= sf
root@xxxxx # whon
root pts/1 lug 30 23:21 (10.x.x.x)

Si può fare riferimento alla pagina man di who per dettagli sulle opzioni coinvolte.

Mi piace anche rifare il prompt definendo:
PS1='\u@\h - \w ->'
E' un pò invasivo quindi rimane nel mio .profile utente.

In genere uso il .profile-EIS di Sun, che è molto comodo, aggiungo quanto sopra, e se ho un portatile un paio di if che mi settano il proxy se sono al lavoro o meno:

IP=`ifconfig ath0|grep inet|awk '{print $2}'|cut -b6-20`
PROXY_NET="192.168."
PROXY_NET2="10.0."
if [[ `echo $IP|grep "$PROXY_NET"` ]]; then
http_proxy="http://pippo:1";
export http_proxy;
else
unset http_proxy;
fi
[ -- CUT -- ]

Questo post è in evoluzione, nuove aggiunte non appena ce ne saranno. Se vuoi contribuire puoi aggiungere un commento.

venerdì 25 luglio 2008

Bind: Aggiungere nuove entry nel file di zona

Un piccolo script che aggiunge nuove entries nei files di zona.
Fa:
- aggiunge, rimuove e fa il reload
- incrementa il seriale in automatico
- chiede conferma se IP o nome sono già presenti

In realtà l'opzione -r ancora non funziona e l'opzione -u è banale. Per ora mi sono concentrato sull'aggiunta dei records, che è praticamente completa.

#!/bin/bash
#
# AddNameToBind 0.99b
# 2008 Alessandro Torchia

ZONE="my.local.zone";
LIST=`cat $ZONE|egrep 'IN|A|MX|CNAME|^pr|^pp'`
IPLIST=`cat $ZONE|egrep 'IN|A|MX|CNAME|^pr|^pp'|awk '{print $4}'|grep -vi "@"`
NAMELIST=`cat $ZONE|egrep 'IN|A|MX|CNAME|^pr|^pp'|awk '{print $1}'|grep -vi "@"`
NAME=$2;
IP=$3;
TYPE=$4;
ADD=0;
function conferma() {

read -n1 -p "onferma, gnora Vuoi inserire comunque il nome? "
echo
case $REPLY in
c | C)
echo "Continuo con l'update del file di zona ..."
ADD=0;
return $ADD
;;
i | I)
echo "Ignoro l'update ..."
ADD=1;
return $ADD
;;
* )
echo "You don't know what you want to do..."
;;
esac
}

while [ "${1:0:1}" = "-" ];do
case "$1" in
'-a')
for i in $IPLIST
do
if [ $i == $IP ]; then
echo "IP ADDRESS già presente";
conferma
else
ADD=0;
fi
done
for h in $NAMELIST
do
if [ $h == $NAME ];then
echo "NOME già presente";
conferma
else
ADD=0;
fi
done

if [ $ADD != 1 ];then
echo "$NAME IN $TYPE $IP" >> $ZONE;
SERIAL=`cat $ZONE|grep Serial|awk '{print $1}'`;
let NEWSERIAL=$SERIAL+1
cp $ZONE /tmp/$SERIAL
cat /tmp/$SERIAL|sed -e 's/'$SERIAL'/'$NEWSERIAL'/' > $ZONE;
fi
;;

'-r')
# echo "Not Implemented";
cat $ZONE | while read line;
do
REM=`echo $line|grep $NAME`
sed s/'$REM'/''/
done

;;

'-u')
# echo "Not Implemented";
rndc reload

;;
esac


shift
shift
done
if [ "x$1" = "x" ]; then
echo "Usage: $0 main_variable";
echo "Options:";
echo " -a ";
echo " -r ";
echo " -u #Updates bind configuration";
exit 1
fi


Aggiornamenti su questo post as soon as li implemento!

martedì 17 giugno 2008

Into the Depths of Solaris Cluster

Ormai è deciso, il voucher per la cert Sun Cluster Adinistrator 3.2 con retake "aggratis" sarà mio entro il 20 giugno. 200 euro, 5 minuti di nostalgia per le partite a flipper sacrificate per pagare l'esame e poi ... si studia!

A parte questo ... Stasera viaggiavo per impervie directory con la mezza idea di cercare di sistemare alcune Did in status Fail su un cluster di produzione, quando mi addentro in /usr/cluster/lib. Effettivamente non l'avevo ancora fatto ... ci sono scripts a bizzeffe laggiù, con interprete la più classica delle shell su Solaris, miss Korn, ma anche qualche script sh:

root@prXXXXX1 # file /usr/cluster/lib/scadmin/ql/*|grep ksh
/usr/cluster/lib/scadmin/ql/data_change: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/ql_cleanup: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/ql_lu_begin: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/ql_mount: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/ql_stopapp: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/ql_upgrade_status: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/ql_util: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/replace_bootcluster: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/restore_bootcluster: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/split_mode_upgrade_begin: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/split_mode_upgrade_common: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/split_mode_upgrade_recovery: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/upgrade_partition: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/upgrade_partition_a: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/upgrade_partition_a_common: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/upgrade_partition_b: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/upgrade_partition_b_common: executable /bin/ksh script
/usr/cluster/lib/scadmin/ql/upgrade_status: executable /bin/ksh script


Mica male ... c'è molta roba seria qui in mezzo, come al solito non documentata.

E sotto /usr/cluster/lib/sc c'è anche di meglio, sebbene questa pare sia già inserita in $PATH, probabilmente dal .profile-EIS o dagli "omini" Sun per iniziativa loro o per volere della onnipotente "CheckList":

root@prXXXXXXX1 # file *|grep sh
clvxvm_impl: executable /bin/ksh script
config_ipv6: executable /bin/ksh script
dofsck: executable /bin/ksh script
ipv6_check_ccr: executable /bin/ksh script
newcleventlog: executable shell script
pmfd_debug: executable /usr/bin/sh script
print-show: ELF 32-bit MSB executable SPARC Version 1, dynamically linked, stripped
rgmd_debug: executable /usr/bin/sh script
run_reserve: executable /usr/bin/ksh script
sc_publish_event: ELF 32-bit MSB executable SPARC Version 1, dynamically linked, stripped
sc_update_hosts: executable /bin/ksh script
sc_update_ntp: executable /bin/ksh script
sc_zonescheck: executable /bin/ksh script
scquorumconfig: executable shell script
scslmthresh: ELF 32-bit MSB executable SPARC Version 1, dynamically linked, stripped
tunhb_check_ccr: executable /bin/ksh script
update_quorum_disks: executable /usr/bin/ksh script
vlan_check_ccr: executable /bin/ksh script


Tutti gli scripts hanno una descrizione nell'header, questa serata è stata molto istruttiva :)

Ah, vediamo se ho indovinato sulla provenienza di ./lib/sc in $PATH:

root@prXXXXX1 # cat /.profile-EIS |grep sc
# This file is set up by the setup-standard script.
PATH=${PATH}:/usr/cluster/bin:/usr/cluster/lib/sc


YES!!

martedì 19 febbraio 2008

Struttura lo script, Debugga lo script

Pare banale saperlo, ma ci sono volte in cui diventa di fondamentale importanza per sistemare uno script usare gli strumenti giusti.

Ad esempio quando lo script ha dimensioni medio-grandi e gli errori non balzano subito all'occhio.

A me capita di scrivere i miei scripts bash ( si, uso bash, nessuno è perfetto, ed è una delle cose che mi porto dietro da Linux e che non ho mai corretto con un po di sana Korn o C shell, vabbè) di getto, dopo aver gettato una base un minimo strutturata, fondamentale perchè lo script abbia senso e magari sia customizzabile/espandibile in futuro, tiro giù il codice di botto senza preoccuparmi di testare riga per riga e facendo un sacco di errori di sintassi. Questo mi permette di concentrarmi sulla forma e struttura, e di renderlo "usabile successivamente, a lavoro finito. Stare attento a sintassi e piccolezze mi distrae e mi fa perdere l'attenzione allo scrivere qualcosa di davvero funzionale.

Poi viene la correzione assieme al test. E gli errori sintattici non si contano, in genere dimentico i ; o le $ davanti alle variabili, do nomi assurdi alle stesse variabili o cicco per l'ennesima volta la struttura dei cicli, in ultimo dimentico i fi alla fine degli if/else, per non parlare di parentesi o apici.

Una cosa molto utile in questi casi è l'uso delle opzioni di bash -xv direttamente al prompt con un:
# bash -xv script.sh

oppure all'interno dello script passandolo alla dichiarazione della shell in prima riga:
#!/usr/bin/bash -xv

Il risultato è a dir poco eclatante.

venerdì 30 novembre 2007

UNpatching di massa

In seguito a un problema sorto dopo un patching di massa di un Solaris10, dove un comando ha cessato di funzionare correttamente, ho deciso di ricorrere alla rimozione delle patch che interessano il binario in questione: si tratta di cfgadm, che semplicemente ha deciso di piantarsi quando lanciato; non muore nemmeno con un kill -9

In /var/sadm/patch ho i riferimenti per il ripristino dei files unpatched.
Vediamo a chi appartiene cfgadm:

pkgchk -l -p `which cfgadm`

mi ritorna un:

Referenced by the following packages:
SUNWcsu


Bene, la mia strategia è di verificare quali patches tra quelle presenti in /var/sadm/patch hanno partecipato alla modifica dell'installato del pacchetto SUNWcsu.
E di conseguenza rimuoverle. Un reboot, la speranza che la macchina "venga su".
Andiamo con ordine. E' necessario uno script, e qui ci si diverte:
Tipo questo:

root@ubigasmmg1->cd /var/sadm/patch
root@ubigasmmg1->for i in `showrev -p|grep SUNWcsu|/usr/xpg4/bin/awk '{print $2}'`
> do
> if [[ `ls -l|awk '{print $9}' |grep $i` ]]; then
> echo $i
> fi
> done

La prima riga apre il for sul risultato di un grep del pacchetto SUNWcsu ripulito con awk. Il particolare di usare quella versione specifica di awk viene dal fatto che il solito /usr/bin/awk aveva dei problemi nel trattare la lista generata da questa catena di pipe, sporcandola.
All'interno del for è necessario inserire la condizione che $i sia presente nella dir attuale; questo perchè, ovviamente, la lista generata nella riga prima è diversa da quella presente in /var/sadm/patch.
Il resto è di semplice comprensione e ne risulta:

125417-04
125500-01
125502-01
125550-01
126146-01
126148-01
126257-04
127112-03
127727-01
127758-01
127877-01
127921-01
127969-01


Ora si può rilanciare lo stesso script con il comando patchrm al posto dell 'echo.
Ha funzionato mica male, ora cfgadm non rimane più appeso senza speranza. Non resta che rileggermi uno a uno i README delle patch rimosse e cercare di capire dove salta fuori l'inghippo

lunedì 20 agosto 2007

Patch Check Advanced

Io uso PCA per gestire le patches sui servers che amministro. A detta di molti se non tutti, questo script Perl, sembra essere di gran lunga migliore di tutti i tools che Sun nel tempo ha tirato fuori, e direi missed, per l'installazione delle numerose patches, tra l'altro uno dei più painful aspetti di Solaris;
per qualche motivo, la cosa sembra non piacere a Sun, o è solo una mia impressione; fatto sta che di tanto in tanto PCA si "rompe" ... quanti cambiamenti fa Sun ai suoi siti?
L'unico modo per tenerlo in forma e funzionante e riscaricare lo script qui:
http://www.par.univie.ac.at/solaris/pca/news.html
stando al passo con gli sforzi di Martin Paul di ovviare agli inconvenienti che spesso rendono broken il suo geniale script.
L'ho appena sistemato dopo che per quasi tutto agosto (MP era in ferie) le patches non erano disponibili via pca.

venerdì 6 luglio 2007

Listare i contenuti di un pacchetto

Su linux, ci sono utilities dedicate per avere un listing dei files installati sulla macchina appartenenti a un dato pacchetto.

qlist baselayout, fa proprio questo su Gentoo.

Su Solaris ricorro a un one-line script che si appoggia al comando pkgchk per ottenere lo stesso effetto:

#!/bin/sh

/usr/sbin/pkgchk -l $1|grep Pathname|cut -d: -f2|sed s/" "/""/|more

Voilà, chiamiamolo /usr/local/bin/pkgwhat e richiamiamolo:

-bash-3.00# pkginfo |grep anonymi
application CSWtor tor - anonymizes web browsing, instant messaging, IRC, SSH, and other applications using TCP
-bash-3.00# /usr/local/bin/pkgwhat CSWtor
/opt/csw/bin
/opt/csw/bin/tor
/opt/csw/bin/tor-resolve
/opt/csw/bin/torify
/opt/csw/etc
/opt/csw/etc/tor
/opt/csw/etc/tor/tor-tsocks.conf
/opt/csw/etc/tor/torrc.sample
/opt/csw/share
/opt/csw/share/man
/opt/csw/share/man/man1
/opt/csw/share/man/man1/tor-resolve.1
/opt/csw/share/man/man1/tor.1
/opt/csw/share/man/man1/torify.1



Ora sarebbe da integrare la ricerca del pacchetto tramite keyword e successiva visualizzazione dei contenuti, integrando pkginfo|grep e pkgwhat/pkgchk in un unico script che fa tutto. Me lo lascio come esercizio per la prossima volta.

sabato 30 giugno 2007

Autoboot dei demoni di mrtg pme extension

PME è una (vecchia?) estensione per Mrtg.
Abbreviato, ciò di cui avevo bisogno in questo momento. Usavo Mrtg già tempo fa, e ne ho apprezzato le qualità nel monitoraggio di alcuni paratri via snmp sui Cisco.

Questa estensione, opportunamente modificata e adattata alle mie esigenze mi da la possibilità di sfruttare lo stupendo e familiare Mrtg per collezionare sottoforma di grafico l'utilizzo di cpu e memoria (per il momento) di alcune macchine.

In questo modo riesco a farmi un'idea del carico di lavoro durante la giornata e la settimana su diversi sistemi, per farmi un'idea dell'andazzo. So che mi sarà utile qual'ora incontrerò ancora problemi di "operazioni che mi siedono il 4800" (frase idiomatica che sharo col mio DBA di fiducia), quasi sempre dovute a anomalie sistemiche del tipo F (fornitore del software applicativo che ogni tanto fa danni scavando nei files di configurazione e operando modifiche del tipo:

$parametro=/dev/random

Naturalmente senza avvertire. Tant'è che la prima verifica che faccio quando si verificano problemi sinistri è digitare un:

pippo# last -20|grep $fornitore

Torniamo a noi; lancio i demoni a manina per verificare la bontà delle modifiche e dei files .cfg
C'è bisogno di uno script che lancia tutte le instanze del demone al riavvio della macchina.

root@ubigbck1# pgrep -lf mrtg
23164 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg ubigdbitc1-scan.cfg
21609 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg ubigdblis1-mem.cfg
21781 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg ubigdbitc1-mem.cfg
21336 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg unisio04-cpu.cfg
22103 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg unigen07-mem.cfg
6045 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg /bck/scripts/mrtg/ubigdblis1-cpu.cf
6498 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg ubigdbitc1-cpu.cfg
10540 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg ubigasbak1-cpu.cfg
21913 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg unigen05-mem.cfg
23078 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg ubigdblis1-dstatks.cfg
5969 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg /bck/scripts/mrtg/unigen02-cpu.cfg
21886 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg unigen02-mem.cfg
22188 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg unisio04-mem.cfg
6439 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg unigen05-cpu.cfg
6362 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg unigen07-cpu.cfg
23095 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg ubigdblis1-dstatwb.cfg
22933 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg ubigdblis1-scan.cfg
23221 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg unigen05-scan.cfg
23211 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg unigen07-scan.cfg
23380 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg ubigdbasmmg1-mem.cfg
23290 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg ubigdbasmmg1-cpu.cfg
23191 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg unigen02-scan.cfg
10818 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg ubigasbak1-scan.cfg
10689 /usr/bin/perl -w /usr/local/mrtg-2/bin/mrtg ubigasbak1-mem.cfg

Eccoli, redirigiamo quello che ci serve:

root@ubigbck1# echo "case \$1 in" >/etc/init.d/mrtgd
root@ubigbck1# echo "start)" >>/etc/init.d/mrtgd
root@ubigbck1# cd /bck/scripts/mrtg
root@ubigbck1# pgrep -lf bin/mrtg|grep ^[0-9]|awk '{print $4,$5}' >> /etc/init.d/mrtgd
root@ubigbck1# pgrep -lf bin/mrtg|grep ^' '|awk '{print $4,$5}' >> /etc/init.d/mrtgd
root@ubigbck1# echo ";;" >>/etc/init.d/mrtgd
root@ubigbck1# echo "stop)" >>/etc/init.d/mrtgd
root@ubigbck1# echo "pkill mrtgd" >>/etc/init.d/mrtgd
root@ubigbck1# echo ";;" >>/etc/init.d/mrtgd
root@ubigbck1# echo "*)" >>/etc/init.d/mrtgd
root@ubigbck1# echo "echo 'What'Ya Dueng?'" >>/etc/init.d/mrtgd
root@ubigbck1# echo ";;" >>/etc/init.d/mrtgd
root@ubigbck1# echo "esac" >>/etc/init.d/mrtgd

non dimentichiamo:
root@ubigbck1# chmod +x
/etc/init.d/mrtgd
root@ubigbck1# ln -s /etc/init.d/mrtgd /etc/rc3.d/S99mrtgd
root@ubigbck1# ln -s /etc/init.d/mrtgd /etc/rcS.d/S99mrtgd

A posto!

Visite