Установка memcacheq на FreeBSD

()

MemcacheQ это система очередей сообщений, основанная на коде базы данных MemcacheDB, которая в свою очередь основана на коде memcached. Соответственно MemcacheQ использует тот же протокол что и Memcached (точнее только две команды из него - get и set), а значит для работы с ним не требуется дополнительных модулей. Это позволяет при работе с ним пользоваться теми же преимуществами что и при использовании Memcached.

Например в PHP можно использовать модули pecl-memcache и pecl-memcached, и если PHP работает как FastCGI-процесс или как модуль веб-сервера (mod_php) можно использовать устойчивые соединения. Далее будет показано как можно установить MemcacheQ на сервер под управлением FreeBSD 8.2.

Инструкция по установке на официальной странице проекта полностью игнорирует какую либо систему управления пакетами и предлагает в ручную компилировать Berkley DB и MemcacheQ. Мы же попробуем написать свой порт, хотя исходные тексты MemcacheQ оформлены так чтобы максимально усложнить такую сборку.

Создадим на сервере директорию порта и перейдём в неё:

set D=/usr/ports/databases/memcacheq && mkdir -p $D{,/files} && cd $D && unset D

Затем создаёт Makefile, следующего содержания:

PORTNAME=       memcacheq
PORTVERSION=    0.2.0
CATEGORIES=     databases
MASTER_SITES=   ${MASTER_SITE_GOOGLE_CODE} \
                ${MASTER_SITE_GENTOO}
MASTER_SITE_SUBDIR=     distfiles

MAINTAINER=     michael@fun-box.ru
COMMENT=        Simple queue service over Memcache

LIB_DEPENDS=    event-1.4:${PORTSDIR}/devel/libevent

CFLAGS=         -I"${BDB_INCLUDE_DIR}"
LDFLAGS=    -l"${BDB_LIB_NAME}" -L"${LOCALBASE}/lib"
CONFIGURE_ENV=  CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}"

USE_RC_SUBR=    memcacheq
USE_BDB=    47+
GNU_CONFIGURE=  YES
CONFIGURE_ARGS= --with-libevent=${LOCALBASE} --with-bdb=${LOCALBASE} --enable-threads

PLIST_FILES=    bin/memcacheq

MCQDIR?=   /var/db/memcacheq

.include <bsd.port.pre.mk>

post-install:
        ${MKDIR} ${MCQDIR} || ${TRUE}
	${CHOWN} nobody:nobody ${MCQDIR}

.include <bsd.port.post.mk>

Так же нужен файл контрольных сумм - distinfo:

SHA256 (memcacheq-0.2.0.tar.gz) = b314c46e1fb80d33d185742afe3b9a4fadee5575155cb1a63292ac2f28393046
SIZE (memcacheq-0.2.0.tar.gz) = 131519

Файл с описанием порта pkg-descr:

MemcacheQ is a Simple Queue Service over Memcache.

Features:

    * damn simple
    * very fast
    * multiple queue
    * concurrent well
    * memcache protocol compatible

WWW: http://memcachedb.org/memcacheq/

И наконец файл-init-скрипта, который нужно разместить в директории порта как files/memcacheq.in:

#!/bin/sh
#
# PROVIDE: memcacheq
# REQUIRE: DAEMON
#
# Add the following lines to /etc/rc.conf to run memcacheq:
#
# memcacheq_enable (bool):      Set it to "YES" to enable memcacheq.
#                               Default is "NO".
# memcacheq_flags (flags):      Set extra flags here.
#                               Default is empty "".
# memcacheq_user (user):        Set user to run memcacheq.
#                               Default is "nobody".
#

. /etc/rc.subr

name="memcacheq"
rcvar=${name}_enable

load_rc_config ${name}

: ${memcacheq_enable="NO"}
: ${memcacheq_user="nobody"}
: ${memcacheq_pidfile="/var/db/memcacheq/memcacheq.pid"}

pidfile=${memcacheq_pidfile}
command=%%PREFIX%%/bin/memcacheq
command_args="-d -N -H /var/db/memcacheq -R -L 1024 -B 1024 -u ${memcacheq_user} -P ${pidfile}"

unset memcacheq_user

run_rc_command "$1"

Желающие могут скачать весь порт одним архивом, который достаточно закачать на сервер и распаковать командой:

tar jxfv memcacheq-0.2.0-freebsd-port.tab.bz2 -C /

Закончив с файлами порта установим сервис:

cd /usr/ports/databases/memcacheq && make install clean

Для запуска сервиса при старте системы добавим в файл /etc/rc.conf строку:

memcacheq_enable="YES"

И наконец запустим сервис:

/usr/local/etc/rc.d/memcacheq start

Теперь memcacheq запущен и слушает на портах 22201/tcp и 22201/udp и обращаться можно как к обычному memcached-серверу. Поддерживаются только команду get и set. Команда get вычитывает следующее значение из именованной очереди, а set - добавляет значение в именованную очередь. Параметр ttl у команды set игнонируется.

Пример практического применения memcacheq мы приведём в одной из следующих статей, а пока всё. Приятной работы!

Ключевые слова: memcached, memcacheq, freebsd, port.

Комментарии:

Anonymous 2011-03-28 06:13:33 (#)

Спасибо, за статью.

>Пример практического применения memcacheq мы приведём в одной из следующих статей

Жду с нетерпением.
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE