Имя хоста возвращается к старому имени после перезагрузки в 18.04 LTS


32

Это может быть связано с запуском 18.04 LTS в качестве виртуальной машины (Host - Win 2016 DC), но я не могу понять, как это сделать. Я пробовал каждый известный мне метод, чтобы изменить имя хоста, но оно всегда возвращается к имени хоста, которое я ввел при сборке машины при перезагрузке. Я пробовал следующее:

  1. hostnamectl set-hostname xxx.
  2. Редактирование имени хоста напрямую.
  3. Добавление --static в hostnamectl.
  4. Редактирование файла hosts и добавление нужного имени хоста.
  5. Поиск диска для ссылки на старое имя хоста до перезагрузки.
  6. Несколько других странных предложений, которые я нашел в Интернете, не стоит упоминать.

В данный момент у меня нет DNS для этого сервера.

Пример:

XXXX@iwrxmail:~# hostnamectl
Static hostname: iwrxmail
Pretty hostname: Interwrx Ubuntu Mail Server
Transient hostname: ctl
     Icon name: computer-vm
       Chassis: vm
    Machine ID: 01ef0d836d2c4945b51a4fab8e506381
       Boot ID: e6608fe238d843f883cde52af7631a79
Virtualization: microsoft
Operating System: Ubuntu 18.04 LTS
        Kernel: Linux 4.15.0-20-generic
  Architecture: x86-64
XXXX@iwrxmail:~# hostnamectl set-hostname test
XXXX@iwrxmail:~# hostnamectl
Static hostname: test
     Icon name: computer-vm
       Chassis: vm
    Machine ID: 01ef0d836d2c4945b51a4fab8e506381
       Boot ID: e6608fe238d843f883cde52af7631a79
Virtualization: microsoft
Operating System: Ubuntu 18.04 LTS
        Kernel: Linux 4.15.0-20-generic
  Architecture: x86-64
root@iwrxmail:~# cat /etc/hostname
test
root@iwrxmail:~# cat /etc/hosts
127.0.0.1       localhost.localdomain   localhost
::1             localhost6.localdomain6 localhost6
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts 

However on reboot I get this again ....

XXXX@iwrxmail:~# hostnamectl
Static hostname: iwrxmail
     Icon name: computer-vm
       Chassis: vm
    Machine ID: 01ef0d836d2c4945b51a4fab8e506381
       Boot ID: 25a00676b22048eb8d43492c9de4f147
Virtualization: microsoft
Operating System: Ubuntu 18.04 LTS
        Kernel: Linux 4.15.0-20-generic
Architecture: x86-64

У меня была эта проблема с бета-версией 18.04, но я решил подождать релизной копии. Я также подумал, что это может быть проблемой из-за того, что я клонировал виртуальные машины, но это была совершенно новая версия, созданная с нуля с только что выпущенным дистрибутивом.

Чего мне не хватает?

Заранее спасибо.


Ответы:


49

Сначала отредактируйте /etc/cloud/cloud.cfg и установите параметр «preserve_hostname» из «false» в «true», а затем отредактируйте / etc / hostname.


4
Работает как шарм. Я бы никогда не получил это из строки комментария над ним: «# Это заставит модуль set + update hostname не работать (если true)». Большое спасибо, так много неправильных методов в Интернете.
Энди Уайлд,

18

Имя хоста сбрасывается, и его cloud-initможно отключить следующим образом (после чего вы можете установить имя хоста обычным способом, например, используя hostnamectl):

sudo touch /etc/cloud/cloud-init.disabled

Или вы можете использовать cloud-init и создать / изменить user-dataфайл (обычно находится по адресу /var/lib/cloud/seed/nocloud-net/user-data:), чтобы в hostname:записи было задано желаемое имя хоста (если preserve_hostname:не задано). Во-первых, вам нужно очистить существующий конфиг:

sudo cloud-init clean

А затем повторно инициализируйте конфигурацию cloud-init из нового / измененного файла пользовательских данных:

sudo cloud-init init

Затем перезагрузите компьютер. См. Документацию cloud-init для более подробной информации.


3
Будьте осторожны с запуском, cloud-init cleanиначе cloud-init initон может переписать ваши файлы / etc / netplan / yaml.
Майкл Д.

3
Он также обновит ваш ключ хоста SSH, который может быть потенциально опасным (клиенты должны принять новый ключ хоста, прежде чем они смогут повторно подключиться)
Per Lundberg

5

Для таких "ленивых парней", как я, решение копировать-вставить :)

sudo sed -i '/preserve_hostname: false/c\preserve_hostname: true' /etc/cloud/cloud.cfg && sudo hostnamectl set-hostname ReplaceThisWithTheHostnamePreferred

Первая команда позволяет запоминать новое имя хоста операционной системой.

Вторая часть (после &&) будет запускаться только в том случае, если первая часть завершилась успешно, и для имени хоста будет задано желаемое значение.

С уважением! L


4

1- Изменить vi /etc/cloud/cloud.cfgи изменить

preserve_hostname: false

к

preserve_hostname: true

Сохранить и выйти.

2- Отредактируйте vi /etc/hostnameи замените ваше новое имя в этом файле, или вы можете сделать этот шаг с помощью команды ниже.

hostnamectl set-hostname NEWNAME

Наслаждайся этим :)


0

У меня возникла та же проблема, и я обнаружил, что после удаления облачных пакетов вы можете изменить свое имя хоста.

apt remove cloud-init cloud-initramfs-copymods cloud-initramfs-dyn-netconf

1
Я уверен, что это будет работать, но я думаю, что предпочитаю ответ выше. Спасибо за ответ, хотя
Энди Уайлд

Я предлагаю воздержаться от этого решения, если вы используете пакет ubuntu-server. Зачем? Потому что вышеупомянутые пакеты являются его предварительными условиями. Описание пакета ubuntu-server 'Description-ru: Система Ubuntu Server Этот пакет зависит от всех пакетов в системе Ubuntu Server. Он также используется для обеспечения надлежащего обновления, поэтому рекомендуется его не удалять ».
linux64kb

0

Если вам не нравится оставлять где-то более старую версию, просто откройте файл по адресу /var/lib/cloud/seed/nocloud-net/user-dataи измените имя хоста в строке:

hostname: cm-lc-nc

Затем запустите:

cloud-init clean
cloud-init init

Затем он установит /etc/hostnameновое значение и останется неизменным при перезагрузках. Это удалит все следы предыдущего имени хоста, и в случае preserve_hostnameсброса или игнорирования по какой-либо причине вы все равно не потеряете свое новое имя хоста.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.