SSD/Linux 0.4の/usr/src/contribへ独自アプリケーションを追加する
OpenMicroServerのファームウェアに独自アプリケーションを追加する方法としては、(1)別にビルドしたファイルをramdiskへ追加する方法、(2)フラッシュメモリへ書き込む方法、(3)SSD/Linuxのソースツリーに参加する方法がある。
ここでは(3)の方法でアプリケーションを追加する。この方法はbmake build一発ですべてコンパイルでき、ファームウェアもbmakeで作成できる。
SSD/Linuxのソースツリーにおいて独自アプリケーションを追加する場所としては、/usr/contribがお手軽である。wgetなどのアプリケーションがすでにいくつかあり、参考になる。
/usr/srcの構成
- /usr/src/mkdist -- tarballをdistfilesへ取得して、distへ展開し、patchを適用する。
- /usr/src/dist -- ソースファイルを展開するところ
- /usr/src/dist/distfiles -- tarball置き場
- /usr/src/contrib -- /usr/contrib用のmake場所
- /usr/src/distrib -- ファームウェアが作られる場所
tarball取得の設定
- mkdistをつくる
- distfilesにtarballをfetchして、展開、patchする。
mkdistをつくる
ここでは、PPTPD(PoPToP 1.3.2)を例につくってみる。
/usr/src/mkdist/MakefileのSUBDIRにpptpdディレクトリを追記する。
SUBDIR+= pptpd
/usr/src/mkdist/pptpdディレクトリをつくって、Makefile、patchファイルを追加する。 Makefile:
.include "${.CURDIR}/../../share/mk/bsd.own.mk" .include "${.CURDIR}/../Makefile.inc" DISTNAME= pptpd- DISTVERSION= 1.3.2 MASTER_SITES= http://jaist.dl.sourceforge.net/sourceforge/poptop DEPENDENT= contrib/pptpd LOCAL_PATCHFILES=pptpd-tishi.patch .include "${.CURDIR}/../../share/mk/bsd.mkdist.mk"
pptpd-tishi.patch:
*** pptpd.orig/Makefile.in Wed Aug 3 16:47:42 2005 --- pptpd/Makefile.in Sun Feb 26 13:20:26 2006 *************** *** 209,215 **** pptpd_LDADD = $(XTRALIBS_MGR) pptpctrl_LDADD = $(XTRALIBS_CTRL) bcrelay_SOURCES = bcrelay.c defaults.h our_syslog.h our_getopt.h ! subdirs = plugins all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am --- 209,216 ---- pptpd_LDADD = $(XTRALIBS_MGR) pptpctrl_LDADD = $(XTRALIBS_CTRL) bcrelay_SOURCES = bcrelay.c defaults.h our_syslog.h our_getopt.h ! #subdirs = plugins ! subdirs = all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am
ソースファイルの展開
pptpdのディレクトリでbmakeすれば、tarballを/usr/src/dist/distfilesへ取得して、ソースを/usr/src/dist/pptpdへ展開し、patchも適用してくれる。
cd /usr/src/mkdist/pptpd && bmake
コンパイル(autoconfの場合)
ソースがGNU autoconf形式になっているアプリケーションを/usr/contribへはいるようにbuildする。 PPTPDを例とする。
Makefile作成
/usr/src/contrib/MakefileのSUBDIRにpptpdディレクトリを追記する。
/usr/src/contrib/Makefile:
*** Makefile 1 Aug 2006 09:14:13 -0000 1.19 --- Makefile 11 Aug 2006 15:36:51 -0000 *************** *** 5,14 **** --- 5,16 ---- .ifmake clean SUBDIR= thttpd setup samba netatalk SUBDIR+= debootstrap minicom wget + SUBDIR+= pptpd .else .if ${TARGET_SSDHOSTTYPEX} == "powerpc-obs2xx" || ${TARGET_SSDHOSTTYPEX} == "mipsel-bloq" || ${TARGET_SSDHOSTTYPEX} == "mipsel-obs1550" SUBDIR= thttpd setup + SUBDIR+= pptpd .endif .endif
mkdir -p /usr/src/contrib/pptpd
/usr/src/contrib/pptpd/Makefile:
.include DISTNAME= pptpd #GNU_PREFIX= /usr/contrib/${DISTNAME} GNU_PREFIX= /usr/contrib CONFIGURE_ENV= CONFIGURE_OPTIONS=--with-bcrelay GMAKE_ENV= GMAKE_INSTALL_OPTIONS= DESTDIR=$(DESTDIR) INSTALL_STRIP= yes BINDIR= ${GNU_PREFIX}/sbin GNU_STRIP= ${BINDIR}/pptpd ${BINDIR}/pptpctrl .include
コンパイル
/usr/src/contrib/pptpdディレクトリでbmake buildすればよい。 ここでは例としてOpenMicroServer用に、クロスビルドする。
cd /usr/src/contrib/pptpd bmake CROSS_BUILD=mipsel OPENBLOCKS=obs1550 DESTDIR=/home/dest/obs1550 RELEASEDIR=/home/release/obs1550
コンパイル(独自Makefileの場合)
DHISクライアントdhidを追加する。
Makefile作成
/usr/src/contrib/MakefileのSUBDIRにdhidディレクトリを追記する。
mkdir -p /usr/src/contrib/dhid
dhidのMakefileを参考につくる。↓こんなかんじ。dhidはlibgmpを使うので、include path, library pathに追加する。 /usr/src/contrib/dhid/Makefile
.include <bsd.own.mk> DISTNAME= dhid DIST= ${.CURDIR}/../../dist/${DISTNAME} .PATH: ${DIST} TARGET= dhid genkeys SRCS= genkeys.c main.c network.c conf.c CPPFLAGS= -DQRC=1 -Wall -I${.CURDIR}/../../lib/gmp/build LDFLAGS+= -s -L${.CURDIR}/../../lib/gmp/build/.libs NOGCCERROR= yes #DESTDIR = /usr/contrib/sbin BINDIR?=$(DESTDIR)/usr/contrib/sbin STRIP?= strip MKMAN = no all: $(TARGET) dhid: main.o network.o conf.o $(CC) $(CPPFLAGS) $(LDFLAGS) -o dhid conf.o network.o main.o -lgmp genkeys: genkeys.o $(CC) $(CPPFLAGS) $(LDFLAGS) -o genkeys genkeys.o -lgmp clean: rm -f main.o network.o conf.o genkeys.o install: $(TARGET) $(STRIP) $(TARGET) ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} ${STRIPFLAG} ${INSTPRIV} \ -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} dhid $(BINDIR)/dhid ${INSTALL} ${RENAME} ${PRESERVE} ${COPY} ${STRIPFLAG} ${INSTPRIV} \ -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} genkeys $(BINDIR)/genkeys .include <bsd.prog.mk>
コンパイル
autoconfとおなじ。