特定のパッケージに変更を加えた場合に、アップグレード対象から外したい場合があります(もちろんセキュリティの考慮も必要です)。
特定パッケージをアップデート対象外にする方法について記載します。
apt-mark holdを使う方法とdpkg –set-selectionsを使う方法があります。
Table of Contents
1 apt-mark hold/unhold
apt-markを使うことで、パッケージのバージョンを固定することができます。現在のバージョンにholdするには以下を実行します。
$ sudo apt-mark hold <package>
holdを解除するには以下を実行します。
$ sudo apt-mark unhold <package>
holdしたパッケージの一覧を確認するには以下を実行します。
$ apt-mark showhold llvm
2 dpkg –set-selections/–get-selections
dpkgを使うことでもapt-markと同様のことが実現できます。
現在のバージョンにholdするには以下を実行します。
$ echo "llvm hold" | sudo dpkg --set-selections
holdを解除するには以下を実行します。
$ echo "llvm install" | sudo dpkg --set-selections
holdしたパッケージの一覧を確認するには以下を実行します。
$ dpkg --get-selections | grep 'hold$' llvm hold
3 実行結果
llvmパッケージをholdした状態にします。
$ sudo apt-mark hold llvm $ apt-mark showhold llvm
アップグレードパッケージにllvmパッケージが含まれています。
$ apt list --upgradable <snip> linux-libc-dev/xenial-updates,xenial-security 4.4.0-28.47 amd64 [upgradable from: 4.4.0-24.43] llvm/xenial-updates 1:3.8-33ubuntu3.1 amd64 [upgradable from:1:3.8-33ubuntu3] llvm-dev/xenial-updates 1:3.8-33ubuntu3.1 amd64 [upgradable from:1:3.8-33ubuntu3] llvm-runtime/xenial-updates 1:3.8-33ubuntu3.1 amd64 [upgradable from: 1:3.8-33ubuntu3] lsb-base/xenial-updates,xenial-updates 9.20160110ubuntu0.1 all [upgradable from: 9.20160110] <snip>
アップグレードを実行します。
$ sudo apt upgrade -y
アップグレードしたにもかかわらず、アップグレードパッケージにllvmパッケージが残った状態になりました。
$ apt list --upgradable Listing... Done llvm/xenial-updates 1:3.8-33ubuntu3.1 amd64 [upgradable from: 1:3.8-33ubuntu3] llvm-dev/xenial-updates 1:3.8-33ubuntu3.1 amd64 [upgradable from: 1:3.8-33ubuntu3] llvm-runtime/xenial-updates 1:3.8-33ubuntu3.1 amd64 [upgradable from: 1:3.8-33ubuntu3] $