ubuntuパッケージをlaunchpad ppaで公開する方法

以前から、バイナリパッケージであるpython-simplexqueryをlaunchpadの自分のPPA(private package archive)上に置いています。

PPAを作ることで、ユーザーがソースパッケージをアップロードすると、launchpad上で各アーキテクチャ用のバイナリパッケージをビルドし、aptでインストール可能にしてくれます。
PPAでビルドが成功したら、以下のようにubuntu上で利用する事が可能になります(ユーザーbellbindでPPA名python-simplexqueryを作り、python-simplexqueryのdebを公開した場合)。

sudo apt-add-repository ppa:bellbind/python-simplexquery
apt-get update
apt-get install python-simplexquery

PPAの作り方は以下の記事(の2ページ目)が一番分かりやすいでしょう

しかしPPA作成前に一度行う必要があるgpg鍵生成登録やCoCについて紛らわしい箇所があるので補足しておきます。

  • gpgコマンドについて
    • gpg --gen-keyでの重要な点は、launchpadに登録したメールアドレスで鍵を生成すること
    • gpg --gen-keyで鍵のオプションの選択がある。アルゴリズムや有効期限などのオプションは(DSA署名専用1yなど)デフォルトでよいです。パスフレーズは付けておくこと。
    • gpg --list-keysで生成した鍵一覧が見れる。gpg --send-keyで送る鍵は、uidが上記のメアドである鍵を使う
    • gpg --send-keyで指定する鍵IDは、"972DB0DC"のような形式です。
    • gpg --send-keyで送ったあと、自分のlaunchpadアカウントの"OpenPGP keys"にfingerprintを追加します。
  • さらに"Signed Ubuntu Code of Conduct"を有効にする必要があります。
    • OpenPGP keysにfingerprintを追加しただけでは、 パッケージをppaに登録できません。CoCがyesになって初めてパッケージ登録が可能になります。
    • HTML上で署名するCoCバージョンは記事上では1.0.1ですが、今は1.1です。
    • いまはCoC署名はファイルダウンロードではなく、ブラウザ上で該当部分をコピペしてファイルを作りそれをgpgで署名し、署名した全体をコピペしてブラウザでアップします。ターミナルを使っている場合、空白や改行が変わらないように注意します。

ソースパッケージのPPAアップロード手順

基本的に"debuild -uc -us"できちんとエラーやlintian警告なしでバイナリパッケージが作れていることが前提です。(ちなみに、pythondebパッケージの作り方は、python3用とpython2用のmultipleなdebパッケージを作るubuntuパッケージの作り方 - ラシウラに書きました。http://github.com/bellbind/python-simplexquery 中のdebian/* はmaverick用のパッケージ記述になっています)

毎回のソースパッケージアップロードで行うのは、以下のようにdebuildとdputの2コマンドだけです(python-simplexquery-1.0.5-0nmu1ppa2例):

cd python-simplexquery-1.0.5.1
debuild -S -sa
cd ..
dput ppa:bellbind/python-simplexquery python-simplexquery_1.0.5.1-0nmu1ppa2_source.changes

dputでppa名をフルに指定すれば上記記事上にある~/.dput.rcは不要です。

またPPAアップロードでも注意点は幾つかあります。

  • パッケージのバージョンには、"1.0.5.1-0nmu1ppa1"などメンテナーバージョン中に"ppa"という文字列が入る必要があります
  • パッケージを署名してない、署名が違う、CoCをyesにしていない、などミスがあるとdputで失敗した旨のエラーメールで送られてきます。
  • launchpad上のビルドは、ビルドマシン待ち時間とビルド時間の双方でそれなりに時間がかかります(速くても1時間ほど、長くて半日)。アップする前にパッケージを十分チェックしておきましょう。
    • 特にdebian/control中の"Build-Depends"と"Depends"は記述漏れがないように注意する
  • ソースアーカイブ(XXX_A.B.C.orig.tar.gzなど)は一度dputでアップすると、同じファイル名でつくり直してdputしても更新されません。
    • ソースを変えたい場合は、圧縮形式を変える(tar.bz2にするなど)か、バージョンを上げるかしたほうがいいでしょう。