Про QEMU
2015-07-16 10:02:30
Обнаружил тут, что не существует удобного GUI для QEMU/KVM.
Есть virt-manager, но он во-первых ...
+ развернуть текст сохранённая копия
Обнаружил тут, что не существует удобного GUI для QEMU/KVM.
Есть virt-manager, но он во-первых, требует громоздких библиотек и демонов, да еще и слинкованных со всякими гадостями вроде policykit, во-вторых со снапшотами нифига работать не умеет, в третьих отказывается запускать виртуальную машину, если не находит USB-девайса который был к машине подключен в предыдущий раз.
Есть qemuctrl, который в общем-то похож на то что надо - просто приделывает к окошку меню, но к сожалению, в этом меню не работают как раз самые нужные мне функции - подключение-отключение USB-устройств на лету.
Есть aqemu, но я вообще не понял какую задачу решщали авторы этой софтины. Там есть довольно развесистое управление созданием VM, но нет управления работой, что как раз гораздо важнее. Поскольку машина создается единожды, а работает годами.
Соответственно, возникла мысль написать свою управлялку. Благо развесить по менюшкам посылание команд в монитор qemu и приделать парсинг ответов, несложно. Такой тонкий-тонкий слой, который делает несколько полезных вещей удобными, не мешая делать все остальные имеющимися способами.
Вопрос в том, какая функциональность должна поддерживаться, а какую можно оставить в покое, сделав для особых извращенцев консольное окно куда можно вбивать руками команды монитора.
1. Поддерживать ли работу VM в бэкграунде? Ну то есть большую часть моих случаев покрывает режим, подобный VMWare Workstation - запускаем vm в рамках сессии, что-то с ней делаем, а потом шатдауним. Для этого подойдет режим -video sdl -monitor stdout. С него и надо начинать, как с самого простого.
Но иногда хочется иметь виртуальные машины, работа которых не прекращается с закрытием окна. Стоит ли возиться с монитором по tcp и vnc-дисплеем (кстати, по-моему использование vnc и spice дисплеи, единственный способ сделать, чтобы мышь спокойно пересекала границы окна виртуального экрана).
Или оставить это большим и толстым серверным системам виртуализации - proxmox, libvirtd etc?
Кстати spice отдельно от libvirt бывает?
2. Очевидно, что следует поддерживать операции управления питанием system_powerdown, system_reset, system_wakeup. (кстати, не нашел в документации действия, обратного к system_wakeup - подниматься из саспенда мы умеем, а попадать в него как?)
Не менее очевидно, что нужно уметь управлять removable устройствами - из-за этого проблема и возникла. usb_add/usb_del, eject, change diskdevice filename, Причин возиться с параллельными-последовательными портами и мышами-планшетами я пока не вижу. Хотя команд для управления ими в мониторе море.
3. Хорошо бы поддержать работу со снапшотами. Но для этого надо понять как она там делается.
В принципе мне бы хватило обертки вокруг qemu-img -b. Вообще про снапшоты написано много букв здесь и здесь.
Насколько я понимаю, основная задача под которую дизайнились эти снапшоты (управляемые через монитор) - бэкап работающей виртуальной машины, мне не слишком актуальна.
Для моего режима работы то, что откат в предыдущее known-good состояние может требовать перезагрузки, а бэкап - выключения виртуальной машины - не критично. Поскольку это применение - рабочая станция для экспериментов.
Но вот увидеть на экране дерево снапшотов (или хотя бы стэк) и по нему поперемещаться - это ценно.
Потому что, как мы знаем, кнопка revert to snapshot - лучший антивирус.
4. В управление сетевыми устройствами и организацию виртуальных локальных сетей лезть не хочется. Для меня это не слишком актуальная задача, а наработок там много. Поскольку основной дизайн-идеей будет "если что-то можно сделать через параметры командной строки qemu, это по-прежнему можно сделать с аналогичным ситаксисом" я лучше сеть не буду трогать совсем. Хотя использование эмулятора, умеющего разные процессоры открывает интересные перспективны. Например запуска каких нибудь сборок конкретных OpenWRT под qemu-system-mips в качестве роутера виртуальной сети. Но вот пусть кому это надо, тот это и дописывает.
5. Формат файла описания виртуальной машины. Боюсь что без него обойтись нельзя. Пробрасывать все опции командной строки в запускаемый qemu и использовать в качестве файла конфигурации скрипт, вызывающий мой gui, как сделано в qemuctl, конечно, можно, но чем-то мне эта идея не нравится.
Есть у меня подозрение. что формат файла описания виртуальной машины должен выглядеть так, чтобы команда
qemu `cat filename.vm`
запускала эту виртуальную машину без посредства нашего GUI. C дефолтным видео и дефолтным монитором, а все остальное точно так же.
Кстати, с таким форматом файлов, мы можем задачу GUI для создания виртуальных машин не решать совсем. Хотя написать простенький визард на уровне того же virt-manager-а - занятие на пару часов.
Upd Совсем забыл: 6. Отправка в виртуальную машину клавиш, которые родная GUI-среда хоста злобно перехватывает и к приложению не пропускает (Ctrl-Alt-F?, Ctrl-Alt-Backspace, Ctrl-Alt-Del)
This entry was originally posted at http://vitus-wagner.dreamwidth.org/1106342.html. Please comment there using OpenID. Now there are comments
Тэги:
open,
source,
мысли,
непричесанные,
проа-конкурс
Не PKI единым или соцпакеты для сотрудников
2015-07-10 15:51:46
Привет, Habrahabr!
Наша компания известна прежде всего своими решениями в области ...
+ развернуть текст сохранённая копия
Привет, Habrahabr!
Наша компания известна прежде всего своими решениями в области информационной безопасности. Мы выпускаем такие продукты, как электронные идентификаторы Рутокен и электронные ключи для защиты софта Guardant.
Обычно наши статьи носят сугубо технический характер, но на этот раз речь пойдет о нашей внутренней системе учета социальных выплат для сотрудников.
Несколько слов о предыстории вопроса. Мы — современная российская ИТ-компания, и, как наверное любая ИТ-компания, мы очень любим все автоматизировать. Помимо прочих, в нашей компании существует компенсация выплат на проезд, походы в театр и фитнес. Долгое время сотрудники были вынуждены собирать и хранить билеты, в нужный день предоставлять их в бухгалтерию, а затем получать свои деньги. В конце концов это процедура нам надоела и мы решили написать максимально простое решение для автоматизации этого процесса. Получившуюся систему мы успешно применяем у себя в компании и сегодня передаем ее в Open source.
Читать дальше →
Тэги:
<<актив>>,
github,
open,
opesource,
source,
web-разработка,
блог,
веб-разработка,
веб-сервисы,
компании,
компания,
рутокен
OpenSSH и eToken
2015-07-02 12:58:03
Попробовал воспользоваться выданным на работе eToken для доступа на линукс-машину по ssh.
+ развернуть текст сохранённая копия
Попробовал воспользоваться выданным на работе eToken для доступа на линукс-машину по ssh.
Естественно, на машине, куда я втыкал токен, уже установлен Safenet Authentication Client, родной софт от производителя токена, который содержит PKCS11-модуль libeTPkcs11.so. С его помощью можно использовать этот токен в firefox-е и еще много где, причем с ключами и сертификатами, созданными виндовым софтом.
Интерес представляло, насколько хорошо поддержка pkcs11 интегрирована в OpenSSH.
Наибольшую сложность составило почему-то преобразование открытого ключа, извлеченного из сертификата средствами OpenSSL в формат openssh-вого identity.pub. Команда
ssh-keygen -i -m pem -f filename.pem
злобно ругается на нераспознаваемый формат.
Это потому что, openssl полностью перешла на PKCS8 форматы а под pem в опции -m ssh-keygen понимается старый формат.
Правильная команда выглядит как
openssl x509 -in fromtoken.crt -noout -pubkey >filename.pem
ssh-keygen -i -m PKCS8 -f filename.pem
Получить старый формат средствами OpenSSL можно, Для этого в команде rsa есть ключик -RSAPublicKey_out
Можно взять ключик, выдрранный командой x509 (выше) из сертификата и сконвертировать.
Сертификат из токена достается командой:
pkcs11-tool --module libeTPkcs11.so --type cert --id <какой-там-у-вас-id> --read-object
Эта команда выдает сертификат в формате der на stdout, поэтому надо либо переназначить в файл, либо сразу направлять в openssl x509, не забыв ей сказать -inform DER.
Пин-кода чтение сертификата по очевидным причинам не спрашивает.
После того, как ключ получен и положен куда надо в authorized_keys дальше все просто:
Либо
ssh -I libeTPkcs11.so куда.надо
и мы попадаем на нужный хост, одноразово обратившись к токену.
Либо
ssh-add -s libeTPkcs11.so
и золотой ключик у вас в агенте. В обоих случаях, конечно PIN спросят.
Агент нормально переживает внезапное выдергивание токена. Правда, ключ в списке остается.
Что интересно, при попытке его удалить (командой
ssh-agent -e libeTPkcs11.so
спрашивают пассфразу.
При выдернутом токене.
Поиграться что-ли еще с pam-pkcs11?
Там интересно - предоставляются разные способы мэппинга информации из сертификата на карте в юзернеймы, что полезно в моём случае, поскольку юзернеймы на машине куда ходить и информация помещаемая в сертификат, контролиуются разными людьми. Сертификат - сисадмином конторы, а машина - мной.
Кроме того, в состав pkcs11 входит pkcs11_eventmgr, который позволяет, например, лочить экран при выдергивании токена. Интересно, удастся ли сделать так, чтобы ssh-agent при выдергивании токена "забывал" пассфразу от него, но когда после вставления токена она вводится в screensaver, получал бы ее оттуда средствами pam.
This entry was originally posted at http://vitus-wagner.dreamwidth.org/1103668.html. Please comment there using OpenID. Now there are comments
Тэги:
debian,
open,
source,
криптография
К вопросу о кроссплатформности
2015-06-29 23:51:11
Погонял сегодня ctypescrypto на разных платформах (после того как мне отрепортили баг, что на MacOS ...
+ развернуть текст сохранённая копия
Погонял сегодня ctypescrypto на разных платформах (после того как мне отрепортили баг, что на MacOS у меня динамическая библиотека неправильно ищется)
Под Windows пришлось поправить 1 тест. Любимая моя привычка - создавать временный файл и не закрывать. А потом удивляться - а что это на некторых платформах его по второму разу открыть не могут.
Под linx/armhf - ну даже не интересно.
Под pypy - работает. Сходу.
Под python3 - ожидаемо не работает. Для модуля который активно работает как с байтами, так и с юникодом, это неудивительно. Вопрос в том, а можно ли принципиально сделать этот модуль таким, чтобы был совместим с обоими версиями. По-моему нет.
Потому что полно объектов, у которых определены методы __str__ и __unicode__, которые должны быть переименованы, соответственно, в __bytes__ и __str__
This entry was originally posted at http://vitus-wagner.dreamwidth.org/1103559.html. Please comment there using OpenID. Now there are comments
Тэги:
open,
source,
криптография
Беда, коль сапоги начнет тачать пирожник
2015-06-29 13:25:31
Тут вот в процессе очередного обсуждения поделий Поттеринга пришла в голову мысль, что все эти ...
+ развернуть текст сохранённая копия
Тут вот в процессе очередного обсуждения поделий Поттеринга пришла в голову мысль, что все эти новвоведения из области "компьютер должен за вас сам подумать", возникают из-за того, что люди не делают хорошо своё дело, и за ними вынуждены доделывать другие люди, для которых это дело не свое.
Сисадмин пишет 800-строчный скрипт, дабы он запускал кривой и глючный сервис, то есть выполняет работу, которую по хорошему счету должен был бы выполнять разработчик сервиса.
В результате, у сисадмина нету времени на выполнение своих прямых обязанностей, например настройку связки DHCP+DNS (а что там настраивать? У меня в dd-wrt само работает) чтобы в локальном dns автоматически прописывались имена тех машин, которые к этой сети подключаются.
Поэтому юзеры начинают мечтать о наличии WINS, avahi и прочих протоколов, которые позволят устройствам узнать что-то друг про друга в обход центрального пункта сети, находящегося под контролем сисадмина. Хотя вот проводить в жинь принятую в данной сети политику доступа (устройств друг к другу) - это прямая задача сисадмина.
This entry was originally posted at http://vitus-wagner.dreamwidth.org/1103184.html. Please comment there using OpenID. Now there are comments
Тэги:
open,
source,
компьютерное