2010-04-27

Launchpad

М-да. Несколько дней до релиза 10.04. Точнее всего два.
Фриз и релиз кандидат в действии. А грабли всё те же.
Когда-то пытался скачать серверную 8.04 через JIGSAW.

Да, вроде всё нормально качалось. Да, куча всего не обнаружилось в моей локальной репке. Но на то и APT-PROXY аналог у меня построен на perl+apache..
Лучше его переписать на fcgi+nginx или вообще сделать планировщик закачек :)

Но да разговор не о нём. Когда качал, выяснилось - что некоторых файлов нет не только в моей репке - но и на официальной репке arcihve.ubuntu.com. Что-то гугль послал качать на раритетные зеркала (файлы эти в репках были - но потом пропали) - так что и на зеркалах их не нашлось. Однако нашлось что все обновления и хоть когда-то сверкнувшие версии с патчами и т.п. - хранятся на лаунчпаде..

Но на него не всегда приводит гугль и даже сам лаунчпад в поиске иногда лажается и не находит что надо. Но всё чётко можно найти формируя URL "на лету".
Нужны тогда были пару файлов - что я успешно скачал и успокоился.
Обматерив про себя столь недолговечное хранение файлов в зеркалах..

Оказалось те же грабли у свежего релиз-кандидата люси..
Скачал как обычно образ сидюка с alternatives - перекинул папку pool в свою репку - разложил network-install куда положено в tftp.. Ан-нет.
Вот захотел установщик скачать lsb-release-udeb_5.0.0ubuntu19_all.udeb
А нету его ни на дисках - ни в archives.ubuntu.com.
И так пару десятков файлов. Подумал что что-то не так - перекачал initram.gz с сервера - он оказался чуток по-свежее чем был на диске и размером другим..

Только файлы некоторые всё равно не находит. Так и пришлось каждый руками искать и докачивать в репку.. Автоматом тяжко будет эту процедуру делать.. Наверное :)

Ээх. Опенсурс-опенсурс..

2010-02-16

Французская война

Публикую тут свой пост на внутреннем форуме домолинка. Подумать..

17-Дек-2009 21:14

Ну если ребёнок в сша начитанный (или посмотрел фильм Бесславные Ублюдки), то он должен знать про всемирную историю главное
Например про то, что в прошлом веке, сша участвовали в достаточно примечательной (не понятно почему про неё столько фильмов наснимали) Французской войне.

Франция - это страна такая где-то в европе.

Отличается тем, что в ней есть ровно один город - Париж, в котором стоит железная башня как в Лас-Вегасе.
Ну а также там есть неплохое вино и относительно доступные женщины. Но речь не об этом.

Соседней страной Германией руководил всё время до французской войны диктатор Гитлер.
Который люто ненавидел всех евреев. Все евреи из Германии, которых Гитлер не успел убить (и съесть) сбежали в США. И тогда решил этот Гитлер напасть на соседнюю Францию, чтобы там евреев поубивать.
Что он в общем то и сделал.

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

Эта кучка евреев, совершив немало подвигов, в итоге таки добралась до Гитлера и геройски убила его.

А потом (как говорится в куче других фильмов), американские войска высадились во франции (на лодках - под шквальным немецким огнём с берега) и освободили её,
хоть и потеряли очень многих бесстрашных своих воинов - но зато принеся свой уникальный опыт подлинной демократии в отсталую европу

Вот так и закончилась французская война - на радость всем евреям мира

А ещё было ещё много войн против тёмных сил - японская против япи, корейская и вьетнамская (разве это не одна страна??) против комми - которую остановил Джон Леннон и хиппи - повезло тогда комми - а то бы их ещё тогда бы победили..

2009-12-16

XSLT - напоминалка

Пока не забыл - и потом не искал снова ответы.

Название текущего узла - name()
Например так:
<xsl:for-each select="tags">
<span id="{name()}>
<xsl:value-of select="."/>
</span>
</xsl:for-each>


Часто используемые таблицы пихаем в переменные (ускоряет работу):

<xsl:variable name="doctypes" select="/doc/types" />

А потом обращаемся по мере необходимости:
<span title="{ $doctypes/dtype[@id=current()/@dtype]/@descr }">
<xsl:apply-templates select="." mode="single"/>
<b><xsl:value-of select="@dtype"/></b>
</span>


Даже ещё лучше - есть же key() - во как:
<xsl:key name="dtypes" match="/doc/types" use="@id" />
<span title="{ key('dtypes',@dtype)/@descr }">
<xsl:apply-templates select="." mode="single"/>
<b><xsl:value-of select="@dtype"/></b>
</span>


Кстати, именно так обращаемся к текущему выбранному узлу: current()/ (а не ./) при выборке из "чужой" таблицы..
Чтобы не было конструкций вида:
<xsl:variable name="id" value="@id" />
<xsl:value-of select="//help[@id=$id]" />

Хватит такого:
<xsl:value-of select="//help[@id=current()/@id]" />


И ещё. Раньше были трудности :)
value-of выбирает только текст. Чтобы выбрать все внутренности (со всеми дочерними нодами) - надо делать copy-of.

2009-12-01

Опять rtorrent

решение то было простое :)
Кривая кодировка и кракозяблы при запуске rtorrent из стартап-скрипта решаются добавлением переменной языка при запуске:

env HOME=/home/rtorrent LC_ALL=ru_RU.UTF-8 /usr/bin/screen -dmS rt /usr/bin/sudo -u rtorrent /usr/bin/rtorrent

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.

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