准备一个虚拟设备

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


 #################################
 ##
 ##获取所有包up2date和 
 ##清除任何脏东西 
 ##本地包
 ##
 #################################
 yum -y更新;
 yum干净一切;


 #################################
 ##
 ##摆脱我的迹象 
 ##修补这个
 ##
 #################################
 [[-a / etc / issue-original,v]] && unlink / etc / issue-original,v;
 [[-a / etc / issue,v]] && unlink / 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和任何网卡configuration
 ##所以新的虚拟机可以find什么时候
 ## 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'1inkinker panic 0 \ n'/etc/ntp.conf;



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



 #################################
 ##
 ##最后,指示操作系统重做
 ##初始设置并放回
 ##那新机器的气味
 ##
 #################################
 sys-unconfig;

我目前无法访问我们当前的清理脚本,但我们考虑的一件事情是,可能无需运行适当的定制步骤即可部署设备。 这意味着,例如,原始图像上的主机名可能会生效,并且在closures之前必须重置。 我们通常把我们的设置为localhost

考虑到这一点,这些是您可能需要照顾的额外步骤

  • 清理/etc/hosts/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
  • 清理vmwareconfiguration日志,如果有的话(iirc, /var/log/vmware-imc/*
  • 如果您将模板注册到RH Satellite,SpaceWalk,SuSE Manager或RHN本身,请确保将/etc/sysconfig/rhn或类似的文件恢复为默认值。 从经验来看,这是一个糟糕的主意。 我们通常只是在第一次创build镜像时进行备份,而在closures镜像时先备份mv。 如果您的环境使用它,则同样适用于/etc/sysconfig/osad
  • 删除可能已经创build的任何额外用户以及影子文件中的每个单一密码
  • 确保初始化,首次启动,部署后定制脚本实际上设置为在第一次启动时运行。

最后但并非最不重要的一点是,您可以将每个文件系统加上额外的未使用的VG空间,以便更好地压缩图像。 我们有一个脚本进入每个文件系统,dd是一堆零,直到填满,然后删除文件。 相同的VG与空的空间,创build一个LV填充100%免费,零出来,并删除它。 完成这些最后的步骤(关机前的最后一步)之后,您可以根据您创build的图像种类使用一些技巧:

  • 对于VMWare,将映像克隆到一个新的虚拟机,目标设置为自动精简configuration。当这样做时,所有连续的零将被转换成无
  • 对于openstack / kvm映像,您可能想要使用qemu-img将它们转换为qcow2(如果您的提供程序支持它),并启用压缩标志: qemu-img convert -f raw -O qcow2 -c source.raw destination.qcow2

我们从这个过程中得到的一件事是,每当我们运行一个新的图像周期时,我们都会学到一些我们可以添加的新东西,通常只有在发货之后。 这被添加到下一个周期,依此类推。

编辑:关于“每次我们学到新东西”的精神,上一次join了以下步骤:

  • 百胜历史新
  • yum重装基础系统-y