Installation de Seeks

Article publié le 14/03/2010

Le but de cet article est de présenter un rapide tutoriel d'installation de Seeks, un moteur de recherche dont le but est de regrouper les utilisateurs ayant des requêtes similaires, mais qui permet également de classer les résultats provenant de divers moteurs de recherche.

Avant toute chose, n'oubliez pas que des nœuds de test ont été mis en place, notamment à cette adresse. Cela vous permettra de tester le moteur de recherche avant de l'installer chez vous.

Compilation du proxy

Seeks étant encore jeune et en développement, il vous faudra le compiler. Tout d'abord, installer les outils nécessaires :

marty@babar:~$ sudo apt-get install autoconf automake libtool build-essential libcurl4-gnutls-dev libpcre3-dev libxml2-dev docbook2x-man

Télécharger la dernière version stable de seeks sur Sourceforge. Décompressez l'archive et lancez la génération des fichiers de configuration et du Makefile :

marty@babar:seeks$ ./autogen.sh

On croise les doigts, on lance le script de configuration et on compile :

marty@babar:seeks$ ./configure && make

Si tout s'est bien passé, ça devrait se finir avec :

make[3]: quittant le répertoire « /home/marty/seeks/src »
make[2]: quittant le répertoire « /home/marty/seeks/src »
make[2]: entrant dans le répertoire « /home/marty/seeks »
make[2]: quittant le répertoire « /home/marty/seeks »
make[1]: quittant le répertoire « /home/marty/seeks »

On lance le proxy pour vérifier qu'il fonctionne :

marty@babar:seeks$ cd src
marty@babar:src$ ./seeks 
Mar 13 23:30:54.535 b76d66d0 Info: listen_loop(): seeks proxy configuration successfully loaded
Mar 13 23:30:54.535 b76d66d0 Info: Reloading configuration file 'lsh/lsh-config'
Mar 13 23:30:54.535 b76d66d0 Info: listen_loop(): lsh configuration successfully loaded
Mar 13 23:30:54.536 b76d66d0 Info: listen_loop(): attempt to find plugins...
Mar 13 23:30:54.540 b76d66d0 Info: loaded plugin 	websearch-hp
Mar 13 23:30:54.540 b76d66d0 Info: Reloading configuration file '/home/marty/seeks/src/plugins/websearch/websearch-config'
Mar 13 23:30:54.541 b76d66d0 Info: Registering plugin websearch, and 7 CGI dispatchers
Mar 13 23:30:54.541 b76d66d0 Info: registering CGI dispatcher websearch-hp
Mar 13 23:30:54.541 b76d66d0 Info: registering CGI dispatcher seeks_hp_search.css
Mar 13 23:30:54.541 b76d66d0 Info: registering CGI dispatcher seeks_search.css
Mar 13 23:30:54.541 b76d66d0 Info: registering CGI dispatcher search
Mar 13 23:30:54.541 b76d66d0 Info: registering CGI dispatcher search_cache
Mar 13 23:30:54.541 b76d66d0 Info: registering CGI dispatcher search_similarity
Mar 13 23:30:54.541 b76d66d0 Info: registering CGI dispatcher search_clusterize
Mar 13 23:30:54.541 b76d66d0 Info: Listening on port 8118 on IP address 127.0.0.1

Seeks va donc tourner comme un proxy (il est basé sur Privoxy), et on l'interrogera via le port 8118. La configuration du proxy se fait via le fichier « config » (dans le répertoire src).

Utilisation de Seeks comme proxy local

Tout d'abord, il faut régler Firefox pour qu'il passe par le proxy :

proxy_seeks.png

Configuration de Firefox

On peut ensuite accéder à Seeks de différentes façons :

  • via la page http://s.s/websearch-hp ;
  • grâce au plugin de recherche pour Firefox. Il faut pour cela copier le fichier src/plugins/websearch/public/opensearch.xml dans le dossier ~/.mozilla/firefox/xxxxxxxx.default/searchplugins (à créer si nécessaire), puis relancer Fifefox ;
  • via le plugin de recherche Google, Bing, Cuil ou leur page de recherche respective.

Ce dernier comportement est assez ennuyeux, car Seeks intercepte toutes les recherches et les effectue lui-même. Du coup, impossible d'effectuer une simple recherche sur Google ! Pour éviter cela, éditez le fichier src/plugins/websearch/patterns/qi_patterns, et commentez (# en début de ligne) les moteurs de recherche dont les requêtes ne seront pas interceptées. Pour ma part, aucune requête ne doit être interceptée :

#.google.*/search?
#.google.*/custom?
#.bing.*/search?
#.cuil.com/search?

Relancez Seeks pour que les paramètres soient pris en compte.

Installation d'un serveur web et création du noeud public Seeks

La seconde partie consiste en l'installation d'un serveur web, qui permettra de mettre en place une page web qui interrogera le proxy et gèrera les recherches. Il existe plusieurs scripts qui peuvent être utilisés. Le plus simple est d'utiliser le script PHP, avec le serveur web lighttpd. On installe tout le nécessaire :

marty@babar:~$ sudo apt-get install lighttpd php5-cgi php5-curl

On active le module fastcgi, et on relance :

marty@babar:~$ sudo lighty-enable-mod fastcgi
marty@babar:~$ sudo /etc/init.d/lighttpd force-reload

Il reste à copier le script PHP suivant dans le dossier /var/www/seeks, en le nommant search.php (ce script fonctionne avec la version 0.2.1 de Seeks, pensez à vérifier sur le site officiel si vous installez une version plus récente) :


<?

/* Copyright Camille Harang
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see http://www.fsf.org/licensing/licenses/agpl-3.0.html. */

if (array_key_exists('HTTPS', $_SERVER) && $_SERVER['HTTPS']) $scheme = 'https://';
else $scheme= 'http://';

$seeks_uri = 'http://s.s';
$proxy = 'localhost:8118';
$base_script = $_SERVER['SCRIPT_NAME'];
$base_url = $scheme.$_SERVER['HTTP_HOST'].$base_script;

if ($_SERVER['REQUEST_URI'] == '/') { header('Location: '.$base_url.'/websearch-hp'); }
else $url = $seeks_uri.str_replace($base_script, '', $_SERVER['REQUEST_URI']);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1) ;
$header = array("Seeks-Remote-Location: ".$base_url);
if (array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER)) $header[] = "Accept-Language: ".$_SERVER['HTTP_ACCEPT_LANGUAGE'];
curl_setopt ($curl, CURLOPT_HTTPHEADER, $header);
$result = curl_exec($curl);
$result_info = curl_getinfo($curl);
if(curl_errno($curl)) echo 'CURL ERROR: '.curl_error($curl);
curl_close($curl);

header('Content-Type: '.$result_info['content_type']);

echo $result;
?>

On donne les droits d'accès en lecture à tout le monde :

marty@babar:~$ sudo chmod 644 /var/www/seeks/search.php

On lance le proxy, et on accède à la page de recherche à l'adresse http://localhost/seeks/search.php/websearch-hp (remplacez localhost par votre nom de domaine quand vous y accédez de l'extérieur).

Dernières astuces

Pour éviter le log des recherches :

marty@babar:src$ ./seeks 2> /dev/null

Le proxy est encore instable, pour le relancer automatiquement lorsqu'il plante on le lance dans une boucle infinie :

marty@babar:src$ while true; ./seeks; done

La configuration du moteur de recherche se fait via le fichier src/plugins/websearch/websearch-config. On peut par exemple modifier la liste des moteurs de recherche interrogés, et activer le « content analysis » :

enable-content-analysis 1

Pensez également à configurer votre firewall pour autoriser les connexions entrantes sur le port 80 si vous voulez qu'on puisse accéder à votre serveur web.

Edit du 26/03/2010 : ajout de build-essential et libxml2-dev dans la liste des paquets à installer, correction du script PHP. Merci Neros !

Edit du 29/03/2010 : ajout des permissions pour le fichier search.php

Edit du 30/03/2010 : ajout du paquet docbook2x-man lors de l'installation pour la version 0.2.1

Vus : 1002
Publié par Marty : 49