小型Linuxサーバの最高峰 OpenBlockS 600活用指南

第6回オリジナルファームウェアの作成(Part2)

はじめに

連載最後となる今回は、前回に引き続きオリジナルファームウェアの開発方法を紹介します。前回は開発の手始めとして、基本的な構築方法を紹介しましたが、今回は実際にファームウェアにカスタマイズを加える方法を紹介します。

実践例の注意

本連載の実践例では、SSD/Linuxのソースツリーへのソフトウェアの追加、追加したソフトウェアのファームウェアへの組み込み、初期設定ファイルの変更、カーネルコンフィグレーションの変更を行っていきます。なお本文および図表に現れるファイルパスのうち、相対パスのものは「/usr/src/」以下のファイルを指しています。

ファームウェア作成定義の用意

カスタムのサンプルとして「distrib/powerpcobs600/custom0/」に例を用意しました。仮に、これを試してみる場合は、手を加えてもかまいませんし、custom1のようにコピーを作成しても良いでしょう。

SSD/Linuxへのソフトウェアの追加

公開しているSSD/Linuxのソースツリーには、Linuxディストリビューションを構成する基本的なソフトウェアだけが登録された状態になっています。オリジナルファームウェアを作成してメンテナンスをし続ける場合は、ここに必要なソフトウェアを追加していくと、その後のメンテナンスが楽になります。

今回は、高速なHTTPサーバソフトウェアとして知られる「lighttpd」を例に挙げます。ソフトウェアの追加を行うには、ソースコードの取得/展開の設定を行う「mkdist/」への登録(リスト1)と、ソフトウェアのコンパイルを行う「contrib/」などへの登録(リスト2)が必要になります。

リスト1 mkdistへの登録(mkdist/lighttpd/Makefile)
include "${.CURDIR}/../../share/mk/bsd.own.mk"
.include "${.CURDIR}/../Makefile.inc"
DISTNAME= lighttpd-
DISTVERSION= 1.4.23
DISTRELEASE= 0
EXTRACT_SUFX= tar.bz2
MASTER_SITES= http://www.lighttpd.net/download/
DEPENDENT= usr.sbin/lighttpd
.include "${.CURDIR}/../../share/mk/bsd.mkdist.mk"
リスト2 contribへの追加(contrib/lighttpd/Makefile)
.include 
DISTNAME= lighttpd
DIST= ${.CURDIR}/../../dist/lighttpd
.PATH: ${DIST}
CPPFLAGS+= -I${.CURDIR}/../../dist/zlib
CPPFLAGS+= -I${.CURDIR}/../../dist/bzip2
LDFLAGS+= -L${.CURDIR}/../../lib/libz
LDFLAGS+= -L${.CURDIR}/../../lib/libbz2
HAVE_DESTDIR= 1
CONFIGURE_ENV= CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" LIBS="${LIBS}"
CONFIGURE_FULL_PREFIX= 1
CONFIGURE_OPTIONS+= --program-transform-name='‘
CONFIGURE_OPTIONS+= --without-pcre
GNU_TARGET= ${TARGET_MACHTYPE}
GNU_HOST= ${TARGET_MACHTYPE}
GNU_BUILD= ${MACHTYPE}
.include 

追加ソフトウェアのファームウェアへの組込

ソースツリーに追加したソフトウェアを、ファームウェアへ組み込むには、先に用意したファームウェア作成定義の中で、追加したいソフトウェアのための設定が必要です。通常ファームウェアに組み入れるファイルは、コマンドもライブラリも1つずつ必要なファイルのリストを作成して利用していますが(リスト3⁠⁠、今回の例ではもう少し手軽な手法を取っています(リスト4⁠⁠。

ここで作成したリストを、ファームウェア作成に使用するための設定(リスト5)も必要になります。

リスト3 ファイル列挙の例(distrib/powerpc-obs600/standard/initrd/list_in/common)
BCOPY @SRCTOPDIR@/bin/bash/src/bash bin/bash
BCOPY @SRCTOPDIR@/bin/cat/cat bin/cat
BCOPY @SRCTOPDIR@/bin/chmod/chmod bin/chmod
リスト4 lighttpdの登録例(distrib/powerpc-obs600/custom0/initrd/lighttpd)
# コンパイルした物を、RAMディスクイメージに直接インストール
SPECIAL cd @SRCTOPDIR@/contrib/lighttpd; bmake install DESTDIR=@MOUNT_POINT@
リスト5 ファームウェア作成の設定(distrib/powerpc-obs600/custom0/initrd)
.include 
.include "../Makefile.inc"
.include "${.CURDIR}/../../standard/initrd/Makefile.inc"
# include した standard の内容に lighttpd を追加
LIST_S+= lighttpd

初期設定ファイルの変更

ファームウェアにもともと含まれている/etc/rc.confなどの設定ファイルを変更したい場合、ソースツリーに登録されている標準のファイルとは別に、カスタムファームウェアの作成定義のディレクトリ以下に、変更後のファイルを用意します(図1⁠⁠。

ここに用意した変更後のファイルは、ファイル抽出時に自動的に標準のファイルと置き換わります。

図1 初期設定ファイルの変更(適宜、初期値を変更)
# cd distrib/powerpc-obs600/custom0/initrd
# cp etc/common/rc.conf etc/
# vi etc/rc.conf

カーネルコンフィグレーションの変更

カーネルコンフィグレーションの変更は、Linuxカーネルに含まれるテキストベースのmenuconfigを使用して行います。通常SSD/Linuxの標準設定が使われるため、オリジナルファームウェア向けにコンフィグファイルを指定する必要があります(リスト6⁠⁠。コンフィグファイル指定後は図2のように実行し、カーネルのコンフィグレーションを行います。

リスト6 カーネルコンフィグファイルの指定(/etc/mk.conf)
# mkdist/kernel/2.6.29/dot.config.powerpc-obs600.ipv6
KERNEL_CONFIG?= /root/my_kernel_config
図2 カーネルのコンフィグレーション
# cd /usr/src
# bmake menuconfig BACKUP_CONFIG=yes
(cd linux/include/; rm -f asm; ln -s linux/arch/powerpc/include/asm)
cp /root/my_kernel_config linux/.config
cd linux && make ARCH=powerpc INSTALL_MOD_PATH=/home/dest-powerpc CROSS_COMPILE=powerpc-ssdlinux-
gnu- menuconfig
……(省略)……

変更個所を加えたファームウェアの構築

前回では、OS全体の構築を行っていますので、同様の環境であることを前提に本稿の話を進めます。今回は変更を加えた追加ソフトウェアとカーネル部分だけコンパイルを行い、ファームウェアを再構築しています(図3⁠⁠。

以上の手順でオリジナルファームウェアの作成は完了です。細かな解説は省いていますが、作業の全体像をつかめたのではないかと思います。ぷらっとホームから提供する公式ファームウェアを利用した場合でも、十分に汎用的なサーバとして利用できますが、今回紹介したようなオリジナルファームウェアを作成することで、より活用の幅が広がってきます。ぜひ試してみてください。

図3 変更個所のコンパイル
# cd mkdist/lighttpd
# bmake
……(省略)……
# cd contrib/lighttpd
# bmake
……(省略)……
# cd /usr/src
# bmake build_kernel -DNOCLEAN
……(省略)……
# cd distrib/powerpc-obs600/custom0
# bmake clean && bmake
……(省略)……

あとがき

これまで6回にわたり、⁠OpenBlockS 600活用指南」と題して連載をさせていただきましたが、今回で終了となります。 6回にわたる連載となりましたが、本稿を読み返しながらOpenBlockS 600を存分に活用ください!

おすすめ記事

記事・ニュース一覧