|
Di seguito tutti gli interventi pubblicati sul sito, in ordine cronologico.
Qualche giorno fa ho eseguito l'upgrade a FC10 su un server ldap. Più precisamente si tratta di una versione di Openldap con db Berkley.
Dopo l'aggiornamento il servizio non partiva per via di una incompatibilità con il db e lo script di avvio terminava con il seguente errore:
[root@server ~]# service ldap start Checking configuration files for slapd: [FAILED] bdb(dc=localdomain): Program version 4.6 doesn't match environment version 4.4 bdb_db_open: database "dc=tr1" cannot be opened, err -30972. Restore from backup! backend_startup_one: bi_db_open failed! (-30972) slap_startup failed (test would succeed using the -u switch) stale lock files may be present in /var/lib/ldap [WARNING]
A questo punto ho aperto un thread su fedoraforum.org
Su suggerimento dei ragazzi del forum ho fatto una ricerca su Internet alla ricerca di un modo che mi indicasse come fare la conversione del db (l'alternativa era installare una versione precedente del Berkley DB).
Dopo una decina di minuti sono approdato sul link http://www.oracle.com/technology/documentation/berkeley-db/db/ref/upgrade/process.html
Seguendo le istruzioni riportate mi sono accorto di dover semplicemente eseguire un check sul db per renderlo "compatibile" con la nuova versione.
In realtà Fedora è dotato di un comando apposito per il check del db di ldap (slapd_db_chekpoint) così ho evitato di installare il pacchetto db4-util contenente il necessario.
Di seguito riporto i comandi impartiti che mi hanno consentito di risolvere il problema:
slapd_db_checkpoint -1 -h /var/lib/ldap chown -R ldap.ldap /var/lib/ldap/*
Alla prossima.
Ieri sera ho aggiornato alcune macchine (server) a Fedora Core 10. Poichè questi sistemi sono dotati solo di un lettore CD ho preferito utilizzare l'installazione da rete. A tale scopo ho scaricato e masterizzato solo il file Fedora-10-i386-netinst.
Diversamente dagli altri cd, questo non ha l'opzione per una installazione testuale (text mode).
Purtroppo nel mio caso non era possibile procedere in ambiente visuale, così mi sono dato da fare per far girare anaconda in modalità testo.
Quando compare il menù d'avvio del cdrom è possibile premere il stato TAB per accedere alla stringa di avvio di linux.
E' bastato aggiungere la parola "text" (senza apici) alla fine della stringa di avvio per risolvere il problema.
Non so quanto possa essere legale, ma mentre ero alla ricerca di una serie di plug-in per BartPe mi sono imbattuto in
questo
link.
In pratica esiste una Patch pubblicata da sala*source con la quale è possibile ovviare al limite imposto da Windows XP Professional che consente una sola sessione utente per volta.
Per saperne di più:
http://www.kood.org/terminal-server-patch/
Di vittorio (del 22/11/2008 @ 22:28:06, in Blog, linkato 136 volte)
Oggi è una data particolare. E' trascorso un anno da quando ho scritto il primo articolo su questo blog.
Da allora non ho fatto tanta strada ma non mi posso assolutamente lamentare.
In un anno ho scritto una trentina di articoli che sono stati letti più di diecimila volte (non male considerando che almeno 9 volte su 10 sul blog bazzico io).
Sono stati lasciati 24 commenti (pochi) e tante email in posta elettronica. Alla fine, qualcuno ha anche risolto il proprio problema (wow).
Volevo dunque ringraziare tutti i navigatori che si sono imbattuti in questo blog per un motivo o per un altro e concludo salutando un navigatore anonimo che è incappato qui per mezzo della seguente ricerca inoltrata su Google:
cella diventa verde.
Grazie a tutti.
Nei precedenti articoli di questo blog si è parlato di come sfruttare il protocollo wol ed il comando ping di windows per gestire l'accensione e lo spegnimento di un computer remoto.
Poichè si è fatto uso di script a riga di comando, ho ricevuto alcune email in cui viene richiesta una possibile soluzione "a finestre".
Purtroppo il mio tempo a disposizione non è molto ma sfruttando comunque il linguaggio di scripting (vbscript) sono riuscito a fare un piccolo applicativo in grado di mostrare lo stato (acceso/spento) di computer appartenenti alla stessa rete con la possibilità di usare il protocollo wol nel caso in cui questi risultassero spenti.
L'esempio che segue consiste in una pagina html di tipo Microsoft (R) HTML Application host (con estensione hta)
<HTML>
<HEAD>
<TITLE>Pannello di Controllo</TITLE>
<HTA:APPLICATION
ID="objPannello"
APPLICATIONNAME="Pannello di Controllo"
SCROLL="No"
SINGLEINSTANCE="yes"
>
<SCRIPT LANGUAGE="VBScript">
<!--
option Explicit
dim strTR
dim aServer(5)
aServer(0)="tizio.local"
aServer(1)="caio.local"
aServer(2)="sempronio.local"
aServer(3)="cesare.local"
aServer(4)="cleopatra.local"
aServer(5)="antonio.local"
strTR="<tr>" & _
"<td>+SERVERNAME+</td>" & _
"<td>+STATUS+</td>" & _
"<td>+COMMAND+</td>" & _
"</tr>"
function ServerView(ServerName)
dim objShell, objExec
dim strPingResult
Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec("ping -n 2 -w 1000 " & ServerName)
strPingResult = UCase(objExec.StdOut.ReadAll)
ServerView= ( CBool(InStr(UCase(strPingResult), " TTL=")))
end function
function ServerCommand(ServerName)
dim objShell
Set objShell = CreateObject("WScript.Shell")
objShell.run("wol.bat " & replace(ServerName,".local",""))
end function
-->
</SCRIPT>
</HEAD>
<BODY >
<H3>Pannello di Controllo</H3>
<HR>
<FORM NAME="ValidForm">
<table width="100%">
<tr>
<td width="50%"><b>Server</b></td>
<td width="20%"><b>Status</b></td>
<td width="30%"><b>Comandi</b></td>
</tr>
<SCRIPT LANGUAGE="VBScript">
<!--
dim Ciclo
dim strOutPut, strServerStatus
dim blserverStatus
Self.ResizeTo 575,475
for Ciclo=lbound(aServer) to ubound(aServer)
blServerStatus=ServerView(aServer(Ciclo))
if blServerStatus then
strServerStatus="ON"
strCommand="Attivo"
else
strServerStatus="OFF"
strCommand="<INPUT onclick='ServerCommand(""" & aServer(Ciclo) & """)' NAME='" & aServer(Ciclo) & "' TYPE='BUTTON' VALUE='Attiva'>"
'msgbox "<INPUT onclick='ServerCommand(""" & aServer(Ciclo) & """)' NAME='" & aServer(Ciclo) & "' TYPE='BUTTON' VALUE='Attiva'>"
end if
strOutput= replace(strTR,"+SERVERNAME+",aServer(Ciclo))
strOutput= replace(strOutput,"+STATUS+",strServerStatus)
strOutput= replace(strOutput,"+COMMAND+",strCommand)
document.write strOutput
next
-->
</script>
</table>
<hr>
<INPUT NAME="Submit" TYPE="BUTTON" VALUE="Aggiorna" onclick="Location.Reload(True)">
</FORM>
</BODY>
</HTML>
Potete nominare questo file come volete, purchè mantenga l'estensione hta, altrimenti windows non ne consentirà l'esecuzione.
Prima di concludere volevo ricordare che per maggiori informazioni sul wol, potete dare una occhiata questo articolo. Alla prossima.
Tempo fa ho pubblicato un articolo nel quale si fa uso del comando ping per capire se un computer è acceso oppure no.
Purtroppo il comando ping di windows, almeno nella versione in mio possesso, non ha una gestione degli ERRORLEVEL in uscita; in pratica alla fine della esecuzione, restituisce sempre il medesimo valore, sia che il ping abbia successo o meno, rendendo vane le possibilità di impiegarlo all'interno di uno script.
Di seguito presento un breve listato scritto in vbscript che esegue il comando ping e restituisce un codice di errore in modo da poterlo sfruttare all'interno di un file batch dos.
'###################################### 'ServerPing.vbs ver 1.0 'di Benintende Vittorio
'Questo software viene rilasciato sotto 'licenza GPL e senza garanzia alcuna. '######################################
'Il seguente codice esegue un Ping e tiene 'traccia dell'output generato per capire 'l'esito del comando.
'Poichè quando il comando va a buon fine 'contiene sempre il TTL del pacchetto 'inviato, se l'output contiene "TTL=" nella 'sequenza di caratteri allora si presume che 'il ping abbia raggiunto la destinazione.
'Di seguito due esempi esplicativi:
'Esempio 1: 'Esecuzione di Ping 192.168.0.1 con 32 byte di dati:
'Risposta da 192.168.1.20: Host di destinazione irraggiungibile. 'Risposta da 192.168.1.20: Host di destinazione irraggiungibile. 'Risposta da 192.168.1.20: Host di destinazione irraggiungibile. 'Richiesta scaduta.
'Statistiche Ping per 192.168.0.1: ' Pacchetti: Trasmessi = 4, Ricevuti = 3, Persi = 1 (25% persi), 'Tempo approssimativo percorsi andata/ritorno in millisecondi: ' Minimo = 0ms, Massimo = 0ms, Medio = 0ms
'Esempio 2: 'Esecuzione di Ping 192.168.0.1 con 32 byte di dati:
'Risposta da 192.168.0.1: byte=32 durata=73ms TTL=64 'Risposta da 192.168.0.1: byte=32 durata=87ms TTL=64 'Risposta da 192.168.0.1: byte=32 durata=103ms TTL=64 'Risposta da 192.168.0.1: byte=32 durata=68ms TTL=64
'Statistiche Ping per 192.168.0.1: ' Pacchetti: Trasmessi = 4, Ricevuti = 4, Persi = 0 (0% persi), 'Tempo approssimativo percorsi andata/ritorno in millisecondi: ' Minimo = 68ms, Massimo = 103ms, Medio = 82ms
option explicit
dim strMyComputer Dim objExec, objArgs, objShell Dim strPingResults dim lngPos
'command line Set objArgs = WScript.Arguments
For lngPos = 0 to objArgs.Count - 1 Select Case UCase(objArgs(lngPos)) Case Else if cbool(len(trim(objArgs(lngPos)))) then strMyComputer=objArgs(lngPos) End Select
Next
If not cbool(len(Trim(strMyComputer))) then wscript.quit(100)
Set objShell = CreateObject("WScript.Shell") Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strMyComputer)
strPingResults = UCase(objExec.StdOut.ReadAll)
wscript.quit(Not CBool(InStr(UCase(strPingResults), " TTL=")))
Per pingare l'indirizzo IP 192.168.0.1 da console ad esempio è sufficiente impartire la seguente istruzione:
cscript ServerPing.vbs 192.168.0.1
Ad esempio è possibile utilizzare il precedente script per accedere a condivisioni di rete solo quando queste sono raggiungibili:
:: :: abilita gli shares se i server sono attivi ::
@ECHO OFF SET LOGFILE="%APPDATA%\_share.log" SET DOMAIN=miodominio SET SERVER1=tizio SET SERVER2=caio SET SERVER3=sempronio
ECHO ---------- >> %LOGFILE% DATE /T >> %LOGFILE% TIME /T >> %LOGFILE% ECHO Looking for shares at %SERVER1% >> %LOGFILE%
cscript ServerPing.Vbs %SERVER1%.%DOMAIN% >NUL 2>&1
IF ERRORLEVEL 0 GOTO SETSERVER1 GOTO SERVER2
:SETSERVER1 ECHO Try to mount M: Drive (share1 on %SERVER1%) >> %LOGFILE% NET USE M: \\%SERVER1%.%DOMAIN%\share1 >NUL 2>&1 ECHO Exit with error %ERRORLEVEL% >> %LOGFILE%
ECHO Try to mount L: Drive (share_nascosto$ on %SERVER1%) >> %LOGFILE% NET USE L: \\%SERVER1%.%DOMAIN%\share_nascosto$ >NUL 2>&1 ECHO Exit with error %ERRORLEVEL% >> %LOGFILE%
ECHO Try to mount N: Drive (foto on %SERVER1%) >> %LOGFILE% NET USE N: \\%SERVER1%.%DOMAIN%\foto >NUL 2>&1 ECHO Exit with error %ERRORLEVEL% >> %LOGFILE%
:SERVER2 ECHO Looking for shares at %SERVER2% >> %LOGFILE%
cscript ServerPing.Vbs %SERVER2%.%DOMAIN% >NUL 2>&1
IF ERRORLEVEL 0 GOTO SETSERVER2 GOTO SERVER3
:SETSERVER2 ECHO Try to mount O: Drive (share1 on %SERVER2%) >> %LOGFILE% NET USE O: \\%SERVER2%.%DOMAIN%\share1 >NUL 2>&1 ECHO Exit with error %ERRORLEVEL% >> %LOGFILE%
:SERVER3
IF %COMPUTERNAME%==%SERVER3% GOTO GOEXIT
ECHO Looking for shares at %SERVER3% >> %LOGFILE%
cscript ServerPing.Vbs %SERVER3%.%DOMAIN% >NUL 2>&1
IF ERRORLEVEL 0 GOTO SETSERVER3 GOTO GOEXIT
:SETSERVER3 ECHO Try to mount P: Drive (Share1 on %SERVER3%) >> %LOGFILE% NET USE P: \\%SERVER3%.%DOMAIN%\share1 >NUL 2>&1 ECHO Exit with error %ERRORLEVEL% >> %LOGFILE%
:GOEXIT
SET LOGFILE= SET DOMAIN= SET SERVER1= SET SERVER2= SET SERVER3=
Con questo ho finito.
Alla prossima.
Se vuoi sapere qual'è il tuo indirizzo IP sulla rete in questo momento, te lo dico io:
Di seguito il codice asp utilizzato per raccogliere questa informazione:
<html>
<body>
<%
Dim myIP
myIP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If myIP="" Then myIP = Request.ServerVariables("REMOTE_ADDR")
response.write "Il tuo è: " & myIP & "." %> </body> </html>
Fare qualcosa per l'ambiente e per i portafoglio è possibile. Ci sono diverse aziende di piccole e medie dimensioni, come anche liberi professionisti e piccoli uffici, in cui la tecnologia non ha una presenza molto invasiva. A volte ad esempio, i servizi di stampa, condivisione file, accesso ad Internet non sono necessari 24 ore su 24. Alcune periferiche vanno in stand-by dopo qualche minuto ma altre restano attive fino al loro spegnimento.
Mi è capitato di vedere spesso negli uffici, computer che restano accesi molte ore perchè "qualcuno potrebbe avere bisogno di prelevare un file". Forse questo articolo può essere utile a chi vuole sfruttare la moderna tecnologia per risparmiare sui consumi energetici salvaguardando l'ambiente.
Da diversi anni ormai, molte periferiche connesse alle rete locale, come ad esempio: stampanti di rete, computer, modem adsl,... supportano il Wake On Lan (WOL); uno standard ethernet in grado di attivare le periferiche on demand (a richiesta) mediante l'invio di un pacchetto di dati detto "Magic Packet". Mediante questo standard è possibile ad esempio avviare un computer in remoto, senza doversi recare fisicamente sul posto. WOL funziona anche attraverso Internet, quindi è possibile accendere in computer da qualunque parte del mondo, purchè il computer "dormiente" sia connesso alla rete mediante una periferica compatibile con lo standard.
Nell'esempio che seguirà, ipotizziamo di avere tre server ed uno o più client interconnessi alla medesima rete locale. Per comodità supponiamo che la rete abbia il seguente range di indirizzi IP:
192.168.0.1/24
Per chi non avesse dimestichezza con quanto indicato sopra, in questo esempio supponiamo che gli indirizzi della rete locale varino da 192.168.0.1 a 192.168.0.254.
Cosa fondamentale per utilizzare WOL è la conoscenza degli "indirizzi fisici" assegnati alle periferiche di rete. Questi indirizzi si chiamano MAC Address (Media Access Control Address) e servono ad identificare univocamente l'hardware connesso alla rete. In effetti, un indirizzo IP viene assegnato al computer dal sistema operativo in uso, ma la consegna effettiva a livello hardware (chiamato strato fisico) avviene tramite il MAC address. Ad esmpio, ogni volta che un computer invia un pacchetto all'indirizzo 192.168.0.1, lo switch (o altra periferica dedicata alla consegna del pacchetto) controlla in una apposita tabella a quale indirizzo fisico corrisponde l'indirizzo 192.168.0.1.
Identificare il MAC address di un computer è cosa molto semplice. Per gli utilizzatori di Windows è sufficiente impartire il seguente comamdo dal prompt dos:
ipconfig /all
Dovreste ottenere un output simile a questo:
Configurazione IP di Windows Nome host . . . . . . . . . . . . . . : WORKSTATION_1 Suffisso DNS primario . . . . . . . : retelocale.loc Tipo nodo . . . . . . . . . . . . . . : Ibrido Routing IP abilitato. . . . . . . . . : No Proxy WINS abilitato . . . . . . . . : No Elenco di ricerca suffissi DNS. . . . : retelocale.loc
Scheda Ethernet Connessione alla rete locale (LAN): Suffisso DNS specifico per connessione: retelocale.loc Descrizione . . . . . . . . . . . . . : Broadcom NetLink (TM) Gigabit Ethernet Indirizzo fisico. . . . . . . . . . . : 00-17-18-4C-22-D0 DHCP abilitato. . . . . . . . . . . . : Sì Configurazione automatica abilitata : Sì Indirizzo IP. . . . . . . . . . . . . : 191.168.0.2 Subnet mask . . . . . . . . . . . . . : 255.255.255.0 Gateway predefinito . . . . . . . . . : 191.168.0.1 Server DHCP . . . . . . . . . . . . . : 191.168.0.1 Server DNS . . . . . . . . . . . . . : 191.168.0.1 Lease ottenuto. . . . . . . . . . . . : mercoledì 10 ottobre 2009 9.27.34 Scadenza lease . . . . . . . . . . . : giovedì 23 ottobre 2009 9.27.34
Scheda Ethernet Connessione rete senza fili: Stato supporto . . . . . . . . . . . : Supporto disconnesso Descrizione . . . . . . . . . . . . . : Intel(R) PRO/Wireless 3945ABG Network Connection Indirizzo fisico. . . . . . . . . . . : 00-20-D3-66-D9-E5
Per gli utenti di Linux esiste un comando simile:
ifconfig
Con un output del tutto simile a questo:
eth0 Link encap:Ethernet HWaddr 00:20:C5:2E:F2:33 inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2238 errors:0 dropped:0 overruns:0 frame:0 TX packets:740 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:208462 (203.5 KB) TX bytes:233284 (227.8 KB) Interrupt:7 Base address:0xf00
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:58 errors:0 dropped:0 overruns:0 frame:0 TX packets:58 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:5663 (5.5 KB) TX bytes:5663 (5.5 KB)
Abilitare WOL Tutte le moderne schede madri (mainboard) offrono il supporto a WOL, specie se la scheda di rete è integrata. Che io ricordi anche alcuni Pentium II sono dotati di questo supporto.
Il fatto che il computer supporti lo standard non vuol dire però che questo sia attivo. Per verificare/attivare questa opzione è necessario accedere al BIOS (fare riferimento al manuale della scheda madre oppure lasciare un post su questo articolo). Una volta abilitato il WOL è necessario verificare che il sistema operativo gestisca correttamente lo spegnimento delle periferiche durante lo shutdown. Se il sistema operativo dovesse spegnere completamente il computer, questi non risponderebbe al magic packet anche se nel bios l'opzione WOL fosse attiva. E' come staccare la presa di alimentazione lasciando il PC senza corrente.
Gli utenti di Windows non devono preoccuparsi perchè, che io sappia, tutte le moderne versioni del sistema operativo di Microsoft consentono alla scheda madre di tenere "accese" le schede di rete qual tanto che basta per ricevere il magic packet.
Per gli utenti Linux bisogna fare un po' di attenzione. Il kernel di solito è compatibile con il WOL ma le impostazioni necessarie per istruire il kernel di "alimentare la scheda di rete anche dopo lo shutdown" si perdono ad ogni riavvio. Per questo motivo è necessario istruire il kernel prima di spegnere la macchina. Il parametro che attiva il WOL su linux è il seguente:
/sbin/ethtool -s eth0 wol g
Il parametro "g" serve proprio ad istruire il kernel. Per fare in modo che questa opzione resti attiva dopo ogni riavvio, io consiglio di inserire il comando precedente dentro il file "/etc/rc.local" così ogni volta che linux fa il boot il kernel viene istruito.
Sfruttare WOL Al fondo di questo articolo ho inserito i link a due programmi liberamente utilizzabili (uno per Windows e l'altro per Linux) con i quali è possibile sfruttare il WOL. Gli utenti Windows posso usare il programma mc-wol.exe
mc-wol 11:11:11:11:11:11
Mentre gli amanti del pinguino possono fare uso di ether-wake:
./ether-wake 11:11:11:11:11:11
In entrambi i casi "11:11:11:11:11:11" è il MAC address della macchina che si intente "svegliare".
Automatizzare WOL
I comandi elencati in precedenza sono utili per accendere un Pc ma se i PC sono diversi allora può diventare un problema ricordare a memoria tutti gli indirizzi fisici. Di seguito riporto uno script utile per accendere diverse macchine in base loro nome piuttosto che il MAC address.
Per i client Windows:
@echo off if (%1) == (tizio) mc-wol 11:11:11:11:11:11 > nul & goto fine if (%1) == (caio) mc-wol 22:22:22:22:22:22 > nul & goto fine if (%1) == (sempronio) mc-wol 33:33:33:33:33:33 > nul & goto fine if (z%1) == (z) echo Usage: %0 servername & exit /B 0
echo Server not found. echo Usage: %0 servername exit /B 2
:fine echo done. exit /B 0
Per i client Linux:
#!/bin/sh
# do it case "$1" in tizio) /sbin/ether-wake 11:11:11:11:11:11 ;;
caio) /sbin/ether-wake 22:22:22:22:22:22 ;;
sempronio) /sbin/ether-wake 33:33:33:33:33:33 ;;
--help) echo "Usage: $0 servername" exit 0 ;;
*) echo "Server not found." echo "Usage: $0 servername" >&2 exit 2 esac echo "done." exit 0
Spegnere le periferiche Abbiamo visto come sia facile accendere un componente di rete con WOL ma senza un processo in grado di spegnere le risorse quando non servono più l'idea di risparmiare viene meno. Penso che nessuno abbia voglia di spegnere manualmente le periferiche prima di uscire dall'ufficio, specie se come me non gode di una memoria di ferro. L'idea in questo caso è quella di fare in modo che tutte le risorse "on demand" vadano giù se nessun client è attivo sulla rete.
Ci serve uno script che possa essere eseguito ad intervalli regolari su un server per garantire i servizi solo quando necessitano:
#!/bin/sh #script staying_alive.sh
myfiledeny="/root/astutami.dont"
if [ -e $myfiledeny ]; then exit 0 fi
for myPing in 4 5 9 10 11 12 13 20 21 do ping -c 30 192.168.0.$myPing && exit 0 done
exit 1
In questo esempio, il server "pinga" alcuni indirizzi della classe 192.168.0.1/24 per capire se ci sono client attivi. In caso di esito negativo esce con un codice di errore 1. Questo valore può essere impiegato in un altro script per spegnere la macchina:
#!/bin/sh #script alive.sh
/sbin/staying_alive.sh
EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /sbin/dormi.sh fi exit 0
Il codice è utile ad esempio se inserito all'interno di cron (ad esempio nel crontab oppure nella cartella cron.hourly), il servizio di Linux che avvia operazioni pianificate. In questo caso ogni ora il server eseguirebbe un test per capire se ci sono client sulla rete prima di andare a "dormire".
Gli utenti windows non useranno il cron ma AT (altrimenti conosciuto come "operazioni pianificate").
Può capitare che per qualche motivo, il server debba restare acceso nonostante la mancanza di client, come ad esempio in caso di manutenzione o aggiornamento. Nell'ultimo script (quello che si preoccupa di spegnere effettivamente il server) possiamo prevedere una "deroga" allo spegnimento in base ad alcune regole. Nel nostro caso, l'esistenza di un apposito file all'intnerno della directory root, evita lo spegnimento programmato del server:
#!/bin/sh
#script dormi.sh
myfile="/root/astutami" myfiledeny="/root/astutami.dont"
if [ -e $myfiledeny ]; then echo "Don't astutami for now." else touch $myfile
wall << "EOF"
ALERT! System is going down after 5 minutes by now! To avoid shutdown delete the file:
/root/astutami
EOF
echo "waiting..." sleep 5m if [ -e $myfile ]; then rm $myfile /sbin/astutami.sh exit 0 fi fi
Altra cosa interessante è che lo script appena riportato invia un messaggio broadcast (cioè a tutti gli utenti con una console attiva sul server) che indica l'imminente spegnimento ma attende 5 minuti prima di eseguire il comando. In questo periodo è ancora possibile evitare lo shutdown semplicemente eliminando il file /root/astutami.
Infine, l'ultimo script che presento si occupa semplicemente di spegnere la macchina.
#!/bin/sh #script astutami.sh
shutdown -h now
Per concludere Basta usare un po' di fantasia per poter sfruttare ancora meglio le possibilità offerte da WOL. Si potrebbe utilizzare AT e cron anche per accendere i server; io lo faccio ad esempio per schedulare un backup notturno.
Spero di non avere annoiato nessuno. Grazie per l'attenzione. Alla prossima
Per saperne di più WOL Wikipedia (EN) ether-wake mc-wol
Tutte le installazioni di Windows (anche quelle meno recenti) hanno una serie di condivisioni amministrative che garantiscono agli amministratori un accesso remoto ai dati. In particolare esiste una condivisione nascosta per ogni partizione attiva sulla macchina contrassegnata dalla lettera della partizione stessa. Ad esempio: avendo un PC chiamato miopc con tre partizioni attive "C,D,E", vi saranno anche tre condivisioni nascoste rispettivamente: \\miopc\C$; \\miopc\D$; \\miopc\E$. Il dollaro sta a significare che la condivisione è nascosta e non appare nell'elenco delle condivisioni disponibili quando si sfoglia la rete cliccando su "risorse di rete". Se è vero che solo gli amministratori posso accedere a queste condivisioni, è anche vero che non tutti sanno della loro esistenza. Esiste un modo relativamente semplice per disabilitarle che consiste nel mettere mani al file di registro. Probabilmente la cosa più semplice per modificare il file di registro è quella di creare un file di testo con estensione ".reg" contenente le righe da aggiornare. Per rendere effettive le modifiche basta semplicemente cliccare due volte il file avendo cura di essere autenticati in Windows come amministratori. Di seguito riporto le righe necessarie a disabilitare le condivisioni:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters] "AutoShareServer"=dword:00000000 "AutoShareWks"=dword:00000000
Nel caso sia necessario ripristinarle basta modificare le stesse voci con i seguenti valori:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters] "AutoShareServer"=dword:00000001 "AutoShareWks"=dword:00000001
Se si desidera abilitare/disabilitare queste credenziali a piacimento, è possibile creare un collegamento del file .reg su desktop. In questo modo sarà più semplice apportare le modifiche. Per concludere: Le condivisioni indicate in precedenza non sono le uniche. Esistono altre condivisioni (come ad esempio IPC$), sempre amministrative e sempre nascoste che consentono l'accesso ad altre componenti del PC da remoto. Queste condivisioni danno ad esempio la possibilità di accedere al registro degli eventi oppure all'elenco dei servizi attivi sulla macchina. In questo articolo ho preso in considerazione "solo" le condivisioni che garantiscono l'accesso ai files. Per maggiori informazioni lasciate pure un post su questo articolo, di sicuro approfondiremo l'argomento. Alla prossima.
Qualche giorno fa, facendo un po' di ordine tra le mie cose vecchie e polverose è saltata fuori una cassetta audio. Incuriosito l'ho inserita in un mangianastri (anche quello vecchio e polveroso) per capire cosa ci fosse inciso sopra. Con immensa sorpresa ho scoperto che non si trattava di musica. Infatti appena ho premuto play ho sentito l'inconfondibile "piiiiiiiiiiiiiiiiiiiii(schic) piiiiiiiiiiiiiiiiiiiiiiiiiiiiii(scccccccccccccc)" tipico del mio caro, vecchio ZX Spectrum 48k. A questo punto ho scaricato un emulatore per PC. Non vedevo l'ora di capire quali dati contenesse il nastro. Dopo aver passato diversi minuti a capire come fare una conversione dell'audio su file sono finalmente riuscito a caricare i dati nell'emulatore. Non potete capire l'emozione. Si trattava del gioco della scopa; un programma scritto in BASIC tantissimi anni fa del quale mi ero totalmente dimenticato. Dopo aver giocato un po' ho dato un breve sguardo al sorgente. Certamente scrivere un gioco che doveva girare in 32k di memoria RAM non era facile ma io all'epoca programmavo veramente con i piedi. Mi è bastato dare un'occhiata veloce al modo in cui vengono mischiate le carte. Comunque mi rendo conto che non era una cosa banale. Il programma è dotato di schermata iniziale. Per farla sono ricorso ad un escamotage. Ricordo ora di aver fatto un disegno usando diversi fogli di un quadernone a quadretti e di aver raggruppato i quadretti in blocchi di 8x8. Successivamente ho definito i mitici UDG (User Defined Graphic) e con diversi MERGE$ sono riuscito a disegnare uno splendido "asso di bastoni" napoletano degno del più agguerrito camionista meridionale.
Per chi volesse farsi quattro risate, potete scaricare il nastro da qui.
|