OSvもくもく会#2 〜OSvで遊んでみよう〜でやったことのまとめを。
今回まずやろうと思っていたことは「mrubyを動かす」で、これはsyuu1228さんの最初の説明でmake時にimage=でappsの名前を指定すれば良いと聞いたのでその通りに実行。
make image=mruby
これでイメージが作れたので実行するとこんな感じで無事に起動。
[masami@fedora osv]$ ./scripts/run.py OSv v0.09-271-g4079bf0 eth0: 192.168.122.15 mruby-eshell
次になにかアプリを組み込んでみようと思って、とりあえず手軽そうなところでエディタのedを組み込んでみた。 まずは既存のものを参考にということで、mrubyとiperfを参考に必要そうなものを揃える。 osv/appsにあるREADME.mdだとGETというコマンドでビルドしているので同じようにスクリプトを書いたのがこちら。 まずはGET。
#!/bin/sh edver="ed-1.10" if [ -d upstream ]; then rm -fr upstream fi if [ -f ./ed ]; then rm -f ed fi mkdir upstream cd upstream curl -O http://ftp.gnu.org/gnu/ed/$edver.tar.lz tar xvf $edver.tar.lz cd $edver patch -p1 < ../../so.patch ./configure make cp ed ../../.
やってることはソースをダウンロードしてきて展開、./configure、makeをしてできたバイナリをapps/ed/の直下に置くだけ。あ、so.patchでパッチを当てているのはiperfがlink時に-sharedをつけていたのでそれを真似する形で作成しました。
--- ed-1.10.orig/Makefile.in 2014-01-17 04:07:06.000000000 +0900 +++ ed-1.10.new/Makefile.in 2014-06-29 17:24:17.487382554 +0900 @@ -17,20 +17,20 @@ all : $(progname) r$(progname) $(progname) : $(objs) - $(CC) $(LDFLAGS) -o $@ $(objs) + $(CC) $(LDFLAGS) -shared -o $@ $(objs) $(progname)_profiled : $(objs) - $(CC) $(LDFLAGS) -pg -o $@ $(objs) + $(CC) $(LDFLAGS) -shared -pg -o $@ $(objs) r$(progname) : r$(progname).in cat $(VPATH)/r$(progname).in > $@ chmod a+x $@ main.o : main.c - $(CC) $(CPPFLAGS) $(CFLAGS) -DPROGVERSION=\"$(pkgversion)\" -c -o $@ $< + $(CC) $(CPPFLAGS) -fPIC -g $(CFLAGS) -DPROGVERSION=\"$(pkgversion)\" -c -o $@ $< %.o : %.c - $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $< + $(CC) $(CPPFLAGS) $(CFLAGS) -c -fPIC -g -o $@ $< $(objs) : Makefile ed.h carg_parser.o : carg_parser.h
module.pyは特にこれといったことはなし。
from osv.modules import api default = api.run("/tools/ed")
usr.manifestも特になし
/tools/ed: ${MODULE_DIR}/ed
あとはosv/apps/modules.jsonに以下を追記。
"ed": { "type": "direct-dir", "path": "${OSV_BASE}/apps/ed/" }
これでmake image=edとしてビルドして実行すると以下のような感じに。
[masami@fedora osv]$ ./scripts/run.py OSv v0.09-271-g4079bf0 eth0: 192.168.122.15 a Hello world from OSv. It's fine today. . 1,$l Hello world from OSv.$ It's fine today.$
一応Capstanfileも作ってみた。
base: osv-base cmdline: /tools/ed build: make files: /tools/ed: ed