Google Compute Engine: как установить имя хоста навсегда?
Как установить имя хоста экземпляра в GCE навсегда? Я могу установить его через имя хоста, но после перезагрузки он снова исчезнет.
Я попытался ввести метаданные (имя хоста: f.q.d.n), но это не помогло. Но он должен работать через метаданные (https://github.com/GoogleCloudPlatform/compute-image-packages/tree/master/google-startup-scripts).
У кого-нибудь есть идея?
11 ответов
самый простой способ достичь этого-создать простой скрипт, и это то, что я сделал.
Я сохранил имя хоста в метаданных экземпляра, а затем извлекаю его каждый раз, когда система перезапускается, чтобы установить имя хоста с помощью задания cron.
$ gcloud compute instances add-metadata <instance> --metadata hostname=<new_hostname>
$ sudo crontab -e
и это строка, которая должна быть добавлена в crontab
@reboot hostname $(curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google")
после этих шагов каждый раз, когда вы перезагрузите ваш экземпляр будет иметь имя <new_hostname>
.
Вы можете проверить его в подскажите или с помощью команды:hostname
редактировать rc.местные
sudo nano /etc/rc.local
Добавьте свою строку под остальными:
hostname *your.hostname.com*
убедитесь в том, чтобы запустить следующее после выполнения сценария
chmod +x /etc/rc.d/rc.local
Перезагрузка, и прибыль.
Это невозможно. пожалуйста, взгляните на этот ответ. следующее статьи объясняет, что" имя хоста " является частью записей метаданных по умолчанию, и невозможно вручную редактировать любую из пар метаданных по умолчанию. Таким образом, вам нужно будет использовать скрипт или что-то еще, чтобы изменить имя хоста каждый раз, когда система перезагружается, иначе она автоматически синхронизируется с сервером метаданных при каждой перезагрузке.
вы можете найти информация о сценариях запуска для GCE в в этой статье. Ты можешь!--9-->посетите этот для получения информации о том, как применить скрипт к экземпляру.
вы также можете создать простой скрипт запуска для выполнения заданий:
$ gcloud compute instances add-metadata <instance-name> --zone <instance-zone> --metadata startup-script='#! /bin/bash
hostname <hostname>'
обратите внимание, что если у вас уже есть startup-script, вам нужно добавить в существующий startup-script ниже команду или вы замените весь startup-script:
$ hostname instance-name
мне повезло установить имя хоста в GCE под управлением CentOS. Источник: desantolo.com
- нажмите Изменить на вашем экземпляре
- перейдите в раздел "пользовательские метаданные разделе"
- добавить
hostname
+your.hostname.tld
(перемен "ваш.имя хоста.tld " к вашему фактическому имени хоста - выполнить
curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google"
- выполнить
sudo env EDITOR=nano crontab -e
для редактирования crontab - добавить строку
@reboot hostname $(curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google")
- на клавиатуре
Ctrl
+X
- On ваша клавиатура хит
Y
- на клавиатуре нажмите
Enter
- выполнить
reboot
- после перезагрузки системы, выполните команду
hostname
и посмотреть, если ваши изменения
удачи!
протестировано на Debian.
на dhclient
задает имя хоста с помощью DHCP
вы можете переопределить это, создав пользовательский скрипт крючка в /etc/dhcp/dhclient-exit-hooks.d/custom_set_hostname
это будет читать имя хоста из /etc/hostname
:
if [ -f "/etc/hostname" ]; then
new_host_name=$(cat /etc/hostname)
fi
скрипт должен иметь разрешение execute.
важно установить new_host_name
переменная и не вызывающая hostname
команда непосредственно как любой вызов hostname
команда будет переопределена другим крючком или dhclient-script
, который использует этот переменная
Я не уверен, что понимаю ответ Адриана. Это кажется слишком сложным, так как вам нужно запускать скрипт при каждой загрузке, почему бы просто не использовать имя хоста?
vi/etc / rc.местные
добавить:
имя хоста your_hostname
вот и все. проверено и работает. нет необходимости возиться с метаданными и тому подобным.
не-cron / метаданные / решение скрипта.
Edit /etc / dhclient-(сетевой интерфейс).conf или создать его, если он не существует.
пример:
sudo nano /etc/dhclient-eth0.conf
затем добавьте следующую строку, заменив желаемое FQDN между двойными кавычками:
supersede host-name "hostname.domain-name";
сохраняется между перезагрузками и хоста и имя хоста-f работает, как задумано.
в моих CentOS VMs я обнаружил, что скрипт /etc/dhcp/dhclient.d/google_hostname.sh
, установленного google-compute-engine
RPM, фактически изменил имя хоста. Это происходит, когда экземпляр получает свой IP-адрес во время загрузки.
хотя это не долгосрочное решение, которое я действительно хочу, пока я просто удалил этот скрипт. Имя хоста, которое я установил с hostnamectl
теперь сохраняется после перезагрузки.
сценарий, скорее всего, будет в том же самом месте в VMs Debian/Ubuntu, но, конечно, я не запускаю ни один из них.
Если кто-то находит, что это решение не работает для них на экземпляре GCS. Затем я предлагаю вам попробовать использовать крючки выхода, как описано в поддержке Google.
фактически, некоторые дистрибутивы Linux, такие как CentOS и Debian, используют dhclient-скрипт для настройки сетевых параметров машина. Этот скрипт время от времени вызывается dhclient, который dynamic host configuration protocol client и предоставляет средства для настройка одной или нескольких сетей интерфейсы, использующие протокол DHCP, Протокол BOOTP, или если эти протоколы терпят неудачу, статически назначая адрес.
следующий текст является цитатой из страницы man (manual) программа dhclient-скрипт:
после завершения обработки /usr / sbin / dhclient-script проверяет наличие исполняемого /etc/dhcp / dhclient-exit-hooks скрипт, который при наличии вызывается с помощью .команда. Статус выхода dhclient-script будет передан dhclient-exit-hooks в переменной оболочки exit_status и всегда будет равен нулю если сценарий успешно выполнил задачу, для которой он был вызван. Остальная часть окружающей среды, как описано ранее‐ ously для dhclient-enter-hooks также присутствует. Скрипт/etc/dhcp / dhclient-exit-hooks может изменять допустимое значение exit_status для изменения статуса выхода dhclient-скрипта.
это, как говорится, взглянув на код фрагмент dhclient-script, мы можем видеть, что скрипт проверяет наличие исполняемый/etc/dhcp / dhclient-up-hooks скрипт и все скрипты в /etc/dhcp / dhclient-exit-hooks.каталог д/.
ETCDIR="/etc/dhcp" 193 exit_with_hooks() { 194 exit_status="" 195 196 if [ -x ${ETCDIR}/dhclient-exit-hooks ]; then 197 . ${ETCDIR}/dhclient-exit-hooks 198 fi 199 200 if [ -d ${ETCDIR}/dhclient-exit-hooks.d ]; then 201 for f in ${ETCDIR}/dhclient-exit-hooks.d/*.sh ; do 202 if [ -x ${f} ]; then 203 . ${f}204 fi 205 done 206 fi 207 208 exit ${exit_status}209 }
поэтому, чтобы изменить имя хоста вашей виртуальной машины Linux, вы можете создайте пользовательский скрипт .SH расширение и поместите его в /etc/dhcp / dhclient-exit-hooks.каталог д/. Если этот каталог не существуй, ты можешь создать его. Содержимое пользовательского скрипта будет быть:
hostname YourFQDN.sh
>
обязательно сделайте это новым .SH исполняемый файл:
chmod +x YourFQDN.sh
источник: (https://groups.google.com/d/msg/gce-discussion/olG_nXZ-Jaw/Y9HMl4mlBwAJ)