пятница, 20 ноября 2015 г.

Trusted/Untrusted X11 форвардинг через SSH в Debian

Если вы пользуетесь trusted/untrusted форвардингом X11 через SSH в Debian, то вам стоит помнить, что в Debian оно ведет себя не так, как принято в апстриме.

-X Enables X11 forwarding. This can also be specified on a per-host
basis in a configuration file.

X11 forwarding should be enabled with caution. Users with the
ability to bypass file permissions on the remote host (for the
user's X authorization database) can access the local X11 display
through the forwarded connection. An attacker may then be able
to perform activities such as keystroke monitoring.

For this reason, X11 forwarding is subjected to X11 SECURITY
extension restrictions by default. Please refer to the ssh -Y
option and the ForwardX11Trusted directive in ssh_config(5) for
more information.

Т.е. без явного кручения "ручки" всегда используется trusted режим. Чтобы вернуть привычное поведение нужно задать ForwardX11Trusted=no в ~/.ssh/config или /etc/ssh/ssh_config.

Для справки: в untrusted режиме X11 клиент не имеет доступа к содержимому чужих окон и не может инжектить события клавиатуры/мыши.

понедельник, 16 ноября 2015 г.

Автологин в виртуальную консоль для systemd

Поскольку systemd не обрабатывает файл /etc/inittab, то нужно искать другой способ сделать автологин в виртуальную консоль. Нашел ответ тут.

Нужно создать файл /etc/systemd/system/getty@tty1.service.d/override.conf и прописать в него:

[Service]
Type=simple
ExecStart=
ExecStart=-/sbin/agetty --autologin username --noclear %I 38400 linux

Имя пользователя username нужно заменить на нужное.

воскресенье, 15 ноября 2015 г.

Selenium Grid - строим ботнеты

Продолжаю "мутировать" в тестировщика. Настроил JMeter + Webdriver, но столкнулся с тем, что производительности моего Latitude e6430 не хватает для запуска больше 5 тестов одновременно. Выход - запускать тесты на нескольких машинах одновременно. Для этого мне понадобится Selenium Grid.

Схематично работу Selenium Grid с JMeter можно представить этой схемой


Для теста запустил на своем ноутбуке и компьютере коллеги ноды selenium сервера и выполнил тест. В итоге разница между запуском четырех тестов на одном компьютере отличаются от запуска четырех тестов на двух компьютерах (по два теста на компьютер) на 100 мс в пользу распределенного запуска.

Для ограничения количества тестов на одну машину выбрал формулу NCORES+1. Соответственно с двух компьютеров удалось выжать 12 одновременных тестов (при условии, что компьютеры простаивают).

Для запуска теста в headless режиме я использую Xvfb, x11vnc и минималистичные WM вроде openbox или dwm. Причем x11vnc в этой схеме сугубо опционален и нужен скорее для отладки.

пятница, 13 ноября 2015 г.

Открыл для себя связку Apache JMeter и Webdriver

По долгу службы в мои обязанности входит генерация технических статей для нашего корпоративного блога. В преддверии выхода Magento 2 мы решили протестировать ее производительность в сравнении с Magento 1. В Magento 2 встроен Full Page Cache, который очень интенсивно использует AJAX запросы для загрузки динамических блоков, которые впоследствии вклеиваются в страницу. Я уже использовал JMeter для тестирования сайтов, где не используется AJAX, но для Magento 2 этот подход не годится.

При установке Apache JMeter 2.13 и плагина Webdriver 1.3.1 столкнулся с особенностью установки. Дело в том, что плагин содержит в себе более свежие версии httpmime, httpclient и httpcore.

% tar -tf ~/downloads/apache-jmeter-2.13.tgz | grep lib/http 
apache-jmeter-2.13/lib/httpclient-4.2.6.jar
apache-jmeter-2.13/lib/httpcore-4.2.5.jar
apache-jmeter-2.13/lib/httpmime-4.2.6.jar

% unzip -l ~/downloads/JMeterPlugins-WebDriver-1.3.1.zip | grep lib/http
    40692  2015-10-12 10:08   lib/httpmime-4.5.jar
   727567  2015-10-12 10:08   lib/httpclient-4.5.jar
   322234  2015-10-12 10:08   lib/httpcore-4.4.1.jar

Из-за этого тест не работал без видимых причин, пока я не обратил внимание на счетчик ошибок JMeter. Достаточно удалить соответствующие файлы из дистрибутива JMeter и тест запустился без проблем.

К сожалению подобная связка не подходит для нагрузочного тестирования - уже запуск 5 потоков теста ощутимо нагружает мой ноутбук с core i5, на котором запускается тест. Есть еще Selenium Grid, который вроде как решает эту проблему, но без webdriver мне удавалось создавать параллельную нагрузку на сервер в 40-50 одновременных пользователей.

среда, 11 ноября 2015 г.

Проблемы с hibernate после обновления ядра без перезагрузки

Достаю утром ноутбук из сумки и понимаю, что он подозрительно теплый. Вспоминаю, что вчера в офисе между делом накатил обновления, среди которых оказалось и обновление ядра. Сразу перезагрузиться не получилось, а потом не до того было. Перед уходом домой включил на ноутбуке ждущий режим (suspend to ram) и закинул его в сумку.

Особенность моего ноутбука в том, что на нем используется набор скриптов из laptop-utils, один из которых спустя несколько часов будит ноутбук и сразу переводит его в спящий режим (suspend to disk). Это сделано для того, чтобы исключить потерю данных, если по какой-то причине ноутбуком не будут пользоваться длительное время. Да и неприятно спустя выходные обнаружить наполовину севшую батарею.

При обновлении ядра в Debian запрещается использование hibernate (файл  /var/run/do-not-hibernate создается хуком /etc/kernel/postinst.d/pm-utils). Если систему не перезагрузить, то при попытке уснуть на диск ничего не выйдет

$ cat /var/log/pm-suspend.log
...
Wed Nov 11 02:51:52 MSK 2015: Running hooks for hibernate.
Running hook /usr/lib/pm-utils/sleep.d/000kernel-change hibernate hibernate:
kernel update inhibits hibernate (/var/run/do-not-hibernate present)
/usr/lib/pm-utils/sleep.d/000kernel-change hibernate hibernate: Returned exit code 1.

Wed Nov 11 02:51:52 MSK 2015: Inhibit found, will not perform hibernate
...

У меня подобная ситуация уже во второй или третий раз и поэтому я добавил отключение функциональности hibernate after suspend в laptop-utils.

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

вторник, 10 ноября 2015 г.

Изменение пароля сгенерированного SSH ключа

По мотивам ответа на serverfault.com. Есть сгенерированный SSH ключ ~/.ssh/repository - нужно изменить его пароль. Для этого предназначен ключ -p у ssh-keygen:

$ ssh-keygen -p -f ~/.ssh/repository

После этого нужно ввести старый пароль, затем новый и подтвердить новый пароль еще раз.

понедельник, 9 ноября 2015 г.

Релиз Midnight Commander 4.8.15

Спустя 8 месяцев разработки вышла новая версия файлового менеджера Midnight Commander 4.8.15. Этот релиз в основном содержит исправления ошибок.

Список изменений тут. Примечательно, что начиная с этого релиза повысились минимальные требования к Glib - теперь требуется версия 2.26.0 и выше.

Бинарные сборки для Debian/Ubuntu уже подготовлены и доступны в моем репозитарии.

суббота, 7 ноября 2015 г.

Поддержка Ubunty Wily в сборках Midnight Commander

Добавил поддержку Ubuntu Wily в бинарные сборки Midnight Commander, которые доступны через мой репозитарий.

Собраны последние доступные версии для стабильной версии (4.8.14-1) и ночного билда из master ветки git (4.8.15~git20151107-1). Насколько я помню из рассылки, стабильная версия 4.8.15 выйдет в самое ближайшее время.

пятница, 6 ноября 2015 г.

Xfce4-power-manager в Debian Jessie

На ноутбуке я использую Xfce4. После обновления с Wheezy на Jessie в какой-то момент заметил, что несмотря на настройки действий при критическом заряде батареи (если 10% и меньше, то уснуть на диск), ноутбук может высосать батарею в ноль. В Wheezy на 20% выдавало предупреждение, а на 10% засыпало на диск - в отличии от ждущего режима (suspend to ram) это гарантировало, что ничего не испортится и не потеряется.

В Jessie пакет xfce4-power-manager имеет версию 1.4.1-1. Покопался в багтрекере Debian и нашел баг #694391, которому скоро будет 3 года. В unstable есть версия свежее (1.4.4-4) и я решил попробовать ее. Бэкпорт не требует никаких правок и пакет достаточно пересобрать в окружении jessie. Результат я положил в свой репозиторий в раздел backports:

deb http://www.tataranovich.com/debian jessie backports

Чтобы не было проблем с проверкой подписи пакетов нужно установить пакет tataranovich-keyring или импортировать ключ 76FB442E.

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

четверг, 5 ноября 2015 г.

Wetek OpenELEC box

Решил попробовать готовое решение для OpenELEC вместо самосборных решений на базе HTPC. Заказал Wetek OpenELEC box, который теперь официально поддерживается дистрибутивом OpenELEC.


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

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

Написал в саппорт Wetek и начал гуглить. Ответ из саппорта пришел быстро, но я уже успел найти ссылку на обсуждение boot loop у этих девайсов. Оказывается внутри установлена SIM карта и если ее контакт ненадежный, то девайс будет перезагружаться.


Переткнул симку и коробка загрузилась. Теперь стоит на кухне и развлекает жену во время готовки вкусняшек.

По поводу дохлого HDMI кабеля саппорт предложил выслать замену, но вчера пришел не новый HDMI кабель, а композитный. В принципе смысл фразы "HDMI cable replacement" можно трактовать и так...

В остальном нареканий пока нет. Единственное что хотелось бы - отдельные программируемые кнопки на пульте для включения/выключения телевизора и управления его уровнем громкости. Такое реализовано в пультах, которые идут с приставками Zala.