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