Ao alterar o nome do host para um conjunto aleatório de caracteres alfanuméricos em uma máquina que executa o Linux Mint (17.1 Rebecca, Cinnamon 64-bit), eu me deparo com alguns problemas.
O script a seguir altera o nome do host para um conjunto aleatório de caracteres alfanuméricos:
#!/bin/bash
### BEGIN INIT INFO
# Provides: randomhostname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Changing hostname to random value
# Description: Changing hostname to random value
### END INIT INFO
old=$(cat /etc/hostname)
new=$(tr -dc 'A-Z0-9' < /dev/urandom | head -c12)
sed -i "s/$old/$new/g" /etc/hosts
sed -i "s/$old/$new/g" /etc/hostname
exit 0
Idealmente, a mudança do nome do host seria alcançada sem reiniciar o sistema, mas como /etc/init.d/hostname.sh start
tem que ser executado posteriormente e esse arquivo não está presente nesta versão do Linux Mint (não tenho certeza sobre outra versão), reinicialize o sistema para que as alterações entrem em vigor. Então, fazer isso no momento da inicialização parece ser a melhor opção para mim no momento.
Mudei o arquivo para o diretório /etc/init.d / e o tornei executável com sudo chmod +x randomhostname
. Depois disso, adicionei-o à sequência de inicialização com sudo update-rc.d randomhostname defaults
.
Quando eu reinicio o sistema e faço login no Linux Mint eu posso ver a mudança do nome do host em / etc / hostname e / etc / hosts , que neste o caso é YKNG7Z4PJD7H
. No entanto, não vejo isso ao usar o terminal (por exemplo, nome de usuário @ BFZJ7LB0BKAD) e recebo a seguinte mensagem ao usar o sudo:
username@BFZJ7LB0BKAD ~ $ sudo true
sudo: unable to resolve host BFZJ7LB0BKAD
Eu presumo que esse problema é causado pelo fato de que o script é executado na hora errada (talvez após certos serviços já terem sido iniciados) e o sistema ainda precisa ser reinicializado novamente para que as alterações anteriores entrem em vigor.
O que é considerado o modo correto de adicionar um script como este à sequência de inicialização para que as alterações entrem em vigor sem reinicializar outra vez? Ou existe uma maneira melhor de conseguir isso?
Eu realmente aprecio qualquer ajuda sobre essa questão.
Solução
Como roaima apontou, eu só tive que adicionar hostname "$new"
no final do script para fazer as alterações funcionarem . Eu também adicionei parar e iniciar o serviço gerenciador de rede para forçar o registro do cliente na rede usando o novo nome de host.
#!/bin/bash
### BEGIN INIT INFO
# Provides: randomhostname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Changing hostname to random value
# Description: Changing hostname to random value
### END INIT INFO
service network-manager stop
old=$(cat /etc/hostname)
new=$(tr -dc 'A-Z0-9' < /dev/urandom | head -c12)
sed -i "s/$old/$new/g" /etc/hosts
sed -i "s/$old/$new/g" /etc/hostname
hostname "$new"
service network-manager start
exit 0