.debファイルをカスタマイズして、GitHubでPPAをホストして、Debianにインストールする方法(その4: ホスティングしたPPAから、パッケージをDebianにインストールする)
こちらの投稿の続きです。
事前準備
カスタマイズしたパッケージをインストールする環境を用意します。
今回私は、amd64のDebian Testing(コードネーム・Bookworm)向けにパッケージを用意したので、その環境をVirtualBoxで用意しました。
以降出てくるコマンドは、これまで作業していた環境ではなく、このターゲットとなる環境で実行するものになります。
0. 作業前の状態の確認
作業後に比較できるように、作業前の状態を確認しておきましょう。
まずはbase-filesのインストールソースの一覧。
現時点では、公式リポジトリのものしか表示されません。
~$ apt-cache policy base-files
base-files:
インストールされているバージョン: 12.3
候補: 12.3
バージョンテーブル:
*** 12.3 500
500 http://deb.debian.org/debian bookworm/main amd64 Packages
100 /var/lib/dpkg/status
また、設定アプリでのOS名も、Debianとなっています。
1. PPAからのインストールをaptに強制させる
同じ名前のパッケージが、別のソフトウェアソースに存在する場合、aptはどちらからインストールすればよいのでしょうか。
この問題を解決するために、aptはインストールの優先順位付けを行っています。優先順位付けに用いる数値が大きいソースから順に、aptはインストールするソースを選択します。
今回は、Debianのオリジナルのbase-filesではなくカスタマイズしたbase-filesをaptくんにインストールしてもらうために、今回作成したPPAの優先順位を高くしてあげます。
まずは、必要となるツールのインストールから。
~$ sudo apt install -y curl gnupg vim
そしたら、その優先順位付けをファイルで教えてあげます。
/etc/apt/preferences.d/以下に、新しく.prefファイルを作ります。名前は何でも大丈夫です。
$ sudo vim /etc/apt/preferences.d/base_files_priority.pref
以下の内容を書き込みます。
Package: base-files
Pin: origin "ryonakano.github.io"
Pin-Priority: 999
「base-filesというパッケージに関しては、ryonakano.github.ioというソースの優先度を999(つまり最高優先度)にしてね!」という内容です。こうすることで、作成したPPAにあるbase-filesを真っ先にインストールしてくれます。
aptのソースの優先度について詳しくは、以下をご覧ください。
2. PPAを追加する
まずは、前回作成したGPG鍵をダウンロードします。
「ryonakano_ppa」の部分は何でも大丈夫です。
~$ curl -s --compressed "https://ryonakano.github.io/mushkinoko_ppa/debian/KEY.gpg" | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/mushkinoko_ppa.gpg >/dev/null
そしたらPPAを追加します。
~ $ echo "deb [signed-by=/etc/apt/trusted.gpg.d/mushkinoko_ppa.gpg] https://ryonakano.github.io/mushkinoko_ppa/debian ./" | sudo tee /etc/apt/sources.list.d/mushkinoko_ppa.list
3. カスタマイズしたパッケージをインストール
いよいよインストールです。
アップデート情報を更新して、インストールソースの情報を見てみてください。
~$ sudo apt update
~$ apt-cache policy base-files
base-files:
インストールされているバージョン: 12.3
候補: 12.3
バージョンテーブル:
*** 12.3 500
500 http://deb.debian.org/debian bookworm/main amd64 Packages
100 /var/lib/dpkg/status
12.3 999
500 https://ryonakano.github.io/mushkinoko_ppa/debian ./ Packages
先ほど設定した通り、PPAが追加されて、そちらの優先度が999になっているのがわかると思います。
この状態でbase-filesのインストールを指示すると、カスタマイズしたパッケージのほうがインストールされます。
~$ sudo apt install -y base-files
完了したら、設定アプリを開いたり、"neofetch"コマンドを実行してみてください。
カスタマイズした内容が反映されていると思います。
そして、aptで優先順位付けを行っているため、例えDebianオリジナルのbase-filesが修正されたとしても、アップデートが来ません。今回カスタマイズしたパッケージが保持されます。
まとめ
今回の一連の投稿では、以下の手順をご紹介しました。
.debファイルをカスタマイズする(オリジナルに手を加える)
カスタマイズしたパッケージのPPAを、GitHubでホスティングする
ホスティングしたPPAから、パッケージをDebianにインストールする
ニッチな内容ではありますが、実はUbuntuベースの一部ディストリビューションは、この方法で独自のカスタマイズを施したパッケージを提供していたりします(例:elementary OSのリポジトリにも、base-files-patchedというブランチがあります)。
では、このあたりで。
読んでくださってありがとうございます。