Immagine
 Vallata del Corace (CZ)... di DrCrocco
 
"
Gli stupidi sono più ingegnosi delle contromisure prese per evitare loro di nuocere

anonimo
"
 
  Home| Chi Sono| Contatti| |La Ricetta
 
Di seguito tutti gli interventi pubblicati sul sito, in ordine cronologico.

Di vittorio (del 08/01/2000 @ 19:36:01, in Blog, linkato 953 volte)

Con queste poche righe vi presento l'autore (vittorio) di questo blog se non altro perchè tutti i blog parlano in qualche modo dell'autore.
Non sono un tipo che ama mettersi in mostra ma è giusto dire almeno cosa faccio nella vita.

Mi chiamo vittorio benintende e sono nato in Calabria nel '76. Se non si fosse ancora capito sono un "malato" per l'informatica e per la tecnologia in generale.

Alla tenera età di sei anni avevo già un computer per le mani: un fantastico ZX-Spectrum 48k del 1982 con il quale ho scritto il mio primo programma in BASIC:

10 REM Programma
20 BORDER 4: PAPER 4: INK 0: CLS
30 PRINT AT 0,2; FLASH 1;"Programma di Vittorio Benintende"

Ho sempre passato la vita davanti al computer.

I miei studi scolastici non si sono ancora conclusi tanto è vero che sono ancora iscritto all'università. Il fatto è che quando cominci a lavorare il tempo per studiare non è molto e la voglia è ancora meno (tutte scuse le mie).
Comunque sia ho frequentato l'istituto tecnico commerciale e sono iscritto alla facoltà di Economia e Commercio presso l'università di Messina.

Ma ci pensate? Vivo e lavoro a Torino da diversi anni ormai e riesco a vedere la mia famiglia solo durante le feste "comandate".
Parlando di lavoro le cose da dire sono tante, per questo motivo mi limiterò alle più importanti:

  • (1993-2000) Very Easy Kit
    Assemblaggio e supporto tecnico di personal computer IBM compatibili.
  • (2000-2001) Copycomp Srl
    Sviluppo e manutenzione di un applicativo dedicato alla gestione, stampa ed inoltro telematico di pratiche auto, programmato quasi esclusivamente in Microsoft Visual Basic e Microsoft SQL Server.
  • (2001-2004) Calabria Management Snc
    Implementazione di siti web orientati all’e-commerce e gestione di portali web sviluppati attraverso tecnologie quali: Microsoft Asp, Microsoft Asp.Net, mySQL e PHP.
  • (2004-2006) KeyG Consulting SpA
    Amministratore di sistemi in ambiente ibrido (Linux/Microsoft Active Directory)
    Progetti interni R&D:
    - Costruzione di un prototipo che implementa un workflow per la gestione del protocollo elettronico mediante l’ausilio delle mappe di processo LOVEM.
    - Sviluppo di un applicativo multilivello con funzionalità di data entry e reporting a supporto delle attività di assegnazione degli obiettivi e di valutazione delle risorse umane.
  • (dal 2006) KeyG Consulting SpA
    Consulente: strategico, di processo ed organizzativo.
    - Progetto “Segregazione dei profili SAP” (Gesco)
    Predisposizione di uno strumento informatico “ad-hoc” su piattaforma Microsoft Office in grado di facilitare l’individuazione dei conflitti tra gli utenti ed i “Ruoli Funzionali Standard” definiti da Fiat SpA al fine di rendere quest’ultimi SOX compliant.
    - Progetto “Sarbanes-Oxley Fiat Group”
    Disegno e sviluppo di un sistema informativo multilivello (client/application server/database server) con funzionalità di data entry e reporting per la gestione delle deficiency nell’ambito della certificazione Sarbanes-Oxley del gruppo.
    - Progetto “Supporto Controllo Commerciale del brand Lancia” (Fiat Auto)
    Disegno del workflow di chiusura del Mercato Italia ed approvazione dei prezzi nell’ambito della riorganizzazione dei processi. Reengineering dei tools informatici a supporto delle attività svolte dai controller del brand.
    Altro:
    - Esperienza formativa in ambito Reporting. Design e sviluppo su piattaforma Outlook Soft. Everest (Business Performance Management)
  • - Corso di formazione di COGNOS PLANNING orientato allo sviluppo di soluzioni di pianificazione (redazione del budget).

Per il momento questo è tutto e non vi annoio oltre.

Chiunque volesse contattarmi, può farlo tramite questo blog oppure scrivendo una email a:vittorio@lucullo.it.

Articolo (p)Link Commenti Commenti (0)  Storico Storico  Stampa Stampa
 
Di vittorio (del 22/11/2007 @ 15:44:52, in Network, linkato 785 volte)
Ciao belli, questa volta parliamo di OpenVPN ed reti WAN.

In particolare vedremo come modificare la tabella di routing di una workstation che opera in una WAN che implementa OpenVPN.

Supponiamo di avere un pc connesso ad una rete locale (WAN o LAN non è rilevante adesso) e di voler raggiungere un'altra rete tramite VPN (utilizzando OpenVPN nello specifico).

Tutto quello che dovremo fare è impostare correttamente il nostro client.

Supponiamo inoltre che la rete agganciata in VPN non sia una semplice LAN bensì una WAN.

Come possiamo fare in modo che il nostro client possa navigare in tutta la rete remota?

Per comprendere meglio questa domanda, diamo un'occhiata alla figura riportata di seguito:



In questo esempio ci sono 3 reti differenti (Work LAN, LAN e DMZ) suddivise nel seguente modo:

Area Subnet Gateway
Work 10.0.0.0/8 10.0.0.1
LAN 192.168.0.0/8 192.168.0.1
DMZ 192.168.1.0/8 192.168.1.1


Sono presenti inoltre due connessioni ad Internet (una per B ed una per C).

Per comodità indichiamo le macchine con delle lettere (A, B, C, D) assumendo che abbiano i seguenti indirizzi IP:

Host Network Address
A Work LAN 10.0.0.238
A LAN (VPN) 192.168.0.6
B WorkLAN 10.0.0.1
B Internet 208.77.188.166
C LAN 192.168.0.1
C DMZ 192.168.1.1
C Internet 28.15.33.1
D DMZ 192.168.1.20


Nel momento in cui A porta a termine con successo la connessione VPN, i pacchetti verso la rete LAN seguono la linea tratteggiata.
Quello che noi vogliamo ottenere è di riuscire a far comunicare l'host A con l'host D.
In questo esempio utilizzeremo un client Windows ma sono sicuro che gli utenti di altre piattaforme non avranno problemi a riprodurre gli stessi comandi sul proprio sistema operativo.

Dopo aver installato e configurato Openvpn per la conenssione remota, possiamo eseguire il comando ipconfig /all. Il risultato dovrebbe essere simile a questo:


Configurazione IP di Windows

Nome host . . . . . . . . . . . . . . : HOST_A
Suffisso DNS primario . . . . . . . : worklan.local
Tipo nodo . . . . . . . . . . . . . . : Ibrido
Routing IP abilitato. . . . . . . . . : No
Proxy WINS abilitato . . . . . . . . : No
Elenco di ricerca suffissi DNS. . . . : worklan.local

Scheda Ethernet Connessione alla rete locale (LAN) 2:

Suffisso DNS specifico per connessione:
Descrizione . . . . . . . . . . . . . : TAP-Win32 Adapter V8
Indirizzo fisico. . . . . . . . . . . : FF-FD-4E-18-2F-07
DHCP abilitato. . . . . . . . . . . . : Sì
Configurazione automatica abilitata : Sì
Indirizzo IP. . . . . . . . . . . . . : 192.168.0.6
Subnet mask . . . . . . . . . . . . . : 255.255.255.0
Gateway predefinito . . . . . . . . . :
Server DHCP . . . . . . . . . . . . . : 192.168.0.1
Lease ottenuto. . . . . . . . . . . . : mercoledì 13 giugno 2007 16.45.53
Scadenza lease . . . . . . . . . . . : giovedì 12 giugno 2008 16.45.53

Scheda Ethernet Connessione alla rete locale (LAN):

Suffisso DNS specifico per connessione: worklan.local
Descrizione . . . . . . . . . . . . . : Broadcom NetLink (TM) Gigabit Ethernet
Indirizzo fisico. . . . . . . . . . . : FF-07-28-CB-55-B8
DHCP abilitato. . . . . . . . . . . . : Sì
Configurazione automatica abilitata : Sì
Indirizzo IP. . . . . . . . . . . . . : 10.0.0.238
Subnet mask . . . . . . . . . . . . . : 255.255.255.0
Gateway predefinito . . . . . . . . . : 10.0.0.1
Server DHCP . . . . . . . . . . . . . : 10.0.0.13
Server DNS . . . . . . . . . . . . . : 10.0.0.12
Lease ottenuto. . . . . . . . . . . . : mercoledì 13 giugno 2007 12.14.36
Scadenza lease . . . . . . . . . . . : giovedì 14 giugno 2007 12.14.36


A questo punto possiamo utilizzare il comando tracert per capire in che modo i pacchetti vengono instradati nella rete. Per fare questo partiamo cercando ad esempio un qualunque computer appartenente alla rete work lan:

tracert 10.0.0.5


La risposta dovrebbe essere simile a questa:

Tracing route to desktop5.worklan.local.0.0.10.in-addr.arpa [10.0.0.5]
over a maximum of 30 hops:

1 <10 ms <10 ms <10 ms desktop5.work.local.0.0.10.in-addr.arpa [10.0.0.5]

Trace complete.


Come è possibile notare tra il punto 10.0.0.238 ed il punto 10.0.0.5 c'è un solo salto. Questo perchè i due computer appartengono alla stessa rete.

Ripetiamo lo stesso comando ma cambiamo indirizzo di destinazione:

tracert 192.168.0.44


Tracing route to [192.168.0.44]
over a maximum of 30 hops:

1 <130 ms <143 ms <172 ms [192.168.0.44]

Trace complete.


Anche in questo caso il salto è sempre uno poichè l'host A ha un indrizzo di rete appartenenete alla rete LAN (192.168.0.6).
Adesso è la volta di scoprire se l'host D è disponibile sulla rete. Come abbiamo fatto in precedenza, utilizziamo il comando tracert con l'indirizzo desiderato:

tracert 192.168.1.20


Tracing route to 192.168.1.20 over a maximum of 30 hops
1 <1 ms <1 ms <1 ms gateway1.worklan.local [10.0.0.1]
2 65 ms 52 ms 67 ms 208.77.188.166
3 gateway.my-isp-example.com [208.77.50.249]
reports: Destination net unreachable. Trace complete.


Come è possibile notare, qualcosa non è andato per il verso giusto.
L'instradamento dei pacchetti IP segue regole ben precise che è necessario conoscere se vogliamo riuscire nel nostro intento.

Eseguendo il comando ipconfig /all possiamo notare come l'host A sia dotato di due schede di rete che si connettono ad altrettante reti locali. Quando un pacchetto IP deve essere consegnato a destinazione, il protocollo IP esegue alcuni controlli:

Se esistono regole particolari specificati per l'indirizzo IP del destinatario, il pacchetto seguirà dette regole.
Altrimenti: se il pacchetto è destinato ad un indirizzo IP della rete locale verrà instradato tramite detta rete.
Altrimenti: se il pacchetto IP non è destinato alla rete locale, si demanda il compito della consegna al gateway di default.

Nel nostro caso, poichè non esistono regole particolari specificate per l'indirizzo 192.168.1.20 e poichè non si tratta di un indirizzo di rete locale (in entrambe le reti) il nostro pacchetto è stato instradato verlo l'host B (10.0.0.1).
L'host B a sua volta non sapendo come consegnare il pacchetto ne ha demandato la consegna al proprio gateway di default (208.77.50.249) con scarsi risultati dato che l'indirizzo 192.168.1.20 appartiene ad una classe di indirizzi LAN non instradabili su Internet.
Per tale motivo l'ultimo host ha risposto alla richiesta con un errore: "destinazione irraggiungibile".
Anche nel caso in cui l'host B fosse stato in grado di instradare il pacchetto verso l'indirizzo 192.168.1.20, questi sicuramente non avrebbe raggiundo il nostro obbiettivo (host D) poichè per raggiungere questo computer, noi sappiamo che è necessario passare attraverso la nostra VPN.

Per farla breve, Default Gateway per noi vuol dire: "se non sei riuscito in altro modo, rivolgiti a lui".

Le regole di instradamento di cui parlavamo prima sono visibili tramite il comando route. Eseguiamo il comando specificando il parametro print e cerchiamo di capirci qualcosa:

route print


===========================================================================
Elenco interfacce
0x1 ........................... MS TCP Loopback interface
0x2 ...ff fd 4e 18 2f 07 ...... TAP-Win32 Adapter V8 - SecuRemote Miniport
0x10003 ...ff 07 28 cb 55 b8 ...... Broadcom NetLink (TM) Gigabit Ethernet
Connection
===========================================================================
===========================================================================
Route attive:
Indirizzo rete             Mask             Gateway       Interfac.  Metric
          0.0.0.0          0.0.0.0         10.0.0.1      10.0.0.238   20
         10.0.0.0    255.255.255.0       10.0.0.238      10.0.0.238   20
       10.0.0.238  255.255.255.255        127.0.0.1       127.0.0.1   20
   10.255.255.255  255.255.255.255       10.0.0.238      10.0.0.238   20
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1   1
      192.168.0.0    255.255.255.0      192.168.0.1     192.168.0.6   1
      192.168.0.6  255.255.255.255        127.0.0.1       127.0.0.1   30
    192.168.0.255  255.255.255.255      192.168.0.6     192.168.0.6   30
        224.0.0.0        240.0.0.0       10.0.0.238      10.0.0.238   20
        224.0.0.0        240.0.0.0      192.168.0.6     192.168.0.6   30
  255.255.255.255  255.255.255.255       10.0.0.238      10.0.0.238   1
  255.255.255.255  255.255.255.255      192.168.0.6     192.168.0.6   1
Gateway predefinito:          10.0.0.1
===========================================================================

Tralasciamo la sezione delle interfacce e concentriamoci solo sulle route attive. In questa sede non ha senso spiegare il significato di tutte le rige; l'importante è comprendere come avviene il routing in base alla tabella sopra riportata.

La prima cosa che bisogna sapere è che per instradare un pacchetto, il protocollo calcola un AND logico bit per bit tra l'indirizzo del destinatario e la sottorete (Mask).
Se come risultato dell'operazione logica otteniamo l'indirizzo di rete (prima colonna), la regola è soddisfatta ed il pacchetto seguirà un percorso piuttosto che un altro.
Qualora più regole fossero soddisfatte contemporaneamente, la priorità verrà assegnata mediante la metrica (ultima colonna). In realtà quello che abbiamo appena asserito riguardo alla metrica non è corretto; essa serve a dare un peso alle connessioni. Più la metrica è alta e più è facile aspettarsi connessioni lente o con parecchi intermediari (hop).

Per capire come vengono testate le regole, facciamo un esempio con l' indirizzo ip 10.0.0.5 utilizzato in precedenza rappresentando gli indirizzi ip in forma binaria:

Rapp. Decimale Rapp. Binaria
Indirizzo: 10.0.0.5 00001010.00000000.00000000.00000101
Mask: 255.255.255.0 11111111.11111111.11111111.00000000
AND: 10.0.0.0 00001010.00000000.00000000.00000000

Se adesso traduciamo il valore ottenuto dall'AND logico (00001010.00000000.00000000.00000000) in decimale otteniamo 10.0.0.0 che corrisponde all'indirizzo di rete appartenente all'interfaccia 10.0.0.238 (seconda regola nella tabella delle route attive).
Quando la regola è soddisfatta, il pacchetto viene instratato tramite il gateway specificato nella regola stessa.

Detto questo diamo uno sguardo ad alcune delle regole riportate nella tabella delle route attive.
La prima è quella relativa al gateway di default. In pratica viene adottatta quando nessuna altra regola può essere soddisfatta. Da notare che, nel nostro caso, il gateway predefinito è mappato sull'interfaccia (10.0.0.238) questo significa che tutto il traffico verso Internet passa tramite la scheda di rete e non tramite la VPN.
Impostare un gateway predefinito anche per la connessione VPN (vedi risultato del comando ipconfig/all) non ha senso dal momento in cui solo un gateway può instradare di default i pacchetti.

Le righe 2 e 6 indicano che se l'indirizzo fa parte della rete locale, il pacchetto può essere consegnato direttamente dall'host, senza dover richiedere la consegna ad altri gateway.

La riga 5 indica che l'indirizzo 127.0.0.1 è l'indirizzo di loopback (host locale). Nel caso dell'HOST_A l'indirizzo di loopback sta a significare proprio l'HOST_A.

La terza e la settima riga indicano che gli indirizzi dell'host sono equivalenti a quello di loopback mentre le righe che cominciano per "224.0.0.0" indicano il broadcast.

Dopo questa sbrodolata di informazioni, come possiamo raggiungere il nostro scopo?

Basta parlare di teoria, torniamo alla pratica.
Per risolvere agevolmente il nostro problema, aggiungiamo una regola specifica tale per cui i pacchetti destinati alla rete 192.168.1.0/8 vengano instradati tramite un altro gateway.

Fondamentale per noi è conoscere l'host preposto ad instradare correttamente i nostri pacchetti verso la rete DMZ.

Una costrizione che non possiamo violare nella costruzione della regola è che detto gateway deve appartenede ad una rete locale (altrimenti l'instradamento avverrebbe tramite il gateway di default).

Nel nostro esempio, il gateway preposto ad instradare i pacchetti verso la rete DMZ è l'host C (192.168.0.1).

Il comando che consente l'inserimento di una nuova regola è sempre route questa volta abinato al parametro add.

route add 192.168.0.0 mask:255.255.255.0 192.168.0.1


L'essenziale per aggiungere una regola tramite il comando "route add" è:
- l'indirizzo della rete: 192.168.0.0
- la mask: 255.255.255.0
- il gateway: 192.168.0.1

Se volessimo conservare la validità della nostra regola al riavvio del pc, potremmo indicare anche il parametro -p (permanente).

Eseguendo nuovamente il comando route print la nuova regola dovrebbe comparire nell'elenco delle route attive.

A questo punto possiamo fare una prova per capire se la regola funziona correttamente o meno:

tracert 192.168.1.20


Rilevazione instradamento verso 192.168.1.20 su un massimo di 30 punti di passaggio

1 560 ms 507 ms 420 ms 192.168.0.1
2 474 ms 561 ms 443 ms 192.168.1.20

Rilevazione completata.


Come è possibile vedere, questa volta abbiamo colto nel segno.

Spero che questo articolo sia stato utile. Esistono diversi modi per raggiungere l'obbiettivo e questo solo uno dei tanti.

Per saperne di più:

La Homepage di OpenVPN
Il comando Route di Windows
Cenni preliminari sul routing
Un utile tutorial sul routing IP ed IPX
Articolo (p)Link Commenti Commenti (0)  Storico Storico  Stampa Stampa
 
Di vittorio (del 22/11/2007 @ 16:51:44, in Office Automation, linkato 726 volte)
La scorsa settimana mi è capitato di dover gestire l'ennesimo problema relativo ad i link di MS-Excel.
Un mio collega ha generato una tabella pivot contenente dati provenienti da una query di MS-Access.
Questa pivot viene successivamente utilizzata per alimentare alcuni grafici di Excel ed alcune slides in Power Point. Basta aggiornare di volta in volta i dati nel file mdb per aggiornare a cascata anche i grafici e le slides.
C'è un solo vincolo a tutto ciò. E' necessario che i files restino sempre nella stessa posizione pena la perdita del collegamento dei dati sorgenti nella tabella pivot.
Purtroppo, dopo aver fatto il rilascio dell'applicativo presso il cliente non è stato semplice mettere a posto il link al file mdb.

Come risolvere agevolmente il problema?
La prima idea che mi è venuta in mente è stata quella di utilizzare un percorso assoluto disponibile in tutti i sistemi Windows like (es: c:\).
Non è una soluzione elegante ma di sicuro è veloce.
Ho provato ad impiegare un DSN su file contenente tutte le informazioni necessarie per un collegamento alla tabella tramite ODBC.
Non ha funzionato perchè una volta creato il link, Excel prende tutte le informazioni e le conserva nel file. Di fatto modificare i parametri contenuti nel file DSN per aggiornare il link non ha senso dal momento che il file DSN non verrà più interrogato da Excel.
A questo punto ho deciso di mettere mano al codice e di risolvere una volta per tutte questo problema.

La soluzione proposta:
Di seguito una piccola sub che può essere applicata a qualunque pivot, per consentire l'aggiornamento dei link.
L'unico presupposto per il corretto funzionamento del codice è che tutti i files (xls ed mdb) si trovino nella stessa directory.
Sbirciando il codice noterete quanto sia grezzo il sistema con cui viene risolto il problema ma quando il tempo a disposizione è poco ci si accontenta anche di questo.

Option Explicit

' Questa funzione prende in input un worksheet e
' per ogni pivot in essa contenuta controlla che
' il link sia valido. In caso negativo sostituisce il
' link con il percorso del file corrente.

Public Sub PivotUpdate(ByRef ws As Worksheet)
  Dim pt As PivotTable
  Dim OldPath As String, NewPath As String
  Dim aPath() As String
  Dim intStart As Integer
  Dim IntStop As Integer
    
For Each pt In ws.PivotTables

  ' Un modo bizzarro per controllare la correttezza del
  ' link. In caso di errore, estriamo dalla descrizione
  ' del problema il nome del file da linkare e sostiuiamo
  ' il path con quello del file xls.
  
  On Error Resume Next
  pt.PivotCache.Refresh
  If Err <> 0 Then
    intStart = InStr(1, Err.Description, """")
    IntStop = (InStr(intStart + 1, Err.Description, """"))
    aPath = Split(Mid(Err.Description, intStart + 1, IntStop - intStart - 1), "\")
    OldPath = LCase(Replace(Mid(Err.Description, intStart + 1, IntStop - intStart - 1), "\" & aPath(UBound(aPath)), ""))
    NewPath = LCase(ActiveWorkbook.Path)
    Err.Clear
    On Error GoTo 0
    
    'Da questo punto in avanti, se c'è un problema è meglio
    'Segnalarlo all'utente.
    
    pt.PivotCache.Connection = Replace(LCase(pt.PivotCache.Connection), OldPath, NewPath)
    pt.PivotCache.CommandText = Replace(LCase(pt.PivotCache.CommandText), OldPath, NewPath)
    pt.PivotCache.Refresh
  End If
Next pt
End Sub

Per aggiornare una pivot all'avvio del workbook è sufficiente richiamare la subroutine:

Private Sub Workbook_Open()
  PivotUpdate Worksheets("MySheet")
End Sub
Articolo (p)Link Commenti Commenti (0)  Storico Storico  Stampa Stampa
 
Di vittorio (del 22/11/2007 @ 18:25:39, in Office Automation, linkato 255 volte)
Quante volte vi è capitato di dover ripristinare i collegamenti a file esterni perchè avete spostato/modificato i vostri file xls?
A me capita spesso se considerate che implemento i fogli sul mio pc e poi li invio in posta elettronica al cliente.
Sono stufo di sentirmi dire sempre che i link non funzionano.
Ho deciso di risolvere il problema alla radice.
L'idea è quella di mettere tutti i files in una cartella e aggiornare i link all'avvio del workbook.

Option Explicit

Sub AggiornaLink()
' Per ogni link contenuto nel workbook
' Sostituiamo il path del file sorgente
' Con quello del workbook corrente

Dim aLinks() As Variant
Dim i As Integer
Dim aPath() As String

aLinks = ActiveWorkbook.LinkSources(xlExcelLinks)
If Not IsEmpty(aLinks) Then
  For i = 1 To UBound(aLinks)
    aPath = Split(aLinks(i), "\")
    ActiveWorkbook.ChangeLink Name:= _
    aLinks(i), NewName:= _
    ActiveWorkbook.Path & "\" & aPath(UBound(aPath)), Type:=xlExcelLinks
  Next i
End If
End Sub
Articolo (p)Link Commenti Commenti (0)  Storico Storico  Stampa Stampa
 
Di vittorio (del 26/11/2007 @ 18:13:37, in Sistemi, linkato 7479 volte)
Spesso mi capita di dover mettere le mani su sistemi che necessitano di pesanti modifiche.
Quando capita mi piace stare con le spalle coperte, per questo motivo, onde evitare di rovinare qualche dato sensibile, la prima cosa che faccio è clonare il disco fisso.
Ci sono in circolazione una miriade di applicativi in grado di svolgere la mansione ma nessuno mi soddisfa in pieno, vuoi per via delle licenze, vuoi perchè alcuni necessitano di installazione oppure sono dipendenti dal sistema operativo.
Poichè il tempo a mia disposizione è sempre risicato, bisogna trovare una soluzione semplice ma efficace.
Chi lavora su sistemi Unix like sa bene che esistono strumenti validi disponibili direttamente dalla console.

Usare dd
dd è un comodo comando che prende un file in input (parametro if) e lo copia, in un file di output (parametro of).
Questa copia avviene bit per bit senza alcuna modifica, di conseguenza utilizzabile per diversi scopi. Poichè nei sistemi *nix, l'hard disk come tutto del resto, viene visto come un file, dd può essere utilizzato per fare una clonazione.
Abbiamo detto che dd fa una copia bit per bit, di conseguenza è facile intuire che non si tratta di una soluzione salvaspazio.
Possiamo fare molto per ridurre lo spazio necessario all'operazione ma di questo ne parleremo più avanti in questo articolo.
Per copiare il contenuto di un disco (ad esempio hda) su un'altro disco (ad esempio hdb), basta eseguire il seguente comando:

dd if=/dev/hda of=/dev/hdb

Non c'è bisogno di ricordare che hdb deve essere di dimensioni uguali o maggiori di hda.

Per ripristinare la copia del disco basta sostituire il parametro if con il parametro of:

dd if=/dev/hdb of=/dev/hda

Se volessimo copiare il contenuto del disco in un file, il comando sarebbe:

dd if=/dev/hda of=/home/user/myfile.bin

Ovviamente il file di destinazione deve essere creato su un disco diverso da quello che intendiamo clonare.
Tornando al discorso dello spazio, è possibile dirigere l'output verso gzip prima di salvare l'immagine su file ma bisogna tenere in considerazione che sul disco sono presenti sia i files validi che quelli eliminati. Per questo motivo, se il disco è stato utilizzato per diverso tempo, gzip potrebbe essere poco efficiente anche in caso di dischi con tanto spazio a disposizione.
A dare una mano in questo senso arriva ancora una volta dd.
Quello che dobbiamo fare è creare un file dummy in ogni partizione del disco in modo da ripulire tutto lo spazio disponibile:

dd if=/dev/zero of=/mnt/part1/dummyfile; rm -f /mnt/part1/dummyfile
dd if=/dev/zero of=/mnt/part2/dummyfile; rm -f /mnt/part2/dummyfile
...
dd if=/dev/zero of=/mnt/partN/dummyfile; rm -f /mnt/partN/dummyfile

E' assolutamente corretto che ogni comando si concluda con un errore per spazio su disco insufficiente ma ricordate sempre di eliminare i dummyfile altrimenti non ci sarà più spazio sulla partizione.

A questo punto possiamo utilizzare gzip per comprimere il file immagine:

dd if=/dev/hda | gzip -9 > /home/user/myfile.bin.gz

Il comando per ripristinare l'immagine sul disco è il seguente:

gzcat -dc /home/user/myfile.bin.gz | dd of=/dev/hda

Usare netcat
Chi non possiede un disco esterno per compiere le operazioni di clonazione si può affidare a netcat un comando del tutto simile a cat ma destinato alla rete.
Chi vuole adoperare questo metodo deve necessariamente avere la possibilità di comunicare con un altro computer.

Per prima cosa predisponiamo il computer ricevente alla ricezione dell'immagine:

nc -l  4000 | dd of=/home/user/myfile.bin.gz

Il parametro -l mette netcat in ascolto sulla porta indicata dal parametro -p. Tutto ciò che netcat riceve sarà diretto al file /home/user/myfile.bin.gz grazie a dd.

Dall'altro lato invece non dobbiamo far altro che inviare tutti bit verso netcat:

dd if=/dev/hda | gzip -9 | nc 192.168.0.1 4000

Nel nostro esempio l'indirizzo ip del ricevente era 192.168.0.1.

Infine per ripristinare il tutto basta invertire i comandi sui due computer ed utilizzando l'hard disk come destinatario del comando dd:

dd if=/home/user/myfile.bin.gz | nc 192.168.0.1 4000

per inviare il file e

nc -l -p 4000 | gzcat -dc | dd of=/dev/hda

per clonare il disco.

Gli utenti di Windows che desiderano fare il cloning del disco seguendo questa guida possono utilizzare una qualsiasi distribuzione live di Linux come ad esempio Knoppix o Slax.

Uso avanzato di dd
Spesso capita di voler spezzare l'immagine creata con dd in file più piccoli, magari perchè si desidera utilizzare un masterizzatore oppure per ovviare al limite dei 2 giga imposto dalle partizioni FAT di windows.
Comunque sia è possibile spezzare l'immagine creata con dd specificando alcuni parametri aggiuntivi.

dd if=/dev/hda of=/home/user/myfile_01.bin bs=1024 count=1000000

Con il comando precendente si chiede a dd di creare un file da 1GB scrivendo un'immagine contenente 1000000 blocchi da 1024 byte.

dd if=/dev/hda of=/home/user/myfile_02.bin bs=1024 count=1000000 skip=1000000

Tramite il parametro skip chiederemo a dd di saltare i primi 1000000 blocchi prima di iniziare a copiare i dati sul secondo file.
Continueremo in questo modo fino a quando l'intero disco verrà copiato.
Questi parametri sono utili anche con netcat ad esempio quando la connessione tra client e server viene interrota per qualche motivo.
Qual'ora ci fossero problemi di questo tipo, non è necessario riprendere la copia dall'inizio ma e sufficiente controllare quanto dd ha già copiato e riprendere la copia dall'ultimo blocco copiato.
La prima cosa da fare è calcolare quanti blocchi sono già stati copiati nell'immagine. Mediante il comando ls -l è possibile vedere la lunghezza del file immagine; sarà sufficiente dividere questo valore per il parametro bs impartito a dd. Nel caso in cui il parametro bs non sia stato specificato, bisognerà divirere il valore per 512 (valore di default).
Per riprendere la copia sarà sufficiente specificare il parametro skip impostando il risultato ottenuto dalla divisione.

Questo è tutto, spero come al solito di non avervi annoiato troppo.

Alla prossima.
Articolo (p)Link Commenti Commenti (21)  Storico Storico  Stampa Stampa
 
Di vittorio (del 30/11/2007 @ 00:02:52, in Sistemi, linkato 1148 volte)
Tanto tempo fa, con il sudore della fronte, comprai uno splendido monitor 22 pollici crt. Tutt'ora lo uso ad una risoluzione di 1600x1400 anche se supporta risoluzioni decisamente maggiori.

La mia ragazza però adora vedere sullo schermo caratteri "cicciosi" e grandi.
Per questo motivo mi ritrovo sempre a dover cambiare risoluzione ogni volta che mi autentico sulla macchina.

Esiste un programmino chiamato qres.exe che consente la modifica della risoluzione e di altri parametri interessanti da riga di comando.

L'esempio riportato di seguito mostra come sia possibile automatizzare il cambio di risoluzione ad ogni login utente tramite l'impiego di un file batch ed un paio di comandi DOS. Se l'utente si chiama myUser allora la risoluzione sarà di 1024x768 (in presenza di un monitor 4:3) altrimenti sarà di 1600x1400.

::
:: script di avvio per ogni utente
:: di dominio

@ECHO OFF

IF %USERNAME%==myUser (
  %SystemRoot%\qres.exe /x:1024
  GOTO GOEXIT
)
  %SystemRoot%\qres.exe /x:1600
:GOEXIT

Ho copiato l'eseguibile nella %SystemRoot% che per i possessori di Windows XP corrisponde in genere a C:\WINDOWS
Il file .bat l'ho invece inserito tra gli script di avvio nelle policy locali della workstation in modo tale che venga eseguito ogni volta che un utente si autentica.

Chi non avesse voglia di utilizzare le policy oppure il file di registro, può copiare/trascinare il file batch nell'apposita cartella del menù di Windows denominata Esecuzione Automatica.

Per saperne di più
Homepage di QRes
Articolo (p)Link Commenti Commenti (2)  Storico Storico  Stampa Stampa
 
Di vittorio (del 01/12/2007 @ 14:37:52, in Office Automation, linkato 196 volte)
Ogni società di consulenza trasmette la propria visual identity tramite alcuni strumenti tra cui le presentazioni.
Nel mio ambiente di lavoro, l'imprinting  è così forte che riuscirei a riconoscere la presentazione di un mio collega fra mille anche se non presenta il logo della società.

Il Template utilizzato per la creazione delle slides in MS-Power Point deve presentare, in alto a destra, il nome del file che a sua volta contiene la versione del documento. Questo consente di controllare le revisioni della presentazione anche in forma cartacea.

E qui viene il bello. Ogni volta che cambia la versione oppure il nome del file bisogna cambiare l'apposita etichetta della diapositiva.

Detto questo, di seguito trovate la mia soluzione al problema.
Poche righe di visual basic che, tramite una macro, modificano una etichetta (nell'esempio è myText) sostituendone il contenuto con il nome del file PPT.

Sub naming()
  Dim myViewType As PpViewType
  myViewType = ActiveWindow.ViewType
  ActiveWindow.ViewType = ppViewSlideMaster
  ActivePresentation.SlideMaster.Shapes("myText").Select
  ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Select
  ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Characters(Start:=1, Length:=Len(ActiveWindow.Selection.TextRange.Text)).Select
  ActiveWindow.Selection.TextRange.Text = ActivePresentation.Name
  ActiveWindow.Selection.Unselect
  ActiveWindow.ViewType = myViewType
End Sub

Articolo (p)Link Commenti Commenti (0)  Storico Storico  Stampa Stampa
 
Di vittorio (del 03/12/2007 @ 16:06:59, in Network, linkato 2195 volte)
Vi è capitato di voler lasciare acceso il proprio modem/router ADSL quando siete fuori casa, per poi poterlo interrogare tramite Internet?
I router di ultima generazione hanno la possibilità di utilizzare protocolli come Dynamic DNS (DDNS) che consentono di rintracciare l'IP del modem anche in presenza di un indrizzo dinamico.

Per quanto riguarda i modem, questi sono spesso utilizzati per mezzo di un PC. Se l'opzione DDNS non è disponibile, allora e sufficiente scaricare un client DDNS (basta fare una ricerca su Internet) da installare sulla propria macchina.

Chi inevece come me utilizza un router che non supporta il protocollo DDNS deve inventarsi qualcosa.

Una semplice soluzione fatta in casa
Nel mio caso è possibile interrogare il router per mezzo del protocollo telnet (porta 23).
I modem/router che supportano le sessioni su porta 23 sono tanti (es. Dlink 300T, 302T, 320T, ecc.).
L'idea è quella di prendere l'IP del modem ed inviarlo ad un indirizzo di posta elettronica a cadenza regolare; ad esempio, ogni ora.

Per prima cosa dobbiamo creare uno script in grado di generare l'output per la sessione telnet proprio come se fosse un utente a farlo:

cat > /sbin/runtelnet.sh < #!/bin/sh
host=192.168.1.1
port=23
login=root
passwd=RouterPass

echo open ${host} ${port}
sleep 1
echo ${login}
sleep 1
echo ${passwd}
sleep 1
echo ifconfig ppp0
sleep 1
echo exit
EOF

Questo comando crea un file chiamato /sbin/runtelnet.sh che contiene i comandi da impartire al router per ottenere l'IP della rete WAN. E' necessario modificare le variabili secondo le proprie esigenze.

A questo punto dobbiamo renderlo eseguibile:

chmod 750 /sbin/runtelnet.sh

Adesso bisogna creare un piccolo script che prenda questo indirizzo e lo spedisca in posta elettronica:

cat > /sbin/myIP.sh < #!/bin/sh

SUBJECT="Modem Public Ip"

# A chi spediamo l'email?
EMAIL="noreply@morzello.com"

# inviamo l'email usando /bin/mail
/sbin/runtelnet.sh | telnet 2> /dev/null | grep "addr:" | /bin/mail -s "$SUBJECT" "$EMAIL" > /dev/null 2>&1

echo "done."
EOF

Questo comando genera il file /sbin/myIP.sh con il quale spediremo un messaggio contenente l'IP pubblico del router.
Anche in questo caso è necessario rendere eseguibile il file con il comando:

chmod 750 /sbin/myIP.sh

Prima di concludere, facciamo qualche test per capire se tutto è in ordine.

Quando tutto funzionerà correttamente, potremo procedere con un inserimento nel file /etc/crontab in modo da eseguire questo comando ogni ora:

01 * * * * root /sbin/myIP.sh >/dev/null 2>&1

In alternativa, sui sistemi operativi come ad esempio Fedora, è possibile linkare lo script nella cartella /etc/cron.hourly.

Per saperne di più:
cos'è il DDNS
DynDNS - servizio on-line
No IP - un altro servizio on-line
Articolo (p)Link Commenti Commenti (4)  Storico Storico  Stampa Stampa
 
Di vittorio (del 06/12/2007 @ 15:28:29, in SGCop, linkato 982 volte)
Tempo fa ho attivato un contratto ADSL per connettermi ad Internet da casa. Quasi subito però mi sono accorto che i vari modem/router in circolazione non facevano al caso mio.
Io volevo una soluzione che mi consentisse di fare tante cose (VPN, Wi-Fi, DMZ, un piccolo server Web, ...).
Sul mercato ho trovato tante alternative valide ma nessuna che mi lasciasse peinamente soddisfatto.
Così su Ebay ho comprato un Toshiba Magnia SG30. Si tratta di un banalissimo PC di compatte dimensioni, senza monitor e tastiera ma con integrato due schede di rete ed uno switch.
Come soluzione era l'ideale, però il software che vi era montato non era più manutenuto da Toshiba e poi non era proprio quello che avevo in mente.
Come sistema operativo alternativo pensai subito a Linux, come distribuzione ad IPCop.
Unico problema e che IPCop non è fatto per essere installato su un pc senza mouse e tastiera, almeno non senza problemi. Del resto io volevo sfruttare tutte le potenzialità dell'hardware che avevo a disposizione.

Cos'è SGCop
SGCop nasce da una mia esigenza personale. In parole povere si tratta del porting di IPCop per i PC della serie Magnia SG (SG10,SG20 e SG30).

Le sostanziali differenze con IPCop sono:

- compilazione del codice ottimizzata per i686;
- supporto della console seriale (ttyS);
- supporto "grezzo" del display LCD.

Per quanto riguarda il resto, SGCop è al 100% compatibile con IPCop.

Poichè IPCop esegue codice compatibile con i sistemi i386, gli unici plug in che possono creare problemi sono quelli che installano moduli aggiuntivi nel kernel.

Purtroppo io non ho avuto molto tempo da dedicare al porting ed alcune cose non sono ancora completate.

Installare SGCop
Installare SGCop è facile come IPCop ed infatti è possibile seguire il manuale di IPCop per completare tutto il processo.

Tuttavia il processo di installazione originale prevede l'uso di una console virtuale (tty1,tty2,...) che non sul Magnia.
Poichè ho voluto lasciare la piena compatibilità con IPCop, per avviare l'installazione è necessario impartire il comando da console:

/bin/install [console]

Dove il parametro console puo essere /dev/tty2 se si dispone di un monitor ed una tastiera ovvero /dev/null in caso si stia utilizzando una console seriale (si perdono però i dettagli della installazione che IPCop invia su tty2).
Articolo (p)Link Commenti Commenti (0)  Storico Storico  Stampa Stampa
 
Di vittorio (del 18/12/2007 @ 13:16:15, in Sistemi, linkato 266 volte)
Tempo fa ho comprato un hard disk da mezzo tera in un centro commerciale della mia città.
Piano piano l'ho riempito di files di ogni genere: backup, posta, sorgenti, progetti, distribuzioni linux, ...

In breve tempo non ero più in grado di trovare facilmente i files che mi servivano.
Così le soluzioni al problema erano due:

- Mettere in ordine l'archivio e darsi un metodo per copiare i files
- Trovare un piccolo crowler a cui richiedere i files quando servono.

Forse non tutti sanno cos'è un crowler. In parole povere si tratta di un software che indicizza le risorse in rete e le rende disponibili ad un motore di ricerca.

Ovviamente ho optato per la seconda opzione.

Durante una delle tante presentazioni sul software alle quali assisto per lavoro, sono venuto a conoscenza di Google Mini, un motore di ricerca per le aziende mantenuto da Google.
Non si tratta di un pacchetto gratuito anche perchè viene venduto insieme all'hardware su cui "gira" il motore di ricerca.

Dopo varie ricerche sono incappato su una soluzione di IBM e Yahoo! Search.

Sto parlando di OmniFind, un crowler scritto in Java e disponibile per Windows e Linux.

Ho deciso di provarlo subito ma purtroppo il supporto per Linux è limitato alla distribuzione di Red Hat Enterprise.

Questo significa che è possibile eseguire OmniFind su altre distribuzioni ma è necessario apportare le dovute modifiche al processo di installazione.

La prima cosa da fare in assoluto è disabilitare Selinux in caso sia attivo nell'ambiente operativo altrimenti l'installazione non si concluderà correttamente. Provvederemo in un secondo momento a riabilitarlo.
Chi non avesse impostato Selinux all'avvio del SO può tranquillamente ignorare i comandi che seguono.
Fedora Core mette a disposizione un semplice modo per disabilitare temporaneamente Selinux:

setenforce 0

Per verificare che il comando abbia sortito l'effetto desiderato, procediamo con una verifica:

cat /selinux/enforce

Il comando precedente dovrà restituire 0.

A questo punto è utile creare un utente di sistema con il quale eseguiremo il programma (non è consigliabile eseguire il crowler con le credenziali di root anche perchè non c'è ne la necessità):

groupadd omnifind
useradd -g omnifind omnifind
passwd omnifind

Una volta definita la password per l'utente omnifind procediamo oltre.

OmniFind utilizza una propria Java Virtual Machine, di conseguenza non è necessario installare Java sul SO. Tuttavia il crowler fa uso di librerie condivise, in particolare è necessario disporre di libstc++. Un semplice comando yum list dovrebbe essere sufficiente per fare un controllo. Per installare le librerie possiamo impartire il seguente comando:

yum install compat-libstdc++*

Adesso è possibile procedere con l'installazione di OmniFind seguendo le istruzioni incluse nel manuale del software. Prima di procedere però sostituiamo l'utente omnifind all'utente root.

su omnifind
./setuplinux_i586.bin -console

Il comando precedente prevede una installazione per la riga di comando. Chi volesse procedere in ambiente X può omettere il parametro -console.
Nel caso in cui l'installazione non andasse a buon fine, verificare che l'utente omnifind abbia i permessi di scrittura nella cartella prescelta per l'installazione.

Utilizzando i parametri di default, la directory di installazione dovrebbe essere: /opt/ibm/OmniFindYahooEdition, di conseguenza questa sarà la directory a cui faremo riferimento nei comandi successivi.

Qualora l'applicativo funzionasse alla fine dell'installazione, ritenetevi persone molto fortunate, nel mio caso infatti sono stati necessari altri passaggi.

Nel caso in cui l'esecuzione del programma non vada a buon fine, procediamo con alcune verifiche.
In primo luogo verifichiamo che tutte le librerie siano collegate correttamente:

ldd /opt/ibm/OmniFindYahooEdition/stellent.linux32/tsmanager

L'output dovrebbe essere simile al seguente:

linux-gate.so.1 => (0x00110000)
libpthread.so.0 => /lib/libpthread.so.0 (0x491c2000)
libACE.so.5.5.1 => /opt/.../stellent.linux32/libACE.so.5.5.1 (0x00125000)
libboost_date_time-gcc-mt-1_33_1.so.1.33.1 => /opt/.../stellent.linux32/libboost_date_time-gcc-mt-1_33_1.so.1.33.1 (0x0029b000)
libboost_filesystem-gcc-mt-1_33_1.so.1.33.1 => /opt/.../stellent.linux32/libboost_filesystem-gcc-mt-1_33_1.so.1.33.1 (0x002a9000)
libboost_program_options-gcc-mt-1_33_1.so.1.33.1 => /opt/.../stellent.linux32/libboost_program_options-gcc-mt-1_33_1.so.1.33.1 (0x002b9000)
libboost_regex-gcc-mt-1_33_1.so.1.33.1 => /opt/.../stellent.linux32/libboost_regex-gcc-mt-1_33_1.so.1.33.1 (0x002fd000)
libboost_serialization-gcc-mt-1_33_1.so.1.33.1 => /opt/.../stellent.linux32/libboost_serialization-gcc-mt-1_33_1.so.1.33.1 (0x0038f000)
libboost_signals-gcc-mt-1_33_1.so.1.33.1 => /opt/.../stellent.linux32/libboost_signals-gcc-mt-1_33_1.so.1.33.1 (0x00408000)
libdl.so.2 => /lib/libdl.so.2 (0x4cfdb000)
libts_utils.so => /opt/.../stellent.linux32/libts_utils.so (0x0041a000)
libts_logging_facility.so => /opt/.../stellent.linux32/libts_logging_facility.so (0x00431000)
libts_components.so => /opt/.../stellent.linux32/libts_components.so (0x00451000)
libts_soap_ext.so => /opt/.../stellent.linux32/libts_soap_ext.so (0x00461000)
libts_soap_ts_server.so => /opt/.../stellent.linux32/libts_soap_ts_server.so (0x004c9000)
libts_soap_ta_server.so => /opt/.../stellent.linux32/libts_soap_ta_server.so (0x0052f000)
libts_soap_ts_client.so => /opt/.../stellent.linux32/libts_soap_ts_client.so (0x0059e000)
libts_soap_std.so => /opt/.../stellent.linux32/libts_soap_std.so (0x00604000)
libts_soap_tss.so => /opt/.../stellent.linux32/libts_soap_tss.so (0x00687000)
libts_soap_ta_client.so => /opt/.../stellent.linux32/libts_soap_ta_client.so (0x006ea000)
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x00758000)
libm.so.6 => /lib/libm.so.6 (0x4cfe1000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x4d149000)
libc.so.6 => /lib/libc.so.6 (0x4ce99000)
/lib/ld-linux.so.2 (0x4ce7c000)
librt.so.1 => /lib/librt.so.1 (0x4447d000)

Nel caso in cui qualche libreria dovesse mancare, verifichiamo che selinux sia disabilitato e che libstc++ sia installato sul SO; quindi seguiamo le istruzioni riportate nel manuale per reinstallare OmniFind.

Se il servizio iptables è in uso da Linux, verifichiamo che la porta definita per contattare OmniFind sia accessibile. Di seguito le impostazioni da aggiungere al file /etc/sysconfig/iptables per abilitare i client a contattare il servizio sulla porta di default proposta dall'installazione (inserire prima del COMMIT):

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT


Se anche in questo caso l'applicativo non parte, assicuriamoci che nel file /etc/hosts sia indicata la voce localhost:

::1 mycomputer.mydomain mycomputer localhost.localdomain localhost
127.0.0.1 localhost.localdomain localhost

Se il problema persiste, scrivete due righe sul problema, tenteremo insieme una soluzione.

Una volta che il servizio "parte" senza problemi, è necessario modificare le policy di selinux.
Chi avesse impostato selinux in modalità permissive può trovare tutte le modifiche da apportare dando uno sguardo ai log di sistema:

cat /var/log/messages | grep audit


chi avesse impostato Selinux in modalità enforced dovrà invece procedere per tentativi successivi.
In pratica si tratta di abilitare l'utente omnifind alla esecuzione delle librerie java. Evidenziamo di seguito i comandi impratiti da console per una singola libreria:

semanage fcontext -a -t textrel_shlib_t
/opt/ibm/OmniFindYahooEdition/_jvm/jre/bin/headless/LIBRERIA.so
restorecon /opt/ibm/OmniFindYahooEdition/_jvm/jre/bin/headless/LIBRERIA.so

Dove LIBRERIA è il nome del file inibito da Selinux.

A questo punto possiamo ripristinare selinux:

setenforce 1

Fare partire il servizio all'avvio:
Di seguito riportiamo una possibile soluzione per chi volesse far partire il crowler all'avvio di Linux:

cat > /etc/rc.d/init.d/omnifind <<EOF
#!/bin/sh
#
# chkconfig: - 99 31
# description: Starts and stops the Omnifind daemon \
#


# Source function library.
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 0
fi

# Avoid using root's TMPDIR
unset TMPDIR

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

RETVAL=0

start() {
   KIND="Omnifind"
   echo -n $"Starting $KIND service: "
   su -c /opt/ibm/OmniFindYahooEdition/bin/startup.sh omnifind
   RETVAL=$?
   echo
   return $RETVAL
}

stop() {
   KIND="Omnifind"
   echo -n $"Shutting down $KIND services: "
   su -c /opt/ibm/OmniFindYahooEdition/bin/shutdown.sh omnifind
   RETVAL=$?
   echo
   return $RETVAL
}

restart() {
   stop
   start
}


case "$1" in
start)
   start
   ;;
stop)
   stop
   ;;
restart)
   restart
   ;;
*)
   echo $"Usage: $0 {start|stop|restart}"
   exit 1
esac

exit $?
EOF

Il precedente comando consente di gestire Omnifind tramite chkconfig.
Per installare lo script è sufficiente impartire i seguenti comandi:

chmod 755 /etc/rc.d/init.d/omnifind
chkconfig --add omnifind
chkconfig --level 345 omnifind on

Considerazioni finali:
Secondo me OmniFind è un tool utile per le piccole aziende, almeno nella sua versione free.
Da tenere in considerazione che questa versione non gestisce la segregazione dei dati a nessun livello, di conseguenza, chi riesce a contattare il motore di ricerca, può ottenere tutti i dati indicizzati, senza discriminazioni.
E' molto comodo da usare e riesce a tracciare il contenuto di: file PDF, files Word, files Compressi e siti web interni ed esterni alla rete locale.

Per saperne di più:
OmniFind Home Page
Cos'è un crowler
Articolo (p)Link Commenti Commenti (0)  Storico Storico  Stampa Stampa
 
Pagine: 1 2 3 4 5 6
Ci sono 4 persone collegate


Cerca per parola chiave





< settembre 2010 >
L
M
M
G
V
S
D
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
     
             


Titolo
Calabria (29)
Italia (1)
Sistemi (2)

Le fotografie più cliccate

Titolo
Quale tra questi termini associ alla "Sicurezza Informatica"?

 Firewall
 AntiVirus
 Antispam
 Password

Titolo

Human Calendar

Fedora Project:

Questo sito è segnalato da:
BlogItalia.it - La directory italiana dei blog

Add to Technorati Favorites

Internet Map

Play chess online

Play chess online



06/09/2010 @ 22.28.52
script eseguito in 234 ms