суббота, 30 июня 2012 г.

DEADBEEF 0.5.5

Уже прошел почти месяц с тех пор, как был анонсирована новая версия плеера DEADBEEF 0.5.5. Список изменений у новой версии довольно впечатляющий, хотя по сути все это исправления существующих ошибок.

changelog since 0.5.4

  • fixed converter GUI plugin crash if the converter plugin not found
  • fixed compiling on FreeBSD
  • fixed race condition bug in streamer
  • fixed flac embedded cover loading bug
  • fixed multiline tag field editing
  • fixed vorbis streaming audio bug
  • fixed numlock handling in global hotkeys setup
  • fixed KP_Return not working
  • fixed filename being ignored in the search window
  • fixed session saving on reboot/logout using XSMP via eggsmclient
  • fixed few missing translation strings
  • fixed many instability issues caused by improper use of pl_find_meta[_raw] calls
  • fixed improper use of GtkStyle in playlist and tabs widgets
  • fixed prev/next handling when playback is stopped
  • fixed random playback bug caused by libsidplay2 calling srand(time(NULL))
  • fixed crash in adplug when playing ADL files
  • fixed crash in aac reload metadata
  • fixed Grandia - Parallel Trippers.gbs crash in GME plugin
  • fixed crash in GME plugin when a file doesn't exist
  • fixed integer overflow bug in float32->int32 conversion
  • fixed m3u parser string copy bug
  • fixed several dsp bugs in the converter
  • fixed up/down buttons in the converter's dsp preset editor
  • fixed selected row bugs in dsp preset editors in gtkui preferences and converter
  • fixed parent window of dsp plugin configure window
  • fixed all known issues in gtk3 plugin -- it should be fully working now
На этой неделе в блоге появился комментарий, где спрашивали буду ли я поддерживать обновление версий deadbeef в своем репозитарии. На тот момент я отписался, что буду это делать, если в этом будет смысл, поскольку проект собирает бинарные пакеты, пригодные для Debian/Ubuntu.

Уже позже, вечером, я начал ковырять пакет, который готовит апстрим, чтобы сравнить его с моей последней сборкой (у меня была только версия 0.5.2 в репозитарии). ИМХО недостатки официального пакета:
  • устанавливается в /opt/deadbeef, но не делает ссылку на бинарник в /usr/bin (нет возможности запустить из консоли не прописав полный путь);
  • не работает pause toggle при клике средней кнопкой на иконку deadbeef в трее (в принципе не критично, если настроены глобальные комбинации);
  • не работает регулировка громкости, если прокручивать колесо мыши над иконкой deadbeef в трее;
  • недостающие recommended зависимости приходится ставить руками (поскольку пакет ставится не через APT, то установка проходит нормально, но при запуске пакет ругается в консоли - у меня к примеру не стояли libcddb2 и libzip1).
В принципе ничего критичного нет, но похоже большинство привыкло получать обновления из APT. Потому я зарядил новую подсистему своего buildbot'а на сборку пакета 0.5.5 под Debian/Ubuntu.

В итоге сейчас пакет доступен для:
  • Debian: Squeeze, Wheezy, Sid (i386, amd64);
  • Ubuntu: Maverick, Lucid, Oneiric, Natty, Precise (i386, amd64).
Чтобы добавить себе мой репозитарий, смотрите инструкции тут.

пятница, 29 июня 2012 г.

Увеличение числа одновременно открытых файлов в MySQL сервере

Сегодня довелось решать проблему с превышением лимита одновременно открытых файлов у MySQL сервера. Ошибка, которая свидетельствует о такой проблеме выглядит так:

MySQL Error: Out of resources when opening file './db_name/table_name.MYD' (Errcode: 24)

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

$ perror 24
OS error code  24:  Too many open files

Смотрим сколько разрешено открывать файловых дескрипторов пользователю mysql (пользователь, с правами которого работает MySQL сервер).

$ sudo su - mysql -c 'ulimit -n'
1024

Далее смотрим, сколько дескрипторов разрешено в MySQL:

$ mysql -se "show variables like 'open_files_limit'"
Variable_name       Value
open_files_limit    1024

Увеличим лимит в 4 раза, до 4096:

$ echo 'mysql  -  nofile  4096' | sudo tee -a /etc/security/limits.d/mysql.conf
$ sudo su - mysql -c 'ulimit -n'
4096

Если лимит не изменился, то нужно посмотреть где подключен pam_limits.so в конфигурации PAM.

$ grep -r limits /etc/pam.*
/etc/pam.d/sshd:session    required     pam_limits.so
/etc/pam.d/atd:session    required   pam_limits.so
/etc/pam.d/login:session    required   pam_limits.so
/etc/pam.d/sudo:session required pam_limits.so
/etc/pam.d/cron:session    required   pam_limits.so
/etc/pam.d/su:# session    required   pam_limits.so

Для Debian нужно добавить строку session required pam_limits.so в /etc/pam.d/common-session

$ echo 'session required pam_limits.so' | sudo tee -a /etc/pam.d/common-session

Осталось поправить конфиг MySQL, чтобы сервер начал использовать новый лимит. Для этого в my.cnf в секцию [mysqld] добавляем строчку

open_files_limit = 4096

пятница, 22 июня 2012 г.

Ночные сборки Midnight Commander получили поддержку SFTP

Вчера в багтрекере проекта Midnight Commander был закрыт тикет 1535, который знаменует добавление начальной поддержки протокола SFTP в master ветку репозитария (именно из нее делаются пакеты для nightly ветки моего репозитария).

Для сборки теперь требуется libssh2 с минимальной версией 1.2.5. Однако для полноценной работы с ssh-agent нужна версия старше (в Debian Squeeze сейчас 1.2.6 и с ней авторизация по агенту не работает). Я проводил небольшие изыскания по этому вопросу и остановился на версии 1.3.0 (которая доступна в моем репозитарии).

В этой версии поддерживается работа с ~/.ssh/config. Т.е. теперь вместо указания username@hostname, можно указать соответствующий алиас из конфига. Например у меня есть учетка andrey@192.168.16.170, которая доступна по ssh ключу ~/.ssh/support. Соотвествующая запись в ~/.ssh/config будет

Host support
HostName 192.168.16.170
User andrey
IdentityFile ~/.ssh/support

И при входе по SFTP я укажу support вместо прописывания полной записи. Причем похоже ~/.ssh/config - единственный способ использовать public key авторизацию.

Редко новые фичи бывают без косяков. В этот раз похоже поломали работу с ssh алиасами из ~/.ssh/config при переносе из бранча в master ветку. Так если зайти через username@hostname, то все работает быстро и приятно, а если использовать алиас, то midnight циклически начинает открывать соединения и в итоге их на сервере становится больше 30 (по крайней мере у меня было запущено больше 30 копий sftp-server и тормозило это безбожно).

В дополнении обнаружилась проблема с копированием файлов - они не копируются вовсе (создается пустой файл). Не работает переключение на sftp подключение в списке активных VFS (Ctrl + X A). Там подключение выглядит как //sftp://, вместо sftp://username@hostname/.

Думаю, что в ближайшее время все баги будут исправлены и midnight получит новую фичу в свой арсенал.

понедельник, 18 июня 2012 г.

Сборка RPM пакетов без прав root

В дефолтной конфигурации CentOS в качестве корневой директории при сборке пакетов используется /usr/src/redhat. Такой подход требует прав root, поскольку владельцем и группой у /usr/src/redhat является root.

Чтобы избежать возможной порчи системы при сборке новой версии пакета (все вспомнили rm -fr /usr /lib/nvidia у bumblebee) полезно создать отдельного пользователя, например build.

# useradd -s /bin/bash build

Затем настроить локальный buildroot для сборки пакетов и собирать их уже от имени пользователя build.

# su - build
$ mkdir -p ~/RPM/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
$ cat > ~/.rpmmacros << EOF
%_topdir %(echo $HOME)/RPM
EOF
$ rpmbuild -ta courier-imap-4.9.3.tar.bz2

Собранный пакет будет находиться в ~/RPM/RPMS/x86_64/courier-imap-4.9.3-1.x86_64.rpm (если архитектура x86_64).

пятница, 15 июня 2012 г.

Zalman ZM-VE200 SE - выкидываем болванки в мусорку

Про Zalman ZM-VE200 - внешний бокс, способный эмулировать ISO образы, я впервые узнал на Хабрахабре более года назад. Тогда его обзор казался чем то вроде манны небесной для технаря, вынужденного пользоваться загрузочными дисками в своей повседневной работе.

На тот момент от покупки остановило его отсутствие в продаже в Минске и завышенная цена на eBay (тогда за него просили 70-90$ без учета доставки). Выгоднее было купить простой USB DVD-ROM и сотню болванок, а разницу потратить по обстоятельствам.

Спустя год новые обстоятельства заставили вернуться к рассмотрению старого вопроса. Нужно решение, которое позволит оперативно запустить компьютер с нужной болванкой. Чаще всего это либо Finnix (минималистичный дистрибутив) либо CloneZilla (решение для клонирования эталонных конфигураций, вполне подойдет для создания и восстановления резервных копий). Есть еще набор дисков, вроде различных инсталяков, live антивирусов и т.д., но ими пользуемся гораздо реже.

У меня есть свободный IDE DVD-RW привод, но во-первых нужно каждый раз разбирать системный блок, чтобы подключить его, а во-вторых у новых материнских плат может не быть IDE порта.

Варианты решения проблемы, которые родились после небольшого мозгового штурма:
  1. Подготовить эталонный образ для usb flash, который будет включать в себя все необходимое (был отброшен после попытки скрестить finnix, clonezilla и live антивирусы). Дополнительно появляется проблема с обновлениями, если выходит новая версия инструмента с нужными фичами.
  2. Приобрести USB DVD привод и стопку болванок (для последующих обновлений). Я тестировал Lite-On eSAU108 и остался им доволен.
  3. Купить usb бокс от Zalman, способный эмулировать ISO образы (а тажке ряд других), как виртуальный USB-DVD/BlueRay привод.
На мой взгляд последнее решение самое оптимальное, т.к. при прочих равных исключается необходимость хранить пачку болванок (которые за год-два придут в негодность) и носить их с собой, поскольку заранее неизвестно, что потребуется в конкретном случае.

Просмотрев предложения минских фирм, был заказан Zalman ZM-VE200 SE серебристого цвета (на форумах жалуются, что черный вариант очень маркий). ZM-VE200 SE похоже отличается от ZM-VE200 только отстутствием eSATA кабеля в коробке (у меня уже есть такой от бокса D-Sparrow).

После приобретения установил в него свой старенький WD Scorpio Blue 250 BEVS. Коробка завелась с родным кабелем (подключается к одному USB порту), но после начала активной работы с диском "отвалилась" в системе. Я уже был в курсе про проблему с нехваткой питания от одного порта (один только жесткий диск требует 5V 0.55A для нормальной работы - уже больше, чем может отдать один USB 2.0 порт, а ведь сюда нужно добавить потребление самого бокса).

В общем родной кабель отправился в тумбочку, а бокс был подключен через Y-USB кабель, который использует два порта для более надежного питания. После этого бокс прошел небольшое стресс-тестирование. В процессе теста бокс здорово разогрелся (~43°C), но к ошибкам это не привело.

Из полезных фич - мониторинг температуры и состояния диска. Также полезным оказалась возможность остановить шпиндель диска, отклонив на пару секунд "jog dial" вниз - здорово помогает в Windows 7, которая не выключает питаение USB порта при безопасном извлечение устройства.

И напоследок самая желанная фича - возможность выставить read-only режим физическим переключателем! Да, я знаю, что и сейчас есть подобные флешки (те же Qumo Yin & Yan), но все боксы, что я видел, не имели этой фичи.

Подводя итог - я доволен своим приобретением.

воскресенье, 3 июня 2012 г.

Установка OpenWrt на TP-LINK TL-WA901ND (hw rev 2.2)

Этот пост ориентирован на технически грамотную аудиторию. Если вы не обладаете необходимыми навыками - не пытайтесь повторить описанное. Я не несу никакой ответственности за ваши ошибки или возможный ущерб, возникший в следствии попытки повторить описанное.


Пару месяцев назад я приобрел точку доступа TP-LINK TL-WA901ND на замену своему старенькому роутеру D-Link DIR-320. Последний прослужил мне верой и правдой несколько лет, сначала работая на родной прошивке (было много глюков и каждый апдейт прошивки от производителя что-то чинил, а что-то ломал), потом была DD-WRT, а закончил роутер свой путь с OpenWRT на борту.

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

Первое знакомство с прошивкой от TP-Link порадовало своей простотой и продуманностью настроек. После подключения я сделал пару замеров скорости - выходили стабильные 80-110Mb/s при работе как со стационарного компа, так и нетбука.

А вот вчерашний вечер стал темным пятном на репутации tp-link'а - внезапно начал заикаться XBMC при проигрывании фильмов с домашнего сервера к которому он подключен через WI-FI. Тогда было лень разбираться в причинах и я просто пошел спать оставив проблему на следующий день.

Сегодня сев за комп, я вспомнил про вчерашние проблемы у проигрывателя и решил посмотреть в чем причина его "заиканий". Попытка скопировать фильм на комп показала скорость около 600-800kb/s - блин! и это на оборудовании стандарта N. Первым делом перезагрузил точку доступа - не помогло. Потом при помощи смартфона просканил диапазон - мало-ли кто-то еще сел на мой канал и мешает работе точки - такого злодея не нашлось.

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

Пока я искал прошивку - наткнулся на упоминание, что модель TL-WA901ND поддерживается в DD-WRT (правда только ревизия v1.x). Дальнейшее изучение форумов дало наводку на OpenWRT, где уже имеется поддержка моей ревизии.

ВАЖНО! Для завершения установки новой прошивки вам необходимо обеспечить доступ устройства в интернет через LAN порт. Если вы не знаете как это сделать не пытайтесь обновить прошивку устройства!

Важно правильно определить аппаратную ревизию вашего устройства: V1.x или V2.x. Если вы не знаете как это сделать смотрите тут. Для прошивки через web-админку TP-Link нужна прошивка с суффиксом -factory, прошивки с суффиксом -sysupgrade подходят ТОЛЬКО для обновления уже установленной OpenWRT.

Следуя инструкции, скачал  прошивку, собранную из trunk. Залил ее через "Firmware upgrade" в web-интерфейсе прошивки TP-Link. После завершения роутер перезагрузился и в сети появился адрес 192.168.1.1.

Дальше нужно зайти через telnet на устройство и провести первоначальную настройку. У меня Linux, но для Windows вам подойдет putty. Настройте параметры "Host Name (or IP address)", "Port" и "Connection type" как показано на скриншоте и жмите кнопку "Open".


Затем задал пароль root и после этого смог зайти по SSH. После настроил резолвер, дефолтный гейтвей и поставил luci.

# passwd root
# echo 'nameserver 8.8.8.8' > /etc/resolv.conf
# route add default gw ip-адрес-вашего-шлюза-в-интернет
# opkg update
# opkg install luci
# /etc/init.d/uhttpd enable
# /etc/init.d/uhttpd start

После этого можно было зайти в web интерфейс Luci (http://192.168.1.1/) и настроить точку доступа окончательно. После всех настроек скорость копирования через NFS/SCP/SMB поднялась до 7-9MB/s что вполне хорошо и соответствует моим ожиданиям.


Этот пост ориентирован на технически грамотную аудиторию. Если вы не обладаете необходимыми навыками - не пытайтесь повторить описанное. Я не несу никакой ответственности за ваши ошибки или возможный ущерб, возникший в следствии попытки повторить описанное.