在将正在运行的虚拟机转换为 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