概要
-
pbuilder
を使って、ARM向けDebianパッケージをビルド. - 元記事:Building ARM Debian packages with pbuilder
- くわしい仕組みは、追々... 、、ということで.
環境
- Linux :
debian-8.5.0-amd64-i386-netinst.iso
から、64bit版をインストール - Ubuntuだと、Ubuntu向けパッケージができる。
手順
-
sudo vi /root/.pbuilderrc
.pbuilderrc
ファイル作成/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`ファイルは3つの環境変数の面倒を見てくれるよ。
- `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
-
raspbian-jessie-armhfのdebパッケージビルド
- ソース取得:
apt-get source パッケージ名
- ソースが展開されたフォルダの中に入って
cd パッケージ名-ほにゃらら
- ビルド:
OS=raspbian DIST=jessie ARCH=armhf pdebuild
- 成果物:
ls -l /var/cache/pbuilder/raspbian-jessie-armhf/result/*.deb
実行例 - ソース取得:
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` が がんばってる