XenServer:启动前编辑克隆配置

XenServer:启动前编辑克隆配置

克隆基础映像后,我需要重新配置基本设置。重新生成 ssh 主机密钥、更改静态 IP 分配、设置主机名等。

由于网络设置,DHCP 不是一种选择。这或多或少排除了使用预定义密钥进行 SSH 连接或运行启动脚本的可能性,因为我无法从外部提供 IP。

我非常想在 Dom0 上安装新机器的文件系统,但是 lvm 卷已被导出,而将它们导入以便 Dom0 机器能够看到它们似乎是一种错误的形式。

对于在启动前更改克隆 VM 中的文件,您最好的建议是什么?必须是非交互式的,我猜通过脚本访问xe console不会很好地工作。

答案1

您应该做一些部署系统(例如 Open Nebula)所做的事情 - 创建一个由个性化数据组成的微型第二个驱动器。

配置您的图像以期望第二个驱动器存在(可能具有已知的 UUID 或文件系统名称),如果存在,则读出个性化数据并在启动期间将其应用于操作系统。

Open Nebula 的另一个很酷的选项是将 IP 地址嵌入到 MAC 地址中。在您的 domU 中解码它,您就设置好了!

或者,只需使用 IPv6 自动配置。:)

答案2

由于网络设置,DHCP 不是一种选择。这或多或少排除了使用预定义密钥进行 SSH 连接或运行启动脚本的可能性,因为我无法从外部提供 IP。

那么如何使用静态 IP 作为“构建 IP”,使用已知密钥在此已知 IP 上启动映像并启动登录、重新配置和重新启动的脚本呢?

答案3

配置基础镜像为

  • 自动 IP
  • 下载配置 tarball
    • 通过 ftp 或者其他简单的方式
    • 根据机器独有的信息(例如 MAC 地址)来命名 tarball 名称
    • 来自已知地址(例如 169.254.0.1 或 fe80::1)
  • 解压 tar 以应用配置
  • 重启

如果您愿意,还可以发挥真正的创造力;根据下载请求自动生成 tarball,可能基于数据库信息,通常基于配置框架。

答案4

显然,vgexport/vgimport 不是将驱动器从一个系统移动到另一个系统所必需的。它是一种管理策略工具,用于在移动卷时阻止对卷的访问。

vgchange -a y将所有卷标记为可用,但这对我没有帮助,因为它们不是直接分区。它们是虚拟磁盘映像,其中包含分区表。

然后我偶然发现了下面的脚本http://www.mceith.com/blog/?p=112. 直接将磁盘附加到虚拟机...根据需要进行调整,重新调用卸载。

#!/bin/bash
# [email protected] 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 $?

相关内容