воскресенье, 20 декабря 2015 г.

Собрал Midnight Commander под ARM

В виде эксперимента собрал последнюю стабильную версию Midnight Commander (4.8.15) в своем репозитарии под ARM. В итоге получилось так:

  • Debian Wheezy (i386, amd64, armel, armhf)
  • Debian Jessie (i386, amd64, armel, armhf, arm64)
  • Debian Stretch (i386, amd64)
  • Debian Sid (i386, amd64)
  • Ubuntu Precise (i386, amd64, armel, armhf)
  • Ubuntu Trusty (i386, amd64, armhf, arm64)
  • Ubuntu Vivid (i386, amd64)
  • Ubuntu Wily (i386, amd64)
Любопытно насколько это востребовано и под какие железки.

Обратная сборка пакета tvheadend

Вчера вечером ставил обновления на домашнем сервере и не заметил обновление tvheadend. Был tvheadend 3.4.27, а обновился до 4.0.8. В итоге отвалилась настройка всех каналов в IPTV. Новая версия здорово отличается от старой и разбираться с ней нет никакого желания. У меня уже есть набор скриптов tvheadend-iptv-damavik, который делает всю черную работу.

Чтобы решить проблему малой кровью нужно установить старую версию пакета и заново импортировать настройки каналов и EPG. Полез в /var/cache/apt/archives - есть только новая версия. Собрался поискать пакет в бэкапе bacula, но вспомнил, что /var/cache/apt/archives исключен из бэкапа. В репозитарии tvheadend нужный пакет тоже недоступен, а поиск в гугле по названию пакета дает только ссылки на apt.tvheadend.org.

Хоть сам пакет и исключен из бэкапа, но ведь содержимое пакета в бэкапе есть. Нужно только извлечь нужные файлы, метаданные пакета и собрать пакет обратно. Сначала восстанавливаем метаданные - для этого выбираю восстановление бэкапа сервера, предшествующего дате 2015-12-19 00:00:00 и восстанавливаю директорию /var/lib/dpkg. Восстановленные данные будут находиться в /bacula/restore/.

Создаю директорию /root/tvheadend_3.4.27~gfbda802~wheezy_amd64 - сюда будут складываться нужные файлы пакета. Из бэкапа мне нужен /bacula/restore/var/lib/dpkg/info/tvheadend.list - тут описано содержимое пакета, которое мне нужно дополнительно восстановить из бэкапа. В сумме нужно восстановить следующие файлы и директории:
  • /usr/share/tvheadend/
  • /usr/share/doc/tvheadend/
  • /usr/share/man/tvheadend.1.gz
  • /etc/default/tvheadend
  • /etc/init.d/tvheadend
  • /etc/init/tvheadend.conf
  • /usr/bin/tvheadend
Восстановленные файлы перемещаем в /root/tvheadend_3.4.27~gfbda802~wheezy_amd64. Данные пакета готовы, теперь очередь метаданных.

Создаем директорию /root/tvheadend_3.4.27~gfbda802~wheezy_amd64/DEBIAN/. Восстановленные файлы метаданных /bacula/restore/var/lib/dpkg/info/tvheadend.* перемещаем в /root/tvheadend_3.4.27~gfbda802~wheezy_amd64/DEBIAN и переименовываем чтобы убрать префикс tvheadend. из имени файла (tvheadend.md5sums -> md5sums, tvheadend.postinst -> postinst, и т.д.).

Для окончательной сборки пакета не хватает только файла DEBIAN/control - его содержимое можно взять в var/lib/dpkg/status.

Теперь собираем пакет

cd /root/tvheadend_3.4.27~gfbda802~wheezy_amd64
dpkg-deb -b . ../tvheadend_3.4.27~gfbda802~wheezy_amd64.deb
dpkg -i ../tvheadend_3.4.27~gfbda802~wheezy_amd64.deb

Осталось восстановить из бэкапа /home/hts/.hts/ и перезапустить tvheadend.

UPDATE: В комментарии напомнили, что недостает шага по фиксированию версии пакета. Можно либо через dpkg selections:

echo tvheadend hold | sudo dpkg --set-selections

либо через aptitude

sudo aptitude hold tvheadend

Или можно пошаманить с apt pinning.

пятница, 11 декабря 2015 г.

Найти все пакеты, зависящие от ALSA, но не зависящие от PulseAudio

Найти все пакеты в системе, которые зависят от ALSA (пакет libasound2), но не зависящих от pulseaudio (пакет libpulse0)

$ awk -F: '/^(Package|Depends):/ {if ($1 ~ /^Package/) pkg=$2; if ($1 ~ /^Depends/ && $0 ~ /libasound2/ && $0 !~ /libpulse0/) print pkg}' /var/lib/dpkg/status
 gstreamer0.10-alsa
 iceweasel
 mencoder
 apulse
 libportaudio2
 audacity
 libcanberra0
 vlc-nox
 libflite1
 libsox-fmt-alsa
 libasound2
 recordmydesktop
 libwine-development
 alsa-utils
 chromium
 rdesktop
 openjdk-7-jre
 libkcompactdisc4
 libmlt6
 teamviewer5

В части пакетов функциональность pulseaudio реализуется плагинами (например vlc или gstreamer), но с чего начать уже видно.

суббота, 5 декабря 2015 г.

NCQ в Linux как возможная причина медленной работы дисков

На этой неделе собирал php 5.5.30 для Debian Jessie и часто пользовался pbuilder. В какой-то момент заметил, что pbuilder слишком долго распаковывает пакеты в chroot. Проверил работу дискового массива через iostat - один из дисков зеркального RAID был занят на 10-20%, а второй на 100%. В сервере установлены два одинаковых диска TOSHIBA DT01ACA300 на 3Tb:

$ sudo hdparm -i /dev/sd{a,b}
/dev/sda:

 Model=TOSHIBA DT01ACA300, FwRev=MX6OABB0, SerialNo=Z3GHLUVGS
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=56
 BuffType=DualPortCache, BuffSize=unknown, MaxMultSect=16, MultSect=off
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=5860533168
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4 
 DMA modes:  mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
 AdvancedPM=yes: disabled (255) WriteCache=enabled
 Drive conforms to: unknown:  ATA/ATAPI-2,3,4,5,6,7

 * signifies the current active mode


/dev/sdb:

 Model=TOSHIBA DT01ACA300, FwRev=MX6OABB0, SerialNo=X2S0833WS
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=56
 BuffType=DualPortCache, BuffSize=unknown, MaxMultSect=16, MultSect=off
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=5860533168
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4 
 DMA modes:  mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
 AdvancedPM=yes: disabled (255) WriteCache=enabled
 Drive conforms to: unknown:  ATA/ATAPI-2,3,4,5,6,7

 * signifies the current active mode

Из двух дисков собран RAID1 в mdadm, а уровнем выше находится LVM.

Создал тестовый том /dev/VolGroup0/test и натравил на него fio со следующим конфигом:

[randwrite]
blocksize=4k
filename=/dev/VolGroup0/test
rw=randwrite
direct=1
buffered=0
ioengine=libaio
iodepth=32

Замеры показали около 10-30 iops, хотя должно быть 100 и более. Попробовал переключить IO scheduler на noop:

$ echo noop | sudo tee /sys/block/sda/queue/scheduler
$ echo noop | sudo tee /sys/block/sdb/queue/scheduler

Никакой разницы. А потом выключил ncq:

$ sudo hdparm -Q1 /dev/sd{a,b}

/dev/sda:
 setting queue_depth to 1
 queue_depth   =  1

/dev/sdb:
 setting queue_depth to 1
 queue_depth   =  1

После этого iops в fio стал стабильно выше 100. Для наглядности включил ncq обратно и iops через несколько секунд iops "испортился". Пока выключил, а дальше видно будет.

пятница, 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.

среда, 21 октября 2015 г.

Прекращение поддержки Debian Squeeze в ночных сборках Midnight Commander

Сегодня я отключил поддержку Debian Squeeze в ночных сборках Midnight Commander в моем репозитарии. Это связано с необходимостью использования glib >= 2.26, которая отсутствует в squeeze.

Если вам очень нужен свежий MC в этом дистрибутиве, то вы можете слинковать нужный glib статически.

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

Дурдом с хостингом в Беларуси

Занимаюсь организацией сайта для товарищества собственников своего дома. На ноутбуке за вечер набросал простенький сайт и на следующий день занялся вопросами регистрации домена и хостинга. Варианты с зарубежным хостингом отбросил по причине усложнения жизни бухгалтеру. В качестве регистратора и хостинга выбрал active.by.

После запуска сайта мне пришло уведомление, что сайт нужно зарегистрировать в БелГИЭ. Не вопрос, я уже слышал об этом "налоге", но я не слышал сколько вопросов возникает при попытке следовать закону. Например мне до сих пор не сказали сколько сайтов подлежит регистрации, если у домена есть 4 поддомена:

  • site.by - основной домен на котором крутится сайт
  • www.site.by - поддомен с которого редиректит на site.by
  • ftp.site.by - алиас, который сгенерировало при привязке домена к хостингу
  • mail.site.by - алиас на почтовую службу хостинга
  • stat.site.by - алиас на сервис статистики хостинга
Так вот непонятно, трактует ли БелГИЭ последние 3 как отдельные сайты? Если да, то по-идее они уже должны быть зарегистрированы хостингом. И что насчет www.site.by и ftp.site.by - вроде это альтернативные названия одного сайта.

UPDATE: Техподдержка хостера наконец ответила, что мне придется регистрировать только site.by. Насколько я это верно в плане буквы закона - я не знаю. Если что их слова к делу не пришьешь :)

Обновление ядра без перезагрузки

Решил попробовать обновление ядра без перезагрузки от KernelCare.

Установка очень проста (на примере CentOS 6.x):

# rpm -i http://patches.kernelcare.com/kernelcare-latest.x86_64.rpm
# kcarectl --register <youid>

Просмотреть информацию о примененных патчах можно командами:

# kcarectl --info
kpatch-state: patch is applied
kpatch-for: Linux version 2.6.32-042stab111.11 (root@kbuild-rh6-x64.eng.sw.ru) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Tue Sep 1 18:19:12 MSK 2015
kpatch-build-time: Fri Oct  2 10:30:28 2015
kpatch-description: 2;2.6.32-042stab111.12

# kcarectl --patch-info
OS: openvz
kernel: vzkernel-2.6.32-042stab111.11
time: 2015-10-03 07:53:24
uname: 2.6.32-042stab111.12



kpatch-name: 2.6.32/diff-vfs-test-for-and-handle-paths-that-are-unreachable-from-their-mnt_root
kpatch-description: vfs: Test for and handle paths that are unreachable from their mnt_root
kpatch-kernel: >vzkernel-2.6.32-042stab111.11
kpatch-cve: N/A
kpatch-cvss: N/A
kpatch-cve-url: N/A
kpatch-patch-url: N/A

kpatch-name: 2.6.32/kernelcare-openvz-cpt-rst-deadlock-workaround.patch
kpatch-description: 
kpatch-kernel: 
kpatch-cve: 
kpatch-cvss: 
kpatch-cve-url: 
kpatch-patch-url:

К сожалению поддержки комбинации debian7 + openvz нет и не планируется. Две ноды у меня сейчас работают в такой связке. Одну можно переустановить на CentOS 6.x без особых проблем, но вторую будет значительно сложнее.

Вначале меня смутило сообщение

# kcarectl --info
Unknown kernel (CentOS 2.6.32-042stab111.12), no patches available

но в случае с поддерживаемой системой это означает, что нет доступных обновлений.

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

Использование pigz вместо gzip в tar

Чтобы при создании архива tar.gz использовались все ядра процессора нужно заменить gzip на pigz, который является многопоточной реализацией gzip, оставаясь полностью совместимым.

$ sudo apt-get install pigz
$ tar -cf /backup/bigbackup.tar.gz -I pigz /data

При этом картина выглядит следующим образом:

top - 09:19:27 up 70 days, 21:18,  2 users,  load average: 6.43, 5.07, 2.97
Tasks: 110 total,   1 running, 109 sleeping,   0 stopped,   0 zombie
%Cpu0 : 99.7 us,  0.0 sy, 0.0 ni, 0.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 95.3 us,  4.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.7 si, 0.0 st
%Cpu2 :100.0 us,  0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 85.8 us, 11.6 sy, 0.0 ni, 0.3 id, 0.3 wa, 0.0 hi, 2.0 si, 0.0 st
%Cpu4 : 95.3 us,  4.0 sy, 0.0 ni, 0.3 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
%Cpu5 : 96.7 us,  3.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem:   8174040 total,  8116804 used,    57236 free,  2479404 buffers
KiB Swap:  8241148 total,     9068 used,  8232080 free,  5287848 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
 4084 root      20   0  133m 5992 1228 S 584.3  0.1  32:12.81 pigz
 4083 root      20   0 18844 2436 2084 D  11.3  0.0   1:28.21 tar
  607 root      20   0     0    0    0 S   2.3  0.0   1:37.61 kswapd0

четверг, 1 октября 2015 г.

Отключение USB устройства после Safe Remove в Windows новее XP/2003

В Windows XP/2003 после безопасного извлечения устройства (usb флешки или внешнего диска) отключалось питание устройства. Начиная с Windows Vista устройство только "отмонтируется", но питание соответствующего порта USB не отключается. Для флешки это не страшно, а вот для диска нехорошо - не факт что он успеет корректно запарковаться при отключении кабеля.

Сегодня нашел упоминание, что в новых версиях Windows можно включить старое поведение Safe Remove. Для этого нужно немного пошаманить в реестре, а более подробно описано в KB2401954.

среда, 30 сентября 2015 г.

Плагин skypeweb для pidgin

Недавно наткнулся на упоминание плагина skypeweb для pidgin (и заодно всего, что основано на libpurple). По ссылке доступны пакеты для CentOS/Fedora, а я решил собрать для Debian/Ubuntu.

Плагин работает без запуска skype и вообще его наличия, чем выгодно отличается от всех виденных ранее реализаций, основанных на dbus. Работают 1:1 и групповой чаты, а также offline сообщения. Пересылка файлов, аудио и видео не реализованы.

Если все ваши контакты skype в pidgin будут в статусе offline, то вам нужно сначала залогиниться в web.skype.com и включить свое присутствие.

Взять плагин можно в моем репозитарии.

четверг, 24 сентября 2015 г.

Nvidia Optimus на Dell Latitude E6430

Присматриваю вариант апгрейда ноутбука жены (сейчас у нее мой прежний Dell Latitude E6410). На глаза попался Dell Latitude E6430 с Nvidia Optimus. Мне не доводилось настраивать Linux на подобной системе, но краем уха слышал, что не все так радужно.

В интернете нашлось очень подробробное описание работы Optimus на примере Latitude E6430 (Nvidia NVS 5200M). После прочтения желание связываться с этой штукой отпало. Дело в том, что просто выключить дискретную карту в BIOS не получится. Цифровые выходы ноутбука (DVI, DisplayPort, HDMI) подключены только к карточке Nvidia, а VGA и встроенный дисплей ноутбука (LVDS) - только к Intel. Поскольку VGA выходом жена не пользуется, то такой вариант не подходит.

среда, 16 сентября 2015 г.

Отключение голосовой почты у МТС

Вдохновившись этой статьей решил наконец отключить перенаправление на голосовую почту. МТС навязал эту услугу уже довольно давно и меня периодически раздражает перенаправление через 30 секунд. Некоторым абонентам и минуты мало, чтобы поднять трубку, а звонить повторно бывает лениво или неудобно (например за рулем).

Чтобы отключить перенаправление нужно выполнить USSD команду ##002#.

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

Логирование всех запросов в MySQL 5.6.x

В процессе выяснения для чего magento 2.x требуется пользователь с GRANT ALL вместо GRANT ALL PRIVILEGES столкнулся с тем, что теперь переменная log больше не воспринимается в MySQL 5.6.x. Оказывается теперь верный способ для логирования выглядит так:

# cat > /etc/mysql/conf.d/logs.cnf << _EOF_
[mysqld]
log_output=FILE
general_log=ON
general_log_file=/var/log/mysql/general.log
_EOF_

После внесения изменений нужно перезагрузить сервер:

# service mysql restart

Если вам не подходит перезагрузка, то тоже самое можно сделать без перезагрузки через SET GLOBAL:

mysql> SET GLOBAL log_output=FILE;
mysql> SET GLOBAL general_log_file='/var/log/mysql/general.log';
mysql> SET GLOBAL general_log=ON;

Проверено на Percona Server 5.6.25-73.1.

UPDATE: Как оказалось, magento 2 не требует GRANT ALL на пользователя, вполне достаточно GRANT ALL PRIVILEGES, но разрешение нужно дать на конкретную базу, а не по маске.

пятница, 11 сентября 2015 г.

Vzctl 4.9.4-1 на Debian нодах нарушает работу контейнеров с ploop layout

После обновления vzctl до 4.9.4-1 на нодах с Debian Wheezy перестала нормально работать часть контейнеров с ploop layout. У меня обошлось минимальным ущербом - просто не сработал ночной бэкап одного из серверов, т.к. не смогло создать снапшоты контейнеров с ploop. Разбор полетов выглядит так:

% sudo vzctl snapshot-list 1068
Snapshot feature is only available for ploop-based CTs

% sudo tail /etc/vz/conf/1068.conf

# Upgrade Thu Sep 10 12:01:51 MSK 2015: Securing CT config by adding VE_LAYOUT=simfs
VE_LAYOUT=simfs

% sudo ls -ld /var/lib/vz/private/1068/root.hdd 
drwx------ 2 root root 4096 Aug 18 09:03 /var/lib/vz/private/1068/root.hdd

% sudo vzlist -o ctid,layout 1068
      CTID LAYOUT
      1068 simfs

При этом произошло это тихо и незаметно, а при перезагрузке такого контейнера или ноды, с высокой долей вероятности он бы превратился в тыкву.

Для исправления достаточно исправить значение VE_LAYOUT в конфигурации нужных контейнеров.

UPDATE: Зарепортил проблему: OVZ-6531.

четверг, 10 сентября 2015 г.

Warning: imagecreatefrompng(): bad type specifier while parsing parameters

Сегодня выловил ошибку после обновления PHP на Squeeze-LTS инсталляции. Была версия 5.3.3.1-7+squeeze26, а обновилось до 5.3.3.1-7+squeeze27.

Возможно проблема появилась после этого фикса:

 * CVE-2015-3411 + CVE-2015-3412
  Fixed bug #69353 (Missing null byte checks for paths in various
  PHP extensions)

Пока ошибка проявилась только при использовании функции imagecreatefrompng(), но возможно затронуто еще что-то.

Чтобы решить проблему достаточно сделать откат к старой версии. Я уже отписался в рассылку debian-lts - посмотрю, что там скажут.

вторник, 25 августа 2015 г.

Подключение устройства с HDMI выходом ко входу DisplayPort монитора

Вчера обновлял OpenELEC на домашнем медиацентре (1, 2, 3) и решил для удобства подключить htpc к монитору на столе. В этом случае не нужно переносить клавиатуру от док-станции, достаточно переключить кабель. Настольный монитор у меня Dell U2412M у которого из входов D-SUB (VGA), DVI-D и DisplayPort. Входа HDMI у этого монитора нет, но я надеялся на переходник.

Еще со времен Latitude E6410 у меня остался кабель "DisplayPort to HDMI" и я думал, что он будет работать и в обратном направлении, т.е. "HDMI to DisplayPort". Но чуда не произошло и монитор упорно молчал. Поиск в интернете окончательно развеял мои сомнения - HDMI и DisplayPort слишком разные, чтобы кабель можно было использовать в любом направлении. В довершение нашлось упоминание, что HDMI Org объявило бойкот производителям кабелей "HDMI to DisplayPort", а значит простых решений и изобилия на рынке ждать не приходится. Сходу нашлось только одно подходящее устройство для подключения HDMI к DisplayPort, но его цена кусается.

Пришлось таки отключить клавиатуру, тащить все к телевизору и обновляться там. На будущее нужно разжиться кабелем "HDMI to DVI-D". Благо таких достаточно.

Ошибка ENETUNREACH при соединении с FTP в FileZilla

Столкнулся с ошибкой в FileZilla 3.13.1 при подключении к FTP серверу в Windows 7:


При отключении защиты антивируса все начинает работать нормально. На компьютерах установлен Kaspersky Endpoint Protection 10 и проблема несовместимости свежих версий FileZilla и касперского известна. Чтобы решить проблему нужно либо отключить сканирование 21 порта в настройках политики антивируса, либо добавить бинарник filezilla в Trusted applications и запретить сканирование сетевой активности для этого приложения.

Я решил проблему через добавление в trusted applications:


Забавно, что версия FileZilla 3.9.0.1 работает нормально и без изменения политики.

четверг, 20 августа 2015 г.

Aptitude search patterns

Периодически всплывает необходимость воспользоваться расширенным поиском в aptitude. Например найти все установленные пакеты из deb-multimedia:

$ aptitude search '~i ?origin(Unofficial Multimedia Packages)'

Полный список поисковых шаблонов есть тут

понедельник, 17 августа 2015 г.

Windows 10 - big brother is watching you

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

среда, 12 августа 2015 г.

Автокомплит для gpg2 в zsh

В zsh есть автокомплит опций для gpg, но нет для gpg2. Поскольку опции практически не различаются, то можно добавить строку compdef gpg2=gpg в свой ~/.zshrc

echo 'compdef gpg2=gpg' >> ~/.zshrc

После этого начинает работать автокомплит для gpg2.

вторник, 11 августа 2015 г.

Ошибка Git при попытке пушить новый бранч

Коллега пожаловался на ошибку Git при попытке запушить новый бранч:

remote: error: failed to lock refs/heads/dev/feature1
To https://example.com/repos/project.git
! [remote rejected] dev/feature1 -> dev/feature1 (failed to lock)
error: failed to push some refs to 'https://example.com/repos/project.git'

Ответ нашелся тут. Дело в том, что в репозитарии уже был создан бранч "dev" и создавать новый бранч dev/feature1 отказывалось, т.к. бранч "dev" создается в виде файла, а бранч "dev/feature1" в виде директории dev в которой будет находиться файл feature1. В этом случае возникает конфликт "dev" как файл и "dev" как директория.

Отозвал свой старый GnuPG ключ

Подписал ключи с последнего KSP и разослал участникам. Если кому-то не пришло проверьте в спаме или свяжитесь со мной.

Заодно отозвал свой старый ключ 0x2EE7EF82.

Особенность работы DNS резолвера в Windows

Полезная информация об отличиях в работе DNS клиента в различных версиях Windows. В свое время мне прилично попортило кровь поведение DNS клиента в Windows 7 - у некоторых пользователей не помогала опция register-dns и случайным образом отваливался доступ к внутренним корпоративным ресурсам. При этом в Windows XP и Linux все работало замечательно.

пятница, 24 июля 2015 г.

Извлечение несколько файлов из бэкапа Clonezilla

Есть полный бэкап диска, выполненный в clonezilla. Нужно вытащить несколько файлов с рабочего стола пользователя.

Сначала смотрим что есть в бэкапе:

$ cd /data/Backups/2015-07-23-14-img
$ ls -1
total 16625923
-rw------- 1 root root        583 Jul 23 17:09 blkdev.list
-rw------- 1 root root        197 Jul 23 17:09 blkid.list
-rw------- 1 root root       6036 Jul 23 17:23 clonezilla-img
-rw------- 1 root root          4 Jul 23 17:17 disk
-rw------- 1 root root      20560 Jul 23 17:17 Info-dmi.txt
-rw------- 1 root root      24254 Jul 23 17:17 Info-lshw.txt
-rw------- 1 root root       2243 Jul 23 17:17 Info-lspci.txt
-rw------- 1 root root        171 Jul 23 17:17 Info-packages.txt
-rw------- 1 root root         90 Jul 23 17:23 Info-saved-by-cmd.txt
-rw------- 1 root root         10 Jul 23 17:17 parts
-rw------- 1 root root         33 Jul 23 17:10 sda1.info
-rw------- 1 root root    9588755 Jul 23 17:09 sda1.ntfs-ptcl-img.gz.aa
-rw------- 1 root root 2097152000 Jul 23 17:10 sda2.ntfs-ptcl-img.gz.aa
-rw------- 1 root root 2097152000 Jul 23 17:11 sda2.ntfs-ptcl-img.gz.ab
-rw------- 1 root root 2097152000 Jul 23 17:12 sda2.ntfs-ptcl-img.gz.ac
-rw------- 1 root root 2097152000 Jul 23 17:13 sda2.ntfs-ptcl-img.gz.ad
-rw------- 1 root root 2097152000 Jul 23 17:15 sda2.ntfs-ptcl-img.gz.ae
-rw------- 1 root root 2097152000 Jul 23 17:15 sda2.ntfs-ptcl-img.gz.af
-rw------- 1 root root 2097152000 Jul 23 17:16 sda2.ntfs-ptcl-img.gz.ag
-rw------- 1 root root 2097152000 Jul 23 17:17 sda2.ntfs-ptcl-img.gz.ah
-rw------- 1 root root  237018999 Jul 23 17:17 sda2.ntfs-ptcl-img.gz.ai
-rw------- 1 root root         37 Jul 23 17:09 sda-chs.sf
-rw------- 1 root root    1048064 Jul 23 17:09 sda-hidden-data-after-mbr
-rw------- 1 root root        512 Jul 23 17:09 sda-mbr
-rw------- 1 root root        319 Jul 23 17:09 sda-pt.parted
-rw------- 1 root root        281 Jul 23 17:09 sda-pt.parted.compact
-rw------- 1 root root        259 Jul 23 17:09 sda-pt.sf

Нужные нам данные хранились на втором разделе (sda2). Для восстановления нам понадобится partclone и pigz (вместо pigz можно использовать gzip, но восстановление займет больше времени)

$ sudo apt-get install partclone pigz

Восстановим сырой образ второго раздела в файл:

# cat sda2.ntfs-ptcl-img.gz.a* | pigz -dc | partclone.restore -C -s - -O /data/Backups/sda2-restore.bin --restore_raw_file
Partclone v0.2.73 http://partclone.org
Starting to restore image (-) to device (/data/Backups/sda2-restore.bin)
Reading Super Block
Calculating bitmap... Please wait... done!
File system:  NTFS
Device size:  119.9 GB = 29278719 Blocks
Space in use:  56.3 GB = 13755539 Blocks
Free Space:    63.6 GB = 15523180 Blocks
Block size:   4096 Byte
Elapsed: 00:17:22, Remaining: 00:00:00, Completed: 100.00%, Rate:   3.24GB/min, 
current block:   16720764, total block:   29278719, Complete: 100.00%           
Total Time: 00:17:22, Ave. Rate:    3.2GB/min, 100.00% completed!
Syncing... OK!
Partclone successfully restored the image (-) to the device (/data/Backups/sda2-restore.bin)
Cloned successfully.

Пробуем смонтировать образ

$ sudo mount -o loop,ro /data/Backups/sda2-restore.bin /mnt
Failed to read last sector (234229758): Invalid argument
HINTS: Either the volume is a RAID/LDM but it wasn't setup yet,
   or it was not setup correctly (e.g. by not using mdadm --build ...),
   or a wrong device is tried to be mounted,
   or the partition table is corrupt (partition is smaller than NTFS),
   or the NTFS boot sector is corrupt (NTFS size is not valid).
Failed to mount '/dev/loop0': Invalid argument
The device '/dev/loop0' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

но получаем ошибку при попытке прочесть сектор, находящийся за пределами восстановленного файла. Дело в том, что partclone не копирует незанятые области и в данном случае мы получили образ меньшего объема, чем изначальный размер исходного раздела. Чтобы исправить нужно либо увеличить размер образа до заведомо большего объема, либо посмотреть в информации clonezilla правильный размер.

Я опишу второй способ. Смотрим в файле sda-pt.parted информацию о исходном диске:

$ cat sda-pt.parted
Model: ATA Samsung SSD 840 (scsi)
Disk /dev/sda: 234441648s
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start    End         Size        Type     File system  Flags
 1      2048s    206847s     204800s     primary  ntfs         boot
 2      206848s  234436607s  234229760s  primary  ntfs

Размер сектора диска 512 байт, размер второго раздела (sda2) - 234229760 секторов. Значит правильный размер образа файла - 512 * 234229760 = 119925637120 байт. Изменим размер файла образа и попробуем смонтировать образ

$ truncate -s $((512 * 234229760)) /data/Backups/sda2-restore.bin
$ sudo mount -o ro,loop /data/Backups/sda2-restore.bin /mnt

Теперь монтирование прошло без ошибок и можно вытаскивать файлы.

Zimbra ругается "network error" при логине в webmail

Если при попытке залогиниться в Zimbra webmail начало ругаться "network error", то скорее всего кто-то еще с вашего IP адреса (актуально для офисов) несколько раз подряд залогинился неправильно, либо, что менее вероятно, кто-то или что-то сделало 30 запросов на вебсервер zimbra за секунду.

Проверить догадку можно в логе /opt/zimbra/log/mailbox.log:

INFO  [qtp509886383-44962:http://10.117.231.45:80/service/soap/AuthRequest] [name=sales@example.com;ip=10.117.231.45;ua=zclient/8.6.0_GA_1153;] SoapEngine - handler exception
INFO  [qtp509886383-44962:http://10.117.231.45:80/service/soap/AuthRequest] [name=sales@example.com;ip=10.117.231.45;ua=zclient/8.6.0_GA_1153;] soap - AuthRequest elapsed=3
INFO  [qtp509886383-44966:http://127.0.0.1:80/service/soap/AuthRequest] [name=sales@example.com;oip=1.2.3.4;ua=zclient/8.6.0_GA_1153;] SoapEngine - handler exception
INFO  [qtp509886383-44966:http://127.0.0.1:80/service/soap/AuthRequest] [name=sales@example.com;oip=1.2.3.4;ua=zclient/8.6.0_GA_1153;] soap - AuthRequest elapsed=3
WARN  [qtp509886383-44965:https://10.117.231.45:443/?loginOp=relogin&username=sales@example.com] [] webclient - auth credentials have expired
INFO  [qtp509886383-44966:http://127.0.0.1:80/service/soap/AuthRequest] [name=sales@example.com;oip=1.2.3.4;ua=zclient/8.6.0_GA_1153;] SoapEngine - handler exception: authentication failed for [sales@example.com], invalid password
INFO  [qtp509886383-44966:http://127.0.0.1:80/service/soap/AuthRequest] [name=sales@example.com;oip=1.2.3.4;ua=zclient/8.6.0_GA_1153;] soap - AuthRequest elapsed=4
INFO  [qtp509886383-44962:http://127.0.0.1:80/service/soap/AuthRequest] [] misc - Access to IP 1.2.3.4suspended, for repeated failed login.
INFO  [qtp509886383-44965:http://127.0.0.1:80/service/soap/AuthRequest] [] misc - Access to IP 1.2.3.4suspended, for repeated failed login.

Чтобы решить эту проблему достаточно добавить офисный IP (например 1.2.3.4) в whitelist и перезагрузить mailboxd:

# su - zimbra
$ zmprov mcf +zimbraHttpThrottleSafeIPs 1.2.3.4
$ zmmailboxdctl restart

Более подробно описано тут: https://wiki.zimbra.com/wiki/DoSFilter.

понедельник, 20 июля 2015 г.

Скорость работы Git на сетевых дисках

В компании, где я работаю, для разработки используется центральный сервер. На этом сервере в контейнерах настроены различные конфигурации веб-серверов и баз данных. Исходники подключаются к рабочим станциям через сетевые диски (samba), sshfs или NFS. Самый популярный вариант - samba.

Началось все с проблем с большими репозитариями (297MB и ~15k файлов). При работе с подобным репозитарием и на локальном диске все неспешно, а на сетевом - совсем беда. Чтобы понять суть проблемы небольшой тест производительности команды git status на одном и том же репозитарии, но подключенном в Linux и Windows. В Linux используется CIFS, а в Windows - сетевой диск.

В качестве одной из оптимизаций в Windows будет использоваться core.fscache = yes:

git config --global core.fscache yes

RealUserSys
Linux0m5.927s0m0.304s0m1.052s
Windows2m37.809s0m0.000s0m0.406s
Windows/core.fscache=yes0m30.732s0m0.000s0m0.031s

Включение core.fscache дает пятикратный прирост в скорости работы Git в Windows на сетевых дисках. Пока никаких побочных явлений, связанных с включением этого параметра не замечено. Вариант с Linux в комментариях не нуждается - там все ожидаемо быстро и без этой опции.

суббота, 18 июля 2015 г.

Firefox не печатает страницу с длинным названием

Жена пыталась распечатать детям несколько картинок для раскрашивания с этого сайта, но ничего не получилось. Проверили очередь заданий CUPS, но там не было информации о нужных заданиях печати. Зато в файле /var/log/cups/error_log на каждую попытку печати появлялась ошибка:

E [18/Jul/2015:15:45:28 +0300] [Client 16] Returning IPP client-error-attributes-or-values-not-supported for Print-Job (ipp://localhost:631/printers/HP_LaserJet_1018) from localhost

Поиск по "Returning IPP client-error-attributes-or-values-not-supported for Print-Job" вывел на описание похожего бага #917340 в Thunderbird. Его суть в том, что при попытке передать слишком длинный Jobname (в нашем случае использовался title страницы) через протокол IPP приводит к отказу печати.

Чтобы обойти эту проблему можно либо открыть картинку в новом окне, либо через developers tools исправить title страницы на более короткий. Баг проявляется как в версии 31.8.0esr-1~deb8u1 из Debian Jessie, так и в 39.0-1~bpo80+1 из jessie-backports (mozilla.debian.net).

UPDATE: Зарепортил баг в Debian и upstream.

Фейковый Mi Power Bank 16000 mAh

Скоро в отпуск, а запекаться на пляже без гаджетов скучно. В прошлый отпуск меня частично выручал второй аккумулятор для телефона, но в этот раз решил идти в ногу со временем и взять powerbank. В вопросе долго не разбирался - решил взять powerbank Xiaomi на 16000 mAh. Магазин Xiaomi не доставляет в Беларусь, так что отправился на eBay и нашел там нужную модель.

Спустя 20 дней получил powerbank и уже на этапе распаковки начались подозрения, что качество далеко от виденных продуктов Xiaomi. Начал гуглить и нашел инфу, что в интернете продают очень много фейков. Нашелся отличный гайд как не разбирая определить подделку. По всем пунктам мой powerbank - подделка, хотя и неплохого вида. Ну да ладно, лишь бы на электронной начинке не сэкономили, а то ведь неправильная эксплуатация литиевых элементов может быть чревата бедой. При разборке выяснилось, что на оригинальный продукт оно похоже лишь внешне:


Розовые элементы 18650 с маркировкой samsung наврятли произведены самсунгом, а плата электроники совсем не похожа на оригинальную плату:


Элементов на плате меньше, датчика перегрева нет - еще не измерял его характеристики, но подозреваю, что 5V 2A там и не пахнет при такой начинке. В общем не ожидал я, что кто-то будет подделывать китайскую продукцию...

UPDATE: Вот тут есть более подробное сравнение фейка с оригиналом. А вот тут выясняется природа производства этого фейка.

пятница, 17 июля 2015 г.

Скорость работы Git в Windows

Не новость, что Git в Windows работает хуже, чем в Linux. Этому есть несколько причин - от различий в архитектуре кеша файловой системы до различий в скорости работы транспорта ssh. Я решил сделать сравнение скорости клонирования довольно большого репозитария с использованием различных транспортов: http, ssh/plink и ssh/openssh. Результаты тестирования в виде таблицы:

ТранспортRealUserSys
https23m45.544s0m0.000s0m0.015s
ssh/openssh12m18.379s0m0.000s0m0.030s
ssh/plink87m21.428s0m0.000s0m0.015s

В итоге получилось, что самым выигрышным вариантом является ssh/openssh, а используя ssh/plink придется ждать в 7 раза дольше!

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

ТранспортRealUserSys
https0m49.125s0m0.000s0m0.000s
ssh/openssh0m49.483s0m0.000s0m0.015s
ssh/plink1m51.556s0m0.000s0m0.000s

Внутри локальной сети ситуация поменялась - скорость https и ssh/openssh практически не отличается, а ssh/plink сократил отставание до 2-х раз. Таким образом при быстром соединении можно жить и с plink в качестве транспорта, но посколько большинство репозитариев все же находятся далеко, то лучше использовать вариант с openssh.

Hint: Чтобы использовать ssh-agent.exe из openssh в Windows нужно:
  • добавить в пользовательские переменные окружения SSH_AUTH_SOCK=/tmp/.ssh-agent
  • настроить автозапуск C:\Program Files (x86)\Git\bin\ssh-agent.exe -a /tmp/.ssh-agent
  • добавить ключ в ssh-agent (например: ssh-add %USERPROFILE%\.ssh\id_rsa)

Недостаток этого подхода - отсутствие GUI для управления ключами в ssh-agent.

И напоследок: клонирование этого же репозитария в Linux в локальной сети занимает всего 9 секунд...

Слеза админа: итеративность Windows Update

Разворачиваю свежую виртуалку с Windows 7 на борту - нужно обновить информацию о таймзонах. Нужное мне обновление KB3013410, но просто скачать его и установить не выйдет - говорит, что не применимо к моей системе:


Начинаю обновлять через Windows update. Сначала нужно установить обновление самого windows update и перезагрузиться, затем поиск обновлений находит лишь 4 важных и 50 опциональных. Среди опциональных нужного апдейта нету - ставлю все кроме локализации и перезагружаюсь. Далее поиск находит 20 важных и 50 опциональных - и опять там нет нужного апдейта!

Почему нельзя сделать как в Linux - поставить ВСЕ обновления за один раз и перезагрузиться?! Да фиг с однократной перезагрузкой - я хочу скомандовать: ставить апдейты непрерывно не отвлекаясь ни на что, мне фиолетово на нагрузку и тормоза, мне нужна полностью обновленная система и как можно скорее. Выбор варианта автоматической установки обновлений не дает желаемого.

Может есть способ обновить систему "быстро, без регистрации и смс"? Может лучше стало в Win8/Win10?

четверг, 16 июля 2015 г.

Ошибка "NO_PUBKEY 836CC41976FB442E" при выполнении apt-get update

При смене gpg ключа на моем репозитории не обошлось без проблем - сегодня при выполнении apt-get update на одном из хостов получил ошибку:

$ sudo apt-get update

W: A error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://www.tataranovich.com wheezy Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 836CC41976FB442E

W: Failed to fetch http://www.tataranovich.com/debian/dists/wheezy/Release: 
W: Some index files failed to download. They have been ignored, or old ones used instead.

На этом хосте не установлен пакет tataranovich-keyring и ключ не обновился автоматически. Чтобы решить эту проблему достаточно выполнить команду:

$ sudo apt-key adv --keyserver pgp.mit.edu --recv-key 836CC41976FB442E

Затем обновить информацию APT и установить пакет tataranovich-keyring, чтобы избежать подобных проблем в будущем:

$ sudo apt-get update
$ sudo apt-get install tataranovich-keyring

Альтернативным решением будет скачать пакет tataranovich-keyring отсюда и установить его руками:

$ wget http://www.tataranovich.com/debian/pool/sid/main/t/tataranovich-keyring/tataranovich-keyring_2015.07.13_all.deb
$ sudo dpkg -i tataranovich-keyring_2015.07.13_all.deb

среда, 15 июля 2015 г.

Reverting merge in git

Чтобы отменить неудачный мерж в git нужно узнать его sha-хеш в логе и выполнить git revert -m 1 %hash%. Параметр -m требуется чтобы указать git какого из родителей мерж комита нужно оставить.

$ git revert -m 1  975a217272bb91fd 
[master 268298c] Revert "Merge branch 'fix_permissions' into 'master'"
 99 files changed, 3222 insertions(+), 4898 deletions(-)

При этом в истории появится что-то вроде этого:

commit 268298ce95363a2c0c383c2249d4836617484dc5
Author: Andrey Tataranovich <tataranovich@gmail.com>
Date:   Wed Jul 15 16:17:09 2015 +0300

    Revert "Merge branch 'fix_permissions' into 'master'"
    
    This reverts commit 975a217272bb91fd5cd32cc6ea4ea9af189fbcc2, reversing
    changes made to 0c2c54e1a29576afd760bbdaa7f986f14c2c28cd.

commit 975a217272bb91fd5cd32cc6ea4ea9af189fbcc2
Merge: 0c2c54e 4eb3dd6
Author: John Doe <john.doe@example.com>
Date:   Wed Jul 15 14:15:03 2015 +0300

    Merge branch 'fix_permissions' into 'master'
    
    fix permissions
    
    fix permissions
    update order-notes-and-files
    
    See merge request !12

Осталось запушить изменения на сервер. Более подробную инфу по отмене мержа можно найти тут.

понедельник, 13 июля 2015 г.

Flashplugin 11.2.202.481 crashing

Пользуюсь firefox и вчера обновил flashplugin до 11.2.202.481 - в итоге имею пачку segfault при попытке просмотреть запись вебинара:


в dmesg при этом:

[77541.452527] plugin-containe[22314]: segfault at 0 ip ae9c2fbe sp bf900864 error 4 in libflashplayer.so[ae3e7000+1024000]
[79194.784129] plugin-containe[22803]: segfault at 0 ip ae9c2fbe sp bffd8404 error 4 in libflashplayer.so[ae3e7000+1024000]
[79205.180568] plugin-containe[22893]: segfault at 0 ip ae8c2fbe sp bfa7bc04 error 4 in libflashplayer.so[ae2e7000+1024000]
[85649.150525] plugin-containe[25522]: segfault at 0 ip ae8c2fbe sp bfc30814 error 4 in libflashplayer.so[ae2e7000+1024000]

Попробую вечером собрать freshplayer для интеграции pepperflash в firefox.

Новый GPG ключ для моего репозитория

С сегодняшнего дня мой репозиторий подписывается PGP ключем 0x76FB442E (4A49 2741 9308 3320 450B 7E4D 836C C419 76FB 442E). Импортировать ключ в APT можно установив пакет tataranovich-keyring или выполнив команду:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 76FB442E

Старый ключ (2EE7EF82, ACBE C1C1 FC07 5E80 359A 7CC2 FE27 2604 2EE7 EF82) будет отозван после проведения июльского KSP в Минске.

пятница, 10 июля 2015 г.

Запрет запуска сервисов в chroot при установке пакетов

Чтобы не засорять ноутбук девелоперскими пакетами (которые часто бывают сильно разных версий squeeze, wheezy, jessie) я использую chroot, а точнее schroot. Для запрета запуска сервисов при установке пакетов по зависимостям внутри chroot нужно создать в chroot файл /usr/sbin/policy-rc.d (подсмотрено тут).

Для моего chroot с jessie это выглядит так:

% schroot -c jessie-dev
(jessie-dev) $ echo 'exit 101' | sudo tee /usr/sbin/policy-rc.d
(jessie-dev) $ sudo chmod +x /usr/sbin/policy-rc.d
(jessie-dev) $ sudo invoke-rc.d dbus start
invoke-rc.d: policy-rc.d denied execution of start.

Теперь при установке сервисов они не запускаются автоматически. Стоит отметить, что данный запрет не действует, если в preinst или postinst используют /sbin/service foo start или /etc/init.d/foo start.

среда, 8 июля 2015 г.

среда, 1 июля 2015 г.

Настройка mod_ssl в apache 2.2.x

Поправил дефолтные настройки mod_ssl для Apache 2.2.x

<IfModule mod_ssl.c>
  SSLRandomSeed startup builtin
  SSLRandomSeed startup file:/dev/urandom 512
  SSLRandomSeed connect builtin
  SSLRandomSeed connect file:/dev/urandom 512
  AddType application/x-x509-ca-cert .crt
  AddType application/x-pkcs7-crl    .crl
  SSLPassPhraseDialog  builtin
  SSLSessionCache        shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
  SSLSessionCacheTimeout  300
  SSLMutex  file:${APACHE_RUN_DIR}/ssl_mutex
  SSLCipherSuite kEECDH+AESGCM+AES128:kEECDH+AES128:kRSA+AESGCM+AES128:kRSA+AES128:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2
  SSLHonorCipherOrder on
  SSLProtocol All -SSLv2 -SSLv3
</IfModule>

Если прописать такие настройки в /etc/apache2/mods-available/ssl.conf, то SSL Server Test не выдает дополнительных рекомендаций.

Полезная информация касательно обновления на Windows 10

Нашел полезную статью в блоге Вадима Стеркина касательно обновления до Windows 10 (выйдет 29 июля).

Leap second 2015

Похоже в этом году все прошло без глобальных потрясений:

[319639.240645] Clock: inserting leap second 23:59:60 UTC

В прошлый раз пришлось перезагружать MySQL сервера.

пятница, 26 июня 2015 г.

Claws-mail выдает ошибку "Signature failed: Data signing failed, General error" при попытки подписать письмо

Сегодня отвечая на письмо заметил ошибку в Claws-mail:


Посмотрел вывод gpg --card-status - все в порядке. Подключил strace к claws-mail перед отправкой письма

$ strace -fF -o claws-mail.log -p`pidof claws-mail`

...
29515 dup2(0, 2)                        = 2
29515 execve("/usr/bin/gpg2", ["gpg2", "--enable-special-filenames", "--no-sk-comment", "--lc-messages", "en_US.UTF-8", "--lc-ctype", "en_US.UTF-8", "--status-fd", "26", "--no-tty", "--charset", "utf8", "--enable-progress-filter", "--display", ":0.0", "--command-fd", ...], [/* 28 vars */]) = 0
29515 brk(0)                            = 0xb7fe5000
...

Оказывается теперь claws использует gnupg2 вместо gnupg (скорее всего это произошло после апгрейда на jessie). Смотрю gpg2 --card-status:

$ gpg2 --card-status
gpg: OpenPGP card not available: No SmartCard daemon

Тут нашлось объяснение такому поведению. Доустановил пакет scdaemon и gpg2 --card-status начал работать. Но при попытке отправить письмо все равно выдавало ошибку. Пошел изучать настройки планига GPG в claws-mail и наткнулся на пункт "Use gpg-agent to manage passwords"


После включения этой настройки подписывание писем заработало вновь.

суббота, 13 июня 2015 г.

Редактирование pdf файла в linux

Столкнулся с проблемой при заполнении анкеты, которая доступна только в виде pdf файла (не pdf форма). Начал гуглить по "linux edit pdf", но результаты разочаровывали. Я попробовал Master PDF Editor 3 - хорошо выглядит, но падает при операциях с буфером обмена и сохраняет в файл мусор. Попробовал найти Foxit PDF Editor, но похоже он уже не существует под Linux.

Уже отчаялся и начал заполнять ручкой распечатанный файл, но вовремя нашел упоминание, что Draw из состава Open/Libre Office умеет импортировать PDF, если установить пакет pdfimport. В Debian Jessie это делается так:

$ sudo aptitude install libreoffice-pdfimport

После этого запускаете Draw и открываете нужный PDF. В процессе редактирования лучше сохранить в формате opendocument, а потом напечатать или экспортировать обратно в pdf. Качество импорта неплохое - в двух местах немного съехал текст за границу рамки, но это легко поправить. Я доволен результатом и всем рекомендую.

среда, 3 июня 2015 г.

Отключение "Check online for updates from Microsoft Update" в панели управления Windows Update

Если вы настроили в офисе локальный WSUS сервер и одобряете только нужные обновления, то остается "лазейка" через которую можно установить нежелательные обновления вроде KB3035583.


Если пользователь нажмет ссылку "Check online for updates from Microsoft Update" в панели управления Windows Update, то обновления будут проверяться не на локальном WSUS, а на серверах microsoft'а.

Чтобы закрыть эту возможность достаточно прописать в реестр в HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate параметр DisableWindowsUpdateAccess c типом DWORD и значением 1. Чтобы добавить это значение удаленно достаточно запустить команду

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v DisableWindowsUpdateAccess /t REG_DWORD /d 0x00000001 /f

на целевом компе. Для этих целей я использую psexec от Марка Руссиновича.


После внесения изменения ссылки больше нет.

вторник, 2 июня 2015 г.

Подключение проектора Epson EB-W28 к Wi-Fi

В офисе завелся проектор Epson EB-W28 - нужно подключить его к офисной Wifi сети. Хотя Epson и требует для работы Wifi использовать их адаптер (ELPAP07), но я на удачу подключил некий TP-Link. Адаптер вначале инициализировало, но почти сразу отключило - мол не тот модуль. Что ж заказали нужный...

Ради интереса подключил "православный" адаптер к ноутбуку:

$ dmesg
[272499.199338] usb 3-1.2: new high-speed USB device number 5 using ehci-pci
[272499.315303] usb 3-1.2: New USB device found, idVendor=083a, idProduct=b512
[272499.315311] usb 3-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[272499.315314] usb 3-1.2: Product: WN7512BEP Wireless LAN adapter
[272499.315317] usb 3-1.2: Manufacturer: Arcadyan

$ lsusb
Bus 003 Device 005: ID 083a:b512 Accton Technology Corp.

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

Создал на тестовой точке доступа отдельную сеть с более "дружественным" ключем и проектор подключился - пробую подключить смартфон к проектору. Для этого нужен Epson iProjection, но Google Play не дает его поставить - мол не доступен для вашей страны. Супер! Проектор доступен, а вот софт - нет. Нужно проверить, можно ли из App Store поставить прилагу...

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

В общем неоднозначные впечатления...

среда, 27 мая 2015 г.

Тестирование SSL/TLS

В процессе фикса Logjam потребовался инструмент для оценки последствий примененного изменения. Нашел сканер от ssllabs. Этот сканер позволяет оценить число клиентов, которые больше не смогут подключиться к серверу. В моем случае это были IE6/WinXP и IE8/WinXP.

суббота, 16 мая 2015 г.

Please create a GitHub OAuth token to go over the API rate limit

В процессе установки обновлений есть время, когда просто сидишь и созерцаешь процесс. Чтобы немного развлечься решил попробовать запустить magento на php7. По ссылке обещают производительность даже выше, чем у HipHop.

Magento 1.9 не завелась, но разбираться в причине лень, поэтому решил попробовать magento 2 beta. В процессе установки composer выдал:

  - Installing sjparkinson/static-review (4.1.1)
    Downloading: Connecting...
Could not fetch https://api.github.com/repos/sjparkinson/static-review/zipball/493c3410cf146a12fca84209bad126c494e125f0, please create a GitHub OAuth token to go over the API rate limit
Head to https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+php7+2015-05-16+1102
to retrieve a token. It will be stored in "/home/admin/.composer/auth.json" for future use by Composer.

Похоже я слишком часто последнее время стал пользоваться composer.

500 OOPS: prctl PR_SET_SECCOMP failed

После рестарта openvz ноды в контейнерах vsftpd начал ругаться "500 OOPS: prctl PR_SET_SECCOMP failed", чтобы решить проблему в лоб достаточно добавить в vsftpd.conf параметр "seccomp_sandbox=NO" и перезапустить vsftpd.

# echo 'seccomp_sandbox=NO' >> /etc/vsftpd.conf
# service vsftpd restart

Позже гляну связано ли это с апгрейдом openvz ядра с 2.6.32-042stab106.6 на 2.6.32-042stab108.2.

понедельник, 11 мая 2015 г.

Сконвертировать regular файл в sparse в Linux

В процессе подготовки staging хоста из забыл указать "-S" в опциях tar и получил 40G файл, вместо реальных 2.7M. Это файл базы данных LDAP в Zimbra и изначально он разреженный (sparse file). Терять столько места не было желания, поэтому я сконвертировал его обратно в sparse file:

# cp -a --sparse=always /opt/zimbra/data/ldap/mdb/db/data.mdb /opt/zimbra/data/ldap/mdb/db/data.sparse.mdb
# mv /opt/zimbra/data/ldap/mdb/db/data.sparse.mdb /opt/zimbra/data/ldap/mdb/db/data.mdb
# du -sh /opt/zimbra/data/ldap/mdb/db/data.mdb
2.7M /opt/zimbra/data/ldap/mdb/db/data.mdb
# du -sh --apparent-size /opt/zimbra/data/ldap/mdb/db/data.mdb
40G /opt/zimbra/data/ldap/mdb/db/data.mdb

Теперь все правильно.

UPDATE: +Maksim Melnikau посоветовал использовать fallocate для этих целей.
Supported for XFS (since Linux 2.6.38), ext4 (since Linux 3.0), Btrfs (since Linux 3.7) and tmpfs (since Linux 3.5).
Выглядит это так:

# fallocate --dig-holes /opt/zimbra/data/ldap/mdb/db/data.mdb

Я проверил в контейнере openvz на ноде с centos 6 - работает.

воскресенье, 10 мая 2015 г.

Знакомство с контроллером ESP8266 и обновление его прошивки

Уже неделю в загашнике томятся два модуля esp8266, которые я заказывал на поиграться. Прелесть этого микроконтроллера в том, что он достаточно производительный и с wifi на борту. Использовать его сетевые возможности можно через AT команды (при подключении через UART к другому MCU), либо как самостоятельный контроллер (существуют прошивки вроде NodeMCU, позволяющие программировать его непосредственно). Все это в совокупности с низкой ценой принесло ему популярность в среде самоделкиных.

Для начала я заказал вариант ESP-01, который больше всего подходит для старта. Выглядит он вот так:


Контроллер нуждается в питании 3.3VDC и такое же напряжение должно использоваться для ввода/вывода. Для тестирования его работы достаточно переключить USB-TTL адаптер в режим 3.3V, но для связи с другой периферией, например Arduino, нужно обеспечить конвертирование 5V <-> 3.3V. Для этих целей я прикупил level shifter:


Минимальная схема подключения выглядит так:


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

Оказалось, что два моих модуля имели разные прошивки. Один инициализировался на скорости 115200, а второй на 9600. Чтобы привести их к общему знаменателю решил обновить прошивку у того, который на 9600.

Для начала скачиваю прошивку и утилиту esptool. Ссылки и прочую информацию брал с esp8266.ru. Чтобы перевести контроллер в режим прошивки нужно:
  • выключить питание контроллера (отключить пин VCC от USB-TTL конвертора, но не выключать сам конвертер)
  • соединить пин GPIO0 к GND
  • включить питание контроллера (подключить пин VCC к USB-TTL конвертеру)
  • запустить прошивальщик
$ ./esptool.py -p /dev/ttyUSB0 -b 9600 write_flash 0x000000 ./AT21SDK95-2015-01-24.bin

Прошивка длится довольно долго. По окончании нужно отключить питание, отключить пин GPIO0 от GND и включить питание снова. Теперь скорость связи возросла до 115200. Позже попробую цепляться к домашнему WiFi и что-нибудь слать на сервер.

пятница, 8 мая 2015 г.

Прототип руткита и кейлоггера, использующие GPU вместо CPU

Прочел новость об анонсе прототипа руткита и кейлоггера, использующих GPU вместо CPU. На CPU происходит только инициализация, а дальнейшая работа идет с использованием процессора видеокарты. Доступ к системной памяти организован через DMA, а данные малвари хранятся в видеопамяти. Подобный подход осложняет обнаружение обычным антивирусом.

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

среда, 6 мая 2015 г.

Поддержка Debian Stretch и Ubuntu Vivid в моем репозитарии

По просьбе трудящихся добавил поддержку Debian Stretch и Ubuntu Vivid в свой репозитарий. Свежие версии midnight commander уже собраны и доступны.

Любопытства ради посчитал количество установок mc 4.8.14 через APT из своего репозитария - вышло немного более 700. Плюс скачивания пакета через браузер, curl, wget, etc.

А вот nightly сборками (регулярные билды из master ветки midnight commander) интересуются похоже только боты. Пока они собираются автоматом и кушать не просят, но если что-то сломается, то скорее всего просто дропну их поддержку.

четверг, 30 апреля 2015 г.

Не загружается Windows 7 после установки обновления KB3045999

После установки обновления KB3045999 перестает запускаться Windows 7. При этом показывает BSOD с сообщением:

STOP: c0000145 {Application Error}
The application was unable to start correctly (0xc000000d). Click OK to close the application.

Если верить этому, то проблема касается AMD64 инсталляций и активатора ODIN.

Можно попробовать откатиться на точку восстановления, а можно удалить само обновление. Тут нашлась инструкция под это дело. На всякий случай продублирую последовательность действий себе:

  • Загружаемся в режиме "Устранение неполадок компьютера" (нажать F8 в самом начале загрузки) и запустить консоль
  • Просматриваем список пакетов обновлений:
    DISM /Image:E:\ /Get-Packages
    где "E:\" – буква диска, на котором установлена система
  • Находим и копируем название нашего пакета "KB3045999". Выделяем и копируем комбинацией Ctrl+C (Package_for_KB3045999~31bf3856ad364e35~amd64~~6.1.1.1)
  • Удаляем его:
    DISM /Image:E:\ /Remove-Package /PackageName:Package_for_KB3045999~31bf3856ad364e35~amd64~~6.1.1.1
  • Жмем Enter, наблюдаем прогресс 100%, дожидаемся надписи "the operation completed successfully", перегружаемся.

Странно, что не получается почитать описание обновления.

воскресенье, 26 апреля 2015 г.

Вышел Debian 8 Jessie


Вчера вышел Debian 8 Jessie. Теперь стою перед выбором: обновляться или поставить систему с нуля, чтобы заодно перейти на amd64. Дело в том, что система, установленная на моем ноутбуке берет свое начало еще с Debian Etch и уже пережила несколько замен железа. Наверняка найдется много мелочей к которым я уже привык, но они потеряются после свежей установки. Хотя с другой стороны это хороший повод наконец-то задокументировать все эти кастомизации.

пятница, 17 апреля 2015 г.

Обновление прошивки штатной магнитолы Renault Sandero Stepway

Сегодня обновил прошивку штатной магнитолы, которой комплектуется Sandero Stepway первого поколения. Модель магнитолы Daewoo AGC-1220RF-A и с прошлой прошивкой у магнитолы были проблемы с поддержкой кириллицы в телефонной книге. В MP3 тегах и файловой системе кириллицу отображало, а в телефонной книге - кракозябли вместо имен.

Перебивать контакты на латиницу желания не было и как раз подвернулось видео, где показан процесс обновления прошивки магнитолы в Lada Largus. Насколько я знаю там стоит такая же магнитола.

На тематических форумах нашлись упоминания успешной установки этой прошивки на Stepway и решил попробовать. А тут как раз приехал домой в ливень, а зонтик остался в багажнике. Позвонил жене и узнал код магнитолы (это важно, поскольку сразу после обновления прошивки магнитола запросит код).

На всякий случай отформатировал заново флешку в fat32, скопировал файл Renault_A1130902_V0057.cab (md5: 59be0af5420caa2a1499ff2dfd714ec8) в корень флешки и приступил к обновлению.

Как и на видео версия текущей прошивки в моей магнитоле была "00039", что придало больше уверенности в успехе. На 50% процентах процесс обновления призадумался, но секунд через 10 пошел дальше.


Чтобы перезагрузить магнитолу нужно извлечь флешку и после ввести код безопасности.

С новой прошивкой записи в телефонной книге стало показывать правильно. На всякий случай проверил кириллицу в навигаторе и тегах - все работает.

четверг, 16 апреля 2015 г.

ldap_bind(): Unable to bind to server: Protocol error

Делаю страничку для показа информации о сотрудниках из OpenLDAP. Столкнулся с тем, что простейший код не может подключиться к LDAP серверу, хотя binddn и bindpw верные - это было проверено через ldapsearch. Как оказалось по-умолчанию php-ldap использует LDAPv2, а наш LDAP сервер настроен на LDAPv3. Чтобы решить эту проблему достаточно добавить в код:

ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);

среда, 15 апреля 2015 г.

Не обновляйте ploop на 1.13-1

Сегодня выловил регрессию в работе ploop 1.13-1. Если у запущенного контейнера создать снапшот, а потом попробовать его удалить, то ничего не выйдет:

# vzctl snapshot-delete 1101 --id 9c585491-c98b-42a5-8002-2387eee11aa1
Deleting snapshot {9c585491-c98b-42a5-8002-2387eee11aa1}
Storing /vz/private/1101/Snapshots.xml.tmp
Error in check_snapshot_mount (ploop.c:3722): Snapshot {5fbaabe3-6958-40ff-92a7-860e329aab41} is busy by device(s): /dev/ploop17343 
Failed to delete snapshot: Error in check_snapshot_mount (ploop.c:3722): Snapshot {5fbaabe3-6958-40ff-92a7-860e329aab41} is busy by device(s): /dev/ploop17343  [17]
Failed to delete snapshot {9c585491-c98b-42a5-8002-2387eee11aa1}

Версия ploop:

# rpm -qa \*ploop\*
ploop-lib-1.13-1.x86_64
ploop-1.13-1.x86_64

Если контейнер предварительно остановить, то снапшот удалится. Похоже это связано с неудачным фиксом #2887. Для решения проблемы достаточно откатиться на ploop 1.12.2:

# wget http://download.openvz.org/current/prev/ploop-1.12.2-1.x86_64.rpm http://download.openvz.org/current/prev/ploop-lib-1.12.2-1.x86_64.rpm
# yum downgrade ploop*1.12.2*.rpm

UPDATE: Запостил баг.

Закончился второй этап Yandex.Root 2015

Вчера участвовал во втором этапе Yandex.Root 2015. Задания были сложнее, но и интереснее одновременно. Особенно меня порадовало задание "Exec", где нужно было запустить два бинарника, скомпилированных про разные архитектуры: sparc и powerpc. И при этом нужно создать видимость, что процессы работают в одной системе (один процесс слушает tcp порт, а второй unix сокет). В этом задании много времени потратил на поиск правильного qemu под centos 7. В итоге поставил chroot с debian wheezy и доделал задание в нем.

Пришлось повозиться над восстановлением ejabberd и прикручиванием к нему логов (делал через mod_log_chat).

Почтовые задания и couchdb не трогал, т.к. уже хотелось спать, да и времени почти не осталось. А вот задание про Git делать начал, но как нарисовать hook для реализации appendonly пока не знаю. С интересом жду, когда выложат разбор заданий.

В итоге по двум играм мой результат:

https://root.yandex.com/team/view/blackice

Осилить все 9 задач в одиночку не получилось, но в принципе я доволен своими результатами. В следующем году попробую собрать команду заранее.

суббота, 11 апреля 2015 г.

Разбор заданий с Yandex.Root 2015

В четверг принял участие в Yandex.Root 2015. Команду собрать не удалось, так что играл в одиночку. Не понравилось, что игра проводится в будний день - пришлось играть короткими урывками. В самом начале игры были проблемы с инфраструктурой Yandex'а: не было возможности получить список заданий, рвалось подключение к VPN и не работала проверка результатов.

У меня получилось выполнить все кроме "Binary", "Strange protocol" и "MongoDB". С mongodb я не знаком и времени разбираться не было, а вот Binary и Strange protocol были действительно интересными.

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

При выполнении "strange protocol" я быстро поднял echo сервер через xinetd и завис на попытке дебажить отказ. Для тестирования я пользовался netcat:

$ nc -u localhost 13000

Но при попытке увидеть эхо ответ был только таймаут.

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

четверг, 9 апреля 2015 г.

Yandex.Root сегодня

Сегодня в 09:00 UTC начинается квалификационный этап Yandex.Root 2015 - попробую сыграть, хотя и слишком поздно вспомнил об этом.

воскресенье, 5 апреля 2015 г.

Перестала работать проверка https в zabbix-proxy для некоторых хостов после апгрейда на Debian Wheezy

После обновления одного из серверов до debian wheezy (раньше там был squeeze-lts) появилась проблема в работе zabbix-proxy, который установлен на этом сервере. После обновления системы и перезагрузки zabbix отрапортовал о проблемах с https на двух хостах, которые мониторились с помощью zabbix-proxy.

Проверил браузером работу https на этих хостах - все в порядке. Zabbix-proxy проверяет больше десятка хостов, на которых есть https, но ложные срабатывания есть только на двух. Причем сами хосты не обновлялись и все было в порядке, пока zabbix-proxy работал на squeeze-lts.

Поискал в гугле и наткнулся на ветку в форуме, где описана аналогичная проблема. Включил DebugLevel=4 в zabbix-proxy и выловил описание проблемы в логе zabbix-proxy:

27111:20150405:124028.523 check_https: curl_easy_perform failed for [example.com:443]: SSL connect error
27109:20150405:124127.938 check_https: curl_easy_perform failed for [example.net:443]: SSL connect error
27111:20150405:124128.978 check_https: curl_easy_perform failed for [example.com:443]: SSL connect error
27108:20150405:124227.737 check_https: curl_easy_perform failed for [example.net:443]: SSL connect error

Пробую натравить wget на один из проблемных хостов:

$ wget --no-check-certificate -O /dev/null  https://example.com/
--2015-04-05 14:59:49--  https://example.com/
Resolving example.com (example.com)... 192.168.1.14
Connecting to example.com (example.com)|192.168.1.14|:443... connected.
GnuTLS: A TLS warning alert has been received.
Unable to establish SSL connection.

Поиск по фразе "GnuTLS: A TLS warning alert has been received." привел меня к двум багрепортам в debian: #738625 и #686837.

Как оказалось на обоих хостах отсутствовала конфигурация ServerName или ServerAlias для example.com и example.net. Поскольку используются *.*.example.com и *.example.net, то проблема оставалась незамеченной, а после обновления сервера - выплыла наружу. После добавления конфигурации для example.com и example.net все пришло в норму.

четверг, 2 апреля 2015 г.

Бывает и так

Первый раз встречаю кабель в котором отметки длины идут не относительно длины бухты:


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

среда, 1 апреля 2015 г.

Удаление systemd в Debian Jessie/Sid

В одном из контейнеров OpenVZ, недавно обновленном до Jessie, начались проблемы со временем захода в контейнер по SSH. Почитал логи и нашел:

$ egrep 'time.*out' /var/log/auth.log
Apr  1 09:49:27 debian8 sshd[16956]: pam_systemd(sshd:session): Failed to create session: Connection timed out
Apr  1 10:46:52 debian8 sshd[16986]: pam_systemd(sshd:session): Failed to create session: Connection timed out
Apr  1 10:46:52 debian8 systemd-logind[172]: Failed to start user service: Connection timed out
Apr  1 10:47:17 debian8 systemd-logind[172]: Failed to start session scope session-10.scope: Connection timed out (null)
Apr  1 11:03:19 debian8 sshd[16998]: pam_systemd(sshd:session): Failed to create session: Connection timed out
Apr  1 11:50:56 debian8 sshd[17019]: pam_systemd(sshd:session): Failed to create session: Connection timed out
Apr  1 11:51:13 debian8 sshd[17024]: pam_systemd(sshd:session): Failed to create session: Connection timed out

Началось после suspend'а контейнера. Скорее всего какая-то нестыковка OpenVZ и systemd, но разбираться в этих нюансах нету времени.

Тут нашлась инструкцию по удалению systemd из Jessie/Sid. На всякий случай задублирую ее себе:

Установить SysV init

$ sudo aptitude install --without-recommends sysvinit-core sysvinit sysvinit-utils

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

$ sudo aptitude purge systemd
$ echo -e 'Package: systemd\nPin: origin ""\nPin-Priority: -1' | sudo tee /etc/apt/preferences.d/no-systemd

После удаления systemd контейнер пришел в норму.

UPDATE: Если попытаться удалить systemd из десктопной инсталляции, то по зависимостям предложит удалить много чего. Чтобы избежать этого нужно установить пакет sysvinit-core и перезагрузиться.

$ sudo apt-get install sysvinit-core
$ sudo reboot

пятница, 27 марта 2015 г.

Ошибки при запуске snmpd в Debian

Наткнулся на сообщения об ошибках в логе snmpd:

...
snmpd[3333]: /etc/snmp/snmpd.conf: line 143: Error: unknown monitor OID
snmpd[3333]: payload OID: extNames
snmpd[3333]: /etc/snmp/snmpd.conf: line 143: Error: unknown payload OID
snmpd[3333]: Unknown payload OID: extNames
snmpd[3333]: /etc/snmp/snmpd.conf: line 143: Error: Unknown payload OID
snmpd[3333]: payload OID: extOutput
snmpd[3333]: /etc/snmp/snmpd.conf: line 143: Error: unknown payload OID
snmpd[3333]: Unknown payload OID: extOutput
snmpd[3333]: /etc/snmp/snmpd.conf: line 143: Error: Unknown payload OID
snmpd[3333]: trigger OID: extResult
snmpd[3333]: /etc/snmp/snmpd.conf: line 143: Error: unknown monitor OID
snmpd[3333]: payload OID: dskPath
snmpd[3333]: /etc/snmp/snmpd.conf: line 143: Error: unknown payload OID
snmpd[3333]: Unknown payload OID: dskPath
...

Пакет snmp-mibs-downloader установлен, но оказалось что я забыл закомментировать запрет загрузки mibs. Чтобы это исправить нужно закомментировать строку "mibs:" в файле /etc/snmp/snmp.conf и строку "export MIBS=" в /etc/default/snmpd и перезапустить snmpd.

среда, 25 марта 2015 г.

Ошибка "error: RPC failed; result=22, HTTP code = 411" при git push

Если вы делаете git push в репозитарий, доступный по HTTP или HTTPS, и получаете ошибку вида:

$ git push origin master
Pushing to https://git.example.com/repos/test.git
POST git-receive-pack (chunked)
error: RPC failed; result=22, HTTP code = 411
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Everything up-to-date
Completed with errors, see above

то вам поможет увеличение значения параметра http.postBuffer (значение по-умолчанию: 1MB). Чтобы увеличить значение до 50MB выполните

$ git config --global http.postBuffer 52428800

Решение подсмотрено на stackoverflow.com.

Эгоистов и идиотов можно определить на парковке

Массу эмоций получил вчера утром, пытаясь выехать с парковки у дома. Какой-то нехороший человек припарковался в проезде между рядами машин, аккурат перекрыв мне нормальный выезд. Примечательно, что вдоль дороги и через дорогу есть много мест для парковки, но этот паразит поленился пройти лишних 50 метров. И это явление не редкость - часто есть свободные места, но они практически перекрыты вот такими идиотами.

Чтобы было понятно о чем я говорю:


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

вторник, 24 марта 2015 г.

Привязка пользователей хоста к определенному пользователю на сервере NFS

Один из недостатков NFSv3 - отсутствие аутентификации пользователей. Доступна лишь авторизация хоста по IP, которую при желании несложно обойти. Если на вашем сервере стоит разрешение для определенного хоста, то ее локальный администратор может создать другого пользователя с нужным uid/gid и тем самым обойти ограничение прав на сервере. Эта проблема решена в NFSv4, но я пока не реализовал все необходимые изменения в инфраструктуре.

Чтобы на NFSv3 исключить возможность обхода авторизации через создание пользователя с произвольным uid/gid я воспользовался следующей уловкой

# cat /etc/exports
/data/sources  host1(rw,sync,all_squash,anonuid=1000,anongid=500,no_subtree_check)
/data/sources  host2(rw,sync,all_squash,anonuid=1001,anongid=500,no_subtree_check)
/data/sources  host3(rw,sync,all_squash,anonuid=1002,anongid=500,no_subtree_check)

Использование all_squash в комбинации с anonuid/anongid привязывает любого пользователя с хоста к определенному uid/gid (который соответствует uid/gid пользователя в LDAP). Однако нужно понимать, что это решение бесполезно в случае подмены IP адреса хоста. В этом случае может помочь использование 802.1x на коммутаторах, но проще перейти к использованию NFSv4.

понедельник, 23 марта 2015 г.

Незаладился апгрейд: WD Red 4TB

Незаладился апгрейд сервера резервного копирования. Для расширения его дискового массива были заказаны два WD Red (WD40EFRX) на 4TB. Добавил диски в сервер, разметил, собрал в зеркало и стал наблюдать за скоростью синхронизации.

Вначале диски синхронизировались на скорости 150MB/s и обещали завершить процесс за 444 минуты. Но уже через пару минут скорость упала до 100-200 kB/s и время до завершения процесса стало стремиться к бесконечности.

Заглянул в dmesg

[ 6648.170563] ata5.00: exception Emask 0x0 SAct 0x7fffffff SErr 0x0 action 0x0
[ 6648.170590] ata5.00: irq_stat 0x40000008
[ 6648.170608] ata5.00: failed command: READ FPDMA QUEUED
[ 6648.170630] ata5.00: cmd 60/80:c0:00:bf:15/00:00:02:00:00/40 tag 24 ncq 65536 in
[ 6648.170633]          res 41/40:00:00:bf:15/00:00:02:00:00/40 Emask 0x409 (media error) 
[ 6648.170661] ata5.00: status: { DRDY ERR }
[ 6648.170677] ata5.00: error: { UNC }
[ 6648.171888] ata5.00: configured for UDMA/133
[ 6648.171955] ata5: EH complete
[ 6651.548219] ata5.00: exception Emask 0x0 SAct 0x7fffffff SErr 0x0 action 0x0
[ 6651.548247] ata5.00: irq_stat 0x40000008
[ 6651.548265] ata5.00: failed command: READ FPDMA QUEUED
[ 6651.548287] ata5.00: cmd 60/80:f0:00:bf:15/00:00:02:00:00/40 tag 30 ncq 65536 in
[ 6651.548289]          res 41/40:00:00:bf:15/00:00:02:00:00/40 Emask 0x409 (media error) 
[ 6651.548318] ata5.00: status: { DRDY ERR }
[ 6651.548330] ata5.00: error: { UNC }
[ 6651.549536] ata5.00: configured for UDMA/133
[ 6651.549596] ata5: EH complete

Логи наводнили ошибки с одного из дисков, но второй диск был в порядке. Проверил показания S.M.A.R.T. для обоих новых дисков - у одного все в порядке, а вот второй диск похоже умирает

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: FAILED!
Drive failure expected in less than 24 hours. SAVE ALL DATA.
Failed Attributes:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   001   001   051    Pre-fail  Always   FAILING_NOW 571

Извлек сбойный диск из сервера

echo 1 > /sys/block/sdd/device/delete

а на оставшийся натравил badblocks

# badblocks -svw /dev/sde

Почивший диск заменили по гарантии и позднее он присоединился к собрату в эстафете badblocks. Сегодня тестирование завершилось, заняв примерно 77 часов на каждый из дисков.

Checking for bad blocks in read-write mode
From block 0 to 3907018583
Testing with pattern 0xaa: done
Reading and comparing: done
Testing with pattern 0x55: done
Reading and comparing: done
Testing with pattern 0xff: done
Reading and comparing: done
Testing with pattern 0x00: done
Reading and comparing: done
Pass completed, 0 bad blocks found. (0/0/0 errors)

При этом в S.M.A.R.T. обоих дисков ничего криминального нету. Массив снова синхронизируется - надеюсь завтра сюрпризов не будет.

Релиз Midnight Commander 4.8.14

Сегодня анонсировали новую версию Midnight Commander 4.8.14. Список изменений тут. Пакеты для Debian/Ubuntu под архитектуры i386 и amd64 можно взять в моем репозитарии.