Slide 1

Slide 1 text

How to embed mruby Tomoyuki Sahara ([email protected]) Internet Initiative Japan Inc. $PQZSJHIU $ *OUFSOFU*OJUJBUJWF+BQBO*OD"MMSJHIUTSFTFSWFE

Slide 2

Slide 2 text

Notice 5IFXPSLIBTEPOFJO/PW IBMGPGZFBSBHP 

Slide 3

Slide 3 text

What is mruby? mruby is the lightweight implementation of the Ruby language... https://github.com/mruby/mruby google://mruby/

Slide 4

Slide 4 text

CPU: ARM 32bit Memory: 128MB FlashROM: 32MB OS: NetBSD SA-W1 (www.sacm.jp/#saw1) Router built with mruby

Slide 5

Slide 5 text

Why mruby? interface.ge1.ipv4.address : 192.168.0.1/24 interface.wlan0.service : enable interface.wlan0.ssid : guest interface.wlan0.security : wpa-psk-aes route.ipv4.0.destination : default route.ipv4.0.gateway : 100.100.0.1 dhcp.server.0.interface : wlan0 dhcp.server.0.pool.address : 192.168.0.4/24 dhcp.server.0.pool.count : 100 Configuration parse/validate/evalute/execute mruby!

Slide 6

Slide 6 text

Running mruby CPU ARM 32bit is not uncommon Memory 128MB is large enough FlashROM 32MB is tight OS NetBSD is a kind of Unix ≒ a (poor) PC ≒ a (poor) PC Not difficult to run mruby on it.

Slide 7

Slide 7 text

What we have done: • ػೳ֦ு • ෆ۩߹मਖ਼ • ҆ఆ൛ϦϦʔεͷ࡞੒ • Build a firmware

Slide 8

Slide 8 text

Of cource it runs NetBSD

Slide 9

Slide 9 text

Import Software NetBSD Firmware OpenSSL KAME NTPD Quagga Proprietary Code mruby

Slide 10

Slide 10 text

Getting source code % wget http://www.openssl.org/ source/openssl-1.0.1e.tar.gz

Slide 11

Slide 11 text

Stable version of mruby % wget http://www.mruby.org/ source/mruby-1.0.0.tar.gz EPFTOPUFYJTU

Slide 12

Slide 12 text

What we have done: • ػೳ֦ு • ෆ۩߹मਖ਼ • Make a stable version ←New! • Build a firmware

Slide 13

Slide 13 text

mruby on github

Slide 14

Slide 14 text

iij/mruby

Slide 15

Slide 15 text

3 branches (and others) #SBODI 6TBHF NBTUFS NSVCZNSVCZ JJK NBJOEFWFMPQNFOU T TUBCMFWFSTJPO PUIFST QVMMSFRVFTU FUD

Slide 16

Slide 16 text

NSVCZNSVCZ JJKNSVCZ NBTUFS NBTUFS JJK T EBJMZ BVUPNBUJDNFSHF EBJMZ BVUPNBUJD PSCZIBOE BTOFFEFE SFWJFXFE

Slide 17

Slide 17 text

What we have done: • ػೳ֦ு • ෆ۩߹मਖ਼ • Make a stable version • Build a firmware

Slide 18

Slide 18 text

Import Step 1. work=$HOME/mruby-import % cd $work % git checkout -b s1

Slide 19

Slide 19 text

Import Step 2. % make % make test % ./test/posix/all.sh

Slide 20

Slide 20 text

Import Step 3. usr=$NetBSD/usr.bin/mruby % cp src/y.tab.c mrblib/mrblib.c $usr % vi $usr/Makefile

Slide 21

Slide 21 text

Import Step 4. dist=$NetBSD/dist/mruby % make clean % rm -r $dist/* % cp -r * $dist

Slide 22

Slide 22 text

Import Step 5. % cd $dist; svn add ... % svn ci $dist $usr

Slide 23

Slide 23 text

What we have done: • ػೳ֦ு • ෆ۩߹मਖ਼ • Make a stable version • Build a firmware

Slide 24

Slide 24 text

Bug, Bug, Bug!

Slide 25

Slide 25 text

What we have done: • ػೳ֦ு • Fix bugs ←New! • Make a stable version • Build a firmware

Slide 26

Slide 26 text

To fix bugs • Write debugging tools: • backtrace • “require” to module • disassembler (app/mrbdump) • testing framework (mruby-mtest) • debugger (mruby-mdebug)

Slide 27

Slide 27 text

What we have done: • ػೳ֦ு • Fix bugs • Make a stable version • Build a firmware

Slide 28

Slide 28 text

“mruby is useless because *** class/ method is missing!”

Slide 29

Slide 29 text

What we have done: • Add features ←New! • Fix bugs • Make a stable version • Build a firmware

Slide 30

Slide 30 text

Enhancement • Create modules dependent on Unix • IO, File, Socket, Regexp, Errno, ... • Enhance built-in modules • Array, String, ...

Slide 31

Slide 31 text

iij/mruby-* mruby-io mruby-socket mruby-regexp-pcre mruby-errno mruby-simple-random mruby-env mruby-require mruby-pack mruby-mock mruby-syslog mruby-mtest mruby-tempfile mruby-process mruby-pcap mruby-dir (more...)

Slide 32

Slide 32 text

Ship it! • Add features • Fix bugs • Make a stable version • Build a firmware

Slide 33

Slide 33 text

Future work • Make more use of mruby • Create a new stable branch: s2