OSvでLuaインタープリタを動かす
OSvは、ハイパーバイザやIaaSプラットフォームへアプリケーションをデプロイすることに特化した軽量OSです(※詳しくはこちら)。
OSvでは簡易CLIを実装するためにLua言語が使用されています。
この記事では、CLI以外の任意のLuaプログラムをOSv上で実行してみます。
OSvのビルド
OSvのgitリポジトリからソースコードをcloneします。
git clone https://github.com/cloudius-systems/osv.git cd osv git submodule update --init --recursive
OSvに含まれるLuaのビルドスクリプトはliblua.soだけをOSvインスタンスへインストールするようになっており、luaコマンドがインストールされません。
取り敢えずluaコマンドを実行してインタラクティブにLuaプログラムを実行してみたいので、以下のようなパッチを当てます。
diff --git a/modules/lua/Makefile b/modules/lua/Makefile index 64ea417..88ae0e6 100644 --- a/modules/lua/Makefile +++ b/modules/lua/Makefile @@ -33,12 +33,13 @@ MAIN=src/liblua.so # Local executable used for LuaRocks LUA_BIN=$(BDIR)/lua +LUA_BIN_SO=$(BDIR)/lua.so LUA_ROCKS_BIN=$(BDIR)/luarocks # List of Lua modules, each module has its own target LUA_MODULES=LuaSocket LuaJSON Lua_stdlib LuaFileSystem LuaPath LuaSec -module: $(MAIN) $(LUA_MODULES) +module: $(MAIN) $(LUA_MODULES) $(LUA_BIN_SO) $(MAIN): $(SRCS) cd src && $(MAKE) @@ -46,6 +47,10 @@ $(MAIN): $(SRCS) $(LUA_BIN): $(MAIN) | $(BDIR) cp src/lua $(LUA_BIN) +$(LUA_BIN_SO): + cd src && gcc -o lua.so lua.o liblua.a -lm -ldl -shared + cp src/lua.so $(LUA_BIN_SO) + $(LUA_ARCHIVE): | $(DOWNLOAD) cd $(DOWNLOAD) && \ curl --remote-name --remote-time $(LUA_DOWNLOAD) diff --git a/modules/lua/module.py b/modules/lua/module.py index b15ebbc..0d3b6b0 100644 --- a/modules/lua/module.py +++ b/modules/lua/module.py @@ -8,3 +8,5 @@ usr_files.add('${OSV_BASE}/modules/lua/out').to('/usr') \ .exclude('etc/*') \ .exclude('lib/luarocks/**') \ .exclude('share/lua/*/luarocks/**') + +usr_files.add('${OSV_BASE}/modules/lua/out/bin/lua.so').to('/lua.so')
OSvをLua入りでビルドします。
make image=lua