Raspberry piにてapt-srcでパッケージをビルドするには

たとえばhttpdのようなLinuxのパッケージをカスタマイズしてビルドしたいとき。

RaspbianやUbuntu等、Debian系のディストリビューションは、apt-srcコマンドでソースパッケージのダウンロードやビルドが行えるようです。

apt-cacheやapt-getコマンドと同様に、使用しているOSのバージョンに合った適切なソースファイルを取得、ビルドすることができるため、簡単かつ安全な方法かと思います。

Raspbianにて、apt-srcコマンドを使用する手順を記録したいと思います。


Raspbianのapt-srcによるパッケージビルド手順

基本的に、下記の公式Wiki情報に従うかたちです。

全体的な流れは以下になります

  1. apt-srcコマンドのインストール・設定変更
  2. ソースパッケージのダウンロード・ビルド
  3. ビルドしたパッケージをインストール

apt-srcコマンドのインストールと設定

OSはRaspbianを使用しました。

  1. 下記のコマンドで、apt-srcをインストールします。ビルドに必要なbuild-essentialも一緒にインストールしましょう。
    sudo apt-get install apt-src build-essential

  2. /etc/apt/sources.lstファイルを編集します。
    sudo vi /etc/apt/sources.list

    3行目のコメントを外して、deb-src行を有効にしました。

    deb-src http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi

  3. アップデートでパッケージのリストを読み込みます。

    sudo apt-src update

以上でapt-srcコマンドを使用する準備ができました。


ソースパッケージのダウンロード・ビルド

パッケージは、apt-cacheやdpkgコマンド等で検索できるかと思います。

dpkg -l

ここではサンプルとしてntpをビルドしてみたいと思います。

  1. 対象のソースパッケージをダウンロードします。
    apt-src install <対象のパッケージ名>

  2. ビルド設定をカスタマイズします。詳細は後述致します。
  3. 次のコマンドでビルドします。
    apt-src build <ソースパッケージ名>

うまくビルドできましたでしょうか?


パッケージのインストール

ビルドが完了すると、いくつかの.debファイルが作成されていると思います。

  1. dpkgコマンドでパッケージをインストールします。
    sudo dpkg --install *.deb

これでソースファイルからビルドしたパッケージをインストール、使用できるようになりました・・・と思ったら、どこにコピーされたのでしょう?

ls -al `which ntpd`
#ファイルの日付が新しいかどうか確認
sudo mv /usr/sbin/ntpd /usr/sbin/ntpd.default
sudo cp ntp-4.2.8p10+dfsg/ntpd/ntpd /usr/sbin/

ビルドしたバイナリを手動でコピーしましたが、もう少し工夫が必要かもしれません。orz


ビルド設定のカスタマイズ

たとえばビルドする際のconfigureオプションを変更したい場合。

基本的に、debianフォルダの中のrulesファイルを変更するようです。

こちらのDebian公式情報を参照致しますと

「override_dh_auto_configure:」と「dh_auto_configure」を使って、ファイルの最後にオプションの差分を追記または更新(sedコマンド利用)できるようです。

vi <ソースパッケージのディレクトリ>/debian/rules

サンプルとして、ntpの–enable-ATOMオプションを有効にするため、下記の行を追加してみました。

override_dh_auto_configure:
        dh_auto_configure -- --enable-ATOM

dh_auto_configureのインデントはタブを使う必要があります。スペースではビルドエラーになりました。ビルドしたところ・・・override_dh_auto_configure:が反映されていないようです。あれれ?

overrideの代わりに、直接./configure行を書き換えたところ、変更が反映されたようです。既存行の間にオプションを入れる場合、行末の「\」を忘れずに付けましょう。(忘れがち


おそらく、apt-srcが使用できる環境でしたら、ディストリビューションやバージョンに関係なく、上記のビルド方法は使えるかと思います。

Debian、Ubuntu、Raspbian、Armbian、DietPi・・・

さて。どんなパッケージをビルドして遊びましょうか?

スポンサーリンク