Установка 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

