准备虚拟设备

DTK*_*DTK 6 linux virtual-appliances

在将正在运行的虚拟机转换为 OVA(可再分发的虚拟设备)之前,需要做些什么来确保它处于就绪状态,以便 OVA 的实例不会在构建过程中带来不必要的或潜在的破坏性干扰?这是我到目前为止。我错过了什么吗?如果这已经是答案或者有最佳通用实践文档,我会很感激指向正确方向的指针。谢谢。

################################
##
## 获取所有包 up2date 和 
## 清除任何残留物 
##本地包
##
################################
yum -y 更新;
百胜干净所有;


################################
##
##摆脱我曾经的迹象 
## 修补这个
##
################################
[[ -a /etc/issue-original,v ]] && unlink /etc/issue-original,v ;
[[ -a /etc/issue,v ]] && 取消链接 /etc/issue,v ;
ci -u /etc/issue ;



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



################################
##
## 去掉UUID中的使用 
## FSTAB 和任何网卡配置
##所以新的VM可以在什么时候找到
## 重新生成 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* ;
find /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 ;



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



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

Gut*_*llo 4

我现在无法访问我们当前的清理脚本,但我们考虑的一件事是可以在不运行正确的自定义步骤的情况下部署该设备。这意味着,例如,原始映像上的主机名可能会继续存在,并且必须在关闭之前重置。我们通常将其设置为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 配置日志(如果有的话)(iirc,/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 重新安装基本系统 -y