准备虚拟设备

准备虚拟设备

在将正在运行的虚拟机转换为 OVA(可再分发虚拟设备)之前,需要做什么来确保它处于就绪状态,以便 OVA 的实例不会在构建过程中带来不必要或潜在的破坏性杂物?这是我目前所拥有的。我遗漏了什么吗?如果已经回答了这个问题或者有最佳实践文档,我将不胜感激。谢谢。

#################################
##
## 获取所有软件包 up2date 并
## 清除
## 本地包
##
#################################
yum-y 更新;
yum 清理全部;


#################################
##
## 摆脱我的迹象
## 修改一下
##
#################################
[[ -a /etc/issue-original,v ]] && 取消链接 /etc/issue-original,v ;
[[ -a /etc/issue,v ]] && 取消链接 /etc/issue,v ;
ci-u /etc/问题;



#################################
##
## 删除主机密钥
## 将在
## 新的虚拟机已启动
##
## 还要确保我删除了任何
## 我可能已经拥有的个人钥匙
## 设置时使用
##
#################################
查找 /etc/ssh/*host* |xargs 取消链接;
查找 /root/.ssh/ -type f |xargs unlink ;
查找 /home/*/.ssh/ -type f |xargs unlink ;



#################################
##
## 不再使用 UUID
## FSTAB 和任何 NIC 配置
## 因此新的虚拟机可以找到
## UUID 已重新生成
##
## 因为我们使用 LVM,所以只有 /boot
##slice 是直接切片引用
## 其余的是逻辑卷
##
#################################
sed -i -e 's/UUID=[0-9a-f-]*\s/\/dev\/sda1\t/' /etc/fstab ;
sed -i -e '/^UUID=[0-9a-f-]*.*/d' /etc/sysconfig/network-scripts/ifcfg-eno* ;
sed -i -e '/^UUID=[0-9A-F-]*.*/d' /etc/sysconfig/network-scripts/ifcfg-eno* ;
查找 /etc/udev/rules.d/ -iname '70 *net*' |xargs 取消链接;


#################################
##
## 让 NTP 守护进程知道
## 预计时间会有很大跳跃,因此
## 他没有惊慌失措。也让
## 让他知道如果墙壁融化,
## 它是酸,说话和
## 他会没事的
##
#################################
[[ -a /etc/ntp.conf ]] && \
  [[ "$(head -1 /etc/ntp.conf)" == "tinker panic 0" ]] || \
  sed -i -e ‘1itinker panic 0\n’ /etc/ntp.conf;



#################################
##
## 截断命令历史记录
## 因为学习过程
## 可能包含一些令人尴尬的
## 错误,其中一些是
## 也是糟糕的 opsec
##
#################################
>/root/.bash_history;
>/home/*/.bash_history;
>/root/anaconda-ks.cfg;



#################################
##
## 最后,指示操作系统重做
## 初始设置并放回
## 新机器的味道
##
#################################
系统取消配置;

答案1

我现在无法访问我们当前的清理脚本,但我们考虑的一件事是,设备可能无需运行适当的自定义步骤即可部署。这意味着,例如,原始映像上的主机名可能会继续存在,并且必须在关闭之前重置。我们通常将我们的主机名设置为localhost

考虑到这一点,你可能需要采取以下额外步骤

  • 清除/etc/hosts, /etc/resolv.conf,/etc/sysconfig/network任何自定义值
  • 除了删除 ifcfg 文件外,不要忘记删除任何路由文件(/etc/sysconfig/network-scripts/route-eno*如果有)
  • 轮换并清理每一个日志文件、审计日志和 wtmp 文件(不要删除 wtmp 文件,只是cat /dev/null > /var/log/wtmp),所以它们启动时是空的
  • 清理/var/tmp/tmp
  • 清理 vmware 配置日志(如果有的话)(如果我没记错的话/var/log/vmware-imc/*
  • 如果您将模板注册到 RH Satellite、SpaceWalk、SuSE Manager 或 RHN 本身之类的东西中,请确保将/etc/sysconfig/rhn或类似文件恢复为默认值。根据经验,rm恢复这些文件不是一个好主意。我们通常只是在第一次创建映像时进行备份,然后在关闭映像时将其恢复。/etc/sysconfig/osad如果您的环境使用它,也是如此。
  • 删除可能已创建的任何额外用户,以及影子文件上的每个密码
  • 确保初始化、首次启动、部署后定制脚本实际上设置为在首次启动时运行。

最后,但并非最不重要的一点是,您可以将每个文件系统以及额外的未使用 VG 空间清零,这样您就可以更好地压缩映像。我们有一个脚本,它会进入每个文件系统,dd 一堆零,直到填满,然后删除文件。对于有空空间的 VG 也是如此,创建一个填充 100%FREE 的 LV,将其清零并删除。完成这些最后步骤(关闭电源前的最后一步)后,您可以根据要创建的映像类型使用技巧:

  • 对于 VMWare,将映像克隆到新的 VM 中,并将目标设置为精简配置。执行此操作时,所有连续的零将转换为零
  • 对于 openstack/kvm 图像,您可能需要使用 qemu-img 将它们转换为 qcow2(如果您的提供商支持它),并启用压缩标志:qemu-img convert -f raw -O qcow2 -c source.raw destination.qcow2

我们从这个过程中学到的一点是,每次我们运行新一轮的图像时,我们都会发现一些可以添加的新内容,通常只有在图像发布后才会发现。这些内容会被添加到下一个周期,依此类推。

编辑:本着“每次我们学到新东西”的精神,上次添加了以下步骤:

  • yum 历史 新功能
  • yum 重新安装基础系统 -y

相关内容