将 Linux OS 导入 SmartCloud Enterprise

将操作系统映像有效导入 SmartCloud 的小技巧

IBM® SmartCloud Enterprise 2.0 引入了一个特性,能够将 Linux® 操作系统映像导入云中,但为了更有效地管理这个任务,本文在提供正式信息之外,还提供了一些小技巧作为补充。本文作者基于将各种版本的 CentOS 和 Ubuntu 成功导入 IBM SmartCloud Enterprise 的经验,讲解了如何准备好映像和元数据、需要什么样的工具,以及如何设置工作台,并提供了一些排除此过程中故障的小技巧。

Tomoyuki Niijima, IT 架构师经理,云计算与智能城市, IBM

/developerworks/i/p-tniijima.jpgTomoyuki Niijima 是一位 IT 架构师,他在最近 20 年里一直从事于极其复杂的大型 IT 系统的设计和实现。他与别人合著了三本 AIX 红皮书,并在包括 SAP Professional Journal 在内的多家杂志上发表文章。他在开源领域也相当活跃。在过去两年中,他关注的重点是云计算,尤其是如何快速、灵活、有效地部署和管理诸如操作系统、中间件、应用程序和操作工具等复杂的组件。



2012 年 3 月 19 日

IBM® SmartCloud Enterprise 2.0 引入了一个映像导入特性,能够将 Linux 操作系统映像移动到云中,但是,这种映像导入特性只支持 Linux 操作系统,不支持 Windows® 和 UNIX 操作系统。根据 SmartCloud Enterprise 撰写的 Customizing Images and Software Bundles 指南,该系统只支持 Red Hat 或 SuSE,但只要符合本文所述的条件,就可以导入其他 Linux 操作系统映像。

导入过程的大多数步骤必须使用命令行和 API 来完成。您需要对 SmartCloud API 有一定的了解,并且具备最基础的 Linux OS 安装和定制技能。

SmartCloud 用户可用的 Customizing Images and Software Bundles 指南和 REST API reference 2.0 为您提供了很好的信息,但我认为光有这些知识还无法有效地导入 Linux OS。本文会介绍一些补充知识。

图 1 提供了将映像导入 SmartCloud Enterprise 的概述。

图 1. 将映像导入 IBM SmartCloud Enterprise 的概述
将映像导入 SmartCloud Enterprise 的概述

我们将会把执行该任务所需的重要补充知识分成四个一般性主题。然后分别深入讲解,并提供一些小技巧。

导入 Linux OS 的四个关键点

将 Linux OS 导入 SmartCloud Enterprise 的四个关键点是:

  1. 准备好 Linux OS 映像和元数据。需要一个虚拟化管理程序来准备好 Linux OS 映像。而元数据需要手工准备,但可以将 SmartCloud 上可用的任意公共映像的元数据作为模板重用。
  2. 将映像和元数据保存在永久性存储上。您可以通过创建一个附加存储的实例来写入映像和元数据。您可以通过网络上传映像和元数据,或者在实例上创建。
  3. 从私有映像的存储中导入映像,作为私有映像。我们将会解释 POST {baseURI}/offerings/image API 命令,从而为此任务提供支持。
  4. 从映像中创建实例。成功导入的映像会出现在映像列表中,您可以从它来创建实例,就和对其他私有映像的操作一样。

建议您在开始之前阅读以下参考,并使用以下组件:

  • Customizing Images and Software Bundles 指南和 REST API Reference 2.0 参考指南,或者是您所使用的命令行工具的参考指南(前两个可以在 SmartCloud 门户网站的 Support 选项卡文档库中找到)。
  • QEMU,虚拟化管理程序和映像操作工具。
  • 目标 Linux OS 的 ISO 映像。
  • RealVNC VNC viewer

现在,我们仔细看看这 4 个步骤。每个小节中都介绍了一些小技巧。


准备好 Linux OS 映像和元数据

这一小节包含了以下步骤:

  • 准备好元数据模板。
  • 准备好工作台实例。
  • 安装 QEMU。
  • 设置 VNC 服务器。
  • 准备好 OS 映像。
  • 使用 QEMU 安装 OS。
  • 对 OS 映像进行最基本设置。

准备好元数据模板

设置需要导入映像所需元数据的最简单方法是重用公共映像的元数据。如果是导入 SuSE 或它的克隆版,那么可以重用公共 SuSE 映像的元数据。如果目标是 Red Hat 或它的克隆版,如 CentOS,那么可以利用公共 Red Hat 映像的元数据。

  1. 由于公共映像具有防复制保护,因此需要从所需重用的公共映像中创建一个实例。确保创建一个与处理器架构相同的实例(例如,32 或 64 位映像)作为您的目标 OS。
  2. 创建好公共映像实例后,保存实例的私有映像。现在可以在来自 SmartCloud 门户网站的资产目录屏幕中的私有映像上设置 CopyAllowed = Y
  3. 在 SmartCloud 门户网站的 Control panel 选项卡头部有资产目录的链接。单击链接,并打开 My Dashboard 选项卡。您会看到现有的私有映像列表。
  4. 单击刚刚保存的映像的铅笔图标,单击 continue... 链接。屏幕底部会出现 Copy Allowed 标志。
  5. 将它改成 Y 并单击 Update 按钮。
  6. 创建 ext3 格式的永久存储。60GB 就足够了。
  7. 使用 PUT {baseURI}/storage/{storage id} API 将私有映像复制到永久存储中。

准备好工作台实例

图 2 描述了如何准备好工作台实例。

图 2. 准备好 SmartCloud 上的工作台实例的 OS 映像和元数据
准备好 SmartCloud 上的工作台实例的 OS 映像和元数据

复制完成后,创建另一个附加存储的实例。这就是您自己的工作台实例。推荐使用 64 位 Red Hat 6.0,但使用任何 Linux OS 都可以。假设/数据是以下描述中存储的加载点。

您将会看到一组如下所示的映像和元数据文件:

$ ls -l /data/image
total 3459192
-rw-rw-r--.1 idcuser idcuser         451 Jan  3 03:14 BSS.zip
-rw-r--r--.1 idcuser idcuser 64424509440 Jan  3 00:04 K7BqB_W2SOG3K@rUrln1EA.img
-rw-rw-r--.1 idcuser idcuser         196 Jan  3 03:23 K7BqB_W2SOG3K@rUrln1EA.mf
-rwxr-xr-x.1 idcuser idcuser        2013 Jan  3 00:04 K7BqB_W2SOG3K@rUrln1EA.ovf
-rwxr-xr-x.1 idcuser idcuser       57830 Jan  3 00:04 RAM.zip
-rwxr-xr-x.1 idcuser idcuser       20648 Jan  3 00:04 Terms.zip

每个映像的 .img、.mf 和 .ovf 文件的基名称 (base name) 都不同。您可以重用 AM.zip、Terms.zip 和 ovf 文件,也可以删除其他文件。

安装 QEMU

从 QEMU 网站下载 QEMU 源打包工具,然后进行配置安装:

wget http://wiki.qemu.org/download/qemu-1.0.tar.gz
tar -xzf qemu-1.0.tar.gz
cd qemu-1.0
./configure --target-list=x86_64-softmmu,i386-softmmu
make & install

可能需要将 /usr/local/bin 添加到 PATH 环境变量中,因为之前的指令在该目录下安装了一组 QEMU 工具。

设置 VNC 服务器

QEMU 会在自身的 VNC 服务器上打开一个虚拟控制端口。您需要在 PC 上使用 VNC 客户端打开 VNC 并连接到实例的 XWindow,并且再打开 XWindow 上的一个 VNC 客户端连接到 QEMU 的 VNC 端口。

准备好 OS 映像

OS 映像是包含已安装的 Linux OS 的 HDD 映像的二进制文件。这也称为虚拟盘,因为它可以由虚拟化管理程序作为 HDD 来驱动。创建 OS 映像最简单的方法就是使用虚拟化管理程序和 OS 安装 CD/DVD 的 ISO 文件在虚拟盘上安装 OS。

使用 QEMU 安装 OS

可以在 VNC 会话中完成这一步,因为需要在 XWindows 上启动 VNC 客户端,以打开 QEMU 控制台,如前所述。可以使用 RealVNC Viewer 从 PC 上连接到 XWindows。

  1. 以原始格式创建空映像文件:
    qemu-img create -f raw hdd.img 60G
  2. 使用映像文件和 ISO 文件启动管理程序:
    qemu-system-i386 -m 1G -hda hdd.img -cdrom installer_image.iso -boot d
  3. 如果安装的是 64 位 OS,则运行 qemu-system-x86_64。如果要增加虚拟内存,可修改 -m 标志后的值。
  4. 您可以使用工作台实例的 XWindow 上的 VNC 客户端来查看 QEMU 控制台。可以在 RHEL6 中使用 TigarVNC viewer,它在 Applications > Internet 子菜单中。运行 TigarVNC viewer 并将 >localhost 指定为 VNC 服务器,以连接到 QEMU 控制台。
    图 3. 通过 SmartCloud 实例上的 VNC 查看客户 OS 安装
    通过 SmartCloud 实例上的 VNC 查看客户 OS 安装
  5. 在 QEMU 上运行 OS 安装程序可能非常慢,因为在 SmartCloud 实例上没有 KVM 加速器。您可以在本地 PC 上执行这一步骤,但每次修改映像时,都要通过 Internet 传输 10GB 的文件,直到任务完成。

安装程序启动后,按照目标 OS 的指令进行,但要保证满足以下条件:

  • 不能使用 LVM;最新的 Linux OS 安装程序会默认使用 LVM。选择自定义安装,以避免使用 LVM。
  • 只允许使用 /boot 和 / 分区。这两个只能在主分区中,而且必须按照 ext3 格式。而且,必须在自定义安装菜单中显式指定 这些参数。
  • 不需要交换分区。当安装程序因为内存不够而挂起时,您可能想增加虚拟内存。您可以使用文本安装程序,而不是减少安装程序所需的内存需求,但有些文本安装程序不提供满足以上两个条件的自定义安装菜单。

映像文件的目标 OS 安装成功后,重启并登录以检查该环境是否支持 virtio 作为 root 用户。使用以下两个命令检查 /lib/modules 是否具有 virtio 内核模块和初始的 RAM DISK 映像:

modprobe -l | grep virtio
gzip -dc /boot/initr*.img | cpio -t | grep virtio

如果在之前代码的运行结果中没有 virtio_pcivirtio_blk,那么就需要安装 virtio 内核模块和/或创建 RAM DISK 映像。否则可以导入映像,但它无法启动。

对 OS 进行最基本设置

以下是 OS 映像导入之前最基本的设置。

  1. 创建 idcuser
    groupadd -g 501 idcuser
    useradd -u 500 -g 501 idcuser
    passwd idcuser
    mkdir /home/idcuser/.ssh
    chown -R idcuser.idcuser /home/idcuser
    chmod 600 /home/idcuser/.ssh
  2. 启用 idcuser sudo (/etc/sudoers)。
    idcuser ALL=(ALL) NOPASSWD:ALL
  3. 配置 sshd (/etc/ssh/sshd_config)。

我建议您推迟执行最后一步,直到您能作为 idcuser 使用 RSA 键访问实例,如下所示:

PermitRootLogin no
PasswordAuthentication no
UsePAM no

请注意:如果您导入的是 Linux OS 而非 Red Hat 或 SuSE 克隆版,比如 Ubuntu,那么需要转换网络接口配置。我建议创建一个保留 IP,并且立刻在映像上设置 IP 地址。它能确保连接到实例。您可以在 SmartCloud 启动映像后自定义映像。


将映像和元数据保存在永久性存储介质上

这一小节包含了以下步骤:

  • 元数据准备和结构。
  • 断开存储连接。

元数据准备和结构

以下图片显示了 SmartCloud 上映像的元数据结构。强制文件有 .ovf、.img、BSS.zip、RAM.zip 和 .mf。

图 4.元数据结构
Metadata structure

按照之前所述重用 SmartCloud 公共映像的 RAM.zip,如果您非常确定的话,可以查看并修改这些文件。

不需要修改 .ovf 文件,只要保留强制文件的名称就行。换句话说,如果要对 .img 和 .ovf 文件使用您自己的名字,就要重写 .ovf 文件。

  1. 在执行元数据准备任务的最后阶段运行 FileValidation.sh 工具来生成 .mf 文件。由于 .mf 文件包含了每个文件的校验和,因此如果要在创建 .mf 文件后进行修改,需要返回到该工具重新生成 .mf 文件。

    以下是 BSS.zip 中的 BSS.xml 文件的一个示例。参考 Customizing Images and Software Bundles 指南,以了解该文件的详细信息。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ns2:serviceoffering offeringtype="IMAGE" id=""
     xmlns:ns2="http://www.ibm.com/cloud/storage/xml">
        <shortdesc>CentOS 6.1 32bit test</shortdesc>
        <longdesc>CentOS 6.1 32bit test</longdesc>
        <offeringfamilyid>1003</offeringfamilyid>
        <platformVersion>1.2</platformVersion>
        <attributes>
            <os>CentOS 6.1 32bit test/6.1</os>
            <allowedsize.32>COP32,BRZ32,SLV32,GLD32</allowedsize.32>
        </attributes>
    </ns2:serviceoffering>
  2. 这里提供的技巧是 <os> 标签。您可以在 OS 名称后指定 OS 版本号,并使用 "/" 隔开它。
  3. 确认 <offeringfamilyid> 的值是 1003。否则您将按不同的价格表支付实例。当导入 64 位 OS 映像时,<allowedsize.32> 标签的值会有所不同。
  4. 创建一个 BSS.zip 文件来包含 BSS.xml 并将它保存到 /data/image 中:
    zip /data/image/BSS.zip BSS.xml
  5. 将 OS 映像传输到 /data/image 并将它重名为 xxxx.img,其中 xxxx 是与 xxxx.ovf 一样的基名称。
  6. 转到 /data/image 目录并运行 FileValidation.sh;选择 menu 2 来重新创建清单文件。

断开存储连接

您需要删除工作台实例,从而断开存储连接,以后也许会出现能动态断开连接的特性。我强烈建议您在删除实例之前先保存一个私有映像,因为如果导入或配置过程失败,还要返回这一步修改映像或元数据。永远不要过于乐观:第一次尝试可能由于各种原因而失败。确保在删除实例前能够从私有映像创建实例。


从存储中导入映像,作为私有映像

使用 POST {baseURI}/offerings/image API 将映像从存储导入 SmartCloud 上的私有映像。注意包含在请求响应中的映像 ID。当过程失败需要经检查请求状态或删除映像条目时就需要它了。有时它不出现在云门户网站的私有映像列表上,但它却是存在并占用您的映像数目。

第一次尝试很有可能失败。不要问我原因,您也不必担心。深呼吸,伸个懒腰,别先想着放弃。

遇到失败先回到元数据准备阶段;元数据中可能出错了。


从映像中创建实例

最后一节讨论配置来自映像的实例,并包含一些 Ubuntu 支持问题。

配置来自映像的实例

您可以从门户网站配置来自映像的实例。如果无法创建实例,那么返回映像创建步骤,确认符合所有条件。这一阶段出现的错误往往是由于映像文件格式错误造成的。

映像变活动后,以 idcuser 身份进行访问。如果 SSH 客户端超时,那么实例不会启动或无法配置网络接口。返回映像创建步骤,并检查 virtio 配置。

您可能想要查出实例内部发生了什么。可以从实例中获取一个私有映像,将它复制到存储中,使用 QEMU 来运行映像,并仔细查看。

启动之后,会在 syslog 文件中找到一些记录。

如果您的 SSH 客户端接收到身份验证错误消息,可能是 RSA 键设置错误。可以作为 root 用户登录。检查 /home/idcuser 下的文件许可。

登录进去之后

如果最后使用 RSA 键以 idcuser 身份登录进去,请保持连接,并配置 sshd_config 文件,不允许 root 访问、使用密码或使用 PAM,然后重启 sshd。确保还能够从其他会话中使用 RSA 键以 idcuser 登录。

如果一切正常,取得第一个生成实例的私有映像,再用不同的 IP 地址和 RSA 键从映像中创建第二个生成实例。

Ubuntu 支持问题

Ubuntu OS 的网络配置文件与 Red Hat 非常不同。SmartCloud 的配置引擎将会设置一个 Red Hat 风格的配置文件,但 Ubuntu 不支持该文件。需要实现以下的 initd 脚本,运行第 3 级到 5 级,从而将 Red Hat 风格配置文件转换成 Ubuntu 风格的文件。

#!/usr/bin/perl

$INTERFACE="/etc/network/interfaces";
$NETCONFDIR="/etc/sysconfig/network-scripts/";

if ( (stat($INTERFACE))[9] > (stat($NETCONFDIR."ifcfg-eth0"))[9] ){
  exit 0;
}

system("/bin/sed -n s/HOSTNAME=//p /etc/sysconfig/network > /etc/hostname");
system("/bin/hostname `cat /etc/hostname`");

open(OUT,">$INTERFACE");
print OUT << "EOF";
# This file describes the network interfaces available on your system
# and how to activate them.For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
EOF

open(TT,"ls ".$NETCONFDIR."ifcfg-eth?|");
while (<TT>){
  chop;
  $t=$n=$_;
  $n=~s/^.*\/ifcfg-//;
  open(IF,$t);
  while (<IF>){
    chop;
    if (/^IPADDR=(.*)$/){
      $addr=$1;
    } elsif (/^NETMASK=(.*)$/){
      $mask=$1;
    } elsif (/^GATEWAY=(.*)$/){
      $gw=$1;
    }
  }
  close(IF);

  @a=split(/\./,$addr);
  @m=split(/\./,$mask);

  for ($c=0; $c<4; $c++){
    $a=$a[$c]*1;
    $m=$m[$c]*1;
    $b[$c]=($a & $m) + (255 & ~ $m);
  }
  $bcast=sprintf("%d.%d.%d.%d",$b[0],$b[1],$b[2],$b[3]);

  print(OUT "iface $n inet static\n");
  print(OUT "    address $addr\n");
  print(OUT "    netmask $mask\n");
  print(OUT "    gateway $gw\n");
  print(OUT "    broadcast $bcast\n");
  print(OUT "\n");
}
close(TT);
close(OUT);

system("/etc/init.d/networking restart");
exit(0);

结束语

IBM SmartCloud Enterprise 2.0 的映像导入功能非常有用。除了 Red Hat 和 SuSE 以外,它还支持 Linux 操作系统映像,您甚至可以在 SmartCloud 上使用工作台来创建您自己的映像。但有一些关于映像格式的条件和限制,使得导入这些 OS 映像变得有些困难;本文中提供的建议应该能够帮助您解决大部分难题。

参考资料

学习

获得产品和技术

  • 查看在 IBM SmartCloud Enterprise 上可用的 产品镜像

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


这是您第一次登陆到 developerWorks,已经自动为您创建了您的概要文件。 选择您概要文件中可以公开的信息的信息(如姓名、国家/地区,以及公司),这些信息同时也会与您所发布的内容相关联。 您可以随时更新您的 IBM 账号。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing, Linux
ArticleID=806092
ArticleTitle=将 Linux OS 导入 SmartCloud Enterprise
publish-date=03192012