当尝试查看 apt 软件包的变更日志时,aptitude
经常会出现错误Cannot display changelog: Origin of <package> is unknown (maybe not an official Debian package ...)
。这里的“Debian”这个词有点误导,因为到目前为止,在我看来,只有来自主文件中列出的源的软件包/etc/apt/sources.list
才能有“变更日志”。就我而言,这些是 Ubuntu 软件包,尽管它们源自相应的 Debian 软件包,但它们来自http://archive.ubuntu.com/ubuntu/
并且经常出现ubuntu
在软件包的版本中,这表明 Ubuntu 维护者重建了分布式二进制文件。
man aptitude
在两个地方提到了变更日志:
在命令的描述中
changelog
:变更日志
下载并显示每个给定源代码或二进制包的 Debian 变更日志。
在环境变量的描述中
$PAGER
:寻呼机
如果设置了此环境变量,则调用“aptitude Changelog”时,aptitude 将使用它来显示更改日志。如果未设置,则默认为
more
。
有什么方法可以aptitude
显示非 Debian 软件包的更改日志吗?是否有一些神奇的行可以添加到/etc/apt/sources.list.d/*
文件中以使其这样做?
非“Debian”软件包提供商是否有办法向用户提供变更日志?
PS 同样的情况也适用于apt changelog
,它失败并显示错误消息:
E: Failed to fetch changelog:/<package>.changelog Changelog unavailable for <package>-<version>
显然,aptitude
、apt changelog
、 和apt-listchanges
都使用相同的文件进行输出。
答案1
如果它们在本地不完整可用,则分别从元数据服务检索更改日志https://metadata.ftp-master.debian.org/changelogs/对于 Debian 和https://changelogs.ubuntu.com/changelogs/pool对于Ubuntu。该行为取决于配置的源,可以使用以下命令查看
apt-config dump Acquire::Changelogs
其他存储库可以提供适当的服务和配置片段,但我不知道有任何这样做。
在 Ubuntu 上,软件包会发送被截断的变更日志,因此apt changelog
将始终尝试从服务器检索变更日志。
用于检索给定包的更改日志的 URL 可以通过以下方式获取
apt changelog --print-uris ...
aptitude
使用不同的配置指令,并且APT::Changelogs::Server
是指向元数据服务器的关键。它也不按起源来区分。这使得外部存储库更难以提供适当的配置。
apt-listchanges
从已下载的软件包文件中提取变更日志。如果不可用,它将返回apt-get changelog
(与 相同apt changelog
)。
答案2
Anapt changelog tar
将读取该文件/usr/share/doc/tar/changelog.Debian
。那么如果一个数据包不遵循changelog.Debian
约定,apt changelog
那么它就毫无用处。
答案3
我发现“aptchangelogcurl”命令总是从互联网站点查找更改日志,而不是本地changelog.gz文件,详细检查发现curlpacakge的更改日志文件附加了两个以“#”开头的特殊行,这不是正确的方法(例如不符合惯例)。如果删除这两行或者在“#”前添加一个空格,则会查找本地的changelog.gz文件。