Ubuntu 12.04のlibavパッケージからGPLを取り除く

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

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

libavパッケージにGPLが入っていると困るって時ありますよね。 **ありますよね**。

そんなときのためにGPLを抜いたパッケージの作り方をご紹介します。
とはいっても、ちょっといじってパッケージを再ビルドするだけですが。

---

まずは、パッケージビルドのツールをインストールします。

```
sudo apt-get -y install devscripts
```

次に、パッケージビルド時に必要なパッケージをインストールします。

```
sudo apt-get build-dep libav
```

パッケージビルドに必要なファイルをダウンロードする
ディレクトリが激しく汚れるので、作業用ディレクトリを確保しておく。

```bash
mkdir tmp
cd tmp
dget -u http://archive.ubuntu.com/ubuntu/pool/main/liba/libav/libav_0.8.17-0ubuntu0.12.04.1.dsc
```

libav-0.8.17ディレクトリにソースコードが展開されるので、その中をいじって、GPLライセンスのものをビルドしないようにします。

```diff
--- libav-0.8.17/debian/confflags.orig    2012-01-21 17:32:52.000000000 +0900
+++ libav-0.8.17/debian/confflags    2015-11-15 16:57:27.146918149 +0900
@@ -138,11 +138,11 @@
 v3_confflags += $(call cond_enable_v3,/usr/include/opencore-amrwb/dec_if.h,libopencore-amrwb)

 # AAC is considered non-free upstream
-confflags += $(call cond_enable_nf,/usr/include/faac.h,libfaac)
+# confflags += $(call cond_enable_nf,/usr/include/faac.h,libfaac)

 # comment out following line for LGPL versions of the libraries
-confflags += $(gpl_confflags)
-confflags += $(v3_confflags)
+# confflags += $(gpl_confflags)
+# confflags += $(v3_confflags)

 # Enable IEEE 1394 (FireWire) support on Linux only
 ifneq (,$(findstring linux,$(DEB_HOST_GNU_TYPE)))
```

```diff
--- libav-0.8.17/debian/control.orig    2012-06-12 23:17:57.000000000 +0900
+++ libav-0.8.17/debian/control    2015-11-15 17:15:33.896807632 +0900
@@ -112,7 +112,7 @@
  libavdevice53 (= ${binary:Version}),
  libavformat53 (= ${binary:Version}),
  libavutil51 (= ${binary:Version}),
- libpostproc52 (= ${binary:Version}),
+# libpostproc52 (= ${binary:Version}),
  libswscale2 (= ${binary:Version}),
  ${misc:Depends}
 Description: Debug symbols for Libav related packages
@@ -245,18 +245,18 @@
  .
  This is the video filtering library from Libav.

-Package: libpostproc52
-Architecture: any
-Multi-Arch: same
-Pre-Depends: ${misc:Pre-Depends}
-Depends:
- ${misc:Depends},
- ${shlibs:Depends}
-Description: Libav video postprocessing library
- Libav is a complete, cross-platform solution to decode, encode, record,
- convert and stream audio and video.
- .
- This is the video postprocessing library from Libav.
+# Package: libpostproc52
+# Architecture: any
+# Multi-Arch: same
+# Pre-Depends: ${misc:Pre-Depends}
+# Depends:
+#  ${misc:Depends},
+#  ${shlibs:Depends}
+# Description: Libav video postprocessing library
+#  Libav is a complete, cross-platform solution to decode, encode, record,
+#  convert and stream audio and video.
+#  .
+#  This is the video postprocessing library from Libav.

 Package: libswscale2
 Architecture: any
@@ -370,22 +370,22 @@
  This package contains the header files and static libraries needed to
  compile applications or shared objects that use libavfilter.

-Package: libpostproc-dev
-Section: libdevel
-Architecture: any
-Depends:
- libavutil-dev (= ${binary:Version}),
- libpostproc52 (<= ${source:Upstream-Version}-99) | libpostproc-extra-52 (<= ${source:Upstream-Version}.99),
- libpostproc52 (>= ${binary:Version}) | libpostproc-extra-52 (>= ${source:Upstream-Version}),
- ${misc:Depends}
-Description: Development files for libpostproc
- Libav is a complete, cross-platform solution to decode, encode, record,
- convert and stream audio and video.
- .
- This is the video postprocessing library from Libav.
- .
- This package contains the header files and static libraries needed to
- compile applications or shared objects that use libpostproc.
+# Package: libpostproc-dev
+# Section: libdevel
+# Architecture: any
+# Depends:
+#  libavutil-dev (= ${binary:Version}),
+#  libpostproc52 (<= ${source:Upstream-Version}-99) | libpostproc-extra-52 (<= ${source:Upstream-Version}.99),
+#  libpostproc52 (>= ${binary:Version}) | libpostproc-extra-52 (>= ${source:Upstream-Version}),
+#  ${misc:Depends}
+# Description: Development files for libpostproc
+#  Libav is a complete, cross-platform solution to decode, encode, record,
+#  convert and stream audio and video.
+#  .
+#  This is the video postprocessing library from Libav.
+#  .
+#  This package contains the header files and static libraries needed to
+#  compile applications or shared objects that use libpostproc.

 Package: libswscale-dev
 Section: libdevel
```

パッケージをビルドします。

```
# libav-0.8.17 以下にて
dpkg-buildpackage -r -uc -b
```

ビルド中に実行されるconfigureのログでLGPLのライブラリになった旨が表示されるはずです。

ビルドが終わると、tmp以下にLGPLになったdebファイルが出来上がります。
おつかれさまでした。

---

明日は @ikeyasu さんです。
明日もよろしくお願いいたします。