Debian安定版向けに不安定版・テスト版のパッケージを雑にバックポートする
このテキストについて
このテキストは、姫路IT系勉強会で出た話題を受けて書いたテキストの転載です。
姫路IT系勉強会は、兵庫県姫路市にて毎月第3土曜日に開催しているITエンジニア向け勉強会です。勉強会については、さくらインターネットのさくらのナレッジで紹介されているので、こちらもご覧ください。
Debianのことを知りたい場合は、東京・関西Debian勉強会もあります。こちらも第3土曜日で同じ日に開催しています。(どちらも関係者なので、かぶっててツライ…)
免責事項とお願い
きちんとしたDebianパッケージの作り方を知りたければ、こういう(この文章も含めてです)ZennやQiitaのチラシの裏を参考にせず、最初にDebian 新メンテナーガイドを読んでください。
DebianポリシーやDebianデベロッパーレファレンスなど、各種Debian開発者向けのマニュアルは、Debian -- Debian Developers' Manualsからリンクされています。
毎月行われているDebian勉強会の発表をまとめた、あんどきゅめんてっどでびあんも参考になります。
最初に
サーバーをDebianで運用する場合、Debian Stableを使いますが、2年ごとのリリースなので使い続けていると使いたいパッケージがない場合があります。今はDebian Backportsが充実しているのでBackportsを探せば、なんとかなることが多いのですが、ない場合は当然ありません。
そういった場合、新しいパッケージが欲しいからといって安易にUnstable/Testingのaptlineを追加してはいけません。大惨事が起こります[1]。先人が警告しているにもかかわらず、そのような事をする人が後を絶たないので「Debianを破壊しないで」という文書の中で「フランケンDebianを作らないで」と説明しているぐらいです。
では、どうすればいいかといえばパッケージメンテナーにお願いしてbackportsに入れてもらうなどすればいいのですが、今すぐ解決したい場合には使えません。これは困った。
このような事態になった場合、パッケージがUnstable/Testingにあって、パッケージの依存関係もStableにあるライブラリで解決できそうなら、Unstable/TestingにあるソースをStable向けにビルドし直して利用するといいかもしれません[2]。
準備するもの
- ほしいパッケージと同一アーキテクチャで同一リリース以上のDebian GNU/Linux環境
パッケージをビルドするのでDebian GNU/Linuxの環境を用意します。
2025年2月現在のDebian安定版は、bookworm(12)です。それ以上のDebian環境なら実機、仮想マシン、コンテナどれを使っても構いません。それとアーキテクチャは合わせてください。amd64(x86_64)とarm64は字面が似てますが違うので気をつけましょう。
手順
タイトルに「雑に」と書いているとおり、本当に雑にビルドし直すだけです。本当ならdch --bpo
でバージョンをつけ直したり少し手を加えるほうがいいのですが、そういうこともせずソースをダウンロードしてビルドするだけです。
1. パッケージのインストール
まず、始めにビルドに必要なパッケージをインストールします。下の例ではsudo
を使ってますが、rootを有効にしている人は、当然ですがrootになってからapt
でインストールしてください。
sudo apt install packaging-dev pbuilder ubuntu-dev-tools
2. ビルド環境の作成
Debianにはパッケージをクリーンルームでビルドするpbuilder
というシステムがあります。ubuntu-dev-toolsには、そのpbuilder
環境をリリース別に作成するpbuilder-dist
というツールがあるので、これを使って現在の安定版bookwormのpbulder
環境を作ります。
ユーザーで以下のpbuilder-dist
コマンドを実行します。するとホームディレクトリにpbuilder
というディレクトリが作成されて、しばらく待っていると中に~/pbuilder/bookworm-base.tgz
が作成されます。
pbuilder-dist bookworm create
3. ソースコードの取得
これで準備ができたのでパッケージのソースコードをダウンロードします。
Debianには、debianパッケージを検索する、packages.debian.orgというページがあります。ここの「パッケージディレクトリを検索」から、ディストリビューションに「テスト版」または「不安定版」を選択して、ビルドしたいパッケージを検索してください。
今回は、trixieのruby-rubygemsにします。このパッケージ、アーキテクチャがall
なので、そのまま使えそうに見えますが依存関係が違うので、bookwormに、そのままインストールできません。
パッケージのページにアクセスしたら右側に「rubygemsソースパッケージをダウンロード」と書かれた部分があります。その下に[rubygems_3.6.3-1.dsc]
と書かれたリンクがあります。このdsc
のリンクURLをコピーしてください。URLをコピーをしたらビルド作業に戻ります。
適当な場所に作業用ディレクトリを作成して入ります。そしてdget [コピーしたパッケージのURL]
という形でURLを貼り付けて実行してください。すると、その場所にソースコード一式がダウンロードされて展開されます。
mkdir work
cd work/
dget http://deb.debian.org/debian/pool/main/r/rubygems/rubygems_3.6.3-1.dsc
4. ソースコードをビルド
ソースコード一式のダウンロードが終わると、中でソースコードのアーカイブが展開されています。これを使ってビルドします。
展開されているソースコードのディレクトリに入ったら、1つ上のディレクトリにあるdsc
ファイルを指定してpbuilder-dist
コマンドを実行します。
cd rubygems-3.6.3/
pbuilder-dist bookworm build ../rubygems_3.6.3-1.dsc
5. パッケージをインストール
ビルドは、もともと問題がなさそうなdebパッケージだったので問題なくビルドできるはずです。もし、ビルドできなければ、debian/control
などをいじったり足りないライブラリをビルドする必要があります。そういうことをしていると、Debian勉強会に参加したりするようになるわけですね。
それはさておき、パッケージがビルドできればホームディレクトリの~/pbuilder/bookworm_result/
以下にパッケージが生成されています。ディレクトリを移動してdpkg
でインストールしましょう。
cd ~/pbuilder/bookworm_result/
sudo dpkg -i ./*deb
参考
- Debianでbackportsにパッケージを登録する(ディストリビューション/パッケージマネージャー Advent Calendar 2013) – @knok blog: https://blog.daionet.gr.jp/knok/2013/12/16/howto-debian-backports/
- pbuilderでパッケージをビルドしてみる: https://tokyodebian-team.pages.debian.net/html2008/debianmeetingresume200806-kansaise3.html
- Ubuntuでのpbuilder入門 | smash smartly: https://ubuntu-smash.blogspot.com/2011/01/ubuntupbuilder.html
Discussion