Debian: números de versão (agora / depois) e changelog para todos os pacotes atualizáveis

3

Atualmente tenho instalações de Lenny e Squeeze.

Eu quero saber como:

  • lista de todos os pacotes que podem ser atualizados
  • conheça seus números de pacotes atuais e futuros
  • tem as alterações (ChangeLog) para todas elas entre números de versão atuais / futuros
  • sem realmente atualizar nada

Como um complemento, recebo essas informações sem direitos de superusuário.

Quando faço aptitude update && aptitude upgrade , vejo apenas os pacotes; quando eu instalei o apt-listchanges eu só os vejo quando eu me comprometo a instalá-los (sim, eu sei que posso abortar).

Talvez eu ainda não queira baixar todos os pacotes ( poderia ser muitos deles), o que significa que eu teria que buscar o ChangeLog de algum outro lugar (mas isso não é um exigência, baixá-los caberia também, mas exigiria direitos de super usuário).

Atualizar

Uma resposta excluída mencionada para dar uma olhada em apt-listchanges . Apesar de parecer redundante, dada a minha pergunta, é verdade que não percebi que posso usar apt-listchanges sozinho. A man page menciona a opção --apt , mas não consigo entender qual pipeline eu preciso construir (e se ela atende aos meus objetivos).

Atualização 2

Eu percebi que com apt-show-versions obtive uma boa saída; é só que o ChangeLog está faltando:

$ apt-show-versions -u
apache2/squeeze upgradeable from 2.2.16-6+squeeze1 to 2.2.16-6+squeeze2
apache2-mpm-worker/squeeze upgradeable from 2.2.16-6+squeeze1 to 2.2.16-6+squeeze2
apache2-utils/squeeze upgradeable from 2.2.16-6+squeeze1 to 2.2.16-6+squeeze2
apache2.2-bin/squeeze upgradeable from 2.2.16-6+squeeze1 to 2.2.16-6+squeeze2
apache2.2-common/squeeze upgradeable from 2.2.16-6+squeeze1 to 2.2.16-6+squeeze2
    
por mark 30.08.2011 / 10:02

1 resposta

1

Aqui está um rascunho de um script bash / zsh que imprime tudo o que você deseja. Ele funciona apenas para pacotes atualizáveis, não para qualquer novo pacote que esteja instalado devido a dependências alteradas. Não funciona corretamente para atualizações de segurança ou estáveis. E se o link não está atualizado (não inclui a versão para a qual pode ser atualizado), ele imprime todos os changelog entradas. Outro problema (ou recurso, se você quiser) é que ele imprime as entradas por pacote binário, não por pacote-fonte. Portanto, você provavelmente terá duplicações. Você vê, há muito espaço para melhorias. Precisa do apt-show-versions instalado.

#!/bin/bash
FLAVOURS=(main contrib non-free)
TEMPFILE=$(mktemp)
trap "rm -f $TEMPFILE; exit" SIGHUP SIGINT SIGTERM

apt-show-versions -u | while read PACKAGE A B FROM C TO ; do
         PACKAGE=${PACKAGE%%/*}
         SOURCEPACKAGE=$(dpkg-query -W -f '${Source}' $PACKAGE)
         SOURCEPACKAGE=${SOURCEPACKAGE%% *}
         SOURCEPACKAGE=${SOURCEPACKAGE:-$PACKAGE}
         PREFIX=${SOURCEPACKAGE:0:1}
         if expr match $SOURCEPACKAGE "lib.*" > /dev/null ; then
            PREFIX=${SOURCEPACKAGE:0:4}
         fi      
         echo Changelog for $PACKAGE from $FROM to $TO
         for i in $FLAVOURS ; do
                if wget -q "http://packages.debian.org/changelogs/pool/$i/$PREFIX/$SOURCEPACKAGE/current/changelog.txt" -O $TEMPFILE ; then
                    dpkg-parsechangelog --since "$FROM" --to "$TO" -l$TEMPFILE | sed -e "1,/Changes:/d"
                    break   
                fi      
         done    
         echo    
   done
rm $TEMPFILE

Se você não precisar de todas as informações de maneira automatizada, poderá usar a interface do usuário de aptitude . Lá você pode ver quais pacotes podem ser atualizados e obter o log de alterações correspondente com as novas entradas destacadas pressionando C .

    
por 13.03.2012 / 09:37