如何从apt upgrade中排除指定包
在 archlinux 下可以直接通过 pacman -Syu --ingore
来跳过指定包进行升级, 然而ubuntu 下的 apt 居然不提供类似的排除选项,这很让我感到吃惊.
不过网上apt的内容倒是蛮多,经过简单的搜索,很容易找到解决方法。
先用
apt-mark hold
来保留要排除的软件包sudo apt-mark hold emacs-snapshot
emacs-snapshot set on hold.
执行升级操作
sudo apt upgrade -y
用
apt-mark unhold
来取消包的保留sudo apt-mark unhold emacs-snapshot
Canceled hold on emacs-snapshot.
如果没有 apt-mark
命令,则还可以使用 dpkg --set-selections
来保留软件包,关于它的manual如下:
--set-selections Set package selections using file read from stdin. This file should be in the format “package state”, where state is one of install, hold, deinstall or purge. Blank lines and comment lines beginning with ‘#’ are also permitted. The available file needs to be up-to-date for this command to be useful, otherwise unknown packages will be ignored with a warning. See the --update-avail and --merge-avail commands for more information.
所以步骤可以修改为
保留要排除的软件包
echo "emacs-snapshot hold" |sudo dpkg --set-selections
执行升级操作
sudo apt upgrade -y
取消包的保留
echo "emacs-snapshot install" |sudo dpkg --set-selections