Retour : Page Principale > sommaire aide > sommaire aide logiciels
Note : on ne s'en sert plus, et on a Algolia (réfléchir à mettre plus de truc dedans - 2017-07)
Sur Sequoia (193.54.123.169) :
cp /home/sphinx/etc/sphinx-min.conf.dist /home/sphinx/etc/sphinx.conf
Par ailleurs, il faut aussi attribuer le bon utilisateur au dossier /home/sphinx.
Pour ces deux cas, voir ci-dessus la config post installation.
Voir : http://sphinxsearch.com/forum/view.html?id=9370
Pour passer outre cette erreur : One workaround is to the pass the --noinfo or -q flag to 'search.'
Voir : http://sphinxsearch.com/bugs/view.php?id=1424
Sphinx
Note : on ne s'en sert plus, et on a Algolia (réfléchir à mettre plus de truc dedans - 2017-07)
Ressources
Configuration d'un compte utilisateur sphinx
- Création d'un compte utilisateur sphinx :
- sudo addgroup sphinx
- sudo adduser --ingroup sphinx sphinx
- Modifier le fichier .bashrc de sphinx :
- Se connecter en Sphinx : sudo su - sphinx
- umask 0002
- export PATH=$PATH:$HOME/bin
- Se connecter en Sphinx : sudo su - sphinx
Configuration post installation
- Création d'un fichier de conf par défaut pour les test :
- Aller dans le dossier de config de sphinx : cd /home/sphin/etc
- Copier le fichier de config par défaut : cp sphinx-min.conf.dist sphinx.conf
- Transfert des logs dans /home/log :
- cd /home/sphinx/var/
- rm -fR log
- mkdir /home/log/sphinx/
- chown sphinx:sphinx /home/log/sphinx/
- ln -s /home/log/sphinx/ log
- Attribuer toues le contenu de /home/sphinx Ă sphinx : chown -R sphinx:sphinx /home/sphinx
Autoriser Sphinx dans Shorewall
- Ajouter au fichier rules les règles ci-dessous : vi /etc/shorewall/rules
- Redémarrer Shorewall : /etc/init.d/shorewall restart
- Redémarrer Sphinx : /etc/init.d/sphinx restart
# sphynx + mysql ACCEPT net:193.54.123.169 $FW tcp 9312,9306,3306
Installer le script de démarrage
- cd /home/admin/scripts
- wget http://sphinx.monptitblog.com/files/2010/08/sphinx.txt -O sphinx
- Le script d'installation devrait utiliser ce fichier mais la manipulation manuelle est la suivante :
- cp sphinx.txt /etc/init.d/sphinx
- chmod +x /etc/init.d/sphinx
- Vérification démarrage :
- /etc/init.d/sphinx start
- ps aux | grep searchd | grep -v grep : 1 processus s'affiche
- Vérification arrêt :
- /etc/init.d/sphinx stop
- ps aux | grep searchd | grep -v grep : rien ne s'affiche
Vérification de l’installation
- Vérification arborescence de dossiers sphinx : ls -al /home/sphinx
- /home/sphinx doit contenir les dossiers : bin, etc, src et var
- Vérification recherche :
- Commencer par corriger les droits de la base de données "test" de mysql :
- cd /usr/local/mysql/data/
- chown -R mysql:mysql test
- Création d'une base mysql de test si nécessaire (normalement, elle existe déjà mais ses fichiers ont des droits root - voir ci-dessus) : mysqladmin -u root create test
- mysql -u root test < example.sql (note : la base doit s'appeler "test" car le fichier example.sql y fait référence)
- Indexer le contenu : /home/sphinx/bin/indexer test1
- Rechercher : /home/sphinx/bin/search -i test1 "four"
- Commencer par corriger les droits de la base de données "test" de mysql :
Automatiser l'indexation
- Ajouter dans le dossier /etc/cron.daily un fichier sphinxsearch
- vi /etc/cron.daily/sphinxsearch
- Ajouter le contenu ci-dessous
- Donner les droits d'execution : chmod 755 /etc/cron.daily/sphinxsearch
#!/bin/bash # Script permettant une indexation des données pour Sphinx Search # # Auteur : Jean-Pascal MILCENT (2013-12-24) # Notes : # - script à placer dans /etc/cron.daily # - l'option rotate évite de devoir arrêter le demaon searchd # Log : # 2013-12-24 [Jean-Pascal MILCENT]: creation du script /home/sphinx/bin/indexer --quiet --config /home/sphinx/etc/sphinx.conf --rotate i_spip i_papyrus i_projet i_bazar i_coste i_nvjfl >/dev/null 2>&1
Utiliser Sphinx Ă distance
Sphinx est installé sur Agathis et Mysql sur Sequoia.Sur Sequoia (193.54.123.169) :
- définir un utilisateur mysql sphinx (avec Phpmyadmin ou Webmin) qui aura pour paramètres :
- host : 193.54.123.216
- password : comme sur Agathis
- le droit SELECT sur les bases de données auxquelles il doit accéder
- ouvrir dans Shorewall les ports de Sphinx pour Sequoia : 9306 et 9312
- définir un utilisateur mysql sphinx (avec Phpmyadmin ou Webmin) qui aura pour paramètres :
- host : 193.54.123.216
- password : comme sur Sequoia
- le droit SELECT sur les bases de données auxquelles il doit accéder
- définir un utilisateur mysql sphinx (avec Phpmyadmin ou Webmin) qui aura pour paramètres :
Tester Sphinx depuis Sequoia (moteur de recherche de Tela Botanica)
- Se connecter en ssh sur Sequoia.
- Connecter le port Sphinx sur Agathis : /usr/local/mysql/bin/mysql -h 193.54.123.216 -P 9306
- Tester une requĂŞte : SELECT * FROM i_projet, i_spip, i_papyrus, i_bazar WHERE MATCH('journe');
Erreur : error while loading shared libraries: libmysqlclient.so.18
Si cette erreur est obtenue lors du lancement de l’exécutable /home/sphinx/bin/search , il est nécessaire de réaliser les étapes suivantes :- ajouter un fichier localapp.conf dans /etc/ld.so.conf.d/ : vi /etc/ld.so.conf.d/localapp.conf
- ajouter la ligne : /usr/local/mysql/lib
- prise en compte de la modif : ldconfig
Erreur : ERROR: index 'i_nvjfl': sql_connect: Can't connect to local MySQL server through socket '/tmp/mysql-55.sock' (2) (DSN=mysql://sphinx:***@localhost:3306/tb_eflore).
Si l'emplacement du socket mysql par défaut utilisé n'est pas bon :- Modifier la ligne pointant vers les libs Mysql dans le fichier /etc/ld.so.conf.d/localapp.conf : vi /etc/ld.so.conf.d/localapp.conf
- Recharger les emplacements des libs (en root) : ldconfig
- Modifier le script de compilation pour indiquer le nouveau emplacement de la lib Mysql par défaut (port 3306)
Erreur : FATAL: no readable config file (looked in /home/sphinx/etc/sphinx.conf, ./sphinx.conf).
Nécessite de créer un fichier de configuration. Le fichier par défaut peut être utiliser pour les test :cp /home/sphinx/etc/sphinx-min.conf.dist /home/sphinx/etc/sphinx.conf
Erreur : FATAL: failed to open log file '/home/sphinx/var/log/searchd.log': Permission denied
Il est nécessaire de rediriger les logs vers le dossier contenant l'ensemble des logs du système (/home/log).Par ailleurs, il faut aussi attribuer le bon utilisateur au dossier /home/sphinx.
Pour ces deux cas, voir ci-dessus la config post installation.
Erreur : index 'test1': search error: .
Il semblerait que cette erreur n'est pas d'impact pour l'utilisation avec PHP...Voir : http://sphinxsearch.com/forum/view.html?id=9370
Pour passer outre cette erreur : One workaround is to the pass the --noinfo or -q flag to 'search.'
Voir : http://sphinxsearch.com/bugs/view.php?id=1424
Fichier de démarrage
Source : http://sphinx.monptitblog.com/files/2010/08/sphinx.txt
#! /bin/sh
### BEGIN INIT INFO
# Provides: Sphinx search engine daemon searchd
# Required-Start: $local_fs $remote_fs mysql
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Short-Description: Start and stop the Sphinx search engine daemon searchd
# Description: Start and stop the Sphinx search engine daemon searchd
### END INIT INFO
# Author: Michael Dufosse <mdufosse@monptitsite.com>
#
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="Sphinx search engine daemon"
NAME=searchd
DAEMON=/home/sphinx/bin/$NAME
DAEMON_ARGS=""
PIDFILE=/home/sphinx/var/log/$NAME.pid
SCRIPTNAME=/etc/init.d/sphinx
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --chuid sphinx:sphinx --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --chuid sphinx:sphinx --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
$DAEMON_ARGS \
|| return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
return 0
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
reload)
#
# If do_reload() is not implemented then leave this commented out
# and leave 'force-reload' as an alias for 'restart'.
#
log_daemon_msg "Reloading $DESC" "$NAME"
do_reload
log_end_msg $?
;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
#echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
: