SDB:如何在 XenServer 上将 openSUSE 13.1 安装为 PV 虚拟机
关于如何在XenServer 6.x和其他有用的技巧上安装openSUSE 13.1 x86_64的图文说明。
问题
由于openSUSE 13.1中Xen的最低兼容版本已增加到Xen 4.2,因此原生安装程序将拒绝在仍然运行Xen 4.1.x的XenServer版本(早于6.5)上启动。
如果您运行XenServer 6.5或更高版本,可以使用SLES 12模板正常安装openSUSE 13.1。您可能需要删除/etc/systemd/system/YaST2-Firstboot.service才能使其正确启动(在XenCenter的VM属性下的“启动参数”中使用“init=/bin/bash”启动)。
在该页面创建之后,openSUSE开发团队审查了该决定,并将内核构建树中的Xen兼容版本恢复到4.1。这不会影响在版本3.11.10-17.1之前发布的任何openSUSE 13.1内核。有关详细信息,请参阅Bug 851338的讨论。
因此,建议将openSUSE 13.1安装在Xen 4.1上的方法是将其安装为HVM,更新为内核3.11.10-17.1或更高版本,然后将其转换为PV。
解决方案
以下说明提供了在Xen 4.1上安装openSUSE 13.1的其他方法。
为了克服内核中Xen兼容性问题,可以使用openSUSE预配置的“Linux内核开发”模式的HVM安装来轻松地重新编译它,使其与Xen 4.1兼容。
要了解更多关于Linux客户机作为未修改内核的HVM客户机运行的信息,请参阅以下文章:Linux PV on HVM drivers
流程
过程包括两个主要步骤
- 安装openSUSE 13.1作为HVM客户机并重新编译内核
- 设置安装环境,该环境将提供可用于将openSUSE 13.1作为原生PV客户机安装的重新编译的内核。
将openSUSE 13.1安装为HVM客户机
开始以HVM模式安装openSUSE 13.1。为此,您需要从[1]下载安装介质。我个人建议使用x86_64位版本,因为这些天(恕我直言)在Xen上运行i386没有优势。我建议获取网络安装iso,因为我们可以使用它来创建本地存储库以使用重新编译的内核启动PV模式安装。
- 使用“其他安装介质”(slide1)创建新的VM。
- 提供有意义的名称(slide2)。
- 使用您下载的完整DVD安装的iso(slide3)。
- 由于我们将重新编译内核,因此分配尽可能多的资源给您的主机允许(slide4)。
- 构建内核可以使用相当多的空间。为此也要慷慨(slide5)。
- 我使用文本模式,因为它使事情变得更轻便。如果您更喜欢,可以使用默认的X安装(slide6)。
- 同样,作为个人选择,我选择最小系统,因为对于这项任务我不需要任何额外的东西,但您可以选择任何其他桌面类型,因为HVM模式提供VNC监视器,WM可以利用它。要导航,请使用Alt+<突出显示的字母>选择项目和操作。例如,在slide7的屏幕上,要继续,您将按Alt+n激活“下一步”操作。
- 在安装程序的最终屏幕上,选择“更改”和“软件”以将“Linux内核开发模式”添加到安装中。(slide8)。
- 从过滤器(Alt+f)选择模式。(slide9)。
- 在模式中向下滚动,直到到达“Linux Kenel Dev”,然后按空格键选择它。(slideslide10)。
- 让我们也安装“Web和LAMP服务器”模式,以便我们可以为我们的存储库设置。(slide11)。
- 确认将添加到安装中的其他软件包。(slide12)。
- 这个slide13有点个人选择。虽然我试图在桌面/服务器物理系统中使用新的GRUB2,但对于VM,我仍然觉得比GRUB更舒适。此外,如果您决定将此VM转换为PV,它还可以节省一步(尽管我不建议这样做,因为此VM将非常有用作未来内核版本或其他pv-ops受限开发的构建环境)。
- 选择GRUB后,您可以接受提出新配置。在这个阶段,启动选项中没有什么太复杂的,所以它应该能很好地完成新配置。(slide14)。
- 这是所有必需的配置。现在您可以按“安装”(Alt+I)并再次按“安装”以完成。关于HVM linux的一点说明。普遍的观点是,由于模拟硬件上的性能损失,Linux VM不应作为HVM客户机运行。但是,随着新的物理硬件扩展,HVM模式可能比PV具有优势,因为PV客户机向Xen发出的系统调用数量较少。对于提供HAP[2]的硬件,在特定操作上可以预期更好的响应。.
- 安装完成后,转到VM的“常规”选项卡,然后单击“未安装XenServer工具”的链接(slide16)。
- 选择安装XenServer工具。XenServer将挂载xs-tools.iso并直接带您进入VM控制台。(slide17)。
- 您会看到“ata”警告弹出,因为openSUSE安装介质已消失,并且插入了新的iso - 我认为您可以安全地忽略它。挂载DVD驱动器:(slide18)# mount /dev/sr0 /mnt.
- 由于XenServer仅支持Linux的特定发行版,因此您不能直接运行安装程序。您需要显式指定与openSUSE密切匹配的发行版的类型和主版本号。在我们的例子中,发行版将是sles,主版本号将是11。(slide19)#./install.sh -d sles -m 11.
- 如slide20所示,VM将通过事件通道与xenstore通信,XenServer将识别已安装工具。但是,发行版信息在哪里?还记得我选择的最小服务器吗?好吧,显然,该“最小”模式不符合LSB。您可能会说“那又怎样,/etc/SuSE-release仍然在那里,对吧?”这是真的,但正如我所说,xs-tools仅查找特定的发行版,而openSUSE不是其中之一。但是不用担心,只需安装lsb-release,一切都会变得很漂亮。
- 安装lsb-release:(slide21)# zypper in lsb-release.
- 此时,您可以重新启动主机,或者只是重新启动xe-linux-distribution守护程序。使用systemctl或init.d命令:(slide22)# /etc/init.d/xe-linux-distribution restart.
- 瞧!现在您拥有具有动态内存控制的HVM openSUSE,可以在主机之间迁移,并在XenCenter中显示操作系统版本和网络信息。(slide23)只是一个补充说明。如果您希望将HVM VM用于不仅仅是构建环境,则有一些优化可以减少事件通道的数量并增加HVM密度[4]。
- 这是一个拍摄快照的好机会。这是一个基本的HVM安装,没有添加任何额外的东西(除了Linux内核开发和LAMP模式,LSB发布包和xs-tools),可以克隆、导出或简单地恢复。(slide24)
- 现在,我们准备好进行不太有趣的部分 - 让我们重新编译与Xen 4.1匹配的Xen启用内核。# cd /usr/src/linux-obj/x86_64/xen
# make menuconfig请注意,通过选择Linux内核开发模式,openSUSE为我们安装了完整的工具链和预配置的.config文件以构建内核 - 这不是很棒! - 导航到
Device Drivers -> XEN -> Xen version compatibility (4.2.0 and later) ---> Change 4.2.0 to 4.1.0
退出所有子类别并保存配置。使用-j(线程数= 2 * vCPU)运行make。在我的例子中,我的物理主机有4个pCPU。我为HVM VM分配了4个vCPU,因此将是4个vCPU * 2 = 8# make -j8 - 如性能图(slide25)所示,编译内核大约需要30分钟 - 所以去烧水壶,还需要一段时间。
- 太棒了!我们的内核已经烘烤好并新鲜出炉。让我们将其复制到XenServer的Dom0。首先,我登录到XenServer Dom0控制台并在/boot下创建一个新目录# mkdir /boot/guest
- 然后我检查正在运行的内核版本并将其scp到地址为192.168.0.196的dom0# uname -r
# scp ./arch/x86_64/boot/bzImage root@192.168.0.196:/boot/guest/vmlinuz-3.11.6-4-xen请注意,我们在将它复制到Dom0时使用了附加到vmlinuz的版本。这将在本文的后续说明以及方便跟踪其他内核添加到Dom0的/boot/guest时非常有用 - 拥有此HVM VM的一个好处是,您可以在不离开shell的情况下设置安装存储库。首先配置http服务器# yast http-server您不需要在yast工作流程中更改任何内容。只需接受默认值并完成即可。
- 在http根文件夹(/srv/www/htdocs/)内创建两个目录。我将其命名为net-install - 我将复制网络安装介质的内容,以便用我的Xen 4.1兼容版本替换vmlinuz-xen。第二个我称之为repo,我将在其中挂载插入到我的HVM vm中的完整DVD iso镜像# mkdir /srv/www/htdocs/repo
# mkdir /srv/www/htdocs/net-install - 在/etc/apache2/httpd.conf中root之后调整两个目录的权限
<Directory /> Options Indexes FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory> <Directory /srv/www/htdocs/repo> Options Indexes FollowSymLinks AllowOverride None Order deny,allow Allow from all </Directory> <Directory /srv/www/htdocs/net-install> Options Indexes FollowSymLinks AllowOverride None Order deny,allow Allow from all </Directory> - 插入Net installer iso到DVDROM,使用挂载它#mount /dev/sr0 /mnt"
- 使用复制内容到net-install# cp -pbr /mnt/* /srv/www/htdocs/net-install/
- 完成后,将新的内核复制到net-install/boot/x86_64中的vmlinuz-xen替换# cp /usr/src/linux-obj/x86_64/xen/arch/x86_64/boot/bzImage /srv/www/htdocs/net-install/boot/x86_64/vmlinuz-xen
- 卸载DVDROM# umount /mnt
- 将安装插入DVDROM并将其挂载为repo# mount /dev/sr0 /srv/www/htdocs/repo
- 确保apache正在运行# systemctl status apache2
- 此外,您可以使用浏览器查看路径http://<HVM openSUSE ip>/repo以确保可以访问它。
- 如果无法启动,请关闭防火墙或为端口80创建一个规则。# yast firewall导航
"Alt + t"停止防火墙
"Alt + n"继续配置
"Alt + f"完成
呼,这需要很多步骤。现在我们已经准备好进行实际安装了。
方法1:使用SLES模板将openSUSE安装为PV客户机
- 使用最新的SLES模板创建VM并提供有意义的名称(例如,来自SLES模板的PV openSUSE 13.1 x64)。
- 在这里slide26您将选择从URL安装并提供HVM VM上http服务器的URL。如果您不坚持安装微型/最小版本,我建议使用VNC安装模式。要使用VNC安装,在“高级OS启动参数”中添加“vnc=1 vncpassword=password”以读取如下
console=ttyS0 xencons=ttyS vnc=1 vncpassword=password安装应该开始,但您将被中断,并显示消息“未找到存储库”。按照默认步骤进行,然后选择从http安装。当要求提供服务器IP时,将其设置为您的HVM VM,并在下一个屏幕上键入“repo/”作为路径(不带引号)。安装完成后,VM将无法重新启动并保持关闭(DVD中的RPM仍然具有仅与Xen 4.2兼容的内核)。这没有问题,因为我们可以直接从XenServer控制台将兼容的内核复制到VM的分区。 - 在XenCenter中,转到VM的“存储”选项卡,然后选择根磁盘的属性。复制名称。
- 使用xe vdi-list命令获取磁盘的uuid# xe vdi-list name-label=<粘贴VM的系统磁盘名称>
- 然后使用此uuid与/opt/xensource/debug/with-vdi命令将其附加到Dom0。# /opt/xensource/debug/with-vdi <从 vdi-list 命令输出中获取的 uuid>
- 一旦磁盘附加,它将被映射到 /dev/sm/backend/<sr uuid>/<vdi uuid>。使用 kpartx -a 映射块设备中的分区# kpartx -a /dev/sm/<sr uuid>/<vdi uuid>
- 这将把分区添加到 /dev/mapper。将第二个分区(第一个分区是默认安装的交换分区)挂载如下# mount /dev/mapper/<vdi uuid>p2 /mnt
- 将我们之前准备好的内核复制到 /mnt/boot# cp /boot/guest/vmlinuz-3.11.6-4-xen /mnt/boot请注意,我们使重新编译的 vmlinuz 的完整名称与默认安装的名称匹配 - 这意味着我们不需要对 grub 的 menu.lst 进行任何调整即可启动它。
- 在启动虚拟机之前,磁盘必须从 dom0 分离# umount /mnt
# kpartx -d /dev/sm/<sr uuid>/<vdi uuid>
# exit
警告: 请记住,如果您未能使用上述步骤干净地从 Dom0 分离 VDI,虚拟机仍然会启动,但您将难以关闭它,因为断开 tapdisk 的内部逻辑将难以取消映射仍然附加到 Dom0 的 vhd。如果这听起来太复杂,请记住执行上述步骤。 - 启动虚拟机。一旦虚拟机启动,如果您没有使用 VNC 选项,它会有一段时间有点不稳定,直到 yast 完成自动配置。从目前的情况来看,这是由于 systemd 试图在登录和 yast 之间切换控制台所致。但请坚持下去,并继续尝试登录,直到完成,然后重复我们在 HVM 安装中执行的工具安装步骤,如步骤 16-23。以下是一些使用 SLES 模板安装 opensuse 的用户可能不知道或注意到的事情。当您在 XenCenter 中设置高级操作系统选项时,它实际上会将这些选项写入 grub 配置,因此 pygrub 将使用这些选项而不是您对“高级操作系统选项”所做的更改。此外,默认情况下,它会将 maxcpus 设置为 1。因此,如果您将 pygrub 作为 PV 启动加载程序使用,无论您在 XenCenter 上为虚拟机分配多少个 vCPU,它始终只会使用 1 个,直到您将其从 /boot/grub/menu.lst 中删除。我还建议删除这些 console/xencons 参数,以便您可以直接从 XenCenter 控制它们。此外,这在 13.1 中似乎不是问题,但在 12.3 中,systemd serial-console 存在一个问题,它会加载并使 shell 难以忍受(没有语法高亮显示和许多其他问题)。从那时起,我学会使用 xvc0 作为默认控制台,但如果您计划以 root 用户身份在控制台上登录,则必须将其添加到 /etc/securetty 中。在将 xvc0 添加到 /etc/securetty 后,在 XenCenter -> VM 属性 -> OS 启动参数中设置 xencons=xvc0
- 如果您希望更新系统上的软件包,但避免重新编译或更新内核,只需使用 zypper 锁定 kernel-xen 包,然后使用“zypper up”获取一些最新的内容# zypper al kernel-xen
# zypper up - 现在您应该有一个相当新的 openSUSE 13.1 x64 VM 安装。采取快照并将其导出为 XVA 以在其他环境中使用可能是一个好主意。我通常在本地存储下创建一个目录(在 XenServer 安装期间选择 Thin Provisoning 时格式化为 ext3)挂载路径# mkdir /var/run/sr-mount/<本地存储 uuid>/xva并像这样导出 VM# cd /var/run/sr-mount/<本地存储 uuid>/xva
# xe vm-export vm=<VM 的名称标签,可以使用 tab 键自动完成> compress=true filename=./openSUSE13.1-x86_64.xva上述方法 1 不是我最喜欢的方法,因为 SLES 模板并不完全匹配 openSUSE 安装。除了控制台问题和 maxcpus=1 之外,SLES 安装实际上分为不同的阶段,例如,默认用户根本不会创建(您只获得 root),因为 SLES 在重新启动后的 yast 自动配置阶段设置带有支持详细信息的用户。虽然这些事情不是什么大问题,但我仍然更喜欢从头开始安装,如方法 2 中所述
方法 2:通过从头开始创建模板安装 openSUSE PV
另一种安装 PV openSUSE 的方法是在您使用兼容性设置为 Xen 4.1 编译内核时
- 使用“其他安装介质”创建 VM,但不要启动它(在最后一个“准备创建新的虚拟机”屏幕上取消选中“自动启动新的 VM”)。我称它为“suse-pv from scratch”
- 获取新创建的 VM 的 uuid# xe vm-list name-label=suse-pv\ from\ scratch params=
- 取消设置 HVM 启动策略以将其变成 PV# xe vm-param-set uuid=<vm-uuid> HVM-boot-policy=""
- 将 PV-kernel 参数指向 /boot/guest,我们在其中复制了我们的兼容内核# xe vm-param-set uuid=<vm-uuid> PV-kernel="/boot/guest/vmlinuz-3.11.6-4-xen"请注意,如果您在 PV-bootloader 中指定“pygrub”,则 PV-kernel 和 PV-ramdisk 参数将被忽略。我们不会使用 pygrub,而是直接启动镜像
- 从我们用来编译内核的 HVM VM(或 Dom0 内挂载的 DVD)中复制 initrd-xen 到 Dom0 的 /boot/guest 中,并将其设置为我们正在准备的 VM 的 PV-ramdisk(以下是在我们用作本地仓库的 HVM 来宾中运行的命令)# scp /srv/www/htdocs/repo/boot/x86_64/initrd-xen root@192.168.0.196:/boot/guest/
- 现在在 XenServer 的 Dom0 中,将该 initrd-xen 设置为 PV VM 的 ramdisk# xe vm-param-set uuid=<vm-uuid> PV-ramdisk="/boot/guest/initrd-xen"
- 将可用的安装方法设置为 cdrom、nfs、http 和 ftp,如下所示# xe vm-param-set uuid=<vm-uuid> other-config:install-methods="cdrom,nfs,http,ftp"
- 设置控制台参数以及安装路径到 HVM VM 仓库(再次 VNC 是可选的,但我喜欢它)# xe vm-param-set uuid=<vm-uuid> PV-args="console=ttyS0 xencons=ttyS vnc=1 vncpassword=password install=http://192.168.0.194/repo/"
- 安装完成后,它将尝试重新启动。但是,由于我们有安装中的 initrd-xen,它将尝试再次安装。从这一点开始,我们有两个选择
- 使用“with-vdi”将新的 initrd-<version>-xen 复制到 Dom0 的 /boot/guest 中,然后将其设置为新的 PV-ramdisk,root=/dev/xvda2 在启动选项中。
- 使用“with-vdi”将兼容的 kernel-xen 复制到 VM 的根分区,并将 PV-bootloader 设置为 pygrab 以使用 /boot/grub/menu.lst 提供正确的启动值。
- 对于这两个选项,强制关闭 VM。
- 使用以下命令获取磁盘的 uuid# xe vbd-list vm-name-label=<vm 名称>
- 然后将此 uuid 作为 with-vdi 命令的参数# /opt/xensource/debug/with-vdi <来自上述命令输出的 vdi 字段>
- 一旦磁盘附加,它将被映射到 /dev/sm/backend/<sr uuid>/<vdi uuid>。使用 kpartx -a 映射块设备中的分区# kpartx -a /dev/sm/<sr uuid>/<vdi uuid>
- 这将把分区添加到 /dev/mapper。将第二个分区挂载如下# mount /dev/mapper/<vdi uuid>p2 /mnt
- 记下 VM 的启动参数# cat /boot/grub/menu.lst
选项 1:将新的 initrd-<version>-xen 复制到 Dom0
- 将 /mnt/boot/initrd-3.11.6-4-xen 复制到 dom0 中的 /boot/guest# cp /mnt/boot/initrd-3.11.6-4-xen /boot/guest此选项的另一个好处是,您可以获得完整的启动项集(vmlinuz-3.11.6-4-xen、安装程序中的 initrd-xen、initrd-3.11.6-4-xen),这意味着您可以跳过此步骤,在另一个环境中安装 PV VM。只需使用 initrd-xen 作为 PV-ramdisk 启动 VM,并在安装开始后立即将 PV-ramdisk 设置为 vmlinuz-3.11.6-4-xen,将 PV-args 设置为 root=/dev/xvda2。这不会影响正在进行的安装,但在重新启动后,将加载正确的 initrd 和 rootfs。
- 将 PV-args 设置为指向正确的 root(我使用了您可以从 /boot/grub/menu.lst 部分获得的标准选项)# xe vm-param-set uuid=<vm-uuid> PV-args="xencons=xvc0 root=/dev/xvda2 resume=/dev/xvda1 splash=silent quiet showopt"
- 设置正确的 PV-ramdisk# xe vm-param-set uuid=<vm-uuid> PV-ramdisk="/boot/guest/initrd-3.11.6-4-xen"
选项 2:将新的 vmlinuz-<version>-xen 复制到 VM 的根分区
- 将 vmlinuz-3.11.6-4-xen 复制到映射驱动器中的 /mnt/boot 中# cp /boot/guest/vmlinuz-3.11.6-4-xen /mnt/boot
- 将启动选项 xencons 设置为 xvc0# xe vm-param-set uuid=<vm-uuid> PV-args="xencons=xvc0"
- 并将 PV-bootloader 设置为 pygrub(这意味着它将读取 VM 的 boot 分区以获取 grub 的 menu.lst 并启动默认选项)# xe vm-param-set uuid=<vm-uuid> PV-bootloader=pygrub
# kpartx -d /dev/sm/<sr uuid>/<vdi uuid>
# exit
现在您应该能够以 PV 模式启动 openSUSE 13.1 VM。
注意:只是对 XenServer 中用于 PV VM 的启动加载程序方法的一些说明。您可以有 3 个选项
- 未提供 PV-bootloader:需要引用 Dom0 内部位置的 PV-kernel 和 PV-ramdisk 才能启动 VM
- PV-bootloader 设置为 eliloader:用于安装,它将读取 other-config:install-repository 设置以向 VM 呈现安装介质
- PV-bootloader 设置为 pygrub:pygrub 将读取 VM 的 boot 分区以获取 grub 的 menu.lst 并启动默认选项。
方法 3:使用 EC2 内核以 PV 模式启动
- 按照 3.1 上述步骤以 HVM 模式安装 openSUSE。当提示选择启动加载程序时,请确保安装 grub(不要安装 grub2)。
- 登录到 VM 并安装 kernel-ec2 模块。
- 编辑 /boot/grub/menu.list 文件并将 kernel-ec2 条目设置为默认值。
- 关闭 VM 并将 VM 切换到 PV 模式。
- 使用以下命令获取 VM 的 UUID# xe vm-list name-label=<VM 名称> params=uuid
- 关闭 HVM 启动# xe vm-param-set uuid=<VM UUID> HVM-boot-policy=""
- 启用 pygrub 启动# xe vm-param-set uuid=<VM UUID> PV-bootloader=pygrub
- 找到 VBD 的 UUID(不是 VDI)# xe vm-disk-list uuid=<VM UUID>
- 将 VBD 设置为可启动# xe vbd-param-set uuid=<VBD UUID> bootable=true
- 使用以下命令获取 VM 的 UUID
注意:EC2 内核镜像*不*支持 PCI 直通。如果您需要 PCI 直通,这不适合您。
方法 4:使用 openSUSE 12.3 安装程序和最新内核
openSUSE 12.3 中提供的内核可用于启动 openSUSE 13.1 安装程序。这样就可以在重新启动之前直接将安装更新到与 Xen 4.1 兼容的内核。
- 从 openSUSE 列表中选择本地镜像:http://mirrors.opensuse.org/list/12.3.html
- 在 XenServer 中更改目录到 /opt/xensource/www
- 创建安装路径:mkdir -p ./boot/<arch> 并更改目录到它。[root@xs /opt/xensource/www ]# mkdir -p ./boot/x86_64
- 使用 wget 从您选择的 12.3 oss 仓库下载 vmlinuz-xen 和 initrd-xen[root@xs /opt/xensource/www/boot/x86_64 ]# wget http://mirror.internode.on.net/pub/opensuse/distribution/12.3/repo/oss/boot/x86_64/vmlinuz-xen
[root@xs /opt/xensource/www/boot/x86_64 ]# wget http://mirror.internode.on.net/pub/opensuse/distribution/12.3/repo/oss/boot/x86_64/initrd-xen - 使用 SLES 模板创建新的 VM,选择“从 URL 安装”并指向您的 XenServer 地址:http://<xenserver IP 地址>
- 在新的 VM 向导结束时取消选中“自动启动新的 VM”。
- VM 创建完成后,将 openSUSE 13.1 安装 iso 插入虚拟 DVD 驱动器并启动 VM
- VM 将启动,但安装程序抱怨找不到 12.3 介质。继续选择默认值,直到您到达“选择源介质”的位置,您需要在那里选择“硬盘”。
- 对于设备名称,提供 /dev/xvdd,并在第二个屏幕上留下单个正斜杠。安装程序将开始从 13.1 ISO 下载软件包
- 从这一点开始,您可以继续进行正常安装,因为它将拉取与 Xen4.1 兼容的最新 kernel-xen 版本
警告: 接受许可协议,并在“安装模式”中确保选中“安装前添加在线仓库”,并在下一个屏幕上启用“主更新仓库”,否则 VM 在安装后将无法启动。