Linux: Define o hostid em um sistema?

7

Eu tenho um servidor de licenças. O hardware está falhando.

O software de licença depende do 'hostid' de um sistema retornado por /usr/bin/hostid . hostid é o "identificador numérico exclusivo para o host atual".

Se eu migrar o software para outro host, parece que o 'hostid' será alterado e o software da licença falhará. Observe que o nome do host e o endereço IP desse sistema permanecerão os mesmos.

Duas perguntas:

  1. Como o hostid é determinado? É aleatório, depende do nome do host ou do endereço MAC, etc?

  2. Posso definir o hostid em um novo sistema para que ele corresponda ao hostid do sistema antigo?

por Stefan Lasiewski 09.05.2012 / 19:40

2 respostas

8

Assumindo aqui o que você está se referindo é o hostid unix tradicional. Se eu quisesse ligar software a um sistema eu usaria um dongle ou algum meio mais strong para identificar um sistema visto como um hostid é muito arbitrário, mas mesmo assim ...

O hostid é recuperado usando a chamada da biblioteca "gethostid". É meramente um valor genérico que, se não for definido, será baseado no endereço ipv4 do sistema host.

Veja "man 2 gethostid"

In the glibc implementation, if gethostid() cannot open the file containing the host ID, then it obtains the hostname using gethostname(2), passes that hostname to gethostbyname_r(3) in order to obtain the host's IPv4 address, and returns a value obtained by bit-twiddling the IPv4 address. (This value may not be unique.)

Você pode configurá-lo para o que quiser, colocando o arquivo / etc / hostid no lugar com o valor que deseja (presumivelmente é o mesmo que o resultado do programa 'hostid' na sua caixa de doação).

Para configurá-lo é um pouco complicado. o arquivo requer uma representação binária compactada do hostid.

Eu usei python, mas você pode fazer o que quiser .. (certeza de que alguém sabe um meio mais fácil de imprimir bytes compactados).

from struct import pack
f = open('/etc/hostid', 'w')
f.write(pack('i', 12345))
f.close()

Isto irá definir o hostid de uma forma pela qual gethostid retornará o mesmo valor da caixa de doação que a caixa de migração.

    
por 09.05.2012 / 20:14
1

Afaik, o hostid é o endereço MAC da placa de rede (primária?) ou algum tipo de identificador misto com outros valores, como endereços IP (isso depende muito do tipo de * nix que você executa).

Eu acho que deveria ser possível "falsificar" esse valor em qualquer sistema (pelo menos o endereço MAC pode ser substituído). No entanto, a melhor maneira é pedir ao fornecedor do software para transferir a licença para o novo sistema. Não vejo boa razão para isso não ser possível.

    
por 09.05.2012 / 19:51

Tags