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

необходимо удалить файл /etc/dhcp/dhclient.d/google_hostname.sh


мне повезло установить имя хоста в GCE под управлением CentOS. Источник: desantolo.com

  1. нажмите Изменить на вашем экземпляре
  2. перейдите в раздел "пользовательские метаданные разделе"
  3. добавить hostname + your.hostname.tld (перемен "ваш.имя хоста.tld " к вашему фактическому имени хоста
  4. выполнить curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google"
  5. выполнить sudo env EDITOR=nano crontab -e для редактирования crontab
  6. добавить строку @reboot hostname $(curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google")
  7. на клавиатуре Ctrl + X
  8. On ваша клавиатура хит Y
  9. на клавиатуре нажмите Enter
  10. выполнить reboot
  11. после перезагрузки системы, выполните команду 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)