
本文共 2539 字,大约阅读时间需要 8 分钟。
Lucet的使用方法
一、介绍
Lucet项目是CDN供应商Fastly的一个新开源的项目,其提供了WebAssembly原生的编译器和运行时。它主要是为边缘服务者提供WASM的解决方案。
Lucet提供了对WASI的支持,在安全、速度等性能上进行了再平衡。它的效率比一般的JS引擎要快很多并且小很多。在官方的例子中,只需要5毫秒和几K的内存。同样,它的安全性也不容小觑,它在成千上万的实例中,安全的隔离了相关的数据和计算过程,
Lucet做为Terrarium项目的引擎,已经在生产环境中运行了数月,足以证明其性能的优越性。
二、编译
编译的详细的说明在下面的网址:
分为以下几步:
1、准备命令:
$ sudo systemctl start docker
git.checkout
$ git clone --depth=50 --branch=master https://github.com/fastly/lucet.git fastly/lucet
git.submodule
$ git submodule update --init --recursive
Setting environment variables from .travis.yml
$ export UNOPTIMIZED_BUILD=true
rvm 这个没啥用
$ rvm use default
Using /home/travis/.rvm/gems/ruby-2.5.3
ruby.versions
$ ruby –version
2、正式安装命令:
$ ./devenv_run.sh make indent-check test audit
Error: No such image: lucet:latest
Error: No such image: lucet-dev:latest
Building lucet-dev:latest
。。。。。。
这个脚本主要是创建安装lucet-dev lucet两个镜像。
下面的脚本停止创建启动的镜像
$ ./devenv_stop.sh
Stopping container
lucet
Removing container
lucet
下面创建启动lucet-toolchain镜像:
$ git diff --exit-code
The command "git diff --exit-code" exited with 0.
$ ./devenv_build_toolchain_only.sh
Building lucet-toolchain:latest
Sending build context to Docker daemon 130.9MB
Step 1/6 : FROM ubuntu:disco
disco: Pulling from library/ubuntu
。。。。。。
Successfully built d4c1fa7ff968
Successfully tagged lucet-toolchain:latest
Starting the lucet container
Creating a container from the lucet-toolchain:latest image
sha256:fe55022f476d4f98231c5c1bce70240fedb2b1075c39eaf282437f83dc30fbce
Cleaning
lucet
lucet
lucet-toolchain
lucet-toolchain
Done
3、安装结束。
使用sudo docker images 查看:
会发现生成了三个镜像,一个lucet,lucet-dev,lucet-toolchain.一个是设备用的,一个是编译工具链,一个是标准lucet环境。
4、使用方法:
sudo docker run –it lucet-toolchain:latest /bin/bash
启动,即可使用相关的命令。
三、应用
应用可以看一下其官网的BLOG的例子,地址在:
https://www.fastly.com/blog/announcing-lucet-fastly-native-webassembly-compiler-runtime
在前面编译好Docker的基础上,启动工具链的镜像:
$ mkdir demo
$ cd demo
$ cat > hello.c <<EOT
#include <stdio.h>
int main(int argc, char* argv[])
{
if (argc > 1) {
printf("Hello from Lucet, %s!\n", argv[1]);
} else {
puts("Hello, world!");
}
return 0;
}
EOT
$ wasm32-unknown-wasi-clang hello.c -o hello.wasm
会报一个警告,可以不用理它,这时就可以用WASI命令来进行文件间的转换:
$ lucetc-wasi hello.wasm -o hello.so
转换完成后,可以通过命令来运行相关的文件:
$ lucet-wasi hello.so
Hello, world!
$ lucet-wasi hello.so world
Hello from Lucet, world!
在相关的Lucet的库中提供了更多的开发文档和其它的例程,如果有兴趣,大家可以去查看一下。
四、总结
从目前来看,这个CDN类型的公司提供的这个Lucet确实有其独特的一面,不过安装过程得吐槽一下,它自己在官网上说,只需要一到两分钟,真不知道它是在啥样的环境下安装的,可能他们的环境非常好吧。
从总体来看,Lucet只是提供了一套原生的编译器,真正的运行时和相关的辅助操作都是第三方的。最初使用的是c版的,这是用Rust实现的第一版,Rust这语言有点小爆发的样子.
更多资源,可观注公众号:
发表评论
最新留言
关于作者
