VMware EXSI 6.5/6.7独立主机手工升级补丁包

VMware EXSI 6.5后有免费授权,对于8核以内的主机都免费使用。这对一般个人用途的虚拟环境完全够用。不过EXSI系统本身也是需要升级维护的,我就遇到了一个跟ubuntu系统网卡性能的BUG,要升级EXSI核心来解决。EXSI的升级维护官方途径,可以当官方发布新的ISO时候重新运行安装程序来升级,又或者用一个Update Manager的服务,是属于vSphere的一个组件… 免费授权是不包括这些高大上的东西的,但是可以简单地敲命令滚动更新。

EXSI SSH

主机-操作-服务-启动安全Shell(SSH)即可启动EXSI自带的ssh服务,直接用root密码登入。

里面的环境跟linux基本类似,但是升级之类的操作是通过esxcli 命令操作的。

升级包

EXSI不是像Linux发行版办那样维护一个固定的软件源来维护更新,有个第三方的网站VMware ESXi Patch Tracker 定期追踪esxi发布的补丁包。Web界面上存在一个允许输入vib安装包的地址的窗口,但是一般每个补丁包都包括多个vib,而有些vib也有版本依赖之类的,手工解决显然不靠谱。

比如,从https://esxi-patches.v-front.de/ESXi-6.5.0.html看到目前最新是ESXi-6.5.0-20181103001-standard补丁包,点击后出现小窗口:

【下面代码会过时,请看Tracker的最新发布】

# Cut and paste these commands into an ESXi shell to update your host with this Imageprofile
# See the Help page for more instructions
#
esxcli network firewall ruleset set -e true -r httpClient
esxcli software profile update -p ESXi-6.5.0-20181103001-standard \
-d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml
esxcli network firewall ruleset set -e false -r httpClient
#
# Reboot to complete the upgrade

就3个命令,复制粘贴到EXSI的SSH,执行完后就是升级好了。3个命令其实只有中间的是升级,前后的是临时开启防火墙规则,允许升级程序访问外网。

问题和踩坑

嗯重点来了,如果直接复制粘贴就那么容易搞定就没必要写篇BLOG了。上面的几个命令很可能报错不能执行的。

首先首先要找到详细日志。命令执行的时候完全是静默的,但是后台活动很多,多登陆一个ssh窗口,可以查看/var/log/esxupdate.log的输出,有less/tail/cat等命令使用。

空间不足

我遇到第一个问题就是日志里面出现空间不足的问题。

2018-08-01T03:15:55Z esxupdate: 2107709: vmware.runcommand: INFO: runcommand called with: args = 'localcli system visorfs ramdisk add -m 0 -M 187 -n vibdownload -p 755 -t /tmp/vibdownload', outfile = 'None', returnoutput = 'True', timeout = '0.0'.^@
2018-08-01T03:15:55Z esxupdate: 2107709: HostImage: INFO: Attempting to download VIB tools-light^@
2018-08-01T03:15:55Z esxupdate: 2107709: downloader: INFO: Downloading https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/esx/vmw/vib20/tools-light/VMware_locker_tools-light_10.2.1.8267844-8941472.vib to /tmp/vibdownload/VMware_locker_tools-light_10.2.1.8267844-8941472.vib^@
2018-08-01T03:19:58Z esxupdate: 2107709: vmware.runcommand: INFO: runcommand called with: args = 'localcli system visorfs ramdisk list | grep /vibdownload && localcli system visorfs ramdisk remove -t /tmp/vibdownload', outfile = 'None', returnoutput = 'True', timeout = '0.0'.^@
2018-08-01T03:19:58Z esxupdate: 2107709: HostImage: ERROR: Failed to send vob install.stage.error: [Errno 28] No space left on device^@
2018-08-01T03:19:58Z esxupdate: 2107709: vmware.runcommand: INFO: runcommand called with: args = 'localcli system visorfs ramdisk list | grep /stagebootbank && localcli system visorfs ramdisk remove -t /tmp/stagebootbank', outfile = 'None', returnoutput = 'True',

跟踪了一下上下文,原来他的升级程序是根据物理内存按比例建立一个临时内存盘,把补丁包下载到内存盘中再使用的。然而我的垃圾机器只有4G内存,临时内存盘自然也小得可怜,放不下他的补丁包了。

PS: 原来EXSI里面的维护程序跑的是python3.5。

深挖后发现可以增加“本地交换”区来处理,在Web上【主机】-【管理】-【系统】-【交换】-【编辑设置】内选择本地硬盘的datastore,并启动本地交换和主机缓存,再升级时候就顺利了。

网络不通

有些情况是EXSI本身所处的网络是不通外网的,需要走一个内网的HTTP代理才能链接。在vSphere文档查询了一下,software profile update 有个-p参数是可以指定代理的。

esxcli software profile update -p ESXi-6.5.0-20181103001-standard \
--proxy http://192.168.123.161:3128 \
-d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml

然而并不行。

通过日志发现是连接内网超时了…是EXSI的防火墙并不允许访问3128端口,需要设置特定规则来允许…又或者,直接把防火墙关掉。

esxcli network firewall unload

嗯,很暴力,但是不用怕,重启主机后会一切如常的,不放心的话就load回来就好(unload改成load)。

 

标签: , ,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.