如何解除包裹的保留状态?

我用synaptic锁定了pidgin-data的版本-如何将状态从hold更改回正常,以便正确升级它? PinningHowto上说执行apt-get install packagename应该会去除hold,但运行dpkg -l | grep ^h仍显示为被锁定:
hi  pidgin-data                                                 1:2.10.6-0ubuntu1+pidgin1.12.04                            multi-protocol instant messaging client - data files

如何正确取消“保留”状态?
7个回答

你可以使用sudo apt-mark unhold package_name命令。该软件包将被解除保持,并返回确认信息:已取消对package_name的保持。
要解除所有被保持的软件包,可以使用sudo apt-mark unhold $(apt-mark showhold)命令。

1你的sudo问题可能是因为你只写了sudo echo "package_name install"|dpkg --set-selections。这个命令只对echo生效,而不对后面的管道生效,所以会出现访问错误。请尝试使用以下命令:sudo -E -- sh -c 'echo "package_name install"|dpkg --set-selections'。这个命令会在一个子shell中执行,其命令行是echo "package_name install"|dpkg --set-selections - Urhixidur
1我的答案与这里下面的答案的未编辑版本有些关联,之前的版本中包含了我参考的确切命令。然而,问题特别使用apt-get作为例子,这就是为什么我使用了被包含在apt软件包中的apt-mark来回答。然而,知道dpkg命令为什么不能工作确实非常有帮助。 - sturlabragason
1@DrA7 包裹已经不再保留。现在我该怎么办? - Dr.jacky
1我遇到了和@Dr.jacky一样的问题,但是当我尝试apt upgrade时,它仍然告诉我相同的软件包被保留了下来! - Michael

使用以下命令解锁所有被保留的软件包:
apt-mark unhold $(apt-mark showhold)

正确的解除保留的方法应该是:
echo "package_name install"|sudo dpkg --set-selections

你可以使用以下命令取消保持所有APT软件包:
apt-mark showhold | awk '{ print $1, "install" }' | dpkg --set-selections

1另一种方法是apt-mark showhold | xargs sudo apt-mark unhold - Gautam Sreekumar

解压一个名为$package_name的单个软件包:
echo $package_name install | dpkg --set-selections

解除所有当前被保留的包裹。
dpkg --get-selections | grep hold | awk '{ print $1, "install" }' | dpkg --set-selections

运行echo pidgin-data install | dpkg --set-selections(将pidgin-data替换为被保留的软件包名称)- 这将改变软件包的状态为install而不是hold

对我来说,所有的答案都不起作用,因为由于未满足的依赖关系,这些软件包无法升级。

我不得不删除一些软件包。我按照这篇博客文章的指示找出了引起问题的软件包:

apt-get -o Debug::pkgProblemResolver=yes dist-upgrade