С помощью PowerCLI от VMware вы можете вызвать сценарий внутри гостя, даже до того, как гостевая система подключится к сети, с помощью командлета Invoke-VMScript (требуется установка vmtools).
Доступен ли аналогичный механизм для вызова скриптов внутри гостевых систем KVM до того, как сеть станет доступной?
Мне нужно для настройки после развертывания.
В качестве обходного пути я подумал о монтировании образа диска и chroot, но я ищу более «скриптовый» и простой способ.
Спасибо.
Мы предоставляем каждому гостю дополнительное блочное устройство только для чтения, прикрепленное к простому файлу на хосте. Хост виртуальной машины может использовать этот канал для передачи гостевой информации вниз к гостю безопасным однонаправленным способом: в нашей установке это просто tar-файл с настройками файловой системы и сценариями инициализации. Поверхность атаки гостя-> хоста минимальна, и нам не нужно иметь дело со значительными накладными расходами, накладываемыми libguestfs.
Вот фрагмент гостевого XML libvirt, который мы используем:
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source file='/vm/hostconf/testhost.hostconf.tar'/>
<target dev='vdb' bus='virtio'/>
<readonly/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
В гостевой системе небольшой сценарий инициализации распаковывает tar-файл и вносит необходимые изменения.
Итак, здесь есть три варианта:
Есть очень стандартный способ запуска скриптов на любой Дистрибутив Linux до того, как появится сеть, то есть поместить их в последовательность загрузки перед запуском сети. Например, на моем компьютере с CentOS 6 сеть запускается /etc/rc3.d/S10network
. Так что, если я хотел что-то запустить до появления сети, я мог бы вставить это как /etc/rc3.d/S05myscript
.
Для дистрибутивов, которые выпили upstart
или systemd
coolaid, будут другие, более сложные способы сделать это; но это все еще актуально.
редактировать: это именно то, что вы имели в виду под «перед установкой в сеть», это просто не то, что вы имели в виду под «вызовом сценария». Вы хотите вызвать скрипт из где-нибудь кроме самой машины (в данном случае от узла KVM), что нормально, и я открыто признаю, что мое решение не помогает, но вам действительно следует пересмотреть свой вопрос, чтобы ваши требования были более ясными!
Между прочим, я не знаю, как это сделать с KVM.