sequenceDiagram participant Dev as 開発者(ソフトウェア提供者) participant PPA as PPAインフラ(Launchpad) participant User as エンドユーザー participant Ubuntu as Ubuntu公式リポジトリ Dev->>PPA: ソースパッケージのアップロード PPA->>PPA: 自動でバイナリをビルド PPA-->>User: パッケージの提供(apt経由で) Note right of User: 公式と同じUIで<br/>インストール・アップデート可能 Dev-->>Ubuntu: 品質の高いPPAを公式提案 Ubuntu->>Ubuntu: 検証・品質チェック and 公式リポジトリに統合 Ubuntu-->>User: 公式レポジトリーからの提供 Note right of Ubuntu: 開発者が作成したPPAを<br/>ベースに採用できる
Personal Package Archive(PPA)とはなにか?
Definition 1 PPA
- PPAはPersonal Package Archiveの略称でlaunchpad.netに用意された個人用リポジトリ
- PPAを用いることで,開発者は自由にプログラム配布用のレポジトリを作成することができる.
- ユーザーは
sources.list
へ repositoryの情報を加えるだけ(多くの場合add-apt-repository
コマンドを用いる)で,apt
コマンド経由でプログラムが利用可能
つまるところ,PPAs(Personal Package Archives)は,標準的なソフトウェア配布チャンネルに含まれないソフトウェアや更新プログラムのために使用されます. 公式のUbuntuリポジトリでは多くのパッケージが提供されていますが,提供されているバージョンが最新バージョンとは限りません.
- 最新のソフトウェアを使用したい
- 最先端の機能にアクセスしたい
というときに,add-apt-repository
コマンドを用いて PPA
を登録し,packageへアクセスします. PPAを登録すると,apt upgrade
でアップグレードの対象となるため,システム全体で一括してアップグレードをかけることができる便利さがあります.
Ubuntu公式レポジトリポリシー
- Ubuntuの公式リポジトリは,「一度リリースしたら,できる限り同じバージョンのまま不具合修正とセキュリティ対応を行う」という保守方針を取っています
- 基本的には,動作安定性の確保から「one release, one package」という関係になっているので,機能追加された最新版packageは新しいpackageとしてリリースされる必要があります
- 機能追加のたびに新しいpackageを作る必要があるのでUbuntu公式レポジトリでは多くのpackageが少し古いバージョンになっています
PPAの追加
Basic Syntax
sudo add-apt-repository ppa:<ppa-name>
追加されたリポジトリの情報は,/etc/apt/sources.list.d
ディレクトリ以下に.list
ファイルとして格納されます..list
ファイルの内容例としては
deb http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu jammy main
# deb-src http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu jammy main
項目 | 内容 |
---|---|
deb |
バイナリパッケージ(.deb )を取得する行 |
http://ppa.launchpad.net/... |
PPA の URL(Launchpad にホスト) |
jammy |
対象の Ubuntu バージョン |
main |
セクション名(PPAでは基本的に main ) |
# deb-src ... |
ソースコード用(多くの場合コメントアウト) |
Example 1 R setup
R や CRAN パッケージを最新版をdeb packageとして提供するレポジトリとして,c2d4u.team/c2d4u4.0+
があります.追加コマンドは以下
# PPAの追加
% sudo add-apt-repository ppa:c2d4u.team/c2d4u4.0+
# パッケージリスト更新
% sudo apt update
# R本体をインストール
% sudo apt install r-base
また,/etc/apt/sources.list.d
ディレクトリ以下について確認してみると
% ls /etc/apt/sources.list.d | grep "c2d4u"
c2d4u_team-ubuntu-c2d4u4_0_-jammy.list
可能な限りPPA経由のパッケージインストールは避ける
- PPAは公式リポジトリのようなチェックは行われないので,品質や信頼性のリスクは追加したユーザー責任
- PPAと公式の両方にパッケージがある場合,PPAに存在するパッケージのバージョンが公式リポジトリのバージョンより高かったら,アップグレード時にPPA版のバージョンに更新されてしまう
PPAと公式の両方にパッケージがある場合は,どちらも優先度は等しく,どちらが最新バージョンかどうかで利用バージョンが決定されます.PPAが更新された結果,apt update
で意図せずversionが更新されてしまって,依存関係問題から今まで動いていたのにある日突然ソフトが動かなくなったという自体に陥るリスクがあります.
PPA利用にあたってのチェック項目
チェック項目 | 内容 | 推奨される確認方法 |
---|---|---|
PPA作成者の信頼性 | PPAを作成・管理している人物が信頼できるかどうか? | PPA説明ページや Launchpad のプロフィールを見る |
PPAが公式に近いかどうか | CranやLibreOfficeのような公式PPAと、個人が作成したPPAは信頼性が異なる | 公式Webサイトで紹介されているかを確認 |
利用者数 | そのPPAを使用しているユーザーの数と評判 | PPA Stats やLaunchpadコメントなど |
メンテナンス・更新頻度 | PPAが最近も更新されているか(古いと依存関係の不整合で危険) | PPAページの「Last updated」や apt policy で確認 |
対応Ubuntuバージョン | 自分のUbuntuバージョンに対応しているか | PPA内の dists/ ディレクトリ一覧または .list ファイル |
パッケージの品質 | パッケージが正しくビルドされ、他と競合しないか | 導入前に apt install --simulate で動作確認 |
PPAの管理
追加されたPPAの確認
% grep -r ^deb /etc/apt/sources.list.d/ | grep --color ppa
PPA経由で追加されたpackageの確認
# インストール済みのパッケージのうち Origin が ppa のもの
% aptitude search '?narrow(?installed, ~Oppa)'
要素 | 意味 |
---|---|
?narrow(A, B) |
集合 A の中から条件 B を満たすものをさらに絞り込む |
?installed |
現在インストールされているパッケージだけを対象にする |
~O<value> |
パッケージの「由来(Origin)」にマッチする(APTのリポジトリ情報) |
~Oppa |
Origin が ppa を含むパッケージ(PPA由来のもの) |
パッケージの詳細情報取得
apt-cache policy <package-name>
でpakcage 情報の詳細を取得できます. ***
となっているものが現在インストールされているバージョンとなります.
% apt-cache policy r-cran-zip
r-cran-zip:
Installed: 2.3.0-1cran1.2204.0
Candidate: 2.3.0-1cran1.2204.0
Version table:
*** 2.3.0-1cran1.2204.0 500
500 https://ppa.launchpadcontent.net/c2d4u.team/c2d4u4.0+/ubuntu jammy/main amd64 Packages
100 /var/lib/dpkg/status
2.2.0-2 500
500 http://jp.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
PPAの削除
add-apt-repository –remove
## Delete
% sudo add-apt-repository --remove ppa:PPA_Name/ppa
## Check whether the ppa is actually deleted
% ls /etc/apt/sources.list.d
/etc/apt/sources.list.d
からレポジトリ登録情報を格納した.list
ファイルが削除されます/etc/apt/sources.list.d
ディレクトリで直接ファイルを削除するのと実質的に同じ- あくまでレポジトリ登録を削除するだけ = 追加されたpackage自体は残る
ppa-purge
% sudo ppa-purge ppa:ppa-owner/ppa-name
ppa-purge
コマンドはレポジトリ登録の削除と同時に,PPAからインストールしたパッケージを「可能な限り」現在有効なリポジトリにあるパッケージに置き変えてくれるコマンドsudo apt-get install ppa-purge
が事前に必要- あくまで置き換えるコマンドなので削除したい場合は
sudo apt autoremove
コマンドのほうが良いかもしれません