apt-markを使ってdebパッケージのバージョン固定

はじめに

nginx にはmainline版とstable版がありますが、 どのバージョンのnginxを使うべきか? - 考える人、コードを書く人 を参考に私はmainline版をベースにして openresty/lua-nginx-module などのモジュールを加えたカスタムdebパッケージを作っています。

この記事を書いている時点ではmainline版は1.13.xでstable版は1.14.0でUbuntu 18.04には1.14.0が入っているので、自作debをインストールした状態で apt update を実行するとstable版の1.14.0がアップデート対象として表示されてしまいます。

調べてみると apt-mark (8) というコマンドでバージョン固定できたのでメモです。

バージョン固定

sudo apt-mark hold パッケージ名 でバージョン固定します。実行例を示します。

sudo apt-mark hold nginx

バージョン固定状態確認

apt-mark showhold コマンドで状態確認できます。実行例を示します。

$ apt-mark showhold
nginx

バージョン固定解除

sudo apt-mark unhold パッケージ名 でバージョン固定解除します。実行例を示します。

sudo apt-mark unhold nginx

パッケージをどこからインストールしたかの確認

ついでにパッケージをどこからインストールしたかの確認手順もメモしておきます。

apt policy パッケージ名 で表示できます。実行例を示します。

$ apt policy nginx
nginx:
  Installed: 1.13.11+mod.1-1ubuntu1ppa2~ubuntu18.04
  Candidate: 1.14.0-0ubuntu1
  Version table:
     1.14.0-0ubuntu1 500
	500 http://ftp.iij.ad.jp/pub/linux/ubuntu/archive bionic/main amd64 Packages
	500 http://ftp.iij.ad.jp/pub/linux/ubuntu/archive bionic/main i386 Packages
 *** 1.13.11+mod.1-1ubuntu1ppa2~ubuntu18.04 500
	500 http://ppa.launchpad.net/hnakamur/nginx/ubuntu bionic/main amd64 Packages
	100 /var/lib/dpkg/status