ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

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

あるアプリケーションの環境を整備する際に、dockerのパッケージのバージョンを固定する必要がありました。
ここにその時のメモを残します。

パッケージの保持・ロックとは

パッケージの保持・ロックとは、特定のパッケージのバージョンを固定して、システム全体のアップデート時にそのパッケージだけはアップデートされないようにすることを指します。これにより、システムの安定性を保ちつつ、特定のアプリケーションやサービスの動作を確保することができます。

必要性について

新しいバージョンのパッケージは、新機能やセキュリティアップデートを提供してくれる反面、既存のシステムに影響を及ぼす可能性があります。このようなリスクを避けるためにも、特定のパッケージを保持・ロックすることが有用です。

apt-mark

apt-mark はパッケージが自動的にインストールされたかどうかのマークを変更するコマンドです。

使い方

パッケージ hold 関連
apt-mark hold バージョン固定
apt-mark unhold バージョン固定解除
apt-mark showhold バージョン固定状態確認
インストール済みパッケージの確認
apt-mark showmanual 手動でインストールしたパッケージの一覧を表示
apt-mark showauto 自動的にインストールされたパッケージを、パッケージごとに改行して表示

docker のバージョンが維持できるか検証

この時の最新は Docker version 24.0.7 でした。

いったん古い Docker をインストール(upgrade前)

$ docker --version        
Docker version 20.10.21, build baeda1f

apt-mark hold

$ sudo apt-mark hold 'docker*' containerd.io
docker.io はすでに保留に設定されています。
docker-ce はすでに保留に設定されています。
docker はすでに保留に設定されています。
docker-clean はすでに保留に設定されています。
docker-compose はすでに保留に設定されています。
docker-doc はすでに保留に設定されています。
docker-registry はすでに保留に設定されています。
docker2aci はすでに保留に設定されています。
docker-buildx はすでに保留に設定されています。
docker-compose-v2 はすでに保留に設定されています。
docker-buildx-plugin はすでに保留に設定されています。
docker-ce-cli はすでに保留に設定されています。
docker-scan-plugin はすでに保留に設定されています。
docker-compose-plugin はすでに保留に設定されています。
docker-ce-rootless-extras はすでに保留に設定されています。
containerd.io はすでに保留に設定されています。

apt-mark showhold

$ sudo apt-mark showhold
containerd.io
docker
docker-buildx
docker-buildx-plugin
docker-ce
docker-ce-cli
docker-ce-rootless-extras
docker-clean
docker-compose
docker-compose-plugin
docker-compose-v2
docker-doc
docker-registry
docker-scan-plugin
docker.io
docker2aci

apt dist-upgrade

$ sudo apt dist-upgrade -y
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
アップグレードパッケージを検出しています... 完了
Get more security updates through Ubuntu Pro with 'esm-apps' enabled:
  ansible patchelf
Learn more about Ubuntu Pro at https://ubuntu.com/pro
以下のパッケージは保留されます:
docker-ce docker-ce-cli rust-lldb
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 4 個。

docker バージョン確認(upgrade後)

$ docker --version        
Docker version 20.10.21, build baeda1f