Debian Backports リポジトリを使ってみたっていうだけの話。
背景
最近は Visual Studio Code + DevContainer で開発していて、DevContainer には Debian ベースのイメージを使うことが多い。
2024年7月現在での Debian の最新バージョンは 12 (bookworm) だが、ベースイメージとして Debian を使用している各種ソフトウェアの公式イメージではまだ 11 (bullseye) をベースにしているケースも珍しくない。
例えば Bun の公式イメージ は2024年7月時点では bullseye をベースにしている。
$ docker run --rm oven/bun cat /etc/debian_version
11.10
困ること
当たり前だが、bullseye は少し前のバージョンなので Git のバージョンが少し古い。
$ docker run --rm -it debian:11
root@4570cc5481d8:/# apt update && apt install git
(略)
root@4570cc5481d8:/# git --version
git version 2.30.2
ほとんどの場合では Git のバージョンが少し古くても困らないが、今回は コミットを SSH 鍵で署名できない ことに困った。Git が SSH 鍵による署名をサポートしているのはバージョン 2.34 以降なので、bullseye の安定版リポジトリから入る Git では SSH 鍵による署名ができない。(※ bookworm なら version 2.39 が入るので問題にならない)
Git の新しめのバージョンを入れるには「Git をソースからビルドする」「違うパッケージリポジトリから入れる」の2択が思いつくが、なんで Git を入れたいだけなのにソースからビルドしなきゃいかんのじゃという気持ちになるので後者を検討する。
Debian Backports を使う
Debian には Backports というリポジトリが用意されていて、これを使うとひとつ次のバージョンのパッケージを入れることができる。例えば bullseye-backports を使うと bookworm に入っているパッケージをインストールできる。
FROM oven/bun:1-debian
RUN export $(cat /etc/os-release | grep VERSION_CODENAME) \
&& echo "deb http://deb.debian.org/debian ${VERSION_CODENAME}-backports main" >> /etc/apt/sources.list \
&& apt update \
&& apt install -y --no-install-recommends -t ${VERSION_CODENAME}-backports git
こういう感じの Dockerfile を書けば、ベースイメージの Debian が bullseye でも bookworm のパッケージが利用できそう。
root@4b6dcb8837f6:~# git --version
git version 2.39.2
バージョンが上がった。めでたしめでたし。
※ Git で SSH 鍵署名をするためには、他にも openssh-client も入れる必要があった。