https://github.com/msantos/islet
Simple, safe isolation using Erlang
https://github.com/msantos/islet
Last synced: about 1 month ago
JSON representation
Simple, safe isolation using Erlang
- Host: GitHub
- URL: https://github.com/msantos/islet
- Owner: msantos
- Created: 2013-03-31T19:17:12.000Z (about 12 years ago)
- Default Branch: master
- Last Pushed: 2013-11-24T19:33:42.000Z (over 11 years ago)
- Last Synced: 2025-04-28T18:08:27.413Z (about 1 month ago)
- Language: Erlang
- Homepage:
- Size: 172 KB
- Stars: 13
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Simple, safe isolation using Erlang.
QUICK USAGE
-----------```erlang
Env = islet:env(),
ok = islet:prepare(Env),
{ok, Ref} = islet:spawn(Env),
ok = islet:send(Ref, <<"echo echo\n">>).
{ok,<<"echo echo\r\necho echo\r\n">>}
```EXAMPLES
--------Spawn a Container
=================This example creates a new container when a client connects over a TCP/IP socket on port 31337:
```erlang
-module(tcpvm).-export([
start/0, start/1
]).start() ->
start([]).start(Options) ->
Port = proplists:get_value(port, Options, 31337),{ok, LSock} = gen_tcp:listen(Port, [binary,{active,false},{reuseaddr,true}]),
accept(LSock, Options).accept(LSock, Options) ->
{ok, Socket} = gen_tcp:accept(LSock),
Pid = spawn(fun() -> shell(Socket, Options) end),
ok = gen_tcp:controlling_process(Socket, Pid),
accept(LSock, Options).shell(Socket, Options) ->
Console = self(),
Pid = spawn_link(fun() -> socket(Socket, Console) end),
ok = gen_tcp:controlling_process(Socket, Pid),Env = islet:env(Options),
ok = islet:prepare(Env),
{ok, Ref} = islet:spawn(Env),islet:console(Ref, Pid, fun(Data) -> gen_tcp:send(Socket, Data) end).
socket(Socket, Console) ->
inet:setopts(Socket, [{active, once}]),
receive
{tcp, Socket, Data} ->
Console ! {islet_tty, self(), Data},
socket(Socket, Console);
{tcp_closed, Socket} ->
error_logger:error_report([{socket, closed}]),
ok;
{tcp_error, Socket, Error} ->
error_logger:error_report([{socket, Error}]),
ok
end.
```Connect to the socket using netcat:
```shell
hypervisor$ nc localhost 31337
$ hostname
hostname
islet-4026565933
$ ^C
hypervisor$ nc localhost 31337
$ hostname
hostname
islet-4026582938
$ ^C
```