Existe uma maneira de fornecer um nome de host específico para um aplicativo que seja diferente do nome de host da máquina no Linux? Basicamente, tenho um software que espera que a máquina local tenha um determinado nome de host diferente do nome de host da minha máquina. Em vez de alterar o nome do host da máquina globalmente, gostaria de um mecanismo onde pudesse executar o programa em um ambiente com o nome do host especificado ou executar o programa diretamente com o nome do host especificado.
Responder1
É possível com privilégios de root. Usarunshare --uts
para criar um novo namespace UTS 1 , defina o nome do host desejado nele, su
volte para sua conta e execute o aplicativo. Por exemplo:
ongun@foo$ sudo -s
~ create a new namespace ~
root@foo# unshare --uts /bin/sh
~ this terminal now has its own namespace – change the hostname ~
root@foo# hostname quux
~ switch back ~
root@quux# sudo -s -u ongun
ongun@quux$ /usr/bin/game
Os namespaces são limitados ao processo de criação por padrão, portanto, o novo nome do host ficará visível apenas para os programas que você executadentroa janela "cancelar compartilhamento".
Observação:Não se esqueça de adicionar o novo nome de host /etc/hosts
como 127.0.0.1, pois muitos programas esperam/dependem dele para serem resolvidos.
1 Não pergunte o que significa "UTS". O melhor que sei é que é uma sobra do antigo Unix.
Responder2
Se o seu aplicativo não lê diretamente a saída hostname
ou /etc/hostname
o arquivo, você sempre pode criar um alias para sua máquina como abaixo.
#
# /etc/hosts: static lookup table for host names
#
#<ip-address> <hostname.domain.org> <hostname>
127.0.0.1 localhost.localdomain localhost MYHOSTNAME OTHER_ALIAS
::1 localhost.localdomain localhost MYHOSTNAMEv6 OTHER_ALIASv6
ou você pode tentar criar um chroot com um nome de host diferente, comoaqui
Responder3
Presumo que você não tenha o código-fonte do programa em questão. A leitura do nome do host de uma máquina é feita através de uma chamada sys,getnomedohost(), que seria difícil de contornar sem acesso ao código-fonte do programa.
Você deve então usar uma solução virtual para executar o programa. Contêineres, dockers e VMs têm grau de isolamento suficiente para permitir que você os renomeie com o valor necessário, sem comprometer sua máquina host.Um containeré uma solução muito leve que consumirá muito pouco dos recursos do host.