вторник, 30 сентября 2014 г.

Мой блиц-доклад с летнего LVEE 2014

Наткнулся на свой доклад с летнего LVEE 2014. Оказывается я постоянно пританцовываю на месте - понятия не имею почему, но нужно от этого избавляться.



Больше видео с летнего LVEE 2014

воскресенье, 21 сентября 2014 г.

Прекращение поддержки Ubuntu Quantal и Ubuntu Raring в моем репозитарии

Лучше поздно, чем никогда - в связи с End-Of-Life для Ubuntu Quantal и Ubuntu Raring я прекращаю собирать пакеты Midnight Commander для этих дистрибутивов.

Спасибо человеку, который дернул меня, что с репозитарием пакетов для Midnight Commander что-то не так. В процессе починки сего я и наткнулся на отсутствие нужных пакетов в репозитарии ftp.ubuntu.com/ubuntu/.

Обновляйтесь дамы и господа.

четверг, 4 сентября 2014 г.

Опять на тему 3G у MTS

Сегодня я хвалил MTS за приличную скорость работы, но сейчас вечер и интернет скорее мертв чем жив. Неважно через что я подключаюсь - wifi tethering на телефоне или USB модем (Huaweu E1550).

Только что выполнил тест скорости на speedtest.net

Прямое подключение к интернет через 3G
При таком жестком раскладе TCP/IP не справляется, в дампе траффика видно много пакетов SYN, но без ответного SYN ACK. В итоге через какое-то время соединение закрывается так и не открывшись. Открытые соединения тоже отваливаются через какое-то время неактивности. Очень похоже на тупой шейпер, который просто дропает пакеты подряд без разбора.

Но совсем другая картина, если подключиться к корпоративному VPN (OpenVPN через UDP) и повторить тот же тест на speedtest.net

Подключение к интернет через VPN по 3G
Через VPN соединение все летает шустро и без проблем. Выводы каждый делает сам, но похоже востребованность VPN в будущем будет только расти.

С таким 3G уже можно жить


Вторую неделю живу в отрыве от цивилизации. Интернет - только 3G (это особенно больно после рафинированного 100Mb/s Ethernet от АтлантТелекома).

Сегодня пару часов разгребал последствия падения инфраструктуры у хостера и только под вечер заметил, что как-то быстро интернет работает и особо не лагает. Зашел на speedtest.net - вполне приличный результат для 3G вечером. Вкупе с Hyper.net от MTS - жить можно. Надеюсь халява не закончится пока я это пишу...

P.S. Вчера скорость вечером была около 800-900kb/s, что даже для SSH напрягало.

вторник, 2 сентября 2014 г.

Эмулятор виртуальной смарткарты

В процессе изучения вопроса по использованию смарткарт в Linux наткнулся на проект Virtual Smart Card Architecture который предоставляет средства для эмуляции ридеров и самих смарткарт в Linux, Windows и MacOS X.

Features
  • Virtual smart card: Emulates a German Elektronischer Reisepass, ISO-7816 or cryptoflex cards
  • Virtual smart card: Connects to virtual reader over the internet
  • Virtual smart card: Supports relaying a local smart card to the virtual reader
  • PCSC relay: Emulates a ISO/IEC 14443 smart card relaying communication to a local smart card
  • PCSC relay: Uses OpenPICC or libnfc devices as NFC antenna for card emulation
  • nPA Library: Supports establishing a secure messaging channel to the new German identity card ("neuer Personalausweis" nPA)
  • nPA Library: Supports easy to use secure messaging implementation
  • nPA Library: Includes tool for PIN management for the nPA
  • Smart card reader emulator: Compatible with default CCID driver for windows and unix
  • Smart card reader emulator: Supports secure PIN commands
  • Smart card reader emulator: Supports PACE ("Standardleser" CAT-S)

Из всего фреймворка меня в первую очередь интересует функционал по эмуляции виртуальной смарткарты, потому я и подготовил пакет для пары экспериментов.

Установить его можно из моего репозитория

$ sudo aptitude install virtualsmartcard
$ sudo service pcscd restart

Для удобства работы со смарткартами нужно установить пакет opensc.

$ sudo aptitude install opensc

И затем проверить, что виртуальные ридеры видны в системе и доступны прикладному софту.

$ opensc-tool --list-readers
# Detected readers (pcsc)
Nr.  Card  Features  Name
0    No              Virtual PCD 00 00
1    No              Virtual PCD 00 01
2    No              Virtual PCD 00 02
3    No              Virtual PCD 00 03
4    No              Virtual PCD 00 04
5    No              Virtual PCD 00 05
6    No              Virtual PCD 00 06
7    No              Virtual PCD 00 07
8    No              Virtual PCD 00 08
9    No              Virtual PCD 00 09
10   No              Broadcom Corp 5880 [Contacted SmartCard] (0123456789ABCD) 00 00

В соседнем терминале запустим эмулятор смарткарты стандарта ISO7816 и проверим реакцию на это событие.

$ vicc -t iso7816
02.09.2014 11:24:28  [WARNING] Using default SAM parameters. PIN=1234, Card Nr=1234567890
02.09.2014 11:24:28  [INFO] Connected to virtual PCD at localhost:35963
02.09.2014 11:24:28  [INFO] Power Up
02.09.2014 11:24:29  [INFO] Power Down

Теперь обновим состояние ридеров - по идее сейчас виртуальная карта должна появиться в одном из ридеров.

$ opensc-tool --list-readers
# Detected readers (pcsc)
Nr.  Card  Features  Name
0    Yes             Virtual PCD 00 00
1    No              Virtual PCD 00 01
2    No              Virtual PCD 00 02
3    No              Virtual PCD 00 03
4    No              Virtual PCD 00 04
5    No              Virtual PCD 00 05
6    No              Virtual PCD 00 06
7    No              Virtual PCD 00 07
8    No              Virtual PCD 00 08
9    No              Virtual PCD 00 09
10   No              Broadcom Corp 5880 [Contacted SmartCard] (0123456789ABCD) 00 00

Все верно и в первом ридере статус карты сменился с "No" на "Yes". Теперь попробуем поработать с картой через opensc-explorer.

Запрос информации о корневом файле
OpenSC [3F00]> info 3F00

Dedicated File  ID 3F00

File path:     3F00
File size:     65535 bytes
ACL for SELECT:       N/A
ACL for LOCK:         N/A
ACL for DELETE:       NONE
ACL for CREATE:       NONE
ACL for REHABILITATE: NONE
ACL for INVALIDATE:   NONE
ACL for LIST FILES:   NONE
ACL for CRYPTO:       N/A
ACL for DELETE SELF:  N/A

Генерация 8 случайных чисел в смарткарте
OpenSC [3F00]> random 8
00000000: F9 B3 C9 9D 8F D6 DC 81 ........

Создаем на смарткарте файл 8888/1F00 и загружаем его обратно на диск
$ dd if=/dev/urandom of=test.bin bs=1024 count=1
1+0 записей считано
1+0 записей написано
 скопировано 1024 байта (1,0 kB), 0,000283354 c, 3,6 MB/c

$ opensc-explorer
OpenSC [3F00]> mkdir 8888 256

OpenSC [3F00]> cd 8888

OpenSC [3F00/8888]> create 1F00 1024

OpenSC [3F00/8888]> put 1F00 test.bin
Total of 1024 bytes written.

OpenSC [3F00/8888]> info 1F00

Elementary File  ID 1F00

File path:     3F00/8888/1F00
File size:     1024 bytes
EF structure:  Transparent
ACL for READ:         N/A
ACL for UPDATE:       N/A
ACL for DELETE:       N/A
ACL for WRITE:        N/A
ACL for REHABILITATE: N/A
ACL for INVALIDATE:   N/A
ACL for LIST FILES:   N/A
ACL for CRYPTO:       N/A

OpenSC [3F00/8888]> get 1F00 check.bin
Total of 1024 bytes read from 1F00 and saved to check.bin.

OpenSC [3F00/8888]> rm 1F00

OpenSC [3F00/8888]> cd ..

OpenSC [3F00]> rm 8888

Проверим, что содержимое файлов test.bin и check.bin совпадает

$ md5sum test.bin check.bin 
804420d7560e82065b74eff561cfb2c8  test.bin
804420d7560e82065b74eff561cfb2c8  check.bin

Несмотря на работу базовых функций инициализировать карту в формат PKCS15 не удастся.

Если нужна низкоуровневая работа с картой, то можно попробовать инструмент Java Smart Card Explorer.

$ wget --trust-server-names http://sourceforge.net/projects/jsmartcard/files/latest/download
$ java -jar JSmartCardExplorer.jar


PulseAudio для Skype

Вчера-позавчера Skype 4.2.x окончательно отказался входить в сеть и мне пришлось обновиться до версии 4.3.0.37. Примечательно, что при обновлении теряется возможность работать со звуком через ALSA и теперь для этого нужен PulseAudio. Если при первом запуске не переименовать старый профиль, то skype будет вылетать с ошибкой сегментации, поэтому

$ mv ~/.Skype ~/.Skype~
$ skype

Даже если у вас и не установлен сервер pulseaudio, то скорее всего его клиентская часть libpulse0 у вас уже установлена - остается установить сам pulseaudio, но так чтобы он не поломал работающие с alsa приложения. Для этого подойдет эта инструкция.

Для начала устанавливаем pulseaudio

$ sudo aptitude update
$ sudo aptitude install pulseaudio

Далее настраиваем общесистемную конфигурацию pulseaudio для совместной работы с ALSA.

/etc/pulse/daemon.conf
exit-idle-time = 0 # Exit as soon as unneeded
flat-volumes = yes # Prevent messing with the master volume

/etc/pulse/client.conf
# Applications that uses PulseAudio *directly* will spawn it,
# use it, and pulse will exit itself when done because of the
# exit-idle-time setting in daemon.conf
autospawn = yes

/etc/pulse/default.pa
# This startup script is used only if PulseAudio is started per-user
# (i.e. not in system mode)

.fail
    # Set tsched=0 here if you experience glitchy playback. This will
    # revert back to interrupt-based scheduling and should fix it.
    #
    # Replace the device= part if you want pulse to use a specific device
    # such as "dmix" and "dsnoop" so it doesn't lock an hw: device.
    
    # INPUT/RECORD
    load-module module-alsa-source device="default" tsched=1
    
    # OUTPUT/PLAYBACK
    load-module module-alsa-sink device="default" tsched=1 
    
    # Accept clients -- very important
    load-module module-native-protocol-unix

.nofail
.ifexists module-x11-publish.so
    # Publish to X11 so the clients know how to connect to Pulse. Will
    # clear itself on unload.
    load-module module-x11-publish
.endif

После этого запускаю два экземпляра MPlayer (один через pulseaudio, а второй через ALSA) и убеждаюсь, что все работает и PulseAudio не пытается захватить монопольно звуковое устройство.

$ mplayer -ao pulse music/one.mp3
$ mplayer -ao alsa music/two.mp3

Если в результате оба трека играют одновременно, то можно запускать skype и продолжать радоваться жизни.

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

Немного подробностей о работе access check в MySQL

Если вы создали в MySQL пользователя someuser@'%' и не можете взять в толк, почему его не пускает с localhost, то вам по этой ссылке.

Более подробно вопрос раскрыт в официальной документации MySQL.

Чтобы продебажить приоритет в котором выдается доступ, нужно выполнить следующий запрос

SELECT Host,User FROM mysql.user ORDER BY Host DESC, User DESC;

В результате вы получите что-то вроде такой выборки

+-------------+-----------------+
| Host        | User            |
+-------------+-----------------+
| mysql55.lan | root            |
| mysql55.lan |                 |
| localhost   | root            |
| localhost   |                 |
| ::1         | root            |
| 127.0.0.1   | root            |
| %           | someuser        |
+-------------+-----------------+

При таком раскладе берется первое совпадение - Host="localhost", User="" (пустое поле User означает любого пользователя) и следовательно до обработки someuser дело не доходит.