Difundindo versões diferentes do mesmo pacote debian

11

Existe alguma maneira de obter diferenças de origem entre um pacote instalado localmente e o pacote atualizado? Isso será útil para verificar exatamente quais partes foram corrigidas, alteradas ou adicionadas.

Por exemplo, digamos que você tenha o pacote linux-libc-dev instalado no seu sistema e

sudo apt-get update && sudo apt-get upgrade

mostra

The following packages will be upgraded:
  linux-libc-dev 

mas você deseja verificar, antes de atualizá-lo, as mudanças exatas que foram feitas em comparação com a versão local do mesmo pacote.

Como podemos fazer isso?

Gödel
fonte

Respostas:

5

Aqui está outra solução que eu hackeei : o que mudou .

Leva o nome do pacote binário no qual você está interessado como o único argumento. Para usar uma SRU recente como exemplo:

./whatchanged python_papyon

Isto é o que faz:

  1. Verifique se há um candidato à atualização; sair se não houver
  2. Se um candidato existir, crie diretórios temporários e busque os pacotes de origem para a versão instalada e o candidato neles
  3. Compare os dois com debdiffe output com stdout (você provavelmente desejará redirecionar para facilitar a leitura)
  4. Limpe os diretórios temporários.

Provavelmente, ele precisa lidar melhor com certas coisas que podem dar errado durante a recuperação da fonte, o controle de fluxo provavelmente está um pouco desligado e deve haver maneiras mais elegantes de verificar a versão, mas funcionou bem nos meus testes limitados até agora. Por enquanto, considere um hack rápido que funcione, e as melhorias são bem-vindas. Vou enviá-lo para um repositório bzr e / ou criar um projeto do Launchpad, se for útil para algumas pessoas.

Edit : Em vez de deixá-lo apodrecer no pastebin, eu iniciei um projeto do Launchpad para ele; você pode obter a última revisão de tronco com bzr branch lp:whatchanged. Sinta-se livre para relatar bugs, ramificá-lo, reescrevê-lo em Perl, etc.

mgunes
fonte
Que bom! Desenvolvimento de ferramentas como respostas;) como você estilo de codificação, mas corretamente ter codificado-lo em perl ..
LassePoulsen
Obrigado; espero que seja útil. A maneira como as técnicas de empacotamento e lançamento às vezes fazem o código aberto parecer opaco é algo que me vem à mente, e eu não encontrei nenhuma ferramenta simples para superar isso; portanto, alguém que expressasse a necessidade da mesma coisa era uma boa motivação para finalmente fazer um primitivo eu mesmo.
mgunes
7

Afaik, a única maneira de fazer isso é obter a fonte e fazer com que o diff seja você mesmo. Você pode obter a fonte real usada para compilar os pacotes com o apt-get. fx:

apt-get source gwibber=2.30.2-0ubuntu3 gwibber=2.30.0.1-0ubuntu1
diff -rupN gwibber-2.30.0.1/ gwibber-2.30.2/

Isso imprimirá todas as diferenças entre todos os arquivos em um formato de patch padrão.

LassePoulsen
fonte
1
Isso é muito bom. A única coisa que eu mudaria no exemplo é usar “debdiff gwibber_2.30.0.1-0ubuntu1.dsc gwibber_2.30.2-0ubuntu3.dsc” em vez de diff bruto.
RAOF 24/10/10
1
Bem, faz praticamente a mesma coisa, mas você pode usar diff em todos os pacotes / tarball por aí. Talvez alguém queira ver a diferença entre um svn-trunk e o pacote atual.
LassePoulsen 24/10/10
Minha segunda resposta (o que mudou) essencialmente automatiza isso.
mgunes
2

Aqui está uma maneira UDD (provavelmente não ideal) de fazer isso:

Ramificação pull -updates para sua liberação (assumindo Lucid) que (suposição a seguir) deve conter a SRU mais recente:

bzr branch lp:ubuntu/lucid-updates/package_name

Obtenha as alterações introduzidas pela revisão mais recente, que (suposição a seguir) deve corresponder à SRU mais recente:

bzr diff -c`bzr revno`
mgunes
fonte
2
Hmm. É uma visão interessante, embora provavelmente seja menos abrangente que a do Source Lab, no sentido de que os nomes dos pacotes podem não corresponder ou existir na árvore de fontes bzr.
Gödel
Contanto que você saiba o nome do pacote de origem, ele corresponderá. Você pode encontrar com qual pacote de origem um pacote binário é produzido apt-cache show package_name | grep Source:.
mgunes
@Murat Bem, <package_name>o resultado obtido não funciona em alguns pacotes: bzr branch lp:ubuntu/lucid-updates/$(apt-cache show linux-libc-dev | grep -m 1 Source: | awk "{print \$2}")=> bzr: ERRO: URL inválido fornecido para transporte: "bzr + ssh: //bazaar.launchpad.net/+branch/ubuntu/lucid-updates/linux" : sem esquemas suportados
Gödel
É porque não há nenhuma ramificação do Ubuntu para o kernel, receio. Pode ser uma exceção específica devido ao fato de o kernel ser mantido no git (kernel.ubuntu.com), mas não tenho certeza sobre o escopo exato das ramificações do pacote bzr no momento. Você pode perguntar no # ubuntu-devel.
mgunes
@Mural eu sei. É por isso que o método é menos abrangente que o do Source Lab. Mas, novamente, é uma visão interessante.
Gödel
0

Se você quiser ver as diferenças de arquivos nos arquivos compactados, extraia os arquivos md5sums, classifique e difira esses arquivos e, em seguida, você pode restringir a lista de arquivos reais para comparar drasticamente.

Phil Miller
fonte
-1

Pode não ser as alterações "exatas", mas apt-listchangeslista as entradas do registro de alterações para as alterações que foram feitas desde a versão instalada.

Ele funciona adicionando uma etapa após o término do download dos novos pacotes, mas antes do início da instalação, onde mostra a entrada do registro de alterações de cada pacote a ser atualizado. Você pode continuar ou cancelar. Você pode instalá-lo com

sudo apt-get install apt-listchanges

depois configure-o com

sudo dpkg-reconfigure apt-listchanges
Ken Simon
fonte
Novamente, a questão não é mostrar as alterações no ChangeLog.
Gödel
D'oh, perdi a primeira linha em que você disse "diferenças de origem".
Ken Simon