Ciao a tutti, scrivo questo post perchè ho cercato in rete una spiegazione ma è tutto in inglese e poco approfondito comunque, a me sarebbe servito un post cosi.
Sto scrivendo script vari e programmi in c per automatizzare le installazioni di windows da pxe in modo che i pc si "aggiustano da soli" mentre io vado in giro a cercare clienti, alla fine di tutto le installazioni dovrebbero partire da pxe, installare windows, avviare lo script batch che installa silenziosamente i software standard creando un file usato da un programmino per creare i rapporti d'intervento e infine tutto via mail a me e in caso di errore sms al cellulare. Ora sto creando una live per ripristinare l'immagine di windows già pronta sul disco del client, non scendo troppo in particolari perchè è trooooppo lunga la questione, quindi mi serve uno script generico che faccia partire altri script o programmi come demoni all'avvio della live sul client, del tipo
service copernico-script start
ok lo script deve(per quello che serve a me) montare uno share nfs e avviare lo script che è sul server, deve anche poter avviare uno script in locale. Il codice seguente va in /etc/init.d
NON FATE COPIA INCOLLA DA WINDOWS le codifiche dei testi sono diverse esce fuori un disastro.
#!/bin/bash
#
# copernic-script copernicoPXE daemon
#
# Ultima mod.: 04/09/2011
#
# chkconfig: 2345 12 88
# description: This file starts and stops the scripts copernicoPXE (cloning installation systems & solutions)
# processname: copernico-script
# pidfile: /var/run/copernico-scipt.pid
#
### BEGIN INIT INFO
# IT
# Questo init script e' concepito com starter genrico per avviare come demone
# uno script o un file binario. Il demone(binario o script) da mandare in esecuzione
# puo' essere in locale o su un server nfs. Se la variabile $server_binary contiene
# un path NFS lo script monta il server e cerca il file specificato nella variabile
# $binary, altrimenti prende come path del demone la variabile $binary. Questo vuol dire
# che se si vuole avviare un demone da un file locale basta inserire il path nella
# variabile binary altrimenti va specificato il path NFS nella variabile $server_binary,
# il mountpoint nella varibile $server_mp e come $binary il nome del file da eseguire
# come demone.
#
# La variabili $procesname server al sistema per attribuire un nome al processo
#
# La variabile $script_name indica il nome del file che state leggendo, quando
# si richede lo status del demone viene visualizzato il nome di questo script
# per chiarezza. Visualizzare le info con il comando:
#
# service nome-demone status
#
# dove nome-demone e' il nome di questo script, che dovra' essere posizionato in
# /etc/init.d/nome-demone insieme
#
#
# Di seguito sono riportati alcuni esempi di configurazione
#
# Es. per eseguire uno script su un server
#
# binary="restore-image.sh"
# procesname="copernico-script"
# server_binary="192.168.1.102:/mnt/ar0/it/copernico/script"
# server_mp="/mnt"
#
# Es. per eseguire un binario in locale
#
# binary="/bin/restore-image.sh"
# procesname="copernico-script"
# server_binary=""
# server_mp=""
#
# Es. per eseguire uno script in locale
# binary="/bin/restore-image.sh"
# procesname="copernico-script"
# server_binary=""
# server_mp=""
#
# Variabili:
#
# binary Nome dello script o del binario da eseguire.
# procesname Nome del processo, viene utilizzato per comunicare cosa sta avviando.
# server_binary Path NFS del server, es.: 192.168.1.102:/mnt/ar0/it/copernico/script.
# server_mp Mountpoint del server NFS.
# script_name Nome di questo file
# script_ver Versione di questo file
#
#
# ATTENZIONE
# -----------------------------------------------------------------------------------------
# Se il demone da eseguire e' un binario che inizia e finisce la sua attivita' senza
# restare in attesa di input, o uno script che inizia e finisce senza attendere input,
# lo stop del demone restituira' sempre fallito in quanto lo scipt o il binario e'
# gia' terminato, am cancellera' comunque il file PID e tutto il resto.
#------------------------------------------------------------------------------------------
#
### END INIT INFO
# Source function library.
. /etc/init.d/functions
script_name="copernico-script"
script_ver="1.1.0"
binary="restore-image.sh"
procesname="copernico-script"
server_binary="192.168.1.102:/mnt/ar0/it/copernico/script"
server_mp="/etc/copernico"
RETVAL=0
start() {
echo "Starting: $procesname"
# controllo se la variabile $server_binary e' vuota
# per capire da dove prendere il binario o script
# da eseguire.
if [ -z $server_binary ]; then
echo "Assuming local path for binary: $binary"
echo "Starting daemon"
# controllo se $binary e' eseguibile
if [ ! -x $binary ]; then
echo "The binary or script $binary not executable or not exist"; exit 1
fi
# avvio del demone
daemon $binary
RETVAL=$?
PID=$!
echo
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$procesname
echo $PID > /var/run/$procesname.pid
else
echo "Assuming network path for binary: $server_binary mounted in $server_mp"
echo "Mounting server"
# controllo se il mountpoint e' una directory
if [ ! -d $server_mp ]; then
echo "The mountpoint $server_mp not exist or not a directory"; exit 1
fi
# mounting del server
err=$(mount $server_binary $server_mp 2>&1)
errno=$?
# se il valore di return dal mount e' 0
# visualizzo l'errore ed esco
if [ ! $errno -eq 0 ]; then
echo "$err : return $errno"; exit 1
fi
echo "Starting daemon "
# controllo che binary sia eseguibile
if [ ! -x $server_mp/$binary ]; then
echo "The binary or script not executable or not exist"; exit 1
fi
# avvio del demone
daemon $server_mp/$binary
RETVAL=$?
PID=$!
echo
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$procesname
echo $PID > /var/run/$procesname.pid
fi
}
stop() {
echo "Stopping: $procesname"
# se $server_mp non e' vuota smonto il mountpoint
if [ ! -z $server_mp ]; then
echo -n "Unmounting: $server_mp "
err=$(umount $server_mp 2>&1)
errno=$?
if [ ! $errno -eq 0 ]; then
echo "$err : return $errno"
fi
fi
killproc $procesname
RETVAL=$?
echo
echo
if [ $RETVAL -eq 0 ]; then
rm -f /var/lock/subsys/$procesname
rm -f /var/run/$procesname.pid
fi
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
echo
echo "Info"
echo "---------------------------------------"
echo "CopernicoPXE - init script"
echo "Script: $script_name"
echo "Ver.: $script_ver"
echo
echo "Settings"
echo "---------------------------------------"
echo "Script or binary to execute: "$binary
echo "Process name: "$procesname
echo "NFS server path: "$server_binary
echo "Local mount point: "$server_mp
echo
echo "Status"
echo "---------------------------------------"
status $procesname
echo
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
;;
esac
exit 0
ovviamente questo script avvia un'altro script che una volta eseguito termina e quindi il successivo stop darà fallito a meno che lo script non sia ancora in esecuzione.
Ho scritto dei commenti all'interno del codice con degli esempi per configurarlo.
fate riferimento a questa guida per quanto riguarda lo scripting bash
http://www.pluto.it/files/ildp/guide/abs/index.htmlho fatto i test sia con un binario sia con uno script, in locale e in remoto
spero sia utile a qualcuno anche se uno, magari solo io