Debian:所有可升级软件包的版本号(现在/那时)和变更日志

Debian:所有可升级软件包的版本号(现在/那时)和变更日志

我目前同时安装了 Lenny 和 Squeeze。

我想知道如何:

  • 所有可升级软件包的列表
  • 了解他们当前和未来的包裹号码
  • 拥有当前/未来版本号之间的所有更改 (ChangeLog)
  • 没有实际升级任何东西

另外,我无需超级用户权限即可获取此信息。

当我这样做时,aptitude update && aptitude upgrade我只看到包裹;当我安装后,apt-listchanges我只有在承诺安装它们后才能看到它们(是的,我知道我可以中止它)。

也许我还不想下载所有的软件包(可以很多),这意味着我必须从其他地方获取 ChangeLog(但这不是必需的;下载它们也适合,但需要超级用户权限)。

更新

删除了提到的答案来看看apt-listchanges。尽管考虑到我的问题听起来很多余,但我确实没有意识到我可以apt-listchanges单独使用。手册页提到了该选项--apt,但我不明白是哪个管道我需要构建(如果它符合我的目标)。

更新2

我想apt-show-versions我会得到一个不错的输出;只是缺少 ChangeLog:

$ 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

答案1

这是 bash/zsh 脚本的草稿,可以打印您想要的所有内容。它仅适用于可升级的软件包,不适用于因依赖项更改而安装的任何新软件包。它无法正常工作以实现安全或稳定更新。而如果http://packages.debian.org/changelogs/不是最新的(不包括可以更新的版本),它会打印所有更改日志条目。另一个问题(或功能,如果您想要的话)是,它打印每个二进制包的条目,而不是每个源包。因此你可能会得到重复的内容。你看,还有很大的改进空间。需要apt-show-versions安装。

#!/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

如果您不需要以自动化方式获取所有信息,您可以使用 的用户界面aptitude。在那里您可以看到哪些软件包可以升级,并获得相应的变更日志,其中按 突出显示新条目C

相关内容