Existe uma maneira de fornecer um nome de host específico para um aplicativo que difere do nome do host da máquina no Linux?

3

Existe uma maneira de fornecer um nome de host específico para um aplicativo que difere do nome do host da máquina no Linux? Basicamente, eu tenho um pedaço de software que espera que a máquina local tenha um certo nome de host que difere do nome de host da minha máquina. Em vez de alterar o nome do host da máquina globalmente, eu gostaria de um mecanismo no qual eu pudesse executar o programa em um ambiente com o nome do host especificado ou executar o programa diretamente com o nome do host especificado.

    
por wyer33 13.10.2015 / 00:54

3 respostas

3

É possível com privilégios de root. Use unshare --uts para criar um novo namespace UTS 1 , defina o nome do host desejado, em seguida, su de volta à 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 seu processo criador por padrão, então o novo nome do host será visível apenas para os programas que você executa dentro da janela "unshare".

Observação: não se esqueça de adicionar o novo nome do host a /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 eu sei é que é uma sobra do antigo Unix.

    
por 13.10.2015 / 07:02
0

Se o seu aplicativo não ler diretamente a saída do arquivo hostname ou /etc/hostname , você poderá 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, como aqui

    
por 13.10.2015 / 01:23
0

Eu presumo que você não tenha o código-fonte do programa em questão. A leitura do nome de host de uma máquina é feita através de uma chamada sys, gethostname () , que seria difícil contornar sem acesso para o código-fonte do programa.

Você deve então usar uma solução virtual para executar o programa. Recipientes, janelas de encaixe, VMs têm o grau suficiente de isolamento para permitir renomeá-los para o valor necessário, sem comprometer sua máquina host. Um contêiner é uma solução muito leve, que drena muito pouco dos recursos do host.

    
por 13.10.2015 / 07:08