たとえばhttpdのようなLinuxのパッケージをカスタマイズしてビルドしたいとき。
RaspbianやUbuntu等、Debian系のディストリビューションは、apt-srcコマンドでソースパッケージのダウンロードやビルドが行えるようです。
apt-cacheやapt-getコマンドと同様に、使用しているOSのバージョンに合った適切なソースファイルを取得、ビルドすることができるため、簡単かつ安全な方法かと思います。
Raspbianにて、apt-srcコマンドを使用する手順を記録したいと思います。
目次
Raspbianのapt-srcによるパッケージビルド手順
基本的に、下記の公式Wiki情報に従うかたちです。
全体的な流れは以下になります
- apt-srcコマンドのインストール・設定変更
- ソースパッケージのダウンロード・ビルド
- ビルドしたパッケージをインストール
apt-srcコマンドのインストールと設定
OSはRaspbianを使用しました。
- 下記のコマンドで、apt-srcをインストールします。ビルドに必要なbuild-essentialも一緒にインストールしましょう。
sudo apt-get install apt-src build-essential
- /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
- アップデートでパッケージのリストを読み込みます。
sudo apt-src update
以上でapt-srcコマンドを使用する準備ができました。
ソースパッケージのダウンロード・ビルド
パッケージは、apt-cacheやdpkgコマンド等で検索できるかと思います。
dpkg -l
- 対象のソースパッケージをダウンロードします。
apt-src install <対象のパッケージ名>
- ビルド設定をカスタマイズします。詳細は後述致します。
- 次のコマンドでビルドします。
apt-src build <ソースパッケージ名>
うまくビルドできましたでしょうか?
パッケージのインストール
ビルドが完了すると、いくつかの.debファイルが作成されていると思います。
- 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ファイルを変更するようです。
「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・・・
さて。どんなパッケージをビルドして遊びましょうか?