Ответ 1
dhcpcd имеет параметр -c/--script
для запуска внешнего script в любое время, когда он настраивает или вызывает интерфейс. Вы можете использовать это, чтобы вручную обновить файл hosts с настроенным именем хоста.
Вопрос: Есть ли простой способ автоматически добавить IP-адрес DHCP и имя хоста Linux-машины в /etc/hosts при автозагрузке системы?
Фон: У моей Linux-машины есть имя хоста в /etc/hostname, и она не решит ничего, когда я пингу. Я вручную добавил свое имя хоста и IP-адрес в /etc/hosts для одной моей связанной с сетью Java-программы.
Спасибо,
dhcpcd имеет параметр -c/--script
для запуска внешнего script в любое время, когда он настраивает или вызывает интерфейс. Вы можете использовать это, чтобы вручную обновить файл hosts с настроенным именем хоста.
В Ubuntu добавьте исполняемый файл в каталог /etc/network/if-up.d
. Файлы в этом каталоге выполняются после того, как сетевой менеджер настроит сетевой интерфейс.
Вы можете адаптировать следующие script:
#!/bin/sh
set -e
if [ "$IFACE" = lo ]; then
exit 0
fi
myHostName=`hostname`
# Remove current line with hostname at the end of line ($ means end of line)
sed -i '/'$myHostName'$/ d' /etc/hosts
ipaddr=$(ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}')
echo "$ipaddr $myHostName" >>/etc/hosts
Используйте avahi (который должен находиться в ваших реестре-хранилищах), тогда вы можете
$ ping youhostname.local
Я взял то, что сделал @Markus, и положил его в обычный script. Это работает на моей коробке Fedora 20:
#!/bin/sh
MYHOST=firtree
echo "before:"
cat /etc/hosts
# Remove current line with hostname at the end of line ($ means end of line)
sed -i '/'$MYHOST'$/ d' /etc/hosts
echo "after remove: "
cat /etc/hosts
IPADDR=$(ifconfig | awk -F" +|:" '/inet addr/ && $4 != "127.0.0.1" {print $4}')
echo "$IPADDR $MYHOST" >>/etc/hosts
echo "ip: " $IPADDR
echo "final: "
cat /etc/hosts
Это нужно запускать с правами администратора и, вероятно, следует зайти в папку init.d.
С
ipaddr=$(ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}’)
host=`hostname`
fhost=`hostname -f`
echo "$ipaddr $fhost $host" >> /etc/hosts
cat /etc/hosts
Я лично использую этот script для установки моего имени хоста (существующего) + динамического IP на /etc/hosts
файл:
#!/bin/bash
ipaddr=$(/sbin/ifconfig eth0| grep 'inet addr' | cut -d: -f2 | awk '{print $1}')
hn=$(hostname)
hnd=$(hostname -f)
sed -i '2s/.*/'$ipaddr' '$hnd' '$hn'/' /etc/hosts
С уважением,