Linux & Lotus. Единство великих. Продолжение.


Softovick

Вдохновившись статьей Скрипт автостарта в Ubuntu, я решил немного развить тему Linux & Lotus. Единство великих. и настроить автозагрузку сервера Domino при загрузке системы.
Ничего особо нового не придумаю, потому просто опишу кратко, что нужно сделать, чтобы сервер Lotus Domino запускался автоматически при загрузке системы в screen-сессии. Итак, начнем:
1 шаг: сделаем скрипт автозапуска, как в теме Скрипт автостарта в Ubuntu;
sudo nano /etc/init.d/autostart.script
2 шаг: вставим в него следующие строки
#!/bin/bash
screen -A -m -d -S domino su - notes -c "cd ~ && /opt/ibm/lotus/bin/server"

Данный скрипт запустит из-под рута сессию screen под названием «domino», зайдет по пользователем «notes» и выполнит запуск сервера.
3 шаг: сделаем исполняеемым файл скрипта и добавим его в автозагрузку
sudo chmod +x /etc/init.d/autostart.script
sudo update-rc.d autostart.script defaults 95

Вуаля, как говорят французы.
В итоге мы получаем ситуацию, при которой при загрузке системы автоматически запустится сервер. Сессия screen при этом запустится от имени рута, потому чтобы посмотреть результат запуска (там будет консоль сервера), то следует набрать команду sudo screen -r
P.S.: если кто подскажет, как правильно запустить сессию screen от имени локального пользователя, то буду благодарен.
Доб. 09.08.2009 г.
В результате опытной эксплуатации удалось выявить, что данный способ работает отлично в Ubuntu, но не срабатывает в OpenSUSE 10. В первую очередь из-за отсутствия утилиты update-rc, во-вторую — из-за несколько другого механизма автозагрузки. Итак, если у кого нужно сделать автозагрузку сервер Domino в OpenSUSE, то для Вас шаг № 3 будет выглядеть так: su
chmod +x /etc/init.d/autostart.script
ln -s /etc/init.d/autostart.script /etc/init.d/rc5.d/S95autostart.script

RTorrent – my way

9 февраля 2009
Рубрика: Заметки
Теги: ,

Zeboton

В своей первой заметке в этом блоге я решил написать именно про RTorrent — клиент p2p сетей работающих по протоколу bitorrent. Потратив солидное количество времени на поиск нужных мне настроек и перерыв десятки мануалов хотелось бы облегчить жизнь идущим за мной энтузиастам.

Требования были следующие:
— автоматическая загрузка клиента при старте системы
— работа в фоновом режиме
— распределение контента по различным категориям(папкам) после окончания загрузки.
— информативный интерфейс(не графический)
— быстрый графический интерфейс
— наличие пакета в репозитарии Ubuntu
— умеренный расход оперативной памяти и т.д.

По всем этим параметрам подходил RTorrent. Поскольку я не очень большой любитель компилировать софт из исходников и не до конца избавился от microsoft-зависимости, выбрал самый простой путь — ставить из репозитория.
Нагуглил несколько сносных инструкций для установки. Инструкция №1, инструкция №2.

Если рассматривать весь процесс по шагам то выходит следующее:
Шаг 1. — установка

Ставим необходимые пакеты.

sudo apt-get install rtorrent screen apache2 php5-cgi php5-common php5-sqlite php5-xmlrpc sqlite unzip php5-curl

В случае использования только консольной версии без веб интерфейса необходимо установить только пакеты rtorrent, screen и все затребованные зависимостями пакеты.

Шаг 2. — конфигурация Rtorrent
В домашней директории пользователя необходимо создать файл конфигурации с названием .rtorrent.rc и определить там все необходимые параметры.
Мой файл конфигурации выглядит так:
(Все тонкости будуь описаны позже)

# This is an example resource file for rTorrent. Copy to
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.

# Maximum and minimum number of peers to connect to per torrent.
min_peers = 1
max_peers = 1000

# Same as above but for seeding completed torrents (-1 = same as downloading)
min_peers_seed = 1
max_peers_seed = 100

# Maximum number of simultanious uploads per torrent.
#max_uploads = 15

# Global upload and download rate in KiB. «0» for unlimited.
download_rate = 800
upload_rate = 500

# Default directory to save the downloaded torrents.
directory = /media/raid/download/all/

# Default session directory. Make sure you don’t run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = /media/raid/rtorrent/

# Watch a directory for new to rrents, and stop those that have been
# deleted.
schedule=watch_directory_1,5,10,»load_start=/media/raid/download/links/all/*.torrent,d.set_directory=/media/raid/download/all/,d.set_custom1=/media/raid/soft/»
schedule=watch_directory_2,5,10,»load_start=/media/raid/download/links/soft/*.torrent,d.set_directory=/media/raid/download/soft/,d.set_custom1=/media/raid/soft/»

on_finished = move_complete,»execute=mv,-u,$d.get_base_path=,$d.get_custom1= ;d.set_directory=$d.get_custom1=»

#schedule =watch_directory,5,5,load_start=/media/raid/download/links/*.torrent

schedule = untied_directory,5,5,stop_untied=

# Close torrents when diskspace is low.
schedule = low_diskspace,5,60,close_low_diskspace=1000M

# Stop torrents when reaching upload ratio in percent,
# when also reaching total upload in bytes, or when
# reaching final upload ratio in percent.

# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
#schedule = ratio,60,60,»stop_on_ratio=200,200M,2000″

# The ip address reported to the tracker.
#ip = 127.0.0.1
#ip = rakshasa.no

# The ip address the listening socket and outgoing connections is
# bound to.
#bind = 127.0.0.1
#bind = rakshasa.no

# Port range to use for listening.
port_range = 6890-6900

# Start opening ports at a random position within the port range.
port_random = yes

# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
check_hash = yes

# Set whetever the client should try to connect to UDP trackers.
use_udp_trackers = yes

# Alternative calls to bind and ip that should handle dynamic ip’s.
#schedule = ip_tick,0,1800,ip=rakshasa
#schedule = bind_tick,0,1800,bind=rakshasa

# Encryption options, set to none (default) or any combination of the following:
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plaintext to RC4 encryption after the encrypted handshake
#
encryption = allow_incoming,try_outgoing,enable_retry

# Enable DHT support for trackerless torrents or when all trackers are down.
# May be set to «disable» (completely disable DHT), «off» (do not start DHT),
# «auto» (start and stop DHT as needed), or «on» (start DHT immediately).
# The default is «off». For DHT to work, a session directory must be defined.
#
dht = auto

# UDP port to use for DHT.
#
dht_port = 6901

# Enable peer exchange (for torrents not marked private)
#
peer_exchange = yes

#
# Do not modify the following parameters unless you know what you’re doing.
#

# Hash read-ahead controls how many MB to request the kernel to read
# ahead. If the value is too low the disk may not be fully utilized,
# while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
#hash_read_ahead = 10

# Interval between attempts to check the hash, in milliseconds.
#hash_interval = 100

# Number of attempts to check the hash while using the mincore status,
# before forcing. Overworked systems might need lower values to get a
# decent hash checking rate.
#hash_max_tries = 10
scgi_port = localhost:5000
safe_sync = yes

Шаг 3. — конфигурация screen
Для непрерывной работы Rtorrenta нам потребуется использовать консольный оконный менеджер — SCREEN

Для загрузки rtorrenta при старте системы я использовал скрипт с сайта разработчика.
Мне пришлось его немного подправить(правил ключи для запуска screen), в моём варианте скрипт выглядит так:

#!/bin/sh
#############
######
#############
# This script depends on screen.
# For the stop function to work, you must set an
# explicit session directory using ABSOLUTE paths (no, ~ is not absolute) in your rtorrent.rc.
# If you typically just start rtorrent with just «rtorrent» on the
# command line, all you need to change is the «user» option.
# Attach to the screen session as your user with
# «screen -dr rtorrent». Change «rtorrent» with srnname option.
# Licensed under the GPLv2 by lostnihilist: lostnihilist _at_ gmail _dot_ com
##############
######
##############

#######################
##Start Configuration##
#######################
# You can specify your configuration in a different file
# (so that it is saved with upgrades, saved in your home directory,
# or whateve reason you want to)
# by commenting out/deleting the configuration lines and placing them
# in a text file (say /home/user/.rtorrent.init.conf) exactly as you would
# have written them here (you can leave the comments if you desire
# and then uncommenting the following line correcting the path/filename
# for the one you used. note the space after the «.».
# . /etc/rtorrent.init.conf

#Do not put a space on either side of the equal signs e.g.
# user = user
# will not work
# system user to run as
user=»vini»

# the system group to run as, not implemented, see d_start for beginning implementation
# group=`id -ng «$user»`

# the full path to the filename where you store your rtorrent configuration
config=»`su -c ‘echo $HOME’ $user`/.rtorrent.rc»

# set of options to run with
options=»»

# default directory for screen, needs to be an absolute path
base=»`su -c ‘echo $HOME’ $user`»

# name of screen session
srnname=»rtorrent»

# file to log to (makes for easier debugging if something goes wrong)
logfile=»/var/log/rtorrentInit.log»
#######################
###END CONFIGURATION###
#######################
PATH=/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin
DESC=»rtorrent»
NAME=rtorrent
DAEMON=$NAME
SCRIPTNAME=/etc/init.d/$NAME

checkcnfg() {
exists=0
for i in `echo «$PATH» | tr ‘:’ ‘\n’` ; do
if [ -f $i/$NAME ] ; then
exists=1
break
fi
done
if [ $exists -eq 0 ] ; then
echo «cannot find rtorrent binary in PATH $PATH» | tee -a «$logfile» >&2
exit 3
fi
if ! [ -r «${config}» ] ; then
echo «cannot find readable config ${config}. check that it is there and permissions are appropriat$
exit 3
fi
session=`getsession «$config»`
if ! [ -d «${session}» ] ; then
echo «cannot find readable session directory ${session} from config ${config}. check permissions» $
exit 3
fi
}

d_start() {
[ -d «${base}» ] && cd «${base}»
stty stop undef && stty start undef
su -c «screen -ls | grep -sq «\.${srnname}[[:space:]]» » ${user} || su -c «screen -dmUSfa ${srnname} 2>&$
# this works for the screen command, but starting rtorrent below adopts screen session gid
# even if it is not the screen session we started (e.g. running under an undesirable gid
#su -c «screen -ls | grep -sq «\.${srnname}[[:space:]]» » ${user} || su -c «sg \»$group\» -c \»screen -f$
su -c «screen -S «${srnname}» -X screen rtorrent ${options} 2>&1 1>/dev/null» ${user} | tee -a «$logfile$
}

d_stop() {
session=`getsession «$config»`
if ! [ -s ${session}/rtorrent.lock ] ; then
return
fi
pid=`cat ${session}/rtorrent.lock | awk -F: ‘{print($2)}’ | sed «s/[^0-9]//g»`
if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn’t belong to another process
kill -s INT ${pid}
fi
}

getsession() {
session=`cat «$1» | grep «^[[:space:]]*session[[:space:]]*=» | sed «s/^[[:space:]]*session[[:space:]]*$
echo $session
}

checkcnfg

case «$1» in
start)
echo -n «Starting $DESC: $NAME»
d_start
echo «.»
;;
stop)
echo -n «Stopping $DESC: $NAME»
d_stop
echo «.»
;;
restart|force-reload)
echo -n «Restarting $DESC: $NAME»
d_stop
sleep 1
d_start
echo «.»
;;
*)
echo «Usage: $SCRIPTNAME {start|stop|restart|force-reload}» >&2
exit 1
;;
esac

exit 0

Следующие 2 шага будут дописаны позже!

Шаг 4. — прикручивание веб интерфейса

Шаг 5. — оживление rtorrent после падения по CRON