|
@@ -1,7 +1,7 @@
|
|
|
MAD
|
|
|
===
|
|
|
|
|
|
-A simple rebar-compatible dependency manager.
|
|
|
+A simple rebar-compatible dependency manager and developer tool with plugins.
|
|
|
|
|
|

|
|
|
|
|
@@ -13,26 +13,123 @@ It shall:
|
|
|
* be compatible with rebar configuration.
|
|
|
* be as small and fast as possible.
|
|
|
|
|
|
+Features
|
|
|
+--------
|
|
|
+
|
|
|
+* Colorful REPL
|
|
|
+* Support rebar.config
|
|
|
+* Support OTP releases and directory structure
|
|
|
+* Fast deps resolving and cycles detecting
|
|
|
+* Fast compilation
|
|
|
+* DTL/YECC/LEEX/PORT/SCRIPT/APP/ERL compilation
|
|
|
+* BEAM bundles (single-file escriptized app)
|
|
|
+* LING bundles (single-file with built-in LING)
|
|
|
+* RELX release (relx dependency should be discarded)
|
|
|
+* Start/Stop/Attach
|
|
|
+* Static files generation with node.js tools
|
|
|
+* 9p server for remote access
|
|
|
+
|
|
|
Build
|
|
|
-----
|
|
|
|
|
|
+```sh
|
|
|
$ make
|
|
|
+```
|
|
|
|
|
|
-And put 'mad' to PATH.
|
|
|
+And put `mad` to PATH.
|
|
|
|
|
|
-Unikernel Bundle
|
|
|
-----------------
|
|
|
+BEAM Lightweight Unikernel Bundle
|
|
|
+---------------------------------
|
|
|
|
|
|
Bundle is a gzipped archive of erlang beams of all dependecies
|
|
|
along with directory structure of OTP-applications with priv directories.
|
|
|
This allows you to pack all site inside single portable escript package able
|
|
|
to run under Windows, Linux and Mac. Releases includes all current
|
|
|
-directory exept sources both code and data with all dependencies.
|
|
|
+directory exept sources both code and data with all dependencies. You may think of BEAM
|
|
|
+Lightweight Unikernel Bundle as of fixed Erlang releases.
|
|
|
|
|
|
+```sh
|
|
|
$ mad app "sample"
|
|
|
$ cd sample
|
|
|
$ mad deps compile plan bundle "web_app"
|
|
|
$ ./web_app
|
|
|
+```
|
|
|
+
|
|
|
+LING Unikernel
|
|
|
+--------------
|
|
|
+
|
|
|
+Sample rebar.config for your application you want to go unikernel:
|
|
|
+
|
|
|
+```erlang
|
|
|
+{deps_dir,"deps"}.
|
|
|
+{deps, [{ling, ".*", {git, "git://github.com/proger/ling", {tag, "osx-again"}}},
|
|
|
+ {sh, ".*", {git, "git://github.com/synrc/sh", {tag, "1.4"}}}]}.
|
|
|
+```
|
|
|
+
|
|
|
+Now you should build LING/posix:
|
|
|
+
|
|
|
+```sh
|
|
|
+ $ ./mad dep
|
|
|
+ $ cd deps/ling
|
|
|
+ $ ARCH=posix_x86 make
|
|
|
+```
|
|
|
+
|
|
|
+Now pack vmling.o, your OTP apps and rest static to single-file LING bundle with VM inside.
|
|
|
+
|
|
|
+```sh
|
|
|
+ $ ./mad lin
|
|
|
+Ling Params: []
|
|
|
+ARCH: posix_x86
|
|
|
+Bundle Name: mad
|
|
|
+System: [compiler,syntax_tools,sasl,tools,mnesia,reltool,xmerl,crypto,kernel,
|
|
|
+ stdlib,wx,webtool,ssl,runtime_tools,public_key,observer,inets,asn1,
|
|
|
+ et,eunit,hipe,os_mon]
|
|
|
+Apps: [kernel,stdlib,sh,mad]
|
|
|
+Overlay: ["crypto.beam","9p.beam","9p_auth.beam","9p_info.beam",
|
|
|
+ "9p_mounter.beam","9p_server.beam","9p_tcp.beam","9p_zero.beam",
|
|
|
+ "disk.beam","disk_server.beam","embedded_export.beam",
|
|
|
+ "goo_export.beam","goofs.beam","hipe_unified_loader.beam",
|
|
|
+ "inet_config.beam","kernel.beam","ling_bifs.beam","ling_code.beam",
|
|
|
+ "ling_disasm.beam","ling_iops.beam","ling_iopvars.beam",
|
|
|
+ "ling_lib.beam","net_vif.beam","os.beam","prim_file.beam",
|
|
|
+ "user_drv.beam","os_mon.beam","dets.beam","filename.beam",
|
|
|
+ "maps.beam","unicode.beam","zlib.beam"]
|
|
|
+Bucks: [{boot,"/boot",2},
|
|
|
+ {os_mon,"/erlang/lib/os_mon/ebin",1},
|
|
|
+ {crypto,"/erlang/lib/crypto/ebin",1},
|
|
|
+ {kernel,"/erlang/lib/kernel/ebin",90},
|
|
|
+ {stdlib,"/erlang/lib/stdlib/ebin",85},
|
|
|
+ {sh,"/erlang/lib/sh/ebin",6},
|
|
|
+ {mad,"/erlang/lib/mad/ebin",43}]
|
|
|
+Initializing EMBED.FS:
|
|
|
+Mount View:
|
|
|
+ /boot /boot
|
|
|
+/erlang/lib/os_mon/ebin /os_mon
|
|
|
+/erlang/lib/crypto/ebin /crypto
|
|
|
+/erlang/lib/kernel/ebin /kernel
|
|
|
+/erlang/lib/stdlib/ebin /stdlib
|
|
|
+/erlang/lib/sh/ebin /sh
|
|
|
+/erlang/lib/mad/ebin /mad
|
|
|
+Creating EMBED.FS C file: ...ok
|
|
|
+Compilation of Filesystem object: ...ok
|
|
|
+Linking Image: ok
|
|
|
+```
|
|
|
+
|
|
|
+Run it:
|
|
|
+
|
|
|
+```sh
|
|
|
+$ rlwrap ./image.img
|
|
|
+Erlang [ling-0.3.2]
|
|
|
+
|
|
|
+Eshell V6.3 (abort with ^G)
|
|
|
+1> application:which_applications().
|
|
|
+[{mad,"MAD VXZ Build Tool","2.2"},
|
|
|
+ {sh,"VXZ SH Executor","0.9"},
|
|
|
+ {stdlib,"ERTS CXC 138 10","2.2"},
|
|
|
+ {kernel,"ERTS CXC 138 10","3.0.3"}]
|
|
|
+```
|
|
|
+
|
|
|
+See details in [http://maxim.livejournal.com/458016.html](http://maxim.livejournal.com/458016.html)
|
|
|
|
|
|
Building OTP Release
|
|
|
--------------------
|
|
@@ -42,15 +139,19 @@ It has it own fat bootstripts along with erlang runtime included.
|
|
|
This allows you to distribute you applications with copy deploy
|
|
|
without Erlang prerequisite.
|
|
|
|
|
|
+```sh
|
|
|
$ mad app sample
|
|
|
$ cd sample
|
|
|
$ mad dep com pla release
|
|
|
$ _rel/sample/bin/sample console
|
|
|
+```
|
|
|
|
|
|
Note: [relx](https://github.com/erlware/relx) must be installed
|
|
|
LINUX NOTE: if you want to have online recompilation you should do at first:
|
|
|
|
|
|
+```sh
|
|
|
$ sudo apt-get install inotify-tools
|
|
|
+```
|
|
|
|
|
|
Support
|
|
|
-------
|