Назад | Перейти на главную страницу

Вызов сценария в гостевой KVM-машине до того, как сеть станет доступной?

С помощью 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-файл и вносит необходимые изменения.

Итак, здесь есть три варианта:

  1. Используйте libvirtd api для получения доступа к консоли и выполнения команд таким образом. Я бы не советовал это, так как это немного грязный прием. Если вы не отключите запуск сети сразу по умолчанию, вам придется
  2. Используйте libguestfs, чтобы смонтировать диск и настроить параметры перед загрузкой. Это то, что делает система, которую я разработал, на самом деле ее довольно легко сделать и не сложно управлять. Мы используем perl, а Sys :: GuestFS позволяет нам без особых проблем создавать сценарии.
  3. Настройте машину для подключения к сети через dhcp и запустите сервер dhcpd, который дает ему временный IP-адрес, затем подключитесь через ssh, настройте конфигурацию сети и перезагрузите ее. Это наиболее надежное решение, но оно требует от вас создания сценария для сервера dhcpd. Надеюсь, это поможет.

Есть очень стандартный способ запуска скриптов на любой Дистрибутив Linux до того, как появится сеть, то есть поместить их в последовательность загрузки перед запуском сети. Например, на моем компьютере с CentOS 6 сеть запускается /etc/rc3.d/S10network. Так что, если я хотел что-то запустить до появления сети, я мог бы вставить это как /etc/rc3.d/S05myscript.

Для дистрибутивов, которые выпили upstart или systemd coolaid, будут другие, более сложные способы сделать это; но это все еще актуально.

редактировать: это именно то, что вы имели в виду под «перед установкой в ​​сеть», это просто не то, что вы имели в виду под «вызовом сценария». Вы хотите вызвать скрипт из где-нибудь кроме самой машины (в данном случае от узла KVM), что нормально, и я открыто признаю, что мое решение не помогает, но вам действительно следует пересмотреть свой вопрос, чтобы ваши требования были более ясными!

Между прочим, я не знаю, как это сделать с KVM.