вівторок, 30 липня 2013 р.

Redis не запускается в Fedora

По порядку в общем-то.
http://redis.io/topics/quickstart
И как хорошие котики, мы хотим запустить make test. И получаем ошибку, что tcl8.5 not found

You need 'tclsh8.5' in order to run the Redis test

ВТФ? (спойлер: на этом приключения не заканчиваются)
Ок, ставим эту приблуду.
wget http://prdownloads.sourceforge.net/tcl/tcl8.5.11-src.tar.gz
tar xvfz tcl8.5.11-src.tar.gz
cd tcl8.5.11/
cd unix/
./configure
make -j3
removepkg tcl-8.4.15-i486-1
make install
ldconfig
(стырено http://dragkh.wordpress.com/2012/05/15/install-redis-stable-2-4-13-on-centos-release-6-2-x86_64-and-slackware-12-0-0-i686/)

Теперь make test запускается.
Ок, следуем дальше.
make install
cd utils
./install_server.sh

Пыщщщщ! Инсталл-сервер внезапно выдает следующий лулз:
 Installing service...
./install_server.sh: line 178: update-rc.d: command not found

Но мы же умные котики! Открываем файл, находим строку 178, и что мы там видим: проверка на существование команды chkconfig  if [ !`which chkconfig` ] ; then

В общем, гениальный скрипт ВНЕЗАПНО? заходит в этот if блок и пытается выполнить update-rc.d в RHEL системе :D
Включаем покерфейс и, к примеру, меняем содержимое этого места на

#Install the service
echo "Installing service..."
if [ !`which chkconfig` ] ; then
#if we're not a chkconfig box assume we're able to use update-rc.d
        chkconfig --add redis_$REDIS_PORT && echo "Successfully added to chkconfig!"
        chkconfig --level 345 redis_$REDIS_PORT on && echo "Successfully added to runlevels 345!"

else
    # we're chkconfig, so lets add to chkconfig and put in runlevel 345
        chkconfig --add redis_$REDIS_PORT && echo "Successfully added to chkconfig!"
        chkconfig --level 345 redis_$REDIS_PORT on && echo "Successfully added to runlevels 345!"
fi

(или пишем правильный if блок, но мы же хотим послужить богу Ганеше?)
Ругается на service redis_6379 does not support chkconfig, чуть позже фиксим)


ок, теперь инсталл скрипты запускаются.
Осталось запустить собсна redis.
ТАДААА!

[root@localhost utils]# /etc/init.d/redis_6379 start
 exists, process is already running or crashed

Процесс не запущен нифига.
Ок, открываем редактором и дебажим. Вуаля - переменная $PIDFILE не задается.
Лечится подменой содержимого файла конфигом доброго человека https://github.com/antirez/redis/blob/unstable/utils/redis_init_script

На случай выпила репозитория - оставлю это здеся.

REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
echo "$PIDFILE exists, process is already running or crashed"
        else
echo "Starting Redis server..."
                $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
echo "$PIDFILE does not exist, process is not running"
        else
PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac
Теперь можем запустить ps aux | grep redis, и убедиться, что это творение сумрачного гения РАБОТАЕТ.
[root@localhost utils]# ps aux | grep redis
root 13452 0.3 0.0 28080 1584 ? Ssl 23:33 0:00 /usr/local/bin/redis-server /etc/redis/6379.conf root 13474 0.0 0.0 4940 848 pts/0 S+ 23:33 0:00 grep --color=auto redis
(да, от рута. Позже разберусь.)



Немає коментарів:

Дописати коментар