前几天写了一个文章,关于修改 esxi,增加可以通过 vcenter 管理的服务。为了确认,查了一下 vmware 的知识库,看到 vmware 对于这样的修改有一个提示,即这样的修改会在系统重启后丢失配置。

    原因是 vmkernel使用的是内存文件系统,配置、日志、补丁都保存在内存中。而 开机引导使用的p_w_picpaths 则保存在/bootbank和 /altbootbank目录下。这也是为什么 esxi 系统不需要在主机上安装,也可以直接引导起来的原因,它会把远程的镜像直接安装到内存中。

    如何将配置保存,在 esxi 系统重启后依然有效,我查了不少文档,找到几种方法。

    一、手动修改引导区镜像的内容,增加变动的部分

        1.1将变动的文件打个 压缩包,生成的文件要放到 /bootbank目录下

tar -cvzf service.tgz /etc/vmware/firewall/service.xml

        1.2使用bootModuleConfig脚本向将该文件添加到启动配置文件里 /bootbank/boot.cfg

BootModuleConfig.sh --add=service.tgz

        1.3查看 boot.cfg,看看里面有没有---service.tgz。有即表示配置添加成功。

        1.4重启以后,可以使用bootOption -m 查看新增加的配置是否生效

     注意:这种方法比较方便,但有可能在下一次打系统补丁后消失,因为新的补丁的配置文件里并不包含你修改的部分。

    

    二、这个方法更简单一点,既然配置文件都是在内存里的,那我把它保存到硬盘上,开机后在自动任务里写个命令把改过的配置文件拷贝到内存中对应的目录下。

        2.1编辑配置文件,除了是 service.xml 以外,可以自定义文件名,放到/etc/vmware/firewall目录下,同样生效,可以使用 service.xml 做模版来改,也可以用类似如下的配置方式

<ConfigRoot>
<service>
<id>SSH 2222</id>
<rule id = '0000'>
<direction>inbound</direction>
<protocol>tcp</protocol>
<porttype>dst</porttype>
<port>2222</port>
</rule>
<enabled>true</enabled>
<required>false</required>
</service>
</ConfigRoot>

    和前一个文档里提到的格式不一样的地方是,只有这一条策略,并且头和尾多了 <ConfigRoot>一对标记。

    可以将文件 拷贝到/vmfs/volumes/本地硬盘的目录下。这一级的目录的名字是你为 esxi 本地硬盘取在存储器里取和名字。

    2.2编辑/etc/rc.local,以便在开机后执行把文件 拷贝到实际生效的配置文件所在的目录下的功能

#Copy the new firewall rule from vmfs place holder to file system
cp /vmfs/volumes/datastore1/etc/ssh_2222.xml /etc/vmware/firewall/
#refresh firewall rules
esxcli network firewall refresh
#Copy the modified services file from vmfs place holder to file system
cp /vmfs/volumes/datastore1/etc/services /etc/services
#Restart inetd to get the changes
kill -HUP `cat /var/run/inetd.pid`


    2.3重启主机看看有没有效果,这个是从 vmware官网看到的,我自己没试过。详细链拉


    三、官方推荐最规矩的方法是建立一个 vib 文件,然后加到启动过程里加载。

        加载一个 vib 文件非常简单,难点在怎样建立一个 vib 文件。说点题外话,vib 文件不只用于配置文件的加载,vmware 是把它做为一个标准的软件安装方式。第三方的驱动也需要这个格式来安装。

    3.1先降低 esxi 对软件安全层次的要求,降到CommunitySupported层,正常是PartnerSupported层,这个有什么区别呢?简单的说,PartnerSupported层是 vmware 认可的,会对这个软件的稳定性提供保障的,当你向 vmware 请求技术支持的时候,vmware 会要求你先将安装的CommunitySupported层的东西都卸载掉。

    

esxcli software acceptance set CommunitySupported

    3.2安装你建好的 vib 文件

sxcli software vib install -n custom_vib_name.vib

    3.3把软件支持层再改回来

esxcli software acceptance set PartnerSupported


    就是这么简单?难的在怎么建 vib 格式的文件。

    四、建 vib 文件也有几种方式

        4.1使用http://labs.vmware.com/flings/vib-author.提供的工具,当然这个工具也是社区层的。这个软件只能在 suse linux上运行,还需要一堆的软件支持,我没能测试。这里有该工具的使用说明。

        4.2使用esxi5-cpt-2.2.1.exe,很遗憾,这个项目的网站我总是打不开。不过这个是 windows平台下的应用了,用起来应该容易一些吧。

        4.3 对于非软件类的,还可以自己建立一个 vib 包。

        一 个 vib 文件包含3个部分

  •  一个descriptor.xml 文件包含VIB 元数据,这个文件可以通过复制 /opt/vmware/vibtools/sample/descriptor-template.xml 这个文件修改得来

  • sig.pkcs7 签名文件,对于CommunitySupported层的 vib 包,不需要签名,但空的文件仍然是必须的

  • 单独的目录,放置你需要打包的所有文件

使用 ar 命令打包

ar -r test.vib test descriptor.xml sig.pkcs7

然后使用3的步骤安装


参考以下网站资料:

    http://www.yellow-bricks.com/2011/11/29/how-to-create-your-own-vib-files/

http://kb.vmware.com/selfservice/search.do?cmd=displayKC&docType=kc&docTypeID=DT_KB_1_1&externalId=2007381