Установка Verlihub в Gentoo

Материал из Verlihub

Перейти к: навигация, поиск

Содержание

Где взять ebuild'ы

Недавно оверлей для verlihub был добавлен в список официальных оверлеев Gentoo, теперь добавление его в portage можно производить так:

1. Если svn ещё не установлен:

emerge subversion

2. Если layman ещё не установлен:

emerge layman

затем а конце /etc/make.conf добавить строку (в противном случае компиляция будет невозможна)

source /usr/portage/local/layman/make.conf

3. После этого следует выполнить команды:

layman -L
layman -a verlihub

После этого /usr/portage/local/layman/verlihub/ появятся ebuild'ы verlihub.

Обновление оверлея следует выполнять так:

layman -s verlihub

Сборка

Как обычно:

emerge verlihub

Можно с помощью USE-флагов добавить нужные плагины.

Есть неприятность, связанная с тем, что архив, выложенный на sourceforge, отличается от того, для которого сделан digest-файл в оверлее. Чтобы решить эту проблему, надо скачать нужный файл по ссылке, положить его в /usr/portage/distfiles и выполнить команду:

ebuild /usr/portage/local/layman/verlihub/net-p2p/verlihub/verlihub-0.9.8d_rc2.ebuild digest

При обновлении оверлея с помощью layman в будущем могут быть проблемы. Чтобы их избежать, сотрите перед обновлением файл /usr/portage/local/layman/verlihub/net-p2p/verlihub/Manifest, затем обновите оверлей, после же, если потребуется, обновите Manifest обратно с помощью ebuild ... digest (это не потребуется, если разработчики сподобятся наконец обновить digest прямо в оверлее).

Другой способ установки заключается в использовании опции, которая игнорирует проверку целостности файлов. Способ является более предпочтительным, чем описанный выше, так как помогает избежать проблем при обновлении оверлея:

ebuild /usr/portage/local/layman/verlihub/net-p2p/verlihub/verlihub-0.9.8d_rc2.ebuild merge --skip-manifest

При возникновении ошибок во время компиляции описанным выше способом (они возникают из-за более жестких требований современных версий gcc), берем архив с исходниками /usr/portage/distfiles/verlihub-0.9.8d-RC2.tar.gz, распаковываем в отдельную директорию, вносим изменения в исходники в соответствии с описанными тут или применяем патч из директории ./verlihub/:

patch -p1 < pathto.patch
diff -Naur ./src/cconfigbase.cpp ./src/cconfigbase.cpp
--- ./src/cconfigbase.cpp	2005-03-05 17:44:53.000000000 +0000
+++ ./src/cconfigbase.cpp	2009-02-13 02:34:14.000000000 +0000
@@ -16,7 +16,7 @@
  ***************************************************************************/
 
 #include "cconfigbase.h"
-
+#include <string.h>
 namespace nConfig
 {
 hHashStr<cConfigBaseBase::tItemHashType> cConfigBaseBase::msHasher;
diff -Naur ./src/cconfigitembase.cpp ./src/cconfigitembase.cpp
--- ./src/cconfigitembase.cpp	2005-03-24 00:07:10.000000000 +0000
+++ ./src/cconfigitembase.cpp	2009-02-13 02:53:07.000000000 +0000
@@ -12,7 +12,7 @@
 #include <iostream>
 #include <stdio.h>
 #include "stringutils.h"
-
+#include <string.h>
 using namespace nStringUtils;
 using namespace std;
 
diff -Naur ./src/cconfmysql.cpp ./src/cconfmysql.cpp
--- ./src/cconfmysql.cpp	2004-10-27 12:24:00.000000000 +0000
+++ ./src/cconfmysql.cpp	2009-02-13 02:34:24.000000000 +0000
@@ -17,6 +17,7 @@
 
 #include "cconfmysql.h"
 #include <algorithm>
+#include <string.h>
 using namespace std;
 
 namespace nConfig
diff -Naur ./src/creguserinfo.cpp ./src/creguserinfo.cpp
--- ./src/creguserinfo.cpp	2007-08-10 19:10:38.000000000 +0000
+++ ./src/creguserinfo.cpp	2009-02-13 02:36:00.000000000 +0000
@@ -21,7 +21,7 @@
 //for the crypt
 #define _XOPEN_SOURCE 
 #include <unistd.h>
-
+#include <string.h>
 #if HAVE_LIBSSL && HAVE_OPENSSL_MD5_H
 #include <openssl/md5.h>
 #endif
diff -Naur ./src/stringutils.cpp ./src/stringutils.cpp
--- ./src/stringutils.cpp	2006-09-05 16:01:48.000000000 +0000
+++ ./src/stringutils.cpp	2009-02-13 02:36:27.000000000 +0000
@@ -7,7 +7,7 @@
 #include <fstream>
 #include <sstream>
 #include <stdio.h>
-
+#include <stdlib.h>
 namespace nStringUtils
 {
 
diff -Naur ./src/thasharray.h ./src/thasharray.h
--- ./src/thasharray.h	2006-01-11 12:37:08.000000000 +0000
+++ ./src/thasharray.h	2009-02-13 02:35:36.000000000 +0000
@@ -13,7 +13,7 @@
 //#include <list>
 //using std::list;
 #include "cobj.h"
-
+#include <string.h>
 namespace nUtils {
 
 /**

Запаковываем архив обратно:

tar czfv verlihub-0.9.8d-RC2.tar.gz ./verlihub/

Действия производятся из директории, куда был распакован архив. Где verlihub-0.9.8d-RC2.tar.gz - имя нашего архива, ./verlihub/ - путь к директории с исходниками из текущей директории. Заменяем им /usr/portage/distfiles/verlihub-0.9.8d-RC2.tar.gz и повторяем операцию:

ebuild /usr/portage/local/layman/verlihub/net-p2p/verlihub/verlihub-0.9.8d_rc2.ebuild merge --skip-manifest

Если проблема не была решена и не все ошибки были устранены, то скорейший способ увидеть ошибки и устранить их заключается в конфигурировании и компиляции исходников в отдельной директории с последующим анализом логов компиляции.

Настройка

Настраивать можно как и в любом другом дистрибутиве, но настоящие гентушники предпочтут:

emerge --config verlihub

Фактически это аналог vh_install


Запуск хаба

Для запуска хаба будем использовать обычного пользователя (не root). Для примера возьмём и создадим verlihub.

useradd verlihub

Теперь дадим ему пароль

passwd verlihub

Запускать хаб мы будем в виде демона. Для этого созадём следующие файлы -

nano -w /etc/conf.d/verlihub

В него заносим следующее содержимое

# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header:
#/cvsroot/verlihub/verlihub/docs/html_manual/verlihub_manual.html,v 1.2 2005/03/12 22:20:15 danomac Exp $
# Verlihub configuration
# The directory where the verlihub config files are
CONFDIR=/etc/verlihub
# The location of the verlihub binary
VERLIBIN=/usr/bin/verlihub
# The process file
VERLIPIDFILE=/var/run/verlihub.pid
# Required files for verlihub to start
REQFILES="dbconfig"
# Optional files for verlihub
OPTFILES="motd faq rules help_admin help_master help_op help_usr help_reg"

Особое внимание обращаем на строки

# The location of the verlihub binary
VERLIBIN=/usr/bin/verlihub
# The directory where the verlihub config files are
CONFDIR=/etc/verlihub

В первой указываем путь до исполняемого файла хаба. Он может быть или тем что указан или к примеру:

VERLIBIN=/usr/local/bin/verlihub

чтобы найти его можно воспользоваться командой

find /usr -name verlihub

Второй путь - это путь к конфигурационным файлам хаба. По умолчанию он создаётся в /etc/verlihub

Теперь создадим скрипт для непосредственного запуска демона:

nano -w /etc/init.d/verlihub

В него заносим следующие строки

#!/sbin/runscript
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# Verlihub boot script for gentoo distributions
depend() {
        need net
        need mysql
}
start() {
        ebegin "Starting verlihub"
        # make sure the configuration directory exists
        if [ ! -d ${CONFDIR} ]; then
                   eerror FATAL ERROR: missing configuration directory
${CONFDIR}
                   return 1
        fi;
        # check for the required files
        for f in ${REQFILES}; do
                   file=${CONFDIR}/$f
                   if [ ! -e $file ]; then
                              eerror "FATAL ERROR: missing required file $file"
                              return 1
                   fi;
        done;
        # check for the optional files
        for f in ${OPTFILES}; do
                   file=${CONFDIR}/$f
                   if [ ! -e $file ]; then
                              eerror "WARNING: missing file $file, some functionality will be disabled"
                   fi;
        done;
        # start the hub
        start-stop-daemon --start --quiet --background --make-pidfile --pidfile ${VERLIPIDFILE} --chuid verlihub --exec ${VERLIBIN}
      eend $?
}
stop () {
      ebegin "Stopping verlihub"
      # stop verlihub
      start-stop-daemon --stop --pidfile ${VERLIPIDFILE}
      eend $?
}

Обратим внимание на строку

start-stop-daemon --start --quiet --background --make-pidfile --pidfile ${VERLIPIDFILE} --chuid verlihub --exec ${VERLIBIN}

Выделенный жирным параметр (--chuid verlihub) указывает от имени какого пользователя будет запущен процесс. Его можно изменить на любое другое - на тот случай если вы захотите запускать хаб не от имени предложенного мною пользователя verlihub а от кого-то другого.

Далее делаем наш скрипт запуска демона хаба исполняемым

chmod +x /etc/init.d/verlihub

А теперь добавляем хаб в авторан (запуск при каждом старте системы автоматический)

rc-update add verlihub default


Теперь для запуска, остановки или рестарта демона можно использовать:

Запуск
/etc/init.d/verlihub start
Остановка
/etc/init.d/verlihub stop
Рестарт
/etc/init.d/verlihub restart