RaspbianにUbuntu用のPPAを追加する

RaspbianでUbuntu用のPersonal Package Archives (PPA) を使う場合の手順を紹介します。

Ubuntu環境なら`add-apt-repository`を使えばリポジトリの追加ができるはずですが、Raspbian環境では下記のようなエラーが出てリポジトリの追加に失敗します。

```
$ sudo add-apt-repository ppa:chromium-team/beta
Traceback (most recent call last):
  File "/usr/bin/add-apt-repository", line 95, in <module>
    sp = SoftwareProperties(options=options)
  File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 109, in __init__
    self.reload_sourceslist()
  File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 599, in reload_sourceslist
    self.distro.get_sources(self.sourceslist)
  File "/usr/lib/python3/dist-packages/aptsources/distro.py", line 89, in get_sources
    (self.id, self.codename))
aptsources.distro.NoDistroTemplateException: Error: could not find a distribution template for Raspbian/stretch
```

Raspbian用のリポジトリではないので怒られているみたいですね。

このような場合でも、 `/etc/apt/sources.list.d/` を直接書き換えればUbuntu用のARMバイナリを `apt install` 一発でインストールできるようになります。

# インストール手順

今回は[Chromium beta](https://launchpad.net/~chromium-team/+archive/ubuntu/beta) をapt管理の対象にしてみましょう。

```
$ sudo apt install dirmngr
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DB69B232436DAC4B50BDC59E4E1B983C5B393194
```

まず公開鍵の登録をします。上記2コマンド目の最後の引数はPPAページの「Technical details about this PPA」を開いて「Signing key:」のスラッシュ以降の値を使います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/46856/fdbb7f46-44b4-da46-012f-bb898abd868e.png)


次にリポジトリのURLを設定します。

```
$ sudo vi /etc/apt/sources.list.d/chromium-beta.list
```

```/etc/apt/sources.list.d/chromium-beta.list
deb http://ppa.launchpad.net/chromium-team/beta/ubuntu xenial main
deb-src http://ppa.launchpad.net/chromium-team/beta/ubuntu xenial main
```

現在最新版のRaspbianはDebian9.4ベースですので、対応するバージョンであるUbuntu 16.04 (Xenial) 用のバイナリを利用する設定にします[^1]。

[^1]: 「[What Debian version are the different Ubuntu versions based on? - Ask Ubuntu](https://askubuntu.com/questions/445487/what-debian-version-are-the-different-ubuntu-versions-based-on)」


これで新しいバージョンのchromium-browserが利用できるはずです。さっそくインストールしてみましょう。

```
$ sudo apt update
ヒット:1 http://archive.raspberrypi.org/debian stretch InRelease
取得:2 http://ppa.launchpad.net/chromium-team/beta/ubuntu xenial InRelease [24.3 kB]
取得:3 http://raspbian.raspberrypi.org/raspbian stretch InRelease [15.0 kB]
取得:4 http://ppa.launchpad.net/chromium-team/beta/ubuntu xenial/main Sources [1,100 B]
取得:5 http://ppa.launchpad.net/chromium-team/beta/ubuntu xenial/main armhf Packages [1,584 B]
取得:6 http://ppa.launchpad.net/chromium-team/beta/ubuntu xenial/main Translation-en [1,072 B]
43.0 kB を 4秒 で取得しました (9,280 B/s)
パッケージリストを読み込んでいます... 完了
```
```
$ sudo apt upgrade chromium-browser
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
以下のパッケージは保留されます:
  sense-emu-tools
以下のパッケージはアップグレードされます:
  ca-certificates chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-extra dpkg dpkg-dev file fuse libavcodec57 libavfilter6 libavformat57 libavresample3 libavutil55 libcups2 libcupsimage2 libdpkg-perl libexiv2-14
  libfaad2 libfuse2 libgs9 libgs9-common libmagic-mgc libmagic1 libpam-systemd libpostproc54 libraspberrypi-bin libraspberrypi-dev libraspberrypi-doc libraspberrypi0 libsoup-gnome2.4-1 libsoup2.4-1 libswresample2 libswscale4
  libsystemd0 libudev1 lxplug-network lxplug-ptbatt patch piclone pipanel python-pantilthat python-sense-emu python-sense-emu-doc python3-pantilthat python3-sense-emu raspberrypi-bootloader raspberrypi-kernel raspberrypi-ui-mods
  rc-gui realvnc-vnc-server rp-prefapps rpi-chromium-mods shared-mime-info systemd systemd-sysv tzdata udev wolfram-engine wolframscript
アップグレード: 59 個、新規インストール: 0 個、削除: 0 個、保留: 1 個。
471 MB のアーカイブを取得する必要があります。
（略）
done.
```

無事インストールできました。

```
$ chromium-browser --version
Chromium 69.0.3497.32 Built on Ubuntu , running on Raspbian 9.4
```

上記の通りバッチリ動作しています。やりましたね。

# 注意点

この方法が使えるかどうかは、Raspberry PiのCPUに依存します。Debian/UbuntuのarmhfパッケージはARMv7アーキテクチャ向けにコンパイルされているので、ARMv6であるRaspberry Pi 1およびZeroでは動きません。Raspberry Pi 2以降なら動作するはずです。（参考資料：[Raspberry Pi \- Wikipedia](https://ja.wikipedia.org/wiki/Raspberry_Pi)）