Como instalar Unison 2.40 no Ubuntu 16.04 xenial (para resolver “Fatal error: Received unexpected header”)

1

Nos meus computadores pi de framboesa:

pi@mizu:~ $ unison -version
unison version 2.40.102

No meu desktop ubuntu 16.04 xenial:

kayd@Trunk:~$ unison -version
unison version 2.48.3

Ao tentar sincronizar:

kayd@Trunk:~$ unison . ssh://pi@mizu/.
...
Fatal error: Received unexpected header from the server:
 expected "Unison 2.48\n" but received "Unison 2.40\n
kayd@Trunk:~$ ls -l /usr/bin/unison*
lrwxrwxrwx 1 root root      24 Mai 20 22:15 /usr/bin/unison -> /etc/alternatives/unison
lrwxrwxrwx 1 root root      13 Mär 18 16:10 /usr/bin/unison-2.48 -> unison-2.48.3
-rwxr-xr-x 1 root root 2169968 Mär 18 16:10 /usr/bin/unison-2.48.3
lrwxrwxrwx 1 root root      13 Mär 18 16:10 /usr/bin/unison-latest-stable -> unison-2.48.3
0
pi@mizu:~ $ unison -version
unison version 2.40.102
0
kayd@Trunk:~$ unison -version
unison version 2.48.3
0
kayd@Trunk:~$ unison . ssh://pi@mizu/.
...
Fatal error: Received unexpected header from the server:
 expected "Unison 2.48\n" but received "Unison 2.40\n
kayd@Trunk:~$ ls -l /usr/bin/unison*
lrwxrwxrwx 1 root root      24 Mai 20 22:15 /usr/bin/unison -> /etc/alternatives/unison
lrwxrwxrwx 1 root root      13 Mär 18 16:10 /usr/bin/unison-2.48 -> unison-2.48.3
-rwxr-xr-x 1 root root 2169968 Mär 18 16:10 /usr/bin/unison-2.48.3
lrwxrwxrwx 1 root root      13 Mär 18 16:10 /usr/bin/unison-latest-stable -> unison-2.48.3
0%pre%0%pre%0%pre%07", which differs at "Unison 2.40".
07", which differs at "Unison 2.40".

Uma postagem relacionada 1 peça-me para instalar unison-all , o que eu fiz, mas contém apenas a versão 2.48:

%pre%

As duas opções que vejo:

  1. encontrar um PPA contendo 2,40 para xenial
  2. encontrar um PPA contendo 2,48 para framboesa

ambos não tiveram sucesso até agora.

Com base na resposta abaixo do User mapierce271 , procurei compilar por conta própria, mas parece ser um pesadelo. A última publicação na lista de discussão de devedores uníssonos states "A nova versão OCaml 4.03 fez uma pequena alteração incompatível em uma biblioteca. Eu corrigi a versão 2.48 para que ela seja compilada com 4.02 ou 4.03 e faça uma nova versão." e "PS Eu também adicionei um pouco de relatório de erro esperançosamente melhor quando a temida falha 'ocaml 4.02.1 não compatível com o ocaml 4.02.2' é encontrada em tempo de execução. Eu fiz isso agora, então se você já pegou o tarball de origem, por favor faça-o novamente. " que me leva à conclusão de que tudo é altamente frágil e provavelmente irá quebrar se algo for atualizado mesmo com pequenas alterações no número de revisão. Tendo muitos computadores para sincronizar, um ou outro é atualizado regularmente.

    
por kay_D 16.07.2016 / 12:35

4 respostas

0

Sim, as versões do Unison que você está executando precisam ser idênticas. Isso ocorre porque o formato do arquivo morto que o Unison usa para controlar o material é aprimorado alterado em cada nova versão.

Por que não basta instalar o Unison a partir do código-fonte? Eu recomendaria instalar 2.48 em sua framboesa. Você pode fazer o download da fonte para Unison 2.48.3 aqui , e veja instruções sobre como compilar e instalar aqui . Na verdade, eu recomendaria a compilação e instalação do Unison a partir do código-fonte em sua área de trabalho, executando o Ubuntu também. Desta forma, você evitará quaisquer soluços inesperados se o Ubuntu decidir atualizar seu pacote Unison, e você também pode garantir que ambos sejam compilados com a mesma versão do OCaml, o que já foi um problema antes.

Também é importante notar que você provavelmente terá que compilar em bytecode em vez de código nativo em seu framboesa. Você pode fazer isso definindo Native=false no Makefile. Veja minha resposta aqui para mais informações.

    
por 18.07.2016 / 04:24
1

Entramos em uma solução :

O teste Debian tem 2.48, que deve ser compatível com a versão do Ubuntu. Você precisa adicionar o repo de teste em seu Pi, mas com uma prioridade mais baixa (para que o repositório seja usado somente quando solicitado explicitamente).

Adicione as seguintes linhas a /etc/apt/preferences (crie o arquivo, se ainda não existir):

Package: *
Pin: release o=Raspbian,a=stable
Pin-Priority: 500

Package: *
Pin: release o=Raspbian,a=testing
Pin-Priority: 300

Em seguida, adicione a seguinte linha a /etc/apt/sources.list :

deb http://mirrordirector.raspbian.org/raspbian/ testing main contrib non-free rpi

Agora execute:

sudo apt-get update
sudo apt-cache policy

Confirme se o repositório testing (aquele que acabou de ser adicionado) tem prioridade menor que os outros.

Finalmente:

sudo apt-get install -t testing unison-all

Isso me deu 2.48 no Pi, e eu consegui conectar e sincronizar.

Você também pode instalar uma versão explícita do Unison junto com as existentes. Executar

sudo apt-cache search unison

para descobrir quais versões são oferecidas, em seguida, instale a (s) opção (s) de sua escolha, por exemplo:

sudo apt-get install -t testing unison2.40.102

Os pacotes com um número de versão são os reais. unison é um meta-pacote que sempre depende da versão mais recente, enquanto unison-all é um meta-pacote que depende de uma seleção de versões.

Se você tiver várias versões em seu servidor, pode ser necessário executar o Unison com a opção -addversionno : isso faz com que o cliente envie seu número de versão ao servidor e instrua o servidor a executar a mesma versão em vez de sua versão padrão.

Alternativamente, você pode tentar algo similar no seu desktop Ubuntu. Você precisa:

  • Encontre uma versão que tenha uma versão do Unison disponível no seu Pi.
  • Adicione o repo dessa liberação para /etc/apt/sources.list . (Copie a linha da versão atual e altere o nome da release. Esse é o adjetivo, por exemplo, xenial para o Xenial Xerus.)
  • Modifique etc/apt/preferences de acordo. Em vez de stable e testing , use o nome do release atual e o release com a versão desejada do Unison. Seu lançamento atual gera a maior 500 de prioridade.
  • Certifique-se de executar sudo apt-get update; sudo apt-cache policy e verificar a saída para garantir que as prioridades estejam definidas corretamente. Senão você pode acabar bagunçando sua instalação do Ubuntu!
  • Quando tiver certeza de que tudo está funcionando, instale o unison (ou unison-all ou uma versão explícita), selecionando seu novo repositório.

Ou pegue o arquivo .deb e instale-o diretamente.

    
por 12.01.2017 / 00:47
0

Você também pode instalar

unison-all

e ter a versão apropriada selecionada automaticamente como descrito em

Como usar várias versões do uníssono em um sistema?

    
por 16.12.2016 / 15:41
0

O mesmo problema para eu sincronizar um computador Unix (um Debian Jessie) com a versão 2.40.102 do Unison (instalada a partir de versões estáticas oficiais do apt-get) e um computador macOS com a versão mais recente 2.48.15.

A melhor solução foi fazer o downgrade da versão macOS do Unison para 2.40. Binário está aqui:

União 2.40.61 (GUI) para macOS Intel

E não se esqueça de instalar a linha de comando no menu "Unison" > "Instalar ferramenta de linha de comando".

Na sincronização, ele substituirá o aviso:

Unison[16276:318574] Calling nonGuiStartup
Fatal error: Received unexpected header from the server:
expected "Unison 2.40\n" but received "Unison 2.48\n
Unison[18574:332371] Calling nonGuiStartup
Connected [//SERVER.IP//Users/USer/Desktop/Unison -> //localhost//home/user/test]
Looking for changes Warning: No archive files were found for these roots…
0
Unison[16276:318574] Calling nonGuiStartup
Fatal error: Received unexpected header from the server:
expected "Unison 2.40\n" but received "Unison 2.48\n
Unison[18574:332371] Calling nonGuiStartup
Connected [//SERVER.IP//Users/USer/Desktop/Unison -> //localhost//home/user/test]
Looking for changes Warning: No archive files were found for these roots…
0%pre%0%pre%0%pre%07", which differs at "Unison 2.48".
0%pre%0%pre%07", which differs at "Unison 2.48".

por:

%pre%

NB: Eu estou no macOS Sierra 10.12.4 e o Unison 2.40.61 parece estar funcionando bem.

    
por 07.04.2017 / 13:22