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とおなじ。