GStreamer1.0をUbuntu 12.04 で使いたくなったら

この記事はACCESS Advent Calendar 3日目の記事です。

こんにちは ACCESS開発本部IoT開発部の加藤 (@aKenjiKato ) です。

Ubuntu 12.04で公式には提供されていないGStreamer1.0を使いたくなることってありますよね。**ありますよね**。

tarballからビルドするのもありですが、Pluginに対応するパッケージを手動で入れる必要があるので、結構面倒です。

幸い、UbuntuにはPPAという野良レポジトリのホスティングサービスがありまして、
GStreamerを配っているPPAレポジトリを使えば行けます。**途中までは**。

https://launchpad.net/~gstreamer-developers/+archive/ubuntu/ppa

このページを見ると大抵のものは提供されているように見えるのですが、
実は欠けているものがあります。

* `gst-plugins-good1.0`
* 開発向けパッケージ （`-dev`で終わるもの）

前者はパッケージのビルドエラーです。ビルドエラーは以下のページからわかります。

https://launchpad.net/~gstreamer-developers/+archive/ubuntu/ppa/+packages

後者は単にPPAが提供していないためです。これがいらない人もいるでしょう。

まずはパッケージのビルドエラーから参りましょう。

ビルドエラーのログは以下から取得できます。
https://launchpad.net/~gstreamer-developers/+archive/ubuntu/ppa/+build/5341254

見るべきは以下の箇所です。

```
configure: Requested 'libpulse >= 2.0' but version of libpulse is 1.1
configure: *** These plugins will not be built: pulseaudio
```

```
dh_install: gstreamer1.0-pulseaudio missing files (debian/tmp/usr/lib/*/gstreamer-1.0/libgstpulse.so), aborting
make: *** [binary-install/gstreamer1.0-pulseaudio] Error 2
```

どうやら、PulseAudioのバージョンが古いことが原因のようです。

解決するにはPulseAudioのバージョンを最新に上げる必要がありますが、Ubuntu 12.04はPulseAudio 1.1までしか提供していません。

そこでやはりPPAです。PulseAudio2.0を提供するPPAがあります。
https://launchpad.net/~ubuntu-audio-dev/+archive/ubuntu/ppa

これをインストールすればビルドエラーは解消...**できないのです**。
このPPAもまた開発用パッケージを提供していないのです。

これを解決するため、*パッケージの再ビルド*を行います。

パッケージのビルドは、パッケージの元になる`*.dsc`ファイルを入手することで行えます。
`*.dsc`ファイルは、PPAのページから入手できます。

`*.dsc`ファイルが入手出来たら、あとはテンポよくコマンドを叩いていくだけです。

```bash
# 再ビルドに必要なツールをインストール
sudo apt-get -y install devscripts

# PPAの追加
sudo add-apt-repository -y ppa:ubuntu-audio-dev/ppa
sudo apt-get update

# pulseaudioをビルドするために必要なパッケージをインストール
sudo apt-get -y build-dep pulseaudio

# 作業用ディレクトリの確保
mkdir tmp
cd tmp

# dscファイルの取得
dget -u https://launchpad.net/~ubuntu-audio-dev/+archive/ubuntu/ppa/+files/pulseaudio_2.0-0ubuntu1%7Eprecise2.dsc

# dget した時点で pulseaudio-2.0 ができているのでその中へ移動
cd pulseaudio-2.0/

# ビルド
dpkg-buildpackage -r -uc -b
cd ..

# パッケージのインストール
dpkg -i *.deb
```

これでめでたく PulseAudio 2.0 がインストールできました。

次は`gst-plugins-good1.0`そして開発用パッケージですが、両方とも結局パッケージの再ビルドで作成できます。
同じようにやってみましょう。

```bash
# PPAの追加
sudo -E add-apt-repository -y ppa:gstreamer-developers/ppa
sudo apt-get update

# 各パッケージを再ビルドするために必要なパッケージをインストール
sudo apt-get -y build-dep gstreamer1.0
sudo apt-get -y build-dep gst-plugins-base1.0
sudo apt-get -y build-dep gst-plugins-good1.0
sudo apt-get -y build-dep gst-plugins-ugly1.0
sudo apt-get -y build-dep gst-libav1.0

# 作業用ディレクトリの確保
mkdir tmp
cd tmp

# dscファイルの取得
dget -u https://launchpad.net/~gstreamer-developers/+archive/ubuntu/ppa/+files/gstreamer1.0_1.2.1-1%7Eubuntu12.04.1%7Egstdev1.dsc
dget -u https://launchpad.net/~gstreamer-developers/+archive/ubuntu/ppa/+files/gst-plugins-base1.0_1.2.1-2ubuntu1%7Eubuntu12.04.1%7Egstdev1.dsc
dget -u https://launchpad.net/~gstreamer-developers/+archive/ubuntu/ppa/+files/gst-plugins-good1.0_1.2.1-1ubuntu1%7Eubuntu12.04.1%7Egstdev1.dsc
dget -u https://launchpad.net/~gstreamer-developers/+archive/ubuntu/ppa/+files/gst-plugins-ugly1.0_1.2.1-1%7Eubuntu12.04.1%7Egstdev1.dsc
dget -u https://launchpad.net/~gstreamer-developers/+archive/ubuntu/ppa/+files/gst-libav1.0_1.0.8-1%7Eubuntu12.04.1%7Eppa1.dsc 

# 各ディレクトリを回ってパッケージをビルドしていく

cd gstreamer1.0-1.2.1/
dpkg-buildpackage -r -uc -b
cd ..

cd gst-plugins-base1.0-1.2.1/
dpkg-buildpackage -r -uc -b
cd ..

cd gst-plugins-good1.0-1.2.1/
dpkg-buildpackage -r -uc -b
cd ..

cd gst-plugins-ugly1.0-1.2.1/
dpkg-buildpackage -r -uc -b
cd ..

cd gst-libav1.0-1.0.8/
dpkg-buildpackage -r -uc -b
cd ..

# インストール
sudo dpkg -i *.deb
```

これでGStreamer1.0がUbuntu 12.04で使えるようになりました！

明日も @aKenjiKato です。
よろしくお願いいたします。