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