20131112

ips driver error

полетела таблица ibf_posts.
запущено восстановление.

20131014

винная магия, или чудеса в локальном вине

относится к: wine, locales

с каких-то (вероятно, незапамятных) времён wine научили реагировать на текущую пользовательскую локаль.
и если она, к примеру "ru_RU.UTF-8", то «на лету» происходит подстановка (или перекодировка, или ещё хрен знает что) локали "ru_RU.CP1251".
и для вызова «виндовой» программы с кириллическим интерфейсом уже не требуется переопределять локаль для отображения кириллицы таким вот образом:
$ LC_ALL=ru_RU.CP1251 wine <программа>

но у данного искусственно-интелектуального поведения (как обычно и бывает с и.и.) возникают подводные камни:
при вводе текста на «англице» вводится что-то типа "ЂЃ", а уж кириллица вообще заменяется по большей части пробелами.
что ещё более замечательно — происходить это может не во всех формах ввода (даже в пределах одной программы), а только в тех, где, вероятно, у поля ввода прописаны какие-то не совсем стандартные шрифтовые свойства.

вариантов обхода данного подводного камня два:
  1. сменить для пользователя умолчальную локаль на "en_US.UTF-8" и добавлять локаль при вызове wine (как написано выше).
  2. запустить winecfg и заменить приоритетность использования библиотеки usp10.dll с "native, builtin" на "builtin, native" или просто на "builtin".
p.s. только не спрашивайте меня, как я «дошёл» до второго варианта.
это «винная магия, или чудеса в локальном вине».

20130906

как мы выкладываем LinuxFormat на rutracker.org

возможно, некоторым известно, что с марта этого года редакция русскоязычной версии LinuxFormat-а публикует архив электронных версий журналов на сайте rutracker.org.
сам-то архив всегда был доступен на сайте linuxformat.ru, новым стал только способ предоставления файлов.
деталей взаимодействия с сайтом rutracker.org я приводить не буду, так как, во-первых, это несущественно для данной технической заметки, а во-вторых, не я этим занимаюсь.

итак, есть сервер, работающий под управлением debian gnu/linux и есть дерево с файлами, из которых надо создать torrent-файл и впоследствии поддерживать его «раздачу»:
LinuxFormat/
├── 2005
│   ├── 070.pdf
...
└── 2012
    ├── 152-153.pdf
    ├── 154fix.pdf
    ├── 155.pdf
    ├── 156.pdf
    ├── 157.pdf
    └── 158.pdf

всё, что понадобилось доустановить, это два пакета — rtorrent и bittornado.
по условиям работы rutracker.org (вероятно, и всех других трекер-сайтов) нужно сгенерировать torrent-файл с пустым списком трекеров.
поэтому в качестве первого параметра программе btmakemetafile передаём пустую строку:
$ btmakemetafile '' LinuxFormat
получившийся файл LinuxFormat.torrent и используем на сайте rutracker.org.
после создания/обновления «раздачи» скачиваем подправленный сайтом torrent-файл (в него добавляется список трекеров и наш уникальный секретный «ключ»).
этот самый полученный файл и надо «скормить» rtorrent-у.
но предварительно имеет смысл задать ограничение скорости и сохранение сессий, чтобы после перезапуска rtorrent-а не требовалось дополнительных телодвижений.
для этого в файл ~/.rtorrent.rc вписываем:
upload_rate = 123
session = ./session
т.е., скорость загрузки с нашего сервера будет 123KiB, а сессия будет сохраняться в каталоге session того каталога, откуда запущен rtorrent (не забудьте его создать — сам rtorrent этого не делает).

финальный штрих.
т.к. rtorrent не умеет работать «демоном», запускать его можно, например, по рецепту разработчиков, используя предлагаемый ими init-скрипт (после внесения необходимых правок).

20130711

оповещения об окончании чего-нибудь

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

как «поймать» момент?
ну, можно время от времени поглядывать, переключаясь на нужное окно или рабочий стол.
или присвоить для нужного окна значение menu свойству layer (ну или как оно в вашем wm-е называется, чтоб окно всегда сверху было).
или (для эстетики) поэкспериментировать с [полу]прозрачностью.

а можно воспользоваться программкой notify-send (вот так оно выглядит) из пакета libnotify-bin.
а в пакете notification-daemon есть программка notification-properties, позволяющая выбрать тему и местоположение (один из четырёх углов) самого оповещения.

а чтобы оповещение не пропадало спустя несколько секунд, можно передать параметр:
$ notify-send -t 0 заголовок основная-часть

в man-е упомянуты и другие интересные опции.
и всё это ещё и в скриптик (для упрощения набора) можно завернуть.
я так и сделал, и назвал его gn.

примеры:
$ sleep 3600; gn "уж час прошёл, а германа всё нет."
$ while true; do ping -c 1 google.com &>/dev/null && break; sleep 5; done; gn гугль заработал в $(date)
$ echo 'gn "обещанного три года ждут. сейчас $(\date), а запустил ты меня '$(date)'"' | at "now + 3 year"

20130328

debian man's trick

в debian (и, судя по всему, в ubuntu, но, судя по всему, не в centos/mandriva/gentoo) программа man умеет догадываться, что пробел следует заменить минусом.
о чём речь:
$ man word1 word2 ...
обычное поведение: man ищет последовательно man-страницы для word1, затем word2 и т.д., и отображает первую найденную.
умное поведение: man сначала ищет страницу word1-word2, и лишь затем — word1.

пример:
$ man git config
отображается страница git-config, а не git. естественно, если присутствует в системе.

p.s. в man man упоминаний о таком поведении не нашёл (возможно, плохо искал).

20130307

охотники за головами не дремлют

вчерашнего дня получил такое вот письмо (личная информация опущена):
From: Natalia ... <...@google.com>
Date: Wed, 6 Mar 2013 10:42:49 +0000
Subject: Greetings from Google!

Privet Alex,

Hope you are doing great.  I'm Natalia from Google's recruitment team.
I came across your interests in Linux  [1]here, along with system development
which attracted me.
I'm wondering if you might be open to a general conversation - I'd love to get
a better understanding of the work you enjoy doing.

Looking forward to hearing from you soon!

Natalia ... | Tehnical Sourcer | ...
[4]Work with us at Dublin Office!

References:
[1] http://unixforum.org/index.php?showuser=152
[4] http://www.home-designing.com/2013/02/googles-new-office-in-dublin
на что ответствовал:
Уважаемая Natalia!

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

upd. ответ на мой ответ. даже частично по-русски:

Hi Alex, 

Thank you for your reply. I will be happy to stay in touch in case something changes.
 
Спасибо вам за ответ. Желаю успехов, если знаете инжинеров - специалистов вашего профиля, можете поделиться моими контактными данными. 

Wish you good luck!

20130305

encrypt & decrypt with openssh rsa-keys

можно ли использовать публичный ключ openssh для безопасной передачи информации владельцу секретной части того же самого ключа?
краткий ответ: да.
но, увы, не так удобно, как, например, с помощью gpg.
но, увы, только в случае rsa-ключа.

теоретические соображения:
  1. в openssh используется ассиметричное шифрование: пара, состоящая из публичного и секретного ключей;
  2. к сожалению, в openssh нет инструментов для (де-)шифрования с помощью этих ключей;
  3. к счастью, такие средства есть в openssl (по крайней мере для rsa-ключей);
  4. к сожалению, openssl (пока) не понимает формата, в котором openssh хранит публичные ключи;
  5. к счастью, openssh (точнее, программа ssh-keygen) умеет конвертировать свои публичные ключи в формат pkcs8, который уже может «понять» openssl;
  6. к сожалению, это умеет делать только openssh v5.6 и выше (в debian squeeze — v5.5);
  7. к счастью, публичные rsa-ключи можно сконвертировать с помощью такого, например, скриптика: https://gist.github.com/sash-kan/5081128.
практика:


ssh.pub — публичный rsa-ключ вашего адресата;
ssh.sec — секретный rsa-ключ вашего адресата (обычно ~/.ssh/id_rsa);
sshpub-to-rsa — скрипт по ссылке, приведённой выше.

шифрование (на вашей стороне) при наличии openssh v5.6 и выше:
$ echo 'secret!!11' | openssl rsautl -encrypt -pubin -inkey \
<(ssh-keygen -f ssh.pub -e -m pkcs8) > secret.message

шифрование (на вашей стороне) при наличии openssh v5.5 и ниже:
$ echo 'secret!!11' | openssl rsautl -encrypt -pubin -inkey \
<(sshpub-to-rsa ssh.pub) > secret.message

расшифровка (на стороне вашего адресата):
$ cat secret.message | openssl rsautl -decrypt -inkey ssh.sec
secret!!11

20130225

squeeze+xen+centos5

понадобилось мне установить виртуальную машину (domu) с centos-5 на squeeze (dom0).
есть в debian gnu/linux замечательный пакет xen-tools, помогающий создавать виртуальные машины.
ориентирован он, понятно, на debian, и использует debootstrap.
но можно устанавливать и rpm-основные дистрибутивы. нужная функциональность имеется в пакете rinse.
вот только команда
$ sudo xen-create-image --hostname centos --install-method=rinse --dist centos-5 …
увы, завершается ошибкой.
шаги преодоления большей частью связаны с python-ом (кто бы сомневался):
  1. dom0 у меня 64-битный. и архитектуру для rinse (по крайней мере в этом случае) нужно указывать явно, добавив параметр --arch=amd64;
  2. в /etc/rinse/centos-5.packages (первоначальный минимальный список пакетов) надо добавить python-libs;
  3. yum-у (точнее, python-у, на котором он написан), требуется /dev/urandom. соответственно, в hook-ах (которые используют chroot) перед/после запуска yum нужно монтировать/отмонтировать /dev из основной системы;
  4. для генерации ssh-ключа системы после установки openssh-server (внутри соответствующего hook-а)требуется запустить (и сразу остановить, чтоб не мешался) sshd.
пункты 2-4 представлены в виде прилагающегося патча: https://sites.google.com/a/barak.in/www/dl/squeeze.xen.centos5.patch

20130208

иероглифы github-а

долгое время, наблюдая пустоту (или заглушки) в интерфейсе github-а в тех местах, где они используют unicode-ные графические символы (см. скриншоты), я считал, что это вызвано старой версией моего firefox-а (из репозитория squeeze).
но вдруг обнаружил, что в чистом профиле firefox-а эти символы отлично отображаются.
долго и нудно пытался выяснить, где же собака порылась, подозревал вредительство со стороны используемых плагинов.
оказалось, всё на поверхности.
в about:config:
browser.display.use_document_fonts = 1
или (для любителей мышевозюканья):
preferences → content → fonts & colors → advanced → allow pages to choose their own fonts, instead of my selection above.

было
стало

20130110

mutt html charset

люди неисправимы, почтовые клиенты своенравны, а лень родилась задолго до евы.
устав догадываться о смысле писем на русском, присланных в виде веб-страничек, порылся в этих ваших интернетах, и нашёл, чего же мне не хватало.
для просмотра html вложения с помощью w3m я давненько уже вписал нужную строчку в ~/.mailcap. но charset не детектировался w3m-ом.
это раз.
а ещё у mutt-а есть auto_view. т.е., можно смотреть html-вложение сразу же, как (почти) нормальное письмо.
это два.
  1. строка в ~/.mailcap должна выглядеть так:
    text/html; w3m -I %{charset} -dump '%s'; nametemplate=%s.html; copiousoutput
  2. для авто-преобразования веб-страничек надо добавить в ~/.muttrc:
    auto_view text/html
    (можно и до перезапуска mutt нажать двоеточие и ввести эту команду, эффект воспоследует сразу же)