2009-09-03

rTorrent побеждён?

Долго мучался с rtorrent.

Красивая (но несколько неудобная) вебмордочка ruTorrent (нагло взятая из uTorrent),
замучала своим 32-битным лимитом - отрицательными размерами файлов и прогнозами - и другими радостями.

Перспектива перехода на amd64 меня пока не устраивает. Хотя видимо когда-то придётся..
Но дело не в этом. Все проблемы с числами - от xmlrpc-c (libxmlrpc-c3).

Во все дистрибутивы упорно пихают клоны 1.06 (libxmlrpc-c3_1.06.21-1_i386.deb).
А поддержка 64-битных целых появилась только в 1.07.
Типы данных I8 вместо I4 - а rtorrent при сборке проверяет наличие макроса HAVE_I8 - и собирается или нет с его поддержкой.

Самостоятельно собрать эту библиотеку из их cvs не получалось. Уж и не помню почему.

Но вот тут недавно наткнулся на готовые пакеты в дебиане - и они поставились без проблем.
Были сборки для версии 1.16.07-1 (библиотека + dev).

Поставилось-обновилось всё на Ubuntu 8.04 без проблем :)
Осталось собрать apt-get -b source libtorrent rtorrent
Но не тут то было. Хоть и собирались (даже из jj 9.04) но глючили не по детски.
Штатная из 8.04 кривые названия файлов рисовала в консольном интерфейсе.
Та что из 9.04 не выходила по ctrl-q, высыпалась в segfault и имела проблемы с подключениями и анонсами с трекерами.

Те же проблемы и с deb взятыми из дебиана + ещё зависимости
от новых libc которые я удовлетворять не собирался.

Радикальное решение - сносим нафиг и пересобираем всё руками (заодно и ipv6 прикрутим).

# сносим
sudo apt-get remove rtorrent libtorrent libtorrent-dev
# получаем последнюю версию rторрента
svn co svn://rakshasa.no/libtorrent/trunk rtorrent
# собираем библиотеку
cd rtorrent/libtorrent
./autogen.sh
./configure --prefix=/usr --enable-ipv6
make
sudo make install
# собираем бинарник
cd ../rtorrent
./autogen.sh
./configure --prefix=/usr --enable-xmlrpc-c --enable-ipv6
make
sudo make install

Вот в общем то и всё.

Дальше лезем и "чистим" rtorrent-based сидбокс (bridge)
Естественно сносим libtorrent, rtorrent
Обновляем libxmlrpc-c3.
Возвращаемся в консольку yakuake где собирали rtorrent и засылаем плоды труда на сидбокс:
rsync -avze ssh /usr/lib/libtorrent* root@bridge:/usr/lib/
rsync -avze ssh /usr/bin/rtorrent root@bridge:/usr/bin/


Запускаем rtorrent на сидбоксе.
Радуемся отданным десяткам гигабайт видимых через веб.
Радуемся русским именам в консольном интерфейсе.
Радуемся работающим трекерам и ctrl-q.
Думаем как теперь проверить работоспособность ipv6 :)
И как теперь дыры искать..

PS:

Проблема ctrl-q оказывается давно описана.
Надо перед всплытием screen -r дать команду stty stop undef
Тогда всё работает. А трекеры вроде нормально живут..

PPS:

Для 10.04 всё те же проблемы с rtorrent и xmlrpc-c..

2009-09-02

ipv6 туннели

Настроил - потом забыл как. Пол часа на ветер вспоминая.
Для того и нужны блоги - чтобы таких ошибок не повторять.

Итак. Как пробить ipv6 туннель на свои компы.
Имеем - две убунты 8.04, разделённые ipv4 сеткой провайдера. Напрямую пингуются.
И есть openvpn туннель между ними. Чтобы не нервировать провайдера :)
Вот через openvpn будем пробрасывать ipv6.
Прямую поддержку openvpn вроде пока не даёт - но это пока не сильно напрягает.

Небольшой рисунок что есть:
NET -- mine -- zyxel == [CTC] == dlink -- bridge
-- ethernet 100/MB
== adsl ~1/MB
[CTC] - интернет провайдер
mine <-> bridge соединены openvpn туннелем.


Хотим чтобы NET была представлена в "глобальной" ipv6 сети - но через bridge.

роутер zyxel - adsl модем.
внутренний адрес 192.168.19.1 - отправляет всё на main.
внешний адрес динамический A.B.0.0/17 + dyndns

сервер mine - интернет сервер локалки предприятия.
eth0 ipv4=192.168.16.16 - смотрит в локалку
eth1 ipv4=192.168.19.2 - внешняя сетка - подключена к модему
tun0 ipv4=10.8.0.1 - openvpn сервер.

хост-роутер bridge.
eth0 ipv4=192.168.1.33 - смотрит в домашнюю сетку
tun0 ipv4=10.8.0.6 - openvpn туннуль на main

роутер dlink - adsl модем+роутер.
внутренний адрес 192.168.1.1 - отправляет всё на bridge
внешний адрес динамический A.B.0.0/17 - привязан через dyndns

Не забываем на всех задействованных серверах поднимать модуль:
modprobe ipv6

Поднимаем туннель в ipv6 на bridge.
Начальная часть сделана по аналогии с этим примером.

Регистрируемся на freenet6.net - ставим пакет
apt-get install tspc
Редактируем /etc/tsp/tspc.conf
Вводим пароль и адрес из письма при регистрации
Сервер "из письма" не заработал - потому сразу выбираем сервер amsterdam.
userid=XXX
passwd=YYY
server=amsterdam.freenet6.net
# нужна подсеть - раскомментируем строки:
host_type=router
if_prefix=eth0
prefixlen=64

Остальное оставляем без изменений.

/etc/init.d/tspc stop
/etc/init.d/tspc start

Заметил, что restart в tspc сделан криво и не всегда срабатывает.

Проверяем наличие строчки:
inet6 addr: 2001:X:Y:Z::1/64 Диапазон:Общий
ifconfig eth0 | grep ipv6
Значит всё здорово. Если не здорово - смотрим логи tspc, tcpdump.
Запоминаем адрес подсетки что нам дали. 2001:X:Y:Z - будут браться отсюда.
Это наша внешняя подсетка. Может быть на всю жизнь :)

Опыт показывает что tspc достаточно не надёжный туннель. Из-за того что adsl соединение рвётся -
туннель обрывается и не восстанавливается. Что крайне плохо. Для экспериментов сойдёт. Но..
Вариант - регистрируемся на Hurricane Electric
Желательно наличие статического белого ipv4 адреса - но редко меняющийся динамический белый
сойдёт. Можно сделать 4 туннеля в одном аккаунте - даже /48 :)
После того как туннель выделили - можно получить команды для запуска туннеля - прямо на сайте.

Итак. bridge у нас теперь находится в ipv6 сети и даже может роутить /64 подсетку.

Проверяем:
ping6 -n ipv6.google.com
Внешние ipv6 хосты видим - и они нас видят. Пляшем дикие танцы :)

Поднимаем туннель в локалку на mine:
ip tunnel add sit1 ttl 4 mode sit remote 10.8.0.1 local 10.8.0.6
Не забываем запустить интерфейс туннеля:
ifconfig sit1 up
или:
ip link set dev sit1 up
Добавляем роутинг:
ip -6 route add 2001:X:Y:Z::/64 dev sit1

tspc автоматически разрешает форвардинг ipv6 - для других способов не забываем его разрешить:
sysctl net.ipv6.conf.all.forwarding=1
(и добавляем строчку в /etc/sysctl.conf)

С bridge закончили.
Переходим к mine.

Добавляем придуманный статический ipv6 адрес:
ifconfig eth0 add 2001:X:Y:Z:1::16
или:
ip -6 addr add 2001:X:Y:Z:1::16 dev eth0

Так. Теперь поднимаем туннель на bridge:
ip tunnel add sit1 ttl 4 mode sit remote 10.8.0.6 local 10.8.0.1
ifconfig sit1 up
ip -6 route add ::/0 dev sit1
sysctl net.ipv6.conf.all.forwarding=1


Проверяем:
ping6 -c4 2001:X:Y:Z::1
ping6 -c4 -n ipv6.google.com


Поднимаем интерфейс на какой-то другой машине сети:
ifconfig eth0 add 2001:X:Y:Z:1::22/80
ip -6 route add default via 2001:X:Y:Z:1::16
ping6 -n ipv6.google.com

Проверяем с bridge:
ping6 -n 2001:X:Y:Z:1::16
ping6 -n 2001:X:Y:Z:1::22

Можно проверить из какого-нибудь бесплатного ipv6 сетевого сервиса доступность своих хостов :)

Осталось настроить DHCPv6 - мы же не хотим терять контроль над сетью -
и значит самоуправства ipv6 мы не позволим? Но и вручную хосты настраивать это уже фанатизм.
Настроить rDNS - в tspc не понятно как, а Hurricane Electric даёт возможность это сделать.
Настроить DNS - ну это уже проще при наличии DHCPv6.
Ну и новые настройки iptables6

У нас есть ipv6-готовая сетка. Осталось дождаться когда провайдер сподобится раздавать ipv6 адреса. 2-3 года осталось ждать - все там будем. Но тестировать и жить можно уже сейчас :)

Чтобы не забыть - сразу добавим настройки в /etc/network/interface
(старые настройки для ipv4 не трогаем - ipv6 им не мешают)

auto eth0
# ipv4 настройки локального адреса:
iface eth0 inet static
address 192.168.16.16
netmask 255.255.255.0
network 192.168.16.0
broadcast 192.168.16.255

iface eth0 inet6 static
pre-up modprobe ipv6
address 2001:X:Y:Z:1::16
netmask 80
gateway 2001:X:Y:Z::1

# "Внешний" интерфейс до модема:
auto eth1
iface eth1 inet static
address 192.168.19.2
netmask 255.255.255.0
network 192.168.19.0
broadcast 192.168.19.255
gateway 192.168.19.1

Осталось придумать как туннели сюда вписать..

2009-09-01

X.org + ViewSonic va902 = 800x600

Сегодня у коллеги слетели настройки монитора.
Ещё вчера всё было замечательно, а сегодня с утра низкое разрешение 800х600 вместо 1280х1024 и хоть убейся - графические настройки не позволяют выбрать больше.

Влез в /var/log/X.org.log
Увидел строчки:

(II) NV(0): Not using default mode "1024x768" (hsync out of range)
Это есть как то странно.

В настройках /etc/X11/xorg.conf всё просто:

Section "Monitor"
Identifier "VA902"
Option "DPMS"
EndSection

Чешем репу и делаем по-старинке: Убираеем DPMS.
Гуглим строчку: ViewSonic VA902 HorizSync VertRefresh
Находим - и пишем как в гугле:

Section "Monitor"
VendorName "ViewSonic"
Identifier "VA902"
HorizSync 30.0 - 82.0
VertRefresh 50.0 - 85.0
DisplaySize 360 290
# Option "DPMS"
EndSection

В общем то и всё. Ctrl-Alt-BackSpace
Получаем 1280х1024.

Удивляемся чудесам и пока работаем.