OmniFind e Fedora Core 6

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 => (0×00110000)
libpthread.so.0 => /lib/libpthread.so.0 (0x491c2000)
libACE.so.5.5.1 => /opt/…/stellent.linux32/libACE.so.5.5.1 (0×00125000)
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 (0×00408000)
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 (0×00431000)
libts_components.so => /opt/…/stellent.linux32/libts_components.so (0×00451000)
libts_soap_ext.so => /opt/…/stellent.linux32/libts_soap_ext.so (0×00461000)
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 (0×00604000)
libts_soap_tss.so => /opt/…/stellent.linux32/libts_soap_tss.so (0×00687000)
libts_soap_ta_client.so => /opt/…/stellent.linux32/libts_soap_ta_client.so (0x006ea000)
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0×00758000)
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

Leave a comment

0 Comments.

Leave a Reply


[ Ctrl + Enter ]