読者です 読者をやめる 読者になる 読者になる

OSvもくもく会#2 参加記録めも

osv

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