Sincronize vários hosts usando uníssono

3

Estou tentando manter em sincronia três máquinas, em uma das quais corro em uníssono para sincronizar as outras duas. Essa arquitetura "estrela" é anunciada no manual uníssono:

Using Unison to Synchronize More Than Two Machines

Unison is designed for synchronizing pairs of replicas. However, it is possible to use it to keep larger groups of machines in sync by performing multiple pairwise synchronizations.

If you need to do this, the most reliable way to set things up is to organize the machines into a “star topology,” with one machine designated as the “hub” and the rest as “spokes,” and with each spoke machine synchronizing only with the hub. The big advantage of the star topology is that it eliminates the possibility of confusing “spurious conflicts” arising from the fact that a separate archive is maintained by Unison for every pair of hosts that it synchronizes.

Mas, após a sincronização inicial com

unison -fat -batch "$HOME/dir" ssh://"$myhost1//dir"
unison -fat -batch "$HOME/dir" ssh://"$myhost2//dir"

para ambos os hosts Eu sempre recebo o seguinte erro para um deles:

Fatal error: Internal error: On-disk archives are not identical.

This can happen when both machines have the same hostname.

If this is not the case and you get this message repeatedly, please: a) Send a bug report to [email protected] (you may need to join the group before you will be allowed to post). b) Move the archive files on each machine to some other directory (in case they may be useful for debugging). The archive files on this machine are in the directory /home/andreas/.unison and have names of the form arXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX where the X's are a hexidecimal number . c) Run unison again to synchronize from scratch.

Se eu seguir as instruções b), ou se eu correr

unison -ignorearchives -fat "$HOME/dir" ssh://"$myhost1//dir" 

Eu sincronizo este com sucesso. Mas, em seguida, o custo do outro produzirá o mesmo erro acima. Parece que sempre que sincronizo um deles o outro estará em estado inconsistente. Como posso corrigir isso, além de sempre adicionar -ignorearchives ? A versão do Unison é 2.40.102 dos pacotes do ubuntu e do aplicativo Unison para Android.

    
por highsciguy 05.02.2014 / 14:19

1 resposta

6

Acontece que a mensagem 'erro fatal' é mais apropriada do que eu pensava. A origem do problema (que ocorreria em uma configuração de duas máquinas se um host alterasse seu nome) é que os dois dispositivos Android para sincronizar com nomes de host foram determinados como localhost , mesmo que sejam diferentes e especificados por endereços IP diferentes.

De acordo com o manual do unison, o nome do host pode ser fornecido manualmente exportando a variável de ambiente UNISONLOCALHOSTNAME . Como o unison não cria um shell de login, ele não pode ser exportado no arquivo .profile nos dispositivos de sincronização. Descobri que também o arquivo ./ssh/environment dos meus servidores ssh (SshDroid em ambos os casos) não foi lido. Finalmente, o nome do host android (que pode ser definido com setprop net.hostname [hostname] ) também não é lido por uníssono. Em vez disso, parece usar como padrão localhost .

Por isso, desenvolvi a seguinte solução alternativa:

unison -servercmd "export UNISONLOCALHOSTNAME=host1; unison" ssh://"$myhost1//dir" "$HOME/dir" 
unison -servercmd "export UNISONLOCALHOSTNAME=host2; unison" ssh://"$myhost2//dir" "$HOME/dir" 

Aqui, a opção -servercmd define qual comando será executado nos dispositivos remotos para iniciar o uníssono. Na minha versão, ele exporta o UNISONLOCALHOSTNAME para dois valores diferentes primeiro.

Em seguida, os hosts são reconhecidos como diferentes e é possível sincronizar repetidamente várias 'dicas' de um 'hub' central em uma configuração 'estrela'.

    
por 06.02.2014 / 15:06