在将正在运行的虚拟机转换为 OVA(可再分发虚拟设备)之前,需要做些什么来确保它处于就绪状态,以便 OVA 的实例不会在构建过程中带来不必要的或潜在的破坏性问题?这就是我到目前为止所拥有的。我错过了什么吗?如果这已经是答案或者有一个最佳通用实践文档,我将不胜感激指向正确方向的指针。谢谢。
################################# ## ## 获取所有软件包更新日期和 ## 清除所有垃圾 ##本地包 ## ################################# yum -y 更新; 百胜清洁所有; ################################# ## ##摆脱我曾经的迹象 ## 修补这个 ## ################################# [[ -a /etc/issue-original,v ]] && 取消链接 /etc/issue-original,v ; [[ -a /etc/issue,v ]] && 取消链接 /etc/issue,v ; ci -u /etc/问题; ################################# ## ## 删除他们的主机密钥 ## 将在 ## 新虚拟机启动 ## ## 还要确保我删除任何 ## 个人密钥我可能是 ## 设置时使用 ## ################################# 查找 /etc/ssh/*host* |xargs unlink ; 查找 /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 unlink ; ################################# ## ## 让 NTP 守护进程知道 ## 预计时间会有很大的飞跃,所以 ##他没有吓到。也让 ## 他知道如果墙壁融化, ## 它是酸,说话和 ##他会没事的 ## ################################# [[ -a /etc/ntp.conf ]] && \ [[ "$(head -1 /etc/ntp.conf)" == "tinker panic 0" ]] || \ sed -i -e '1itinker panic 0\n' /etc/ntp.conf ; ################################# ## ## 截断命令历史 ## 因为学习过程 ##可以包含一些尴尬 ## 错误,其中一些是 ## 也是糟糕的操作安全 ## ################################# >/root/.bash_history ; >/home/*/.bash_history ; >/root/anaconda-ks.cfg ; ################################# ## ## 最后,指示操作系统重做 ## 初始设置并放回 ## 那种新机器的味道 ## ################################# 系统取消配置;
我现在无法访问我们当前的清理脚本,但我们要考虑的一件事是可以在不运行适当的自定义步骤的情况下部署设备。这意味着,例如,原始图像上的主机名可能会继续存在,并且必须在关闭之前重置。我们通常将我们的设置为
localhost
.考虑到这一点,这些是您可能需要注意的额外步骤
/etc/hosts
值/etc/resolv.conf
/etc/sysconfig/network
/etc/sysconfig/network-scripts/route-eno*
),如果有的话cat /dev/null > /var/log/wtmp
),所以它们开始为空/var/tmp
和/tmp
/var/log/vmware-imc/*
)/etc/sysconfig/rhn
或类似的恢复为默认值。根据经验,rm
'ing 这些是一个坏主意。我们通常只在第一次创建映像时进行备份,并在关闭映像时将其备份。/etc/sysconfig/osad
如果您的环境使用它,同样适用。最后但同样重要的是,您可以将每个文件系统以及额外未使用的 VG 空间清零,以便更好地压缩图像。我们有一个进入每个文件系统的脚本,dd 是一堆零,直到它填满,然后删除文件。对于具有空白空间的 VG,创建一个填充 100%FREE 的 LV,将其清零并删除它。在完成这些最后的步骤(断电前的最后一步)之后,您可以根据您正在创建的图像类型使用一个技巧:
qemu-img convert -f raw -O qcow2 -c source.raw destination.qcow2
我们从这个过程中得到的一件事是,每次我们运行一个新的图像周期时,我们都会了解到我们可以添加的新东西,通常只有在它发货之后。这将被添加到下一个周期,依此类推。
编辑:本着“每次我们都学到新东西”的精神,上次添加了以下步骤: