Ubuntu Weekly Recipe

第419回 長期サポート版で改めて見直す,PPAとのお付き合い

この記事を読むのに必要な時間:およそ 6 分

よろしい,ならば確認だ

Backportsには存在しないパッケージを使いたい場合は,どうしてもPPAに頼らざるを得ません。より品質の高いPPAを見つけるために必要な知識を説明しましょう。

あなたのPPAはどこから?

PPAを導入する場合,まずどのPPAを使うのかという問題が発生します。

あるソフトウェアの公式サイトでPPAを使ったパッケージの導入を紹介している場合は,それに従うのが一番安全でしょう。それ以外の場合は,⁠ソフトウェア名 PPA」で検索すると大抵見つかります。

特定のパッケージのより新しいバージョンを提供するPPAがないか調べる確実な方法は,LaunchpadのWeb UIを使うことです。まずあるパッケージ「foo」のソースパッケージの名前を調べます。

$ apt-cache showsrc foo
Package: srcfoo
(以下略)

この場合,⁠srcfoo」がソースパッケージの名前です。パッケージ名とソースパッケージ名が同じ場合もあります。

次にソースパッケージ名を元に,以下のURLにアクセスします。

https://launchpad.net/ubuntu/+source/srcfoo/

ページ左下に「Other versions of 'srcfoo' in untrusted archives.」という項目がありますので,それを展開します。そこの表示されるものが,そのソースパッケージと「同じ名前の」ソースパッケージを提供しているPPAのリストになります。

図1 lxcパッケージの場合

画像

表示される数は限定されているので,すべてをリストアップしたかったら「other untrusted versions of 'srcfoo'.」を選択してください。

図2 lxcパッケージを提供するPPAのリスト

画像

数が多いと,どれから選んでいいかわからないかもしれません。そこでいくつか選択のポイントを紹介しましょう。

PPA name
PPA nameにはそのPPAの名前が書いてあります。きちんとした人が作ったPPAであれば,ここに「stable」「develop」⁠⁠nightly」といった用途にあわせた単語が入っています。逆に「PPA for ユーザー名」のような初期値を使っているPPAは,他のユーザーが使うことを考慮していない可能性が高いので,避けたほうが良いでしょう。
Description
Descriptionには,そのPPAに対するより長い説明が記述されています。ここの記述がしっかりしていれば,その内容を読むことで 自分の用途にあっているか把握できるはずです。もし空だったら,個人目的のPPAの可能性が高いので避けましょう。
SourcesとBinaries
アップロードされたソースパッケージとビルドされたバイナリパッケージの数です。単純に数字を見るだけで可否を判断することはできませんが,目的と比較してあまりに数が多いようなら避けたほうが無難です。

リストアップのページで確認できるのはこれくらいです。ここで絞り込んだ上で,さらに個別のPPAのページを見ていきましょう。

図3 ⁠LXC: stable」のページ

画像

ページ上部には,このPPAを管理するユーザー名ないしはチーム名が表示されます。名前をクリックするとそのユーザーないしチームのトップページに飛びますので,作成者がどのような人物なのかを把握しておきましょう。

「Overview of published packages」には,このPPAが提供するソースパッケージのリストとその作成者,作成日時がリストアップされています。⁠Published in」で,リリースごとにフィルタリングできます。使っているリリースのパッケージが提供されるか確認してください。PPAを導入すると,ここに表示されるパッケージはすべて更新される可能性があるということです。そのPPAの目的に対して,あまりに数が多いようであれば,なるべく使わないようにしましょう。

Versionフィールドに「Newer version available」と表示されることがあります。PPAで提供しているバージョンよりも新しいパッケージが,公式リポジトリから提供されていることを意味します。この場合,バージョン指定せずにインストールしたら公式リポジトリのパッケージがインストールされてしまうので注意してください。

「View package details」をクリックすれば,個々のソースパッケージの内容が表示されます。目的のパッケージの目的のアーキテクチャの「Build Status」が成功(緑色のチェックマーク)になっていることを確認しておきましょう。当然のことながらビルドに失敗しているパッケージは,インストールできません。

「Available diffs」には前のバージョンや公式リポジトリのバージョンからの差分が表示されます。変更点に問題がないか確認しておきましょう。

パッケージのバージョンも重要です。あるPPAのパッケージを導入したあとに,より新しいリリースのUbuntuにアップグレードするとしましょう。その時,新しいリリースのUbuntuで提供しているパッケージに更新されるかどうかは,PPAのパッケージのバージョンフィールドとの比較で決まります。

バージョンフィールドの大小についてはいくつかの決まりがあります。一般的に数字が大きい方が新しくなります。⁠~(チルダ)⁠「前の文字列よりも古い」ことを意味します。Backportsなどは「バックポート元のバージョン~バックポート元のUbuntuリリース」といったバージョン名をつけることが多いです。これにより,そのバージョンフィールドはバックポート元のバージョンよりも古くなることを保証できます。

ルールを覚えることが面倒であれば,dpkgコマンドでバージョンを比較できます。

$ dpkg --compare-versions 1.0 gt 0.9 && echo "ok"
ok
$ dpkg --compare-versions 1.0~ppa1 gt 1.0 && echo "ok"
$

「gt」は左のバージョンが右のバージョンよりも大きい場合に成功となります。1.0と0.9なら1.0の方が大きいので「ok」が表示されます。⁠1.0~ppa1」「1.0より小さいバージョン」なので,⁠ok」は表示されません。⁠gt」以外にも演算子がありますので,詳しいことは「dpkg --help」を参照してください。

add-apt-repositoryかapt-add-repositoryか,それが問題だ

使用するPPAを決めたら,次はそのリポジトリをシステムに追加します。第314回にもあるように,CUIならadd-apt-repositoryコマンド,GUIならsoftware-properties-gtkから導入しましょう。またAnsibleのように書式の中でリポジトリの追加をサポートしているツールも存在します。

ちなみに「apt-add-repository」「add-apt-repository」へのシンボリックリンクになっていますので,どちらを使っても問題ありません。問題なんて何もないのです。

追加するリポジトリ名はPPAページの「Adding this PPA to your system」を参照してください。⁠ppa:ユーザー名/PPA名」という書式のはずです。

$ sudo add-apt-repository ppa:ユーザー名/PPA名
$ sudo apt update

なおadd-apt-repositoryコマンドはPPAだけでなく,他のリポジトリにも対応しています。指定できる書式については,⁠add-apt-repository --help」を参照してください。

$ add-apt-repository --help
(中略)
  Examples:
    apt-add-repository 'deb http://myserver/path/to/repo stable myrepo'
    apt-add-repository 'http://myserver/path/to/repo myrepo'
    apt-add-repository 'https://packages.medibuntu.org free non-free'
    apt-add-repository http://extras.ubuntu.com/ubuntu
    apt-add-repository ppa:user/repository
    apt-add-repository multiverse

add-apt-repositoryコマンドを使うと,最初にPPAのDescriptionの内容を表示します。問題なければEnterキーで追加します。

追加する際は,PPAの公開鍵を自動的に登録します。PPAのパッケージリポジトリのメタデータは,PPAごとに作成された秘密鍵を使って署名を行っています。ユーザーはそのPPAの公開鍵を安全な経路でダウンロードし,その公開鍵で署名を検証することで,パッケージの正当性を検証するというわけです※8)⁠

※8
同様の操作はapt-keyコマンドを使えば手動で行えます。⁠apt-key list」を使うと,システムに取り込んだ鍵の一覧を取得できますし,必要に応じて個別の削除もできます。

さらにリポジトリのURL(apt line)を,⁠/etc/apt/sources.list.d/」以下に追加します。ファイル名は「ユーザー名-PPA名-リリース.list」です。ここでの「ユーザー名」はPPAを作成した人のLaunchpad上でのユーザーIDになります。

PPAを削除したい場合は,add-apt-repositoryに「--remove」オプションをつけて実行します。リポジトリの状態を変更するので「apt update」も必要です。

$ sudo add-apt-repository --remove ppa:ユーザー名/PPA名
$ sudo apt update

これにより先ほど追加された公開鍵とlistファイルが削除されます。なおインストールされたパッケージはそのままですので,別途ppa-purgeなどのコマンドを使う必要があります。

PPAで導入されるパッケージのバージョンを固定したい場合は,第331回を参考にAptPinの設定を行ってください。

Ubuntu 16.04 LTSの話は?

4月18日に発売されたSoftware Design 2016年5月号の第2特集では「2年ぶりのLTS 安定のUbuntu 16.04の新機能」と題して,Ubuntu Japanese Teamのメンバーが新機能やらフレーバーやらサーバーやらの解説を行っています。SORACOM AirのSIMカードのおまけでUbuntu 16.04 LTSの情報が得られると思っていただけると,お得感があるのではないでしょうか。

ちなみに付録のSIMカード,アクティベーションの期限が5月18日までなので,とりあえず試してみたい場合は早めに書店にGoです。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入