如何阻止aptitude(或apt-get)安装特定版本的软件包?

我遇到了一个程序崩溃的问题,我怀疑只有最新版本的软件包才会出现这个问题,所以我希望能够阻止安装这个特定版本 - 但我仍然希望能够升级到未来的版本。
我记得(在某个地方、某个时间)看到过apt系统可以实现这一点,但现在我找不到了。
我该如何操作呢?
附言:我故意对我遇到问题的软件包保持模糊,因为我想了解Apt的这个功能(如果确实存在),并且不希望得到与我遇到问题的程序相关的建议。
3个回答

编辑/etc/apt/preferences文件并添加以下内容:
Package: unzip
Pin: version 2.7
Pin-Priority: 100

Package: unzip
Pin: version 3*
Pin-Priority: 1000

这将保持软件包在2.7版本上,跳过2.8和2.9,并在可用时升级到3*。
请注意,这是一种不升级到不稳定软件包版本的“不自然方式”。更好(也是推荐的方式)是在问题解决之前“保留”软件包:
dpkg:
$ echo "package hold" | sudo dpkg --set-selections

能力

$ sudo aptitude hold package_name 

要使用dpkg取消保留的软件包,请执行以下操作:echo "软件包名称 安装" | sudo dpkg --set-selections 或者使用aptitude:aptitude unhold 软件包名称 - Paul Tobias

通过 forbid-version 选项,您可以使用 aptitude 进行此操作。
在用户界面中选择软件包的版本并按下 'F' 键。
或者,您也可以通过命令行界面进行操作,请参阅 manpage。
forbid-version
           Forbid a package from being upgraded to a particular version, while allowing automatic upgrades to future versions. This is useful for example to avoid a known broken version of a package,
           without having to set and clear manual holds.

           By default, aptitude will select the forbidden version to be the one which the package would normally be upgraded (the candidate version). This may be overridden by appending „=<version>“ to the
           package name: for instance, „aptitude forbid-version vim=1.2.3.broken-4“.

           To revert the action, „aptitude install <package>“ will remove the ban. To remove the forbidden version without installing the candidate version, the current version should be appended: „install
           <package>=<version>“.

请注意:这个禁用版本只能通过适应性来尊重。如果运行apt-get或其他软件包管理器,将会升级该软件包。

这些信息存储在/var/lib/aptitude/pkgstates中,查找ForbidVer:。要验证哪个版本被禁止使用,请使用aptitude versions packagename命令,被禁止的版本将在第一列显示大写字母F - Paul Tobias

你可以使用'apt-get install package-version'命令来安装特定版本的软件包。
你可以通过在/etc/apt/preferences文件中进行特定配置来阻止更新该版本。请参考3.10节: APT HOWTO 你也可以使用apt-mark命令来实现。请参考"hold"选项: Ubuntu Manpages