[メモ] ARM向けdebパッケージをx86_64マシンでビルド

## 概要
- [`pbuilder`](https://www.debian.org/doc/manuals/maint-guide/build.ja.html#pbuilder)を使って、ARM向けDebianパッケージをビルド.
- 元記事:[Building ARM Debian packages with pbuilder](https://jodal.no/2015/03/08/building-arm-debs-with-pbuilder/)
- くわしい仕組みは、追々... 、、ということで.

## 環境
- Linux : `debian-8.5.0-amd64-i386-netinst.iso` から、64bit版をインストール 
- Ubuntuだと、Ubuntu向けパッケージができる。

## 手順

1. `sudo vi /root/.pbuilderrc`<br>`.pbuilderrc` ファイル作成

    ```bash:/root/.pbuilderrc
	#!/bin/sh

	set -e

	if [ "$OS" == "debian" ]; then
		MIRRORSITE="http://ftp.no.debian.org/debian/"
		COMPONENTS="main contrib non-free"
		DEBOOTSTRAPOPTS=("${DEBOOTSTRAPOPTS[@]}"
			"--keyring=/usr/share/keyrings/debian-archive-keyring.gpg")
		: ${DIST:="wheezy"}
		: ${ARCH:="amd64"}
		if [ "$DIST" == "wheezy" ]; then
			#EXTRAPACKAGES="$EXTRAPACKAGES debian-backports-keyring"
			OTHERMIRROR="$OTHERMIRROR | deb $MIRRORSITE wheezy-backports $COMPONENTS"
		fi
	elif [ "$OS" == "raspbian" ]; then
		MIRRORSITE="http://ftp.acc.umu.se/mirror/raspbian/raspbian/"
		COMPONENTS="main contrib non-free"
		DEBOOTSTRAPOPTS=("${DEBOOTSTRAPOPTS[@]}"
			"--keyring=/usr/share/keyrings/raspbian-archive-keyring.gpg")
		: ${DIST:="wheezy"}
		: ${ARCH:="armhf"}
	elif [ "$OS" == "ubuntu" ]; then
		MIRRORSITE="http://no.archive.ubuntu.com/ubuntu/"
		COMPONENTS="main restricted universe multiverse"
		DEBOOTSTRAPOPTS=("${DEBOOTSTRAPOPTS[@]}"
			"--keyring=/usr/share/keyrings/ubuntu-archive-keyring.gpg")
	else
		echo "Unknown OS: $OS"
		exit 1
	fi

	if [ "$DIST" == "" ]; then
		echo "DIST is not set"
		exit 1
	fi

	if [ "$ARCH" == "" ]; then
		echo "ARCH is not set"
		exit 1
	fi

	NAME="$OS-$DIST-$ARCH"

	if [ "$ARCH" == "armel" ] && [ "$(dpkg --print-architecture)" != "armel" ]; then
		DEBOOTSTRAP="qemu-debootstrap"
	fi
	if [ "$ARCH" == "armhf" ] && [ "$(dpkg --print-architecture)" != "armhf" ]; then
		DEBOOTSTRAP="qemu-debootstrap"
	fi

	DEBOOTSTRAPOPTS=("${DEBOOTSTRAPOPTS[@]}" "--arch=$ARCH")
	BASETGZ="/var/cache/pbuilder/$NAME-base.tgz"
	DISTRIBUTION="$DIST"
	BUILDRESULT="/var/cache/pbuilder/$NAME/result/"
	APTCACHE="/var/cache/pbuilder/$NAME/aptcache/"
	BUILDPLACE="/var/cache/pbuilder/build"
	HOOKDIR="/var/cache/pbuilder/hook.d/"
```

    `.pbuilderrc`ファイルは３つの環境変数の面倒を見てくれるよ。
    - `OS`: debian, raspbian, ubuntuのどれか
    - `DIST`: 例: wheezy, jessie, trusty
    - `ARCH`: 例: amd64, i386, armel, armhf


2. pbuilder環境の準備

    ```bash:環境の準備
#  install pbuilder and qemu-debootstrap:
sudo apt install pbuilder qemu-user-static
#
# Ubuntu and Debian keyrings
sudo apt install ubuntu-keyring 
sudo apt install debian-archive-keyring
#
# Raspbian keyring
wget http://archive.raspbian.org/raspbian/pool/main/r/raspbian-archive-keyring/raspbian-archive-keyring_20120528.2_all.deb
sudo dpkg -i raspbian-archive-keyring_20120528.2_all.deb
#
# chroot .. Raspbian-Jessie だけでいいよね..
time sudo OS=raspbian DIST=jessie ARCH=armhf pbuilder --create
#real    12m17.598s
#user    2m1.832s
#sys     0m9.284s
#
# その他の例
#sudo OS=debian DIST=wheezy ARCH=amd64 pbuilder --create
#sudo OS=debian DIST=wheezy ARCH=i386 pbuilder --create
#sudo OS=debian DIST=wheezy ARCH=armel pbuilder --create
#sudo OS=raspbian DIST=wheezy ARCH=armhf pbuilder --create
#sudo OS=debian DIST=wheezy ARCH=armhf pbuilder --create
#
# ここにつくられました?.
ls -l /var/cache/pbuilder/raspbian-jessie-armhf-base.tgz
# -rw-r--r-- 1 root root 124023585 Aug 16 12:34 /var/cache/pbuilder/raspbian-jessie-armhf-base.tgz
```

3. raspbian-jessie-armhfのdebパッケージビルド
    1. ソース取得:<br>`apt-get source パッケージ名`
    2. ソースが展開されたフォルダの中に入って<br>`cd パッケージ名-ほにゃらら`
    3. ビルド:<br>`OS=raspbian DIST=jessie ARCH=armhf pdebuild`
    4. 成果物:<br>`ls -l /var/cache/pbuilder/raspbian-jessie-armhf/result/*.deb`


    ```bash:実行例
cd ~
mkdir deb
cd deb
apt-get source i2c-tools
cd i2c-tools-3.1.1/
OS=raspbian DIST=jessie ARCH=armhf pdebuild 
```

## その他
- 依存してるライブラリとかあると、そのへんうまくやってくれてるっぽい?
- うまくやってくれないのも、ある。
- ビルドのたびに、`raspbian-jessie-armhf-base.tgz`が`/var/cache/pbuilder/build/<数字>`へ展開されるので、毎回、きれいな環境で、ビルドされる
- `qemu-arm-static` が がんばってる