Назад | Перейти на главную страницу

Подготовка виртуального устройства

Что нужно сделать перед преобразованием работающей виртуальной машины в OVA (распространяемое виртуальное устройство), что нужно сделать, чтобы убедиться, что она находится в состоянии готовности, чтобы экземпляры OVA не приносили ненужного или потенциально разрушительного мусора из процесса сборки? Это то, что у меня есть. Я что-нибудь упускаю? Если на это уже был дан ответ или есть документ Best Common Practices, я был бы признателен за указатель в правильном направлении. Спасибо.


#################################
##
## Get all packages up2date and 
## clean out any cruft in the 
## local packages
##
#################################
yum -y update ;
yum clean all ;


#################################
##
## Get rid of the signs I was 
## tinkering with this
##
#################################
[[ -a /etc/issue-original,v ]] && unlink /etc/issue-original,v ;
[[ -a /etc/issue,v ]] && unlink /etc/issue,v ;
ci -u /etc/issue ;



#################################
##
## Remove the host-keys to they
## will be regenerated when the
## new VM is spun-up
##
## Also make sure I remove any 
## personal keys I may have been
## using while setting up
##
#################################
find /etc/ssh/*host* |xargs unlink ;
find /root/.ssh/ -type f |xargs unlink ;
find /home/*/.ssh/ -type f |xargs unlink ;



#################################
##
## Get rid of the use of UUID in 
## FSTAB and any NIC configuration
## so the new VM can find then when
## the UUIDs are regenerated 
##
## Since we use LVM, only the /boot
## slice is a direct slice reference
## the rest are logical volumes
##
#################################
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 ;


#################################
##
## Let the NTP daemon know to 
## expect a big jump in time, so 
## he doesn't freak out. Also let
## him know that if the walls melt,
## it is the acid, speaking and 
## he'll be alright
##
#################################
[[ -a /etc/ntp.conf ]] && \
  [[ "$(head -1 /etc/ntp.conf)" == "tinker panic 0" ]] || \
  sed -i -e '1itinker panic 0\n' /etc/ntp.conf ;



#################################
##
## Trunate the command-histories
## because the learning-process
## can contain some embarrassing
## mistakes, some of which are 
## also bad opsec
##
#################################
>/root/.bash_history ;
>/home/*/.bash_history ;
>/root/anaconda-ks.cfg ;



#################################
##
## Lastly, instruct the OS to redo
## the initial setup and put back
## that new-machine-smell
##
#################################
sys-unconfig ;

У меня сейчас нет доступа к нашему текущему сценарию очистки, но мы принимаем во внимание одну из вещей, которую можно развернуть, не выполнив соответствующие шаги настройки. Это означает, например, что имя хоста в исходном образе может существовать и должно быть сброшено перед закрытием. Обычно мы устанавливаем наши 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 с пустым пространством, создайте LV, который заполняется на 100% БЕСПЛАТНО, обнулите его и удалите. После завершения этих последних шагов (последних перед выключением питания) вы можете использовать трюк в зависимости от типа создаваемого изображения:

  • Для VMWare клонируйте образ в новую виртуальную машину с целевым назначением тонкой подготовки. При этом все непрерывные нули будут преобразованы в ничто.
  • Для изображений openstack / kvm вы можете преобразовать их с помощью qemu-img в qcow2 (если ваш провайдер поддерживает его) и включить флаг сжатия: qemu-img convert -f raw -O qcow2 -c source.raw destination.qcow2

Одна вещь, которую мы извлекли из этого процесса: каждый раз, когда мы запускаем новый цикл изображений, мы узнаем о чем-то новом, что могли бы добавить, обычно только после того, как оно было отправлено. Это добавляется к следующему циклу и так далее.

РЕДАКТИРОВАТЬ: в духе «каждый раз, когда мы узнаем что-то новое», в прошлый раз были добавлены следующие шаги:

  • ням история новый
  • yum переустановите базовую систему -y