我目前同时安装了 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
。