суббота, 27 февраля 2010 г.

web-server fnord

Оффсайт: fnord - yet another small httpd

Краткая и содержательная статья в тему:
Lightweight fnord serves HTTP admirably

Как пишет автор,
I was looking for a lightweight Web server to run on my ARM-based Linksys NSLU2 network storage device in order to share a few custom packages I've built for Debian and Arch Linux among the systems on my home network. After playing around with Apache, LightTPD, and thttpd, I tried fnord and never looked back.

Прекрасно, я тоже пробовал все перечисленные веб-сервера и могу подтвердить, что в своем классе fnord - лучший.

Upd. Ненароком увидел - Michael Shigorin в комментариях к вышеназванной статье предлагает nginx. Впрочем, я не удивлен - еще в debian-russian заметил за ним (как и за подавляющим большинством современников) склонность к неоправданному усложнению. Видимо, это психологическая проблема - человек выбирает сложное решение, подсознательно ожидая, что оно само решит за него все проблемы, и даже те, которые он сам не может сформулировать. Разумеется, это совсем не так.

вторник, 23 февраля 2010 г.

Tcl VFS integration for Sqlite3

Сегодня ночью с 3-х до 7-ми часов была придумана, написана, протестирована и документирована вот такая вещь: Tcl VFS integration for Sqlite3

Лично я участвовал только в четных из указанных пунктов, считая с нуля :-) но подтверждаю - под дебианом оно замечательно работает, в том числе позволяет аттачить базы. Спасибо Антону, вещь ценная.

Ограничение доступа по SSL сертификатам

Тикль: пакет tcl-tls. См. в tls.htm следующее: tls::status - инфа о сертификате, секция CALLBACK OPTIONS - как повесить обработчик, который получит в том числе её (подкоманда verify).

Сервер: stunnel4, ucspi-ssl, ipsvd.

Пример использования ucspi-ssl:
openssl dhparam -out dh1024.pem 1024 

# drop password from exported server PEM sertificate with key
openssl rsa -in 127.0.0.1-cert.pem -out 127.0.0.1-cert.pem.plain
# start server
CAFILE=MBG_CA-cacert.pem CCAFILE=MBG_CA-cacert.pem CERTFILE=127.0.0.1-cert.pem \
KEYFILE=127.0.0.1-cert.pem.plain DHFILE=dh1024.pem \
sslserver -RHl0 -is 0 9999 /usr/sbin/fnord-idx .

# drop password from exported client PEM sertificate with key
openssl rsa -in client01-cert.pem -out client01-cert.pem.plain
# start client
https@ 127.0.0.1 / 9999 -c client01-cert.pem -k client01-cert.pem.plain -a MBG_CA-cacert.pem

export CAFILE="MBG_CA-cacert.pem"
export CCAFILE="MBG_CA-cacert.pem"
export CERTFILE="127.0.0.1-cert.pem"
export SSLLOCALHOST="0"
export SSLLOCALIP="127.0.0.1"
export SSLLOCALPORT="9999"
export SSLREMOTEIP="127.0.0.1"
export SSLREMOTEPORT="36681"
export SSL_CIPHER="DHE-RSA-AES256-SHA"
export SSL_CIPHER_ALGKEYSIZE="256"
export SSL_CIPHER_EXPORT="false"
export SSL_CIPHER_USEKEYSIZE="256"
export SSL_CLIENT_A_KEY="rsaEncryption"
export SSL_CLIENT_A_SIG="sha1WithRSAEncryption"
export SSL_CLIENT_CERT="-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
"
...
-----END CERTIFICATE-----
"
export SSL_CLIENT_I_DN="/C=RU/ST=Nizhny Novgorod Region/L=Nizhny Novgorod/O=Mobile Business Group/OU=Software Development/CN=MBG/emailAddress=support@mobigroup.ru"
export SSL_CLIENT_I_DN_C="RU"
export SSL_CLIENT_I_DN_CN="MBG"
export SSL_CLIENT_I_DN_Email="support@mobigroup.ru"
export SSL_CLIENT_I_DN_L="Nizhny Novgorod"
export SSL_CLIENT_I_DN_O="Mobile Business Group"
export SSL_CLIENT_I_DN_OU="Software Development"
export SSL_CLIENT_I_DN_ST="Nizhny Novgorod Region"
export SSL_CLIENT_M_SERIAL="2"
export SSL_CLIENT_M_VERSION="3"
export SSL_CLIENT_S_DN="/C=RU/ST=Nizhny Novgorod Region/L=Nizhny Novgorod/O=Mobile Business Group/OU=Software Development/CN=client01"
export SSL_CLIENT_S_DN_C="RU"
export SSL_CLIENT_S_DN_CN="client01"
export SSL_CLIENT_S_DN_L="Nizhny Novgorod"
export SSL_CLIENT_S_DN_O="Mobile Business Group"
export SSL_CLIENT_S_DN_OU="Software Development"
export SSL_CLIENT_S_DN_ST="Nizhny Novgorod Region"
export SSL_CLIENT_V_END="Nov 19 17:18:47 2012 GMT"
export SSL_CLIENT_V_START="Feb 23 17:18:47 2010 GMT"
export SSL_PROTOCOL="TLSv1"
export SSL_SERVER_A_KEY="rsaEncryption"
export SSL_SERVER_A_SIG="sha1WithRSAEncryption"
export SSL_SERVER_CERT="-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
"
export SSL_SERVER_I_DN="/C=RU/ST=Nizhny Novgorod Region/L=Nizhny Novgorod/O=Mobile Business Group/OU=Software Development/CN=MBG/emailAddress=support@mobigroup.ru"
export SSL_SERVER_I_DN_C="RU"
export SSL_SERVER_I_DN_CN="MBG"
export SSL_SERVER_I_DN_Email="support@mobigroup.ru"
export SSL_SERVER_I_DN_L="Nizhny Novgorod"
export SSL_SERVER_I_DN_O="Mobile Business Group"
export SSL_SERVER_I_DN_OU="Software Development"
export SSL_SERVER_I_DN_ST="Nizhny Novgorod Region"
export SSL_SERVER_M_SERIAL="5"
export SSL_SERVER_M_VERSION="3"
export SSL_SERVER_S_DN="/C=RU/ST=Nizhny Novgorod Region/L=Nizhny Novgorod/O=Mobile Business Group/OU=Software Development/CN=127.0.0.1"
export SSL_SERVER_S_DN_C="RU"
export SSL_SERVER_S_DN_CN="127.0.0.1"
export SSL_SERVER_S_DN_L="Nizhny Novgorod"
export SSL_SERVER_S_DN_O="Mobile Business Group"
export SSL_SERVER_S_DN_OU="Software Development"
export SSL_SERVER_S_DN_ST="Nizhny Novgorod Region"
export SSL_SERVER_V_END="Nov 19 19:43:16 2012 GMT"
export SSL_SERVER_V_START="Feb 23 19:43:16 2010 GMT"
export SSL_SESSION_ID="f04e24260747ff1784c054e4465de6b3c9ca75b6b9e2c37acfec937aad0d5350"
export SSL_VERSION_INTERFACE="ucspi-ssl"
export SSL_VERSION_LIBRARY="OpenSSL 0.9.8k 25 Mar 2009"
export _="/usr/bin/sslserver"

Для управления сертификатами удобен пакет tinyca. Команда tinyca2 запустит простой и понятный интерфейс.

Для преобразования форматов можно воспользоваться следующими командами:
openssl rsa -noout -text -in server.key
openssl req -noout -text -in server.csr
openssl rsa -noout -text -in ca.key
openssl x509 -noout -text -in ca.crt

Подробнее см. по ссылке
Creating Certificate Authorities and self-signed SSL certificates


Upd. OpenSSL

понедельник, 22 февраля 2010 г.

Killer Qmail on Debian

В процессе "разборок" с пакетом утилит ucspi-ssl встретилось подробное руководство по qmail, меня особенно заинтересовало в нем подробное изложение интеграции со сторонним ПО.

Killer Qmail on Debian Etch (Soon to be Lenny): Tutorial: Step 1

Upd. Для дебиана описание довольно странное - ни один нормальный дебианщик не ставит программы с помощью make install, но оставим это на совести автора.

понедельник, 15 февраля 2010 г.

Компания Oracle обеспечивает синхронизацию с SQLite

Компания Oracle представила новый выпуск коммерческого продукта Oracle Database Lite, предназначенного для организации работы базы данных на ограниченных по ресурсам встраиваемых или мобильных устройствах, синхронизированной с сервером на основе промышленной СУБД Oracle. В качестве одного из основных новшеств называется возможность двунаправленной синхронизации между БД SQLite и централизованной СУБД Oracle, поддерживаемая наравне с собственной реализацией минималистичной SQL-совместомой БД.

Новость взята с opennet.ru:
Компания Oracle выпустила средство для синхронизации своей СУБД с SQLite

среда, 10 февраля 2010 г.

Микроконтроллеры - литература

Тестируя сканер системы полнотекстового поиска, случайно увидел следующий файл:
/BIBLIOTEKI/LIBRUSEC/not_sorted/_Avtor_neizvesten_Mikrokontrolleryi_Eto_zhe_prosto_T._1.djvu
Пролистал мельком книгу "Микроконтроллеры - это же просто", имхо написано довольно интересно, так что решил ссылку сохранить. Надо бы еще из архивов сюда ссылки перетащить, доберусь как-нибудь.

вторник, 9 февраля 2010 г.

FictionBook

Работая над своим индексатором, озаботился вопросом качественной обработки контента электронных библиотек, и в первую очередь - формата FictionBook.

В дебиане mime-тип для этого формата в /etc/mime.types отсутствует, пришлось немного поискать и взять отсюда: shared-mime-info-0.71

Учитывая распространенность cp1251, приходится после преобразования в текст еще и перекодировать этот текст. А что поделаешь.

Upd. Напомню полезную ссылочку - онлайн конвертор fb2 в lrf для Sony e-Book Reader 505: http://onlinelrf.com/

четверг, 4 февраля 2010 г.

О виртуализации

Сегодня мы прогуляемся по дебрям сайта www.ibm.com
Признаться, для меня этот ресурс интересен как набор популярных методологий, которых следует избегать, и очень помогает сохранить незашоренный взгляд на мейнстрим. В некоторых статьях можно найти гораздо большее, нежели техническое описание, встречаются и откровенные предостережения, что данную методику полезно знать, но не надо использовать :-)

Вот чудесная статья:
Виртуализация в GNU/Linux : Часть 1. Знакомство с libvirt и oVirt

Приведу пару выдержек:
Статья открывает цикл материалов, посвященных технологиям виртуализации. Актуальность данной темы сомнений не вызывает: соответствующее программное обеспечение можно обнаружить везде – на домашних компьютерах, корпоративных серверах и даже в крупных дата-центрах.


В самом деле, с актуальностью можно согласиться. Но чем вызвано использование технологий виртуализации? Добрый автор в третьем же абзаце дает ответ:

Технологии виртуализации можно, например, использовать для тестирования новых и нестабильных программ, которые могут нарушить работу операционной системы, или для изучения работы различных служб операционной системы и так далее.


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

Читаем дальше:
Автоматизация развертывания виртуальных машин

Авторы сразу же указывают, на что, с их точки зрения пригодны виртуальные машины:
При создании и тестировании программ часто бывает необходимо создавать сразу несколько виртуальных машин.

Не могу не согласиться.

Продолжаем наш экскурс:
Переход на виртуальную среду Linux при помощи Clonezilla

И здесь есть честное предостережение:
Благодаря двум идеям, движущим сегодня эволюцию центров обработки данных – экономии средств и снижению потребления электроэнергии, - виртуализация серверов стала популярной темой в сфере ИТ, и многие разработчики программ и оборудования предлагают собственные решения в этой области. У виртуализации много преимуществ: она позволяет легко переносить виртуальную машину с одного сервера на другой и позволяет создать клонированные образы, например, для разработки и тестирования программ.


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

Ну и "на закуску" описание технологии, которая на самом деле решает вышеназванные задачи:
LXC: Kонтейнерные утилиты Linux

Цитаты приводить не буду, как минимум введение рекомендую прочитать целиком.

Послесловие. Для контейнеров, насколько мне известно, пока не существует, к примеру средств live-миграции, но возможность их создания очевидна. Что касается "истинной" виртуализации, то стоит задуматься, каким же это образом провозглашается снижение энергопотребления и ресурсоемкости при добавлении значительного количества дополнительного кода, отвечающего за виртуализацию. Безусловно, очень привлекательна идея засунуть монстрообразное приложение в некий виртуальный контейнер, получая при этом многократно возросшую производительность, снизившееся энергопотребление и безглючную работу. Но если подумать, это же абсолютная фантазия - виртуальная машина видится чем-то вроде родной сестры золотой рыбки, неподвластной законам физики. Я понимаю, что эти законы сегодня мало кто знает, но тем не менее они существуют и вы всегда можете их проверить, к примеру, спрыгнув с крыши - несмотря на все ваши познания в области виртуализации, полетите вы вниз, а не вверх. Так что лучше поскорее расстаться с виртуальными утопиями и двумя ногами встать на землю. А бум виртуализации не вечен, вспомним перстень царя Соломона с надписью: "Все проходит. Пройдет и это".

Попсовая статья про Expect

Набрел на очень попсовую статью про expect. Тем не менее, про expect вообще мало кто слышал, так что счел небесполезным привести ссылку:
Применение Expect в администрировании системы Linux : Часть 1. Функциональные возможности Expect

среда, 3 февраля 2010 г.

sqlite3-poisk: листинг директории

Дополнил пакет sqlite3-poisk утилитой poisk-ls для построения листинга директории. Сделано это в целях получения списка файлов вместе с метаинформацией - mime-тип и заголовок, размер файла и проч., т.к. получение этих данных непосредственно из самого файла требует, во-первых, множества операций, во-вторых, достаточно ресурсоемко. Разумеется, для нагруженной системы при каждом обращении вызывать и указанную внешнюю утилиту построения листинга слишком расточительно, но кэш с временем жизни, скажем, 5 минут, спасет отца русской демократии (в качестве ключа кэша напрашивается имя директории - "dir" или имя директории,limit,offset -"dir,limit,offset").


$ poisk-ls
Usage: poisk-ls DATABASE LIMIT OFFSET DIR


$ time poisk-ls test.db 2 1 /
poisk_count = 3
poisk_counter = 2
rowid = 2
mtime = 2006-06-22
size = 20179
uri = /test.htm
dirname = /
filename = test.htm
mimetype = text/html
title = Тестовая страница

poisk_count = 3
poisk_counter = 3
rowid = 1
mtime = 2004-04-09
size = 446976
uri = /Эра Фанка.doc
dirname = /
filename = Эра Фанка.doc
mimetype = application/msword
title = Эра Фанка


real 0m0.012s
user 0m0.008s
sys 0m0.004s


$ time poisk-ls test.db 1 0 /humor
poisk_count = 8
poisk_counter = 1
rowid = 78
mtime = 2006-05-11
size = 3991
uri = /humor/Info.aspx.htm
dirname = /humor
filename = Info.aspx.htm
mimetype = text/html
title = ... Hо я писал на С++. - RSDN


real 0m0.012s
user 0m0.012s
sys 0m0.000s


Теперь мы можем показывать в листинге не просто имя файла, а его заголовок (существует для html, doc и многих других форматов файлов). Постраничная разбивка также предусмотрена.

Время выполнения измерено на ноутбуке, на десктопном железе получается примерно втрое быстрее.

$ ls -lh test.db |awk '{print $5}'
20M

Тестовая база небольшая, но особой роли размер базы не играет, т.к. значительное время занимает загрузка libsqlite+libICU. Собственно, для именно этой утилиты libICU совсем не нужна, так что можно слинковать статически с libsqlite без лишних довесков, в разы ускорив работу утилиты для директорий, содержащих немного файлов. Впрочем, кэширование на стороне клиента все равно эффективнее.

Виртуальный хостинг с ssl

Отличная новость - оказывается, теперь можно создавать сертификаты на целую группу поддоменов! Так что выписав сертификат на *.mobigroup.ru, можно избежать ругани браузера на то, что имена виртуальных хостов не соответствуют имени домена, на который выписан сертификат. Подробнее см. по ссылке
About Wildcard Certificates

Заметим, что openssl без проблем создает такие сертификаты (а что, кто-то выписывает сертификаты иначе?..)

вторник, 2 февраля 2010 г.

Мошенники сотовой связи: продолжение

Однажды я уже рассказывал о мошенничестве в области сотовой связи, с которым довелось столкнуться лично: Мошенники сотовой связи.
Но это, как выясняется, были еще "цветочки". Новая схема проста до гениальности, и в нее попасться может каждый:
Платная подписка по одному клику – это реально!

Честно признаюсь, даже не знаю, как и прокомментировать - пользование сотовым телефоном становится сродни пробежке по минному полю. Особенно "радует" возможность активировать ссылку с любого устройства - понятно, что в таком случае ссылку-то ввести может кто угодно, и доказать что это сделали не мы, почти невозможно. С другой стороны, вся схема незаконна, если нельзя доказать, что ссылка введена именно нами - но, при отечественной правоприменительной практике доказывать вынуждены добропорядочные абоненты, а отнюдь не мошенники. Вопрос о том, что ссылка может быть активирована с нашего телефона, но не нами, тоже остается открытым - принятие оферты контент-провайдера лицом, не являющимся владельцем номера, скорее всего, юридически недействительно. Так что деньги вернуть абонент может, если хорошенько подумает и будет достаточно упорно отстаивать свои права, но моральные издержки неизбежны.

Upd. Вот и еще на эту же тему: «Инкор-Медиа» против Windows: Короткий номер компании использовали SMS-мошенники Операторы связи начинают понимать, что такое отношение к абонентам не в их интересах.

Upd. А вот и решение суда в пользу абонентов появилось, как пишут
Молчание не знак согласия:
Арбитражный суд Магаданской области вынес сенсационное решение по делу о неправомерных действиях ОАО «Мобильные телесистемы» (МТС) по взиманию платы за допуслуги сотовой связи, которые оказывал контент-провайдер «Первый Альтернативный». Суд оштрафовал МТС на 30 000 рублей — даже не смотря на тот факт, что до начала судебных слушаний оператор вернул абоненту все деньги за навязанные допуслуги.

понедельник, 1 февраля 2010 г.

Словари для полнотекстового поиска

КОгда-то я тестировал поиск по словарю, для этого конвертировал словари myspell. А теперь существует и стандартная утилит для этого:

$ apt-file search pg_updatedicts
postgresql-common: /usr/sbin/pg_updatedicts
postgresql-common: /usr/share/man/man8/pg_updatedicts.8.gz

man pg_updatedicts

PG_UPDATEDICTS(8) Debian PostgreSQL infrastructure PG_UPDATEDICTS(8)

NAME
pg_updatedicts - build PostgreSQL dictionaries from myspell/hunspell
ones

SYNOPSIS
pg_updatedicts

DESCRIPTION
pg_updatedicts makes dictionaries and affix files from installed
myspell and hunspell dictionary packages available to PostgreSQL for
usage with tsearch and word stem support. In particular, it takes all
*.dic and *.aff files from /usr/share/myspell/dicts/, converts them to
UTF-8, puts them into /var/cache/postgresql/dicts/ with *.dict and
*.affix suffixes, and symlinks them into
/usr/share/postgresql/>version/tsearch_data/system_*, where PostgreSQL
looks for them.

Through postgresql-common’s dpkg trigger, this program is automatically
run whenever a myspell or hunspell dictionary package is installed or
upgraded.

AUTHOR
Martin Pitt

Debian 2009-02-15 PG_UPDATEDICTS(8)


Еще полезен словарь стоп-слов (ссылки на некоторые доступные в сети словари я уже приводил ранее):

$ apt-file search russian.stop
postgresql-8.3: /usr/share/postgresql/8.3/tsearch_data/russian.stop
postgresql-8.4: /usr/share/postgresql/8.4/tsearch_data/russian.stop

(C) Alexey Pechnikov aka MBG, mobigroup.ru