.debファイルをカスタマイズして、GitHubでPPAをホストして、Debianにインストールする方法(その3: GitHubにPPAを作って、カスタマイズしたパッケージをホスティングする)
こちらの投稿の続きです。
GitHubでPPAをホスティングするには
今回の一連の投稿の中で、一番ミソとなる話題です。
検索したら、出てきました。
今回はこちらの内容に沿って、GitHubにPPAリポジトリを作成していきます。(ほぼほぼ翻訳ですが、一部改変している箇所もあります。)
1. PPA用のリポジトリを作成する
GitHubに至って普通のリポジトリを新規作成します。
リポジトリ名はこの先何度も参照するので、覚えやすい名前にしときましょう。普通にppaとかでいいと思います。
私はこちらに作成しました。
そしたらローカルに作業用ディレクトリを作成し、そこにcloneします。
~$ mkdir -p work
~$ cd work/
~/work$ git clone https://github.com/ryonakano/mushkinoko_ppa.git
Cloning into 'mushkinoko_ppa'...
warning: You appear to have cloned an empty repository.
~/work$ cd mushkinoko_ppa/
~/work/mushkinoko_ppa$ ls -a
. .. .git
リポジトリをcloneできたので、新しくフォルダーを作って、その中に前回作成した.debファイルを追加します。今回はターゲットがDebianなのでフォルダー名を"debian"としましたが、何でも大丈夫です。
~/work/mushkinoko_ppa$ mkdir -p debian
~/work/mushkinoko_ppa$ cp ~/Downloads/work/base-files_12.3_amd64.deb debian/
2. GPG鍵を作成する
では、リポジトリのシグネチャとして使われるGPG鍵を生成していきます。
GnuPGというツールを使います。
~/work/mushkinoko_ppa$ sudo apt install -y gnupg
GnuPGをインストールしたら、鍵を生成します。
~/work/mushkinoko_ppa$ gpg --full-gen-key
鍵の種類を聞かれるので、「1」と入力してEnter。
ご希望の鍵の種類を選択してください:
(1) RSA と RSA (デフォルト)
(2) DSA と Elgamal
(3) DSA (署名のみ)
(4) RSA (署名のみ)
(14) カードに存在する鍵
あなたの選択は? 1
鍵の長さは、「4096」でEnter。
RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (3072) 4096
有効期限を聞かれます。セキュリティーの観点からは、有効期限付きにして定期的に鍵を再生成するのがよいと思われますが、今回は無期限にします。
鍵の有効期限を指定してください。
0 = 鍵は無期限
<n> = 鍵は n 日間で期限切れ
<n>w = 鍵は n 週間で期限切れ
<n>m = 鍵は n か月間で期限切れ
<n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0) 0
確認されますので「y」でEnter。
これで正しいですか? (y/N) y
名前とメールアドレスを入力します。コメントは空EnterでOK。最後に「O」でEnterします。
GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。
本名: Ryo Nakano
電子メール・アドレス: example@example.com
コメント:
次のユーザIDを選択しました:
"Ryo Nakano example@example.com"
名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O
続いて鍵のパスワードを設定します。
後で使うので忘れないように。
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か
す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
成器に十分なエントロピーを供給する機会を与えることができます。
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か
す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
成器に十分なエントロピーを供給する機会を与えることができます。
gpg: 鍵A9XXXXXXXXXXXXXXを究極的に信用するよう記録しました
gpg: 失効証明書を '/home/ryo/.gnupg/openpgp-revocs.d/A9FXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.rev' に保管しました。
公開鍵と秘密鍵を作成し、署名しました。
pub rsa4096 2022-10-16 [SC]
A9FXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid Ryo Nakano example@example.com
sub rsa4096 2022-10-16 [E]
~/work/mushkinoko_ppa$
ここまで来たら、GPG鍵の生成は完了です。
秘密鍵をエクスポートして、ほかの人には見えないところに保存しておきましょう。(作ったばかりのパスワードを求められます)
~/work/mushkinoko_ppa$ gpg --export-secret-keys "example@example.com" > ~/Documents/private_key.asc
3. KEY.gpgファイルを作成する
公開鍵をエクスポートします。
~/work/mushkinoko_ppa$ gpg --armor --export example@example.com > debian/KEY.gpg
4. Packages/Packages.gzファイルを生成する
.debファイルをスキャンして、その情報をPackagesファイルに書き出します。
~/work/mushkinoko_ppa$ cd debian
~/work/mushkinoko_ppa/debian$ dpkg-scanpackages --multiversion . > Packages
dpkg-scanpackages: info: Wrote 1 entries to output Packages file.
~/work/mushkinoko_ppa/debian$ gzip -k -f Packages
~/work/mushkinoko_ppa/debian$ ls
KEY.gpg Packages Packages.gz base-files_12.3_amd64.deb
5. Release/Release.gpg/InReleaseファイルを生成する
ハッシュサムが書かれたファイルができあがります。
~/work/mushkinoko_ppa/debian$ apt-ftparchive release . > Release
~/work/mushkinoko_ppa/debian$ gpg --default-key "example@example.com" -abs -o - Release > Release.gpg
gpg: デフォルトの署名用の秘密鍵として"example@example.com"を用います
~/work/mushkinoko_ppa/debian$ gpg --default-key "example@example.com" --clearsign -o - Release > InRelease
gpg: デフォルトの署名用の秘密鍵として"example@example.com"を用います
~/work/mushkinoko_ppa/debian$ ls
InRelease KEY.gpg Packages Packages.gz Release Release.gpg base-files_12.3_amd64.deb
Releaseファイルが元のファイル、それを圧縮したのがRelease.gz、ASCII形式の署名を追加したのがInReleaseファイルです。
6. git commitしてpushする
PPAリポジトリに必要なファイルを生成できたので、git commitしてリモートにpushします。
~/work/mushkinoko_ppa/debian$ cd ..
~/work/mushkinoko_ppa$ git status
~/work/mushkinoko_ppa$ git add debian/
~/work/mushkinoko_ppa$ git commit -m "init"
~/work/mushkinoko_ppa$ git push origin main
7. GitHub Pagesを使ってPPAを公開する
pushできたら、このリポジトリをPPAとして使えるようにしましょう。
PPAとは、要はHTTPサーバー上のファイルにすぎないので、GitHub Pagesを使って実現できます。
GitHubのリポジトリを開いて、"Settings"→"Pages"→"Branch"から、"main"を選択して"Save"をクリックします。
以上で、GitHubでPPAをホスティングする作業が完了しました。
まとめ
今回は、GitHubでPPAをホスティングする手順を残しました。
次回、こちらのPPAから、Debianにパッケージをインストールしていきます。
続き↓↓↓