26 янв. 2010 г.

CP1251 -> UTF8

Вот тут лежит очень скриптик, порой очень полезный. Я бы и сам мог его написать, если бы понадобилось часто пользоваться iconv'ом...но раз уж есть готовое решение, да еще и удобно "упакованное", то правильнее будет не плодить энтропию, а сказать "Пасиба" автору и пользовать. Собственно, сам скрипт:

#!/bin/sh
mv "$1" "$1.bak" \
&& iconv -f windows-1251 -t utf-8 "$1.bak" > "$1" \
&& (echo "Done:"; ls -la "$1"*)

24 янв. 2010 г.

IPv6 Era. The Beginning (на примере debian sid)


А вот захотелось мне поработать с ipv6, дабы понять, что это за зверь, и какое нас с этим зверем может ждать будущее. Провайдер мой такое счастие сам не дает, поэтому будем пользоваться услугами сторонних ресурсов, а именно GoGoNet. О том, что представляет из себя шестая версия IP протокола, также известная как  IP Next Generation (IPng), распространяться не буду, ибо, во-первых, сам еще слабо прощупал эту тему, а во-вторых, материала для "прощупывания" в Сети немало. Начать можно с Википедии, и дальше по ссылкам.
Заиметь IPv6 адрес сегодня можно, по сути, четырьмя способами:
1) прямым, то есть получив адрес от провайдера;
2) 6to4, интересен при наличии IPv4 статики;
3) туннельным, то есть с помощью так называемых "туннельных брокеров";
4) teredo, протокол, инкапсулирующий ipv6трафик в UDP-датаграммы ipv4.
Краткое описание указанных способо, а также перечисление основых плюсов-минусов использования того или иного из них можно поглядеть здесь.
В данной заметке речь пойдет о туннельном брокере gogonet. Чтобы получить доступ к его сервисам, следует зарегиться. Так как это социальная сеть, то при регистрации спрашивается куча всякой хрени ;). Внутри этой соцсети есть сервис Freenet6, который и предоставляет доступ к ipv6-вселенной. С ним можно работать и анонимно, и авторизованно. Разница вся в том, что при анонимном подключении ipv6 вашего туннеля будет новым при каждом подключении. А, согласитесь, динамический ipv6 - это даже не смешно. Фичей "авторизованного" туннеля является выдача в перманентное пользование одного и того же адреса. Итак, регаемся во Freenet6 - тут. После успешной регистрации на мыло свалится письмо, где будут указаны userid/password, которые были вбиты при sign up процедуре. Они нам еще пригодятся ;)
Далее. Отсюда грузим доку по конфигурации клиента и сам клиент. В доке много полезного, так что она обязательна к прочтению, или хотя бы к пролистыванию. Почему то сорцы клиента отдаются в виде файла gw6c-6_0-RELEASE-src.exe, однако на самом деле это обычный .tgz, так что
mv gw6c-6_0-RELEASE-src.exe gw6c-6_0-RELEASE-src.tgz
tar -xvf gw6c-6_0-RELEASE-src.tgz
cd gw6c-6_0_1/
В файле INSTALL имеются необходимые указания к сборке. Если кратко, то нужно иметь dev-версии некоторых пакетов (у меня, к примеру, потребовалось доустановить лишь libssl-dev), а собирать/устанавливать такой командой:
make ostype=linux installdir=/usr/local/bin/gw6/ install
Так как configure-скрипт недоступен, то понять, что не хватает каких-либо исходников, можно по  ошибке компиляции и ругани вроде

bufaux.c:54:24: error: openssl/bn.h: Нет такого файла или каталога
А где его взять? Все просто:
wajig find-file bn.h
libssl-dev: /usr/include/openssl/bn.h
wajig install libssl-dev
Итак, софтина скомпилировалась и установилась. Если использовать анонимное соединение, то уже можно запускать /usr/local/gw6/bin/gw6c. Она сама распочухает, как вы получаете инет, и поднимет sit или tun интерфейс в зависимости от типа соединения.
А мы же пойдем настраивать /usr/local/gw6/bin/gw6c.conf
Вырез
72;в все лишнее, настройки вышли такие:
userid=delayer
passwd=ss21113a
server=amsterdam.freenet6.net
auth_method=any
host_type=host
prefixlen=64
if_prefix=
dns_server=
gw6_dir=/usr/local/gw6
auto_retry_connect=yes
retry_delay=30
retry_delay_max=300
keepalive=yes
keepalive_interval=30
tunnel_mode=v6anyv4
if_tunnel_v6v4=sit1
if_tunnel_v6udpv4=tun0
if_tunnel_v4v6=sit0
client_v4=auto
client_v6=auto
template=linux
proxy_client=no
broker_list=tsp-broker-list.txt
last_server=tsp-last-server.txt
always_use_same_server=no
log_file=0
log_filename=/var/log/gw6.log
log_rotation=yes
log_rotation_size=32
log_rotation_delete=no

Вообще, конфигурационный файл неплохо комментирован, да и в доке каждый параметр детально описан, так что проблем с конфигурацией возникнуть не должно. Пара комментариев:
Директива server выставленая согласно этой ссылке. Если выставить, согласно документации, authenticated.freenet6.net, то клиент отыщет наиболее оптимальный сервер из имеющегося пула, запишет его в tsp-last-server.txt, и будет ходить за ним при каждом запуске туда. Так что можно облегчить ему жизнь.
Опция dns_server, если я правильно понял, позволяет указать адрес сервера, который обеспечивает для данного адреса reverse DNS. Это интересно, когда есть свой домен, и имеется возможность рулить IPv6-записями dns-сервера.
Ну и log_file лучше для первого запуска вывести в 3, дабы видеть, что происходит, и получать информацию для анализа в случае проблем.
Итак, первый запуск:

Built on ///Linux inspire 2.6.31-1-686 #1 SMP Sun Nov 15 20:39:33 UTC 2009 i686 GNU/Linux///.Received a TSP redirection message from Gateway6 authenticated.freenet6.net (1200 Redirection) The Gateway6 redirection list is [ taipei.freenet6.net, sydney.freenet6.net, amsterdam.freenet6.net, montreal.freenet6.net ]. The optimized Gateway6 redirection list is [ amsterdam.freenet6.net, montreal.freenet6.net, sydney.freenet6.net, taipei.freenet6.net ]. amsterdam.freenet6.net is an unknown host, do you want to add its key?? (Y/N) y
Согласившись, мы получаем публичный ключ удаленного сервера и устанавливаем с ним соединение:
Перезапустив для верности клиента, смотрим лог:
cat /var/log/gw6.log | grep IPv6
2010/01/24 19:37:24 I gw6c: Checking for Linux IPv6 support...
2010/01/24 19:37:24 I gw6c: IPv6 support found.
2010/01/24 19:37:24 I gw6c: Your IPv6 address is 2001:05c0:1400:000b:0000:0000:0000:5d07.
Соединение установлено, адрес получен, ifconfig tun0 радует своим выводом:
root@inspire:~/download# ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet6 addr: 2001:5c0:1400:b::5d07/128 Scope:Global
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1280  Metric:1
          RX packets:613 errors:0 dropped:0 overruns:0 frame:0
          TX packets:602 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:547393 (534.5 KiB)  TX bytes:61258 (59.8 KiB)
Осталось лишь проверить работоспособность:

ping6 ipv6.google.com
PING ipv6.google.com(2a00:1450:8001::63) 56 data bytes
64 bytes from 2a00:1450:8001::63: icmp_seq=1 ttl=55 time=91.9 ms
Если зайти на сайт KAME, то мы увидим танцующую черепашку (работает в iceweasel, chrome, konqueror), что говорит об ipv6-соединении ;)
Для автоматизации запуска добавим в /etc/rc.local до строчки exit 0


if [ -x /usr/local/gw6/bin/gw6c ]; then
        cd /usr/local/gw6/bin/
        ./gw6c
fi