Запуск сценария при первом запуске нового клона CentOS 7 VM

3656
Justin

Я настраиваю некоторые серверы, которые, по сути, должны сами управлять собой после того, как я уйду из компании, поскольку я всего лишь контрактный ИТ-парень. Кто бы это ни управлял, он должен клонировать образ виртуальной машины в ESXi, а когда он запускается, он должен сам себя настроить.

Я знаю, вы, вероятно, говорите «Использовать Puppet or Chef» или «Использовать Docker», хорошо, что я тоже подумал, но это, очевидно, слишком сложно для этой установки, они идут с подходом «меньше - больше».

Эти серверы должны иметь статический IP-адрес, поэтому я подумал, что, когда он запускается в первый раз, я могу получить IP-адрес через DHCP, а затем перенастроить /etc/sysconfig/network-scripts/ifcfg-enp0s3файл, используя текущий IP-адрес в качестве DHCP, и, возможно, даже получить супер фантазии, например, проверить, работает ли он, если нет, вернуть ifcfg-en0s3файл, отправить его в сеть, а затем отправить электронное письмо кому-нибудь, что серверу нужно уделить внимание вручную, что бы ни работало.

Выше может быть больше информации, чем вам нужно, потому что все, что мне нужно знать, это запустить скрипт при первом запуске. При добавлении его на любой уровень выполнения он будет выполняться каждый раз при запуске на этом уровне выполнения.

Я думал, что мог бы иметь его на уровне запуска 3, а затем, когда он сам себя настроит, просто удалите символическую ссылку в rc3.dпапке на скрипт ... Но это своего рода вариант резервного копирования, если я не могу найти способ просто выполнить его на "следующем запуске".

Я также подумал о том, чтобы просто использовать @rebootс заданием cron, но опять же, нужно удалить себя из crontab.

Если кто-то поможет мне найти другое решение для настройки статического IP-адреса, это нормально, но мне все еще нужно знать, как лучше запустить скрипт при следующей загрузке (с указанными уровнями выполнения), потому что это необходимо и для других задач. ,

Спасибо!

PS Я понимаю, что выполнение сценарием таких вещей, как удаление себя из каталогов crontab или rc.d, не обязательно имеет большое значение, я просто подумал, что это джимми-фальсификация, и подумал, что уже может быть альтернативный способ, что-то это означало выполнить один раз при следующей перезагрузке. Но если нет, то любой из двух предыдущих подходов будет достаточно

PSS Я нашел похожую тему здесь, где выполняется сценарий @rebootи проверяет наличие файлов / сценариев в указанном каталоге, которые необходимо выполнить, а затем перемещает их, чтобы отключить их. Я полагаю, что это сработает, я могу сделать что-то вроде символической ссылки на каталог вместо перемещения самих файлов, но если это лучшее решение, то этого будет достаточно. (что бы ни делали работу :-))

0

2 ответа на вопрос

1
stuartah

fairly simply - add it as a startup script - last line of script after checking all ok etc:

rm $0

Это так обычно делается? Я просто подумал, что будет что-то вроде crontab или init.d, только будет выполнено для следующей загрузки. Но если нет, то id просто удалите его выполнение, а не сам скрипт. (Incase это должно быть установлено, чтобы выполнить снова ...) Justin 8 лет назад 1
0
eric.green

I've written the 'firstboot' script for multiple physical and virtual storage appliances over the past fifteen years, and always used the 'rm' of the symlink upon successful completion of the first boot to make sure it doesn't run on future boots.

The other possibility is setting a sentinel file like '/FIRSTBOOT' upon finishing the first boot, then add a line 'if [ -f /FIRSTBOOT ] ; then ; exit 0 ; fi' to the top of the script. That would give the option of removing the sentinel file and rebooting if you ever need to reconfigure the virtual machine again, which is easier for most people than symlinking an obscure file to an obscure directory somewhere in the system.

You're on Centos 7 so you have systemd rather than the SysV init. So the sentinel file might be easier for you.