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

XenServer: редактирование конфигурации клона перед загрузкой

После клонирования базового образа мне нужно изменить основные настройки. Восстановление ключа хоста ssh, изменение статических IP-адресов, установка имени хоста и т. Д.

Из-за настроек сети DHCP не подходит. Это более или менее исключает использование SSH с предопределенным ключом или запуск сценария запуска, поскольку я не могу предоставить IP извне.

Я бы больше всего хотел смонтировать файловую систему новой машины на Dom0, но тома lvm экспортируются, и кажется плохим тоном импортировать их, чтобы машина Dom0 могла их видеть.

Как лучше всего изменить файлы в клонированной виртуальной машине перед загрузкой? Должен быть неинтерактивным, и я собираюсь угадать, что скриптовый доступ через xe console не будет работать хорошо.

Вам следует сделать то, что делают некоторые системы развертывания (например, Open Nebula) - создать крошечный второй диск, содержащий данные персонализации.

Настройте свой образ так, чтобы этот второй диск был там (возможно, с известным UUID или именем файловой системы), и, если он есть, считайте данные персонализации и примените их к ОС во время загрузки.

Другой классный вариант, который делает Open Nebula, - это фактически встраивать IP-адрес в MAC-адрес. Расшифруйте это внутри вашего domU, и все готово!

Или просто используйте автонастройку IPv6. :)

Из-за настроек сети DHCP не подходит. Это более или менее исключает использование SSH с предопределенным ключом или запуск сценария запуска, поскольку я не могу предоставить IP извне.

Как насчет использования статического IP-адреса в качестве «IP-адреса сборки», загрузки образа на этот известный IP-адрес с известным ключом и запуска сценария, который выполняет вход, перенастраивает и перезагружается?

Настройте базовый образ на

  • авто-IP
  • скачать архив конфигурации
    • через ftp или что-то простое
    • основывать имя tarball на чем-то уникальном для машины, например надстройке MAC
    • с известного адреса (например, 169.254.0.1 или fe80 :: 1)
  • распаковать tar, чтобы применить конфигурацию
  • перезагрузка

Также есть возможность проявить творческий подход, если хотите; автоматически генерировать tarball по запросу на загрузку, возможно, на основе информации из базы данных и, как правило, на основе скелета конфигурации.

По-видимому, vgexport / vgimport не требуется для перемещения дисков из одной системы в другую. Это инструмент административной политики для предотвращения доступа к томам во время их перемещения.

vgchange -a y пометил все тома как пригодные для использования, но это мне не помогло, потому что это не прямые разделы. Это образы виртуальных дисков, внутри которых есть таблицы разделов.

Затем я наткнулся на сценарий ниже в http://www.mceith.com/blog/?p=112. Прямое подключение дисков к ВМ ... при необходимости отрегулируйте, повторный вызов для размонтирования.

#!/bin/bash
# contact@mceith.com 2011
if [ ! -n "$1" -o ! -n "$2" -o ! -n "$3" ]; then
echo "Usage: $0 <target vm uuid> <control domain uuid> <mount|umount>"
exit 1
fi

case "$3" in
mount)
if [ -f /tmp/tmpvbd ]; then
echo "VBD allready exists!"
exit 1
fi

# Get uuid of vm you want to configure
VMUUID=`xe vbd-list vm-uuid=$1 params=vdi-uuid empty=false --minimal`

# Create VBD link to VM VDI on dom0
NEWVM=`xe vbd-create vm-uuid=$2 vdi-uuid=$VMUUID device=1`

# Plug it to dom0
xe vbd-plug uuid=$NEWVM

VM_VDEV=`xe vbd-list uuid=$NEWVM params=device --minimal`1

# Lag
sleep 1

# Mount it
mount /dev/$VM_VDEV /mnt/newvm

echo $NEWVM > /tmp/tmpvbd
# Do what ever you like
# ....
;;

umount)

if [ ! -f /tmp/tmpvbd ]; then
echo "No VBDs mounted?"
exit 1
fi

umount /mnt/newvm

NEWVM=`cat /tmp/tmpvbd`

# Unplug
xe vbd-unplug uuid=$NEWVM

xe vbd-destroy uuid=$NEWVM

rm -f /tmp/tmpvbd
;;
esac

exit $?