preseed.cfg игнорирует настройку имени хоста

13

Я устанавливаю Debian Wheezy (netinstall) в VirtualBox, используя preseed.cfg.

Я пробовал и то d-i netcfg/get_hostname string somehostи другое d-i netcfg/get_hostname string somehost, но в обоих случаях хост устанавливается как "debian". Я пробовал и то и другое одновременно, но все же хост установлен как "debian".

Выдержка из руководства Debian о файле предварительной конфигурации :

Если вы хотите принудительно ввести имя хоста, независимо от того, что возвращает DHCP-сервер или какая обратная DNS-запись для IP-адреса, откомментируйте и настройте следующую строку

di netcfg / hostname string somehost

Это ошибка или мне просто не повезло?

ToddM
источник

Ответы:

10

Не решение, а обходной путь

Я тоже столкнулся с подобной проблемой, и я обошел ее, установив имя хоста после установки с помощью следующих строк, добавленных в конце моего pressed.cfg:

d-i pressed/late_command string\
    in-target /bin/bash -c 'echo desired_name > /etc/hostname'

Это in-targetнеобходимо для /ссылки на целевую файловую систему (которая в конечном итоге станет вашей корневой файловой системой), которая обычно отображается как /targetво время установки.

Джозеф Р.
источник
1
Я также использовал это , но с небольшим изменением , так что имя хоста автоматически устанавливается из DNS поиска: d-i pressed/late_command string in-target /bin/bash -c 'echo $(dig +short -x $(facter ipaddress)) | sed -e \'s/\.$//\' > /etc/hostname'. Он использует «facter» из puppetlabs для получения IP-адреса, но вы можете сделать что-то подобное, используя ip addrи sed.
Дэвид Гарднер
9

Если вы загружаетесь по сети (с PXE и ​​друзьями), имя хоста настраивается перед извлечением файла preseed, поэтому имя хоста должно быть установлено в командной строке ядра следующим образом:

hostname=myhostname domain=mydomain

С момента введения приложения B (о предварительном чтении) руководства по установке Debian:

Важным отличием между методами предварительного заполнения является момент, когда файл предварительной конфигурации загружается и обрабатывается. Для предварительного запуска initrd это происходит в самом начале установки, еще до того, как будет задан первый вопрос. Для предварительного заполнения файла это происходит после загрузки компакт-диска или образа компакт-диска. Для предварительного заполнения сети это только после того, как сеть была настроена.

псевдослучайный
источник
4

Я обнаружил, что эта проблема исчезла, когда я удалил priority=criticalаргументы, передаваемые ядру, в командной строке net install (через записи каталога pxelinux.cfg).

Я предполагаю, что это означает, что вопрос, который спрашивает имя хоста, получил приоритет, который ниже, чем «критический», и поэтому заполняется ответом по умолчанию.

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

Тим Смолл
источник
3

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

Несколько необычный кладж - это использовать в вашей preseed.cfgстроке:

d-i preseed/run string http://example.net/d-i/jessie/preseed.sh

и в этом preseed.shто укажите:

#!/bin/sh
kill-all-dhcp; netcfg

Таким образом, когда установлена сеть и preseed.cfgизвлекается, preseed.shбудет также получать и бежать, так что будет перезагружен , netcfgкоторый будет считывать все автоматизируемой значения netcfg/*и правильно настроить их ( /etc/hostsname, /etc/hosts, /etc/network/interfacesесли вы устанавливаете статический IP конфигурации с помощью автоматизируемой и т.д.)

Матия Налис
источник
Вы можете сделать это без отдельного файла: d-i preseed/early_command string kill-all-dhcp; netcfgв вашем предварительном файле достаточно. Протестировано с помощью Stretch в автоматическом netinstall.
scy