Архив : Март, 2019
После обновления рабочей машины до версии Windows 10 1809, обнаружил что для нее нельзя скачать пакет RSAT с сайта Microsoft.
А после обновления версии до 1809 установленный ранее пакет RSAT был удален. В этой заметке я рассказу как быстро вернуть RSAT на место.
Недавно столкнулся с проблемой при создании SSL сертификов. Нужно было подписать сертификат на доменном CA для одного хоста, по привычке я воспользовался командой:
1 |
openssl req -new -newkey rsa:2048 -nodes -keyout SSL.key -out SSL.csr |
Но после установки сертификатов обнаружил что Chrome, в отличие от других браузеров не принимает такой сертификат. В этой заметке я расскажу в чем проблема и как ее исправить.
В VMware Vsphere есть удобный механизм кастомизации ОС при деплое — OS Customization
С помощью него можно например ввести виртуальную машину в домен или запустить скрипты после деплоя.
Это очень удобно, особенно при развертывании сотни виртуальных машин. Похожий механизм захотелось иметь и в KVM.
В этой статье мы рассмотрим как обеспечить похожий функционал на примере Proxmox и шаблона Windows
При моргании сети или при длительной недоступности одной из реплик clickhouse — возможно ее повреждение.
В таком случае сервер может не стартовать службу clickhouse и при попытке пересоздания реплицируемой таблицы вы получите ошибку 253 Replica already exists..
В VMware, с помощью Powercli, есть возможность запускать команды внутри гостевых ОС с помощью командлета Invoke-VMScript , это очень удобно, ведь с помощью этого механизма можно выполнить необходимые команды на сотне VM, не открывая на них консоль.
Работая с KVM мне захотелось найти аналог данного механизма, чтобы запускать команды из консоли гипервизора порямо на гостевых ОС, по аналогии с VMware.
В данной статье мы рассмотрим как использовать qemu агент для выполнения задуманного.
Для начала установите qemu агент, взять его можно по ссылке
Для установки в Linux используйте слеющие команды:
1 |
apt-get install qemu-guest-agent |
1 |
yum install qemu-guest-agent |
После установки агента внутри виртуальной машины, нужно активировать его поддержку в настройках VM, вот так активированный агент для VM выглядит в Proxmox:
Если вы используете libvirt, то xml код будет примерно такой:
1 2 3 4 |
<channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/f16x86_64.agent'/> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel> |
Теперь включите VM, с помощью команды qm ping, можно убедиться что агент внутри VM функционирует нормально.
Если команда
1 |
qm ping 101 |
где 101 — это ID вашей VM, не вернула ничего — значит агент функционирует нормально.
Теперь рассмотрим как запускать команды внутри VM с windows из консоли гипервизора KVM (он же в данном случае Proxmox)
Чтобы подключиться к сессии VM, выполните команду, где 101 — ID вашей VM
1 |
socat /var/run/qemu-server/101.qga - |
Теперь нам нужно передать команду внутрь гостевой ОС, команды передаются в формате JSON.
Для примера отправим команду на перезапуск гостевой ОС
1 |
{"execute":"guest-exec", "arguments":{"path":"cmd.exe","arg":["/c","shutdown", "-r", "-f"]}} |
Данная команда перезагрузит вашу VM.
По аналогии можно перезагрузить VM без использования cmd:
1 |
{"execute":"guest-exec", "arguments":{"path":"shutdown.exe","arg":["-r", "-f"]}} |
или например та же перезагрузка, только с помощью powershell:
1 |
{"execute":"guest-exec", "arguments":{"path":"powershell.exe","arg":["-command","restart-computer", "-force"]}} |
Вот так к примеру можно запустить sysprep:
1 |
{"execute":"guest-exec", "arguments":{"path":"c:\\windows\\system32\\sysprep\\sysprep.exe","arg":["/oobe", "/generalize", "/reboot"]}} |
Если вы не хотите подключаться к сессии агента, а просто отправить команду одной строкой — используйте echo и отправляйте команду в socat:
1 |
echo '{"execute":"guest-exec", "arguments":{"path":"c:\\windows\\system32\\sysprep\\sysprep.exe","arg":["/oobe", "/generalize", "/reboot"]}}' | socat /var/run/qemu-server/101.qga - |
Обратите внимание что слеши и спец символы в JSON экранируются, поэтому, перед тем как отправлять команду гостю — проверьте что синтаксис корректный.
Если не уверены, то всегда можно воспользоваться командой ConvertTo-Json в Powershell, например:
1 |
'cmd.exe "с:\windows\system32\sysprep.exe /oobe"' | ConvertTo-Json |
на выходе получите строку, с экранированным выводом:
1 |
"cmd.exe \"с:\\windows\\system32\\sysprep.exe /oobe\"" |
На этом все.
В следующей статье рассмотрим как можно автоматизировать процесс деплоя и ввода в домен AD, VM на базе KVM.
Удачной настройки!