2011 年 11 月
作者:Jeff McMeekin
本文说明如何通过脚本来创建 Oracle Solaris 区域,重点介绍网络配置。内容包括如何最高效地创建 Oracle Solaris 区域,即通过克隆方式,以及如何配置网络接口以实现最大的灵活性,以便 Oracle Solaris 区域可以在系统之间迁移。
|
Oracle Solaris 11 提供了新的网络虚拟化联网特性。网络虚拟化将服务器虚拟化带入更高层次:通过网络虚拟化提供的功能,无需任何额外的网络硬件投资,即可建立包括服务器、路由器、交换机和防火墙在内的在单个平台上运行的整个虚拟化网络拓扑结构。网络虚拟化可用于各种目的,从原型设计,到开发和测试,一直到服务部署。在下面的示例中,我们将逐步完成在单个系统内运行的整个网络拓扑结构的创建。
图 1 显示一个多层应用程序的示例。在该示例中,有两台 Web 服务器,运行在对外网开放的专用系统上;还有几台数据库服务器,运行在不直接与外网相连的专用系统上。
图 1. 将在一台服务器上虚拟化的网络
下面我们将在一个 Oracle Solaris 11 系统上配置实现此物理方案,作为此过程的一个良好开端,我们先对所有必须配置的实体进行命名。因此,我们将按照虚拟方案重新绘制此示意图,如图 2 所示,重点突出所有组件和接口的名称以及 IP 地址(在适用位置)。
图 2. 从物理拓扑结构转换成虚拟一体化网络拓扑结构
在图 2 中,Web 服务器共享一个名为 webswitch0
的后端 etherstub。从技术上讲,etherstub 不是虚拟交换机,但实际上它允许创建交换机。因此我们将 etherstub 标记为交换机,这让示意图更清晰,不需要添加额外的详细信息。
数据库服务器也共享一个后端 etherstub,标记为 dbswitch0
。我们将对网络进行配置,让运行在专用 Oracle Solaris 区域(zdb1
、zdb2
和 zdb3
)中的数据库服务器不能直接访问物理网络,从而将它们与外部通信隔离开来以保障它们的安全。
在本示例中,单个物理接口表示为 net0
。对于 vphys1
和 vphys2
VNIC 地址,如果您在实际中要在 zweb1
和 zweb2
区域中安装 Web 服务器,则应使用 vphys
子网 (129.200.9) 外部知道的地址。
在此步骤中,我们将创建两个 etherstub,用于支持数据库区域之间以及 Web 服务器区域之间的通信,如图 2 所示。首先来看物理网络:
# dladm show-phys LINK MEDIA STATE SPEED DUPLEX DEVICE net0 Ethernet up 1000 full bge0
对于此系统,只有一个物理接口 bge0
。注意,其链路名称为 net0
。默认情况下,Oracle Solaris 11 将为第一个物理接口创建一个名为 net0
的链路,为第二个物理接口创建一个名为 net1
的链路,以此类推。这是一个非常有用的简化,因为我们不必再担心用于各种硬件平台的实际物理 NIC 硬件和链路名称。当需要配置与此物理接口相关的任何内容时,我们将使用 net0
。
首先,按照前面所示架构,我们创建两个 etherstub 以支持虚拟交换:
# dladm create-etherstub webswitch0 # dladm create-etherstub dbswitch0
在 Oracle Solaris 11 中,每个 Oracle Solaris 区域本身已启用一个 VNIC,即另一个 net0
。就本示例而言,我们对图 2 中的 VNIC 进行命名以反映其在整个架构中的位置。因此我们不是将示意图中的所有接口标记为 net0
、net1
等等,而是使用更具描述性的名称,如 vdb1
、vdb2
等等。
这里有一个更大的问题:是否在全局区域中定义 VNIC。在前一个 Oracle Solaris 11 Express 版本中,必须从全局区域定义所有 VNIC。在本例中,有 9 个 VNIC,因此将有 9 条 dladm create-vnic
语句。
不过,更好的创建 VNIC 的办法是在区域内部创建由该区域使用的 VNIC,其重点在于构建可在系统之间迁移 Oracle Solaris 区域的动态环境。当该区域消失时,VNIC 也一起消失。更重要的是,将该区域迁移到另一个系统时,该区域将携带有关其所期望接口的信息。
在我们的示例中,全局区域确实需要提供一些内容,例如,etherstub 是在全局区域中定义的。但网络配置的其余部分是动态的,因为这些配置是各个非全局区域而不是全局区域所带的。
配置所有 etherstub 之后,检查设置:
# dladm show-etherstub -Z LINK ZONE dbswitch0 global webswitch0 global
我们将创建一个 Oracle Solaris 区域,然后,为缩短创建其他区域的时间,我们将克隆第一个区域以生成我们的示例所需的区域。克隆的区域需要共享一个 ZFS 数据集,因此第一步是创建该数据集:
# zfs create -o mountpoint=/zonefs rpool/zonefs # chmod 700 /zonefs
使用 Oracle Solaris 11,克隆 Oracle Solaris 区域比从头创建一个区域要快很多,因为从本质上来讲,从程序包构建映像所需的时间比复制一个现成的区域要长。在创建第一个区域的过程中,有一个 Oracle Solaris 11 优化,该优化使程序包缓存在本地系统上,因此创建后续区域时不必再与程序包信息库交互。即使有了该优化,克隆方法还是比重新创建更快。在本示例中,我们将使用克隆方法,我们首先创建一个 Oracle Solaris 区域,然后将其克隆 6 次。
首先,配置要克隆的 Oracle Solaris 区域 zclone
,如下所示:
# zonecfg -z zclone zclone: No such zone configured Use 'create' to begin configuring a new zone. zonecfg:zclone> create create: Using system default template 'SYSdefault' zonecfg:zclone> set zonepath=/zonefs/zclone zonecfg:zclone> set ip-type=exclusive zonecfg:zclone> exit
对 Oracle Solaris 11 来说,ip-type
的默认设置现在为 exclusive
,意味着每个 Oracle Solaris 区域都有自己的 IP 堆栈。另一种设置 shared
仍然为系统所支持。这两种设置各有优点,但 exclusive
更接近地模拟了物理 NIC 布置,因此以它作为默认设置更有道理。
现在安装 zclone
:
# zoneadm -z zclone install A ZFS file system has been created for this zone. Progress being logged to /var/log/zones/zoneadm.20111007T223740Z.zclone.install . . . Done: Installation completed in 407.653 seconds. Next Steps: Boot the zone, then log into the zone console (zlogin -C) to complete the configuration process.
注:根据网络和映像包管理系统 (IPS) 信息库的不同,安装时间有所不同。
现在启动 zclone
:
# zoneadm -z zclone boot; zlogin -C zclone [Connected to zone 'zclone' console] Loading smf(5) service descriptions: 112/112
我们将 zlogin
命令与 boot
命令放在同一行上,这样 zlogin
命令会立即执行,您会看到 zclone
区域启动,包括 Service Management Facility (SMF) 服务的初始配置。您需要完成这一步,这样,克隆该区域时就不必等待每个新区域配置所有 SMF 服务。
该输出最终会消失并转到 System Configuration Tool 的初始屏幕(参见图 3),在此可以进行最后的配置。
重要事项:请不要 使用该工具。此时不再进行其他配置,因此使用 ~.(按波浪号键加句点键)转到全局区域。 |
图 3. System Configuration Tool
然后停止 zclone
:
# zoneadm -z zclone halt
回顾一下,我们创建了一个 Oracle Solaris 区域 zclone
(完成了初始安装和首次启动)并配置了 SMF 服务。此时,我们停止了这一过程,因为不需要进一步配置 zclone
。
可以看到,创建 zclone
将为我们节省初始供应区域的时间以及首次启动的很多时间。使用 zclone
时,我们只需让一个新的 Oracle Solaris 区域以它为基础,然后通过一个脚本化过程而不是手动过程为该新区域提供网络标识和其他配置信息。
在图 2 中,可以看到 6 个 Oracle Solaris 区域。为简化输入,我们采用这样的方法:完成建立一个 Oracle Solaris 区域作为范例的过程,然后使用附录中提供的一些脚本来自动执行建立其他区域的过程。
如果您不愿键入用于创建第一个 Oracle Solaris 区域的所有命令,可以阅读以下命令但实际上使用附录中的 createzone-1vnic.sh
脚本来完成这项工作。此方法可避免输入许多命令时难以避免的键入错误。有关如何获取和使用脚本的更多信息,请参见第 5 步。
注:如果您选择避免键入用于第一个 Oracle Solaris 区域的命令,可调用相应脚本(如下所示): # sh createzone-1vnic.sh zdb1 vdb1 192.168.7.1 dbswitch0 192.168.7.254 如果使用脚本,您仍应读完本节其余部分以了解该脚本执行了哪些操作。 |
下面我们首先要在示例网络中创建一个将包含数据库的 Oracle Solaris 区域 zdb1
。不过我们不会实际为该区域提供一个数据库服务器,因为此示例只是关于建立网络基础架构。
首先看看可以使用哪些方法来预先配置一个 Oracle Solaris 区域。对于 Oracle Solaris 10,配置文件为 sysidcfg
,它包含网络设置、主机名、区域设置、时区等信息。对于 Oracle Solaris 11,该文件为 sc_profile.xml
。我们有两种方法:
可以使用新的 Oracle Solaris 11 工具创建系统配置文件。可以使用以下命令来轻松调用该工具:
sysconfig create-profile -o sc_profile.xml
我们可以使用此方法创建 sc_profile.xml
文件,然后用变量名代替某些要更改的值。然后可以将其传递给脚本,进行一些合适的操作来创建自定义 sc_profile.xml
文件。.
可以使用 Oracle Solaris 10 中的 sysidcfg
文件,稍做调整,通过新的 JumpStart to Automated Installer 转换实用程序 js2ai
运行该文件,然后将输出(新的 sc_profile.xml
文件)传递给其余区域创建过程。
我们将使用第二种方法,因为它更易于演示。sysidcfg
文件比 XML 文件小很多,更易于处理,且用于处理 sysidcfg
的方法同样可以用于 sc_profile.xml
。
尽管在许多情况下 sysidcfg
可能是一种很有用的快捷方法,但对于其他情况(例如,如果您想要创建 root
之外的其他用户或更高级的配置),直接使用 sc_profile.xml
可能更好办。有关 sc_profile.xml
的信息和示例,请参阅 Oracle Solaris 文档安装 Oracle Solaris 11 中的“配置客户端系统”一节。
目前,这两种方法都有一个限制:只能创建一个网络接口。稍后,我们将看看另一种方法,即使用 zonecfg
的 anet
子命令创建网络接口(1)。
表 1 的左栏是 sysidcfg
文件,我们可能在 Oracle Solaris 10 中使用了这个文件来配置 Oracle Solaris 区域。不过,在可以使用 js2ai
实用程序将其转换成 sc_profile.xml
之前,必须对 sysidcfg
文件做些修改。表 1 右栏显示了删除不支持的行并对语法稍作修改后的 sysidcfg
文件。
sysidcfg
文件修改前后的版本 示例 Oracle Solaris 10 sysidcfg 文件 | 转换后将用于 js2ai 的文件 |
---|---|
terminal=vt100 system_locale=C timezone=US/Pacific nfs4_domain=dynamic security_policy=NONE root_password=rJmv5LUXM1OcU network_interface=PRIMARY { hostname=zdb1 ip_address=192.168.7.1 netmask=255.255.255.0 protocol_ipv6=no default_route=192.168.7.254 } name_service=NONE | terminal=vt100 system_locale=C timezone=US/Pacific security_policy=NONE root_password=rJmv5LUXM1OcU network_interface=vdb1 {primary hostname=zdb1 ip_address=192.168.7.1 netmask=255.255.255.0 protocol_ipv6=no default_route=192.168.7.254 } name_service=NONE |
注意我们执行了以下操作:
nfs4
响应。network_interface
项的语法。重要事项:所有 Oracle Solaris 区域的口令均为 |
该口令是这样创建的:在 Oracle Solaris 10 系统上创建一个口令为 crossbow
的用户,然后将加密口令从 /etc/shadow
复制到 sysidcfg
文件中的 root_password
设置。也可能使用 Oracle Solaris 11 加密口令。
然后,转到 /tmp
目录:
# cd /tmp
接下来,使用您常用的编辑器创建 sysidcfg
文件,将表 1 右栏中显示的所有 sysidcfg
设置(从 terminal=vt100
行开始)剪切并粘贴到新的 sysidcfg
文件中。
然后执行 js2ai
命令,它将 sysidcfg
转换为 sc_profile.xml
文件:
# js2ai -s
默认情况下,该命令将在当前目录中查找 sysidcfg
文件,并将 sc_profile.xml
输出到当前目录。
此时您可能愿意查看一下刚创建的 sc_profile.xml
。
下一步,从 zclone
区域创建 zdb1
区域:
# zonecfg -z zdb1 "create -t zclone"
然后指定建立区域文件的位置并添加 VNIC vdb1
。
# zonecfg -z zdb1 "set zonepath=/zonefs/zdb1" # zonecfg -z zdb1 "select anet linkname=net0; set linkname=vdb1; set lower-link=dbswitch0; end"
上面最后一条命令的根本意途是:选择自动创建的 VNIC net0
,首先将其名称更改为 vdb1
,然后通过 lower-link
属性将其与 etherstub dbswitch0
相关联。换言之,使配置与图 2 一致。
现在需要将先前创建的 /tmp/sc_profile.xml
配置文件应用于新的 zdb1
区域:
# zoneadm -z zdb1 clone -c /tmp/sc_profile.xml zclone
然后启动 zdb1
区域并确认它运行:
# zoneadm -z zdb1 boot # zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / solaris shared 78 zdb1 running /zonefs/zdb1 solaris excl - zclone installed /zonefs/zclone solaris excl
在第 4 步中可以看到,生成配置需要输入不少内容。附录提供了简化创建(和清除)Oracle Solaris 区域的脚本。您应将这些脚本复制和粘贴到相应的文件名(如每个脚本中所示)。有关更多说明,请参见附录。
如果将脚本放在 /opt/crossbowhowto/scripts
中,可以使用以下命令看到所有这些脚本:
# cd /opt/crossbowhowto/scripts # ls cleanupallzones.sh cleanupzone.sh createzone-2vnic.sh cleanupdladm.sh createzone-1vnic.sh new-zone-vnic.sh
您已经在第 4 步中创建了 zdb1
数据库区域,因此现在创建另外两个数据库区域 zdb2
和 zdb3
。有关参数说明,请参见附录。
# sh createzone-1vnic.sh zdb2 vdb2 192.168.7.2 dbswitch0 192.168.7.254 # sh createzone-1vnic.sh zdb3 vdb3 192.168.7.3 dbswitch0 192.168.7.254
接下来,需要为路由器创建一个 Oracle Solaris 区域 zrouter
。为保持示例的简单明了,我们将使用默认的 Oracle Solaris 路由器来处理路由任务。如果路由更复杂或想要使用其他路由协议,可以使用开源 Quagga 项目,该项目可在 Oracle Solaris 11 程序包信息库中找到。参见 quagga
(8)。
注意,zrouter
区域有两个 VNIC,但我们将使用脚本,该脚本只创建一个 VNIC。现在使用以下命令创建 zrouter
区域和它的一个接口。稍后,我们将配置第二个接口和路由。
# sh createzone-1vnic.sh zrouter vdb0 192.168.7.254 dbswitch0 NONE
最后,创建两个用于运行 Web 服务器的区域:zweb1
和 zweb2
。您需要用自己子网上的地址替换以下命令中的 129.200.9 地址,因为 vphys1
和 vphys2
地址是外部系统看到的地址。
# sh createzone-2vnics.sh zweb1 vweb1 192.168.0.1 webswitch0 192.168.0.254 vphys1 129.200.9.1 net0 # sh createzone-2vnics.sh zweb2 vweb2 192.168.0.2 webswitch0 192.168.0.254 vphys2 129.200.9.2 net0
注:我们并不实际安装 Web 服务器,如何开始在 Oracle Solaris 11 中创建 Oracle Solaris 区域一文将说明如何安装 Apache Web 服务器。然后可以使用 svcadm
轻松启动服务器。
回到本示例,验证配置:
# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / solaris shared 78 zdb1 running /zonefs/zdb1 solaris excl 81 zdb2 running /zonefs/zdb2 solaris excl 82 zdb3 running /zonefs/zdb3 solaris excl 83 zrouter running /zonefs/zrouter solaris excl 84 zweb1 running /zonefs/zweb1 solaris excl 85 zweb2 running /zonefs/zweb2 solaris excl - zclone installed /zonefs/zclone solaris excl
另一个有用的检查是显示使用 etherstub 的所有 VNIC。首先,看看哪些 VNIC 分配给了 dbswitch0
:
# dladm show-vnic -l dbswitch0 LINK OVER SPEED MACADDRESS MACADDRTYPE VID zrouter/vdb0 dbswitch0 0 2:8:20:c2:d5:7 random 0 zdb1/vdb1 dbswitch0 0 2:8:20:c6:31:48 random 0 zdb2/vdb2 dbswitch0 0 2:8:20:79:62:95 random 0 zdb3/vdb3 dbswitch0 0 2:8:20:46:b1:c6 random 0
还可以检查 webswitch0
,但由于您未为 zrouter
配置第二个接口,将不会看到 webswitch0
etherstub 的全部组件。
在完成 zrouter
的配置之前,必须解决 Oracle Solaris 11 第一版所独有的一个小问题。
我们必须重新启动我们使用 createzone-2vnics.sh
脚本创建的 zweb1
和 zweb2
这两个区域。如果您查看为 zweb1
和 zweb2
创建的两个接口的状态,您不会看到第二个网络接口处于活动状态。重新启动即可纠正此问题,随后的各次重启将始终启用这两个接口。
此错误与通过 zonecfg
的 anet
子命令的 allowed-address
属性指定 IP 地址有关。我们使用从 sysidcfg
文件生成的 sc_profile.xml
文件设置了第一个 VNIC 的 IP 地址。但第二个 IP 地址是通过 zonecfg
命令配置的(因为不能通过 sc_profile.xml
创建两个网络接口)。若想了解如何使用了 allowed-address
属性,请参见 createzone-2vnics.sh
脚本。
因此,首先需要重新启动 zweb1
。首次登录 Oracle Solaris 区域时请始终使用 -C
标志。这将调用配置工具来提示您输入。您已经通过 sysidcfg
文件在启动前提供了配置信息,因此这里不会提示您。但如果您对 sysidcfg
或 sc_profile.xml
文件内容进行了任何更改,则可能触发提示。
# zlogin -C zweb1 [Connected to zone 'zweb1' console]
如果您没有看到以下登录提示,请按 Enter 键。如果您仍然什么也没看到,则该区域很可能仍在启动过程中。
zweb1 console login: root Password: crossbow Oct 20 21:19:02 zweb1 login: ROOT LOGIN /dev/console Oracle Corporation SunOS 5.11 snv_175 September 2011 root@zweb1:~#
重新启动 zweb1
区域。
# reboot zweb1 reboot: initiated by root on /dev/console [NOTICE: Zone rebooting] SunOS Release 5.11 Version 11.0 64-bit Copyright (c) 1983, 2011, Oracle and/or its affiliates. All rights reserved. Hostname: zweb1 [Connected to zone 'zweb1' console] zweb1 console login:
使用 ~. 转到全局区域。
接下来,登录到 zweb2
并重新启动它。
zweb2 console login: root Password: crossbow root@zweb2:~# reboot
再次使用 ~. 转到全局区域。
现在可以完成对 zrouter
的配置,该路由器应在 Web 服务器区域 zweb1
和 zweb2
以及三个数据库区域 zdb1
、zdb2
和 zdb3
之间路由数据包。这里的问题在于,如果我们使用脚本创建两个 VNIC,则第二个是通过 allowed-address
属性创建的,这意味着 VNIC 将仅使用该地址传输数据包。但我们需要它转发数据包以实现路由功能。因此要手动创建第二个接口而不使用 allowed-address
属性,如下所示。
首先从全局区域 执行以下操作以创建位于 webswitch0
etherstub 上的 vweb0
VNIC。
# zonecfg -z zrouter zonecfg:zrouter> add anet zonecfg:zrouter:anet> zonecfg:zrouter:anet> set linkname=vweb0 zonecfg:zrouter:anet> set lower-link=webswitch0 zonecfg:zrouter:anet> end zonecfg:zrouter> exit
然后,重新启动 zrouter
区域并重新登入。
# zlogin -C zrouter root@zrouter:~# reboot zweb1 console login: root Password: crossbow
现在必须为 zrouter
区域指定 IP 地址。如前所述,不能使用前面使用的方法,因为通过 allowed-address
分配 IP 地址具有太大的局限性。也不能使用 sc_profile.xml
方法,因为只能用该文件创建一个接口。这些是仅有的两种可以从全局区域向专用堆栈区域分配 IP 地址的办法,第三种方法是直接登录该区域并配置 IP 地址。
root@zrouter: ipadm create-ip vweb0 root@zrouter: ipadm create-addr -T static -a 192.168.0.254/24 vweb0/web
最后一个手动配置是启用数据包转发。在启用之前,您可能有兴趣登录到 zdb1
并尝试 ping 所有其他 VNIC。您将能够 ping 通 vdb2
和 vdb3
,以及路由器接口 vdb0
和 vweb0
。在 zrouter
区域中启用数据包转发之后,您将可以从 zdb1
ping 通 vweb1
,反之亦然。
不过,您不会 ping 通 vphys1
或 vphys2
,因为这两个都是通过 allowed-address
属性创建的。因此不会通过它们转发数据包。在本例中,由于我们不希望数据库区域可以访问外部网络,反之亦然,因此这一结果正如我们所愿。
要在 zrouter
区域中启用 IP 转发,执行以下操作:
root@zrouter: ipadm set-prop -p forwarding=on ipv4
完成该设置之后,查看为两个接口分配的地址:
root@zrouter: ipadm show-addr ADDROBJ TYPE STATE ADDR lo0/v4 static ok 127.0.0.1/8 vdb0/v4 static ok 192.168.7.254/24 vweb0/web static ok 192.168.0.254/24 lo0/v6 static ok ::1/128
现在可以参照图 4 尝试各种试验。
图 4. 还是网络虚拟化示意图
在各区域之间使用 ping
或 traceroute
命令,如下所示:
zweb1
的 vphys1
地址。应该可以成功。allowed-address
,仍然需要启用 IP 转发,正如配置 zrouter
区域时所做的。zweb1
或 zweb2
到达以下数据库区域之一:zdb1
、zdb2
或 zdb3
(分别为 192.168.7.1、192.168.7.2 或 192.168.7.3)。因为 zrouter
已经启用了 IP 转发,所以这次应该可以成功。zdb1
、zdb2
或 zdb3 尝试到达 192.168.0.1 或 192.168.7.2。同样,因为 zrouter
配置,应该可以成功。有关可以用来清理(删除)区域和 VNIC 并将系统恢复到原始状态的三个脚本,请参见附录。
希望这一篇分步指导能够为您的未来实践提供一些启发。使用 Oracle Solaris 11 的功能,您可以轻松搭建相当复杂的环境。使用本文未讨论但通过 Oracle Solaris 11 信息库可用的其他工具,如 IP Filter 防火墙、quagga
路由程序包和新的负载平衡器,可以满足非常复杂的联网要求。
下面是其他一些资源:
本节提供了 6 个脚本。建议使用 gedit
将其内容复制并粘贴至建议的文件名,以便在 Oracle Solaris 11 上创建这些文件。
#!/bin/sh # # FILENAME: createzone-1vnic.sh # Create a zone with a VNIC attached to an etherstub # Usage: # createzone-1vnic.sh <zone name> <VNIC> <IP address for VNIC> # <etherstub to which VNIC is attached> <default route> if [ $# != 5 ] then echo "Usage: createzone-1vnic.sh <zone name> <VNIC>" echo " <IP address for VNIC> <etherstub to which VNIC is attached>" exit 1 fi ZONENAME=$1 sh new-zone-vnic.sh $ZONENAME $2 $3 $4 $5 # Now create the new zone from the clone and apply the config file zoneadm -z $ZONENAME clone -c /tmp/sc_profile.xml zclone zoneadm -z $ZONENAME boot #END FILE createzone-1vnic.sh
#!/bin/sh # # FILENAME: createzone-2vnics.sh # # Usage: # create2zones.sh <zone name> <vnic1> <IP address for vnic1> # <etherstub for vnic1> <default route> <vnic2> # <IP address for vnic2> <physical VNIC to associate with vnic2> if [ $# != 8 ] then echo "usage: createzone-2vnics.sh <zone name> <vnic1> <IP address for vnic1>" echo " <etherstub for vnic1> <vnic2> <IP address for vnic2>" echo " <physical VNIC or etherstub to associate with vnic2>" exit 1 fi ZONENAME=$1 VNIC1=$2 VNIC1IP=$3 ETHERSTUB=$4 DEF_ROUTE=$5 VNIC2=$6 VNIC2IP=$7 PHYSNIC=$8 echo "Create zone $ZONENAME" echo " Interface $VNIC1, IP address $VNIC1IP on etherstub $ETHERSTUB," echo " default route to $DEF_ROUTE" sh new-zone-vnic.sh $ZONENAME $VNIC1 $VNIC1IP $ETHERSTUB $DEF_ROUTE echo " Interface $VNIC2, IP address $VNIC2IP on physical NIC $PHYSNIC" zonecfg -z $ZONENAME "add anet; set linkname=$VNIC2; set lower-link=$PHYSNIC; set allowed-address=$VNIC2IP; end" # Now create the new zone from the clone and apply the config file zoneadm -z $ZONENAME clone -c /tmp/sc_profile.xml zclone zoneadm -z $ZONENAME boot # END FILE createzone-2vnics.sh
#!/bin/sh # # FILENAME: new-zone-vnic.sh # Create a zone with a VNIC attached to an etherstub. # This script does most of the work for createzone-1vnic.sh and # createzone-2vnics.sh # Usage: # new-zone-vnic.sh <zone name> <VNIC> <IP address for VNIC> <etherstub to which VNIC is attached> # <default route> if [ $# != 5 ] then echo "Usage: createzone-1vnic.sh <zone name> <VNIC> <IP address for VNIC>" echo " <etherstub to which VNIC is attached> <default route>" exit 1 fi ZONENAME=$1 VNIC=$2 VNICIP=$3 ETHERSTUB=$4 DEF_ROUTE=$5 # We are using the Oracle Solaris 10 sysidcfg file to organize # all the config information for a zone, and then convert to Oracle # Solaris 11 format via the js2ai utility. # Note that you cannot generate a root password under Oracle Solaris 11 # and use that encrypted string for the root_password property # of the sysidcfg file (since sysidcfg is an Oracle Solaris 10 feature # not an Oracle Solaris 11 one). The recommended approach is to # generate a password on an Oracle Solaris 10 system and grab it # from the /etc/shadow file. cat > /tmp/sysidcfg << _EOF_ system_locale=C timezone=US/Pacific security_policy=NONE root_password=rJmv5LUXM1OcU network_interface=$VNIC {primary hostname=$ZONENAME ip_address=$VNICIP netmask=255.255.255.0 protocol_ipv6=no default_route=$DEF_ROUTE } name_service=NONE _EOF_ cd /tmp # Convert the sysidcfg file to sc_profile.xml js2ai -s if [ $? != 0 ] then echo "Error converting sysidcfg file, see js2ai.log";exit 1 fi zonecfg -z $ZONENAME "create -t zclone" zonecfg -z $ZONENAME "set zonepath=/zonefs/$ZONENAME" zonecfg -z $ZONENAME "select anet linkname=net0; set linkname=$VNIC; set lower-link=$ETHERSTUB; end" #END FILE new-zone-vnic.sh
#!/bin/sh # # FILENAME: cleanupzone.sh # # Usage: cleanupzone.sh <zone name> # # This will completely remove a zone from the system # if [ $# != 1 ] then echo "Usage: cleanupzone <zone name>" exit 1 fi echo 'zoneadm -z '$1' halt' zoneadm -z $1 halt echo 'zoneadm -z '$1' uninstall -F' zoneadm -z $1 uninstall -F echo 'zonecfg -z '$1' delete -F' zonecfg -z $1 delete -F # # END FILE cleanupzone.sh
#!/bin/sh # # FILENAME: cleanupallzones.sh # Usage: cleanupallzones.sh # # This will completely remove all the demo zones sh cleanupzone.sh zweb1 sh cleanupzone.sh zweb2 sh cleanupzone.sh zrouter sh cleanupzone.sh zdb1 sh cleanupzone.sh zdb2 sh cleanupzone.sh zdb3 sh cleanupzone.sh zclone # # END FILE cleanupallzones.sh
#!/bin/sh # # FILENAME: cleanupdladm.sh # # Usage: cleanupdladm # # This will remove the etherstubs # dladm delete-etherstub webswitch0 dladm delete-etherstub dbswitch0 # # END FILE cleanupdladm.sh
修订版 1.1,2011 年 11 月 14 日 |