🏟️
Wasmtimeコマンドラインツールのtips
Wasmtimeコマンドラインツールのtipsを集めました。
Wasmtimeとは
- WasmtimeとはBytecode Allianceが開発しているWasmランタイムです。
- 単体での利用はもちろん、マイクロサービスフレームワークSpinをはじめ様々な製品で利用されています。
- Rustで開発され、Rustのコードで利用するためのクレートも提供されています。
インストール
公式ドキュメントで解説されている通り、インストールスクリプトを実行してインストールします。
% $ curl https://wasmtime.dev/install.sh -sSf | bash
また、次のようにcargo install
コマンドでもインストールできます。
% cargo install wasmtime-cli
Wasmコンポーネントの実行
-W component-model
オプションをつけて、コマンドラインツールを起動します。次の例はWASI:CLIワールドに依存するコンポーネントを実行しています。
% wasmtime -W component-model hello-world.wasm
Hello, world!
対応しているWasmプロポザールの一覧
-W help
で対応しているWasmプロポーザルを一覧できます。16.0.0は次のようになっています。
% wasmtime -W help
wasmtime -W help
Available wasm options:
-W nan-canonicalization[=y|n] -- Enable canonicalization of all NaN values.
-W fuel=N -- Enable execution fuel with N units fuel, trapping after running out of fuel.
-W epoch-interruption[=y|n] -- Yield when a global epoch counter changes, allowing for async operation without blocking the executor.
-W max-wasm-stack=N -- Maximum stack size, in bytes, that wasm is allowed to consume before a stack overflow is reported.
-W unknown-exports-allow[=y|n] -- Allow unknown exports when running commands.
-W unknown-imports-trap[=y|n] -- Allow the main module to import unknown functions, using an implementation that immediately traps, when running commands.
-W unknown-imports-default[=y|n] -- Allow the main module to import unknown functions, using an implementation that returns default values, when running commands.
-W wmemcheck[=y|n] -- Enables memory error checking. (see wmemcheck.md for more info)
-W max-memory-size=N -- Maximum size, in bytes, that a linear memory is allowed to reach.
-W max-table-elements=N -- Maximum size, in table elements, that a table is allowed to reach.
-W max-instances=N -- Maximum number of WebAssembly instances allowed to be created.
-W max-tables=N -- Maximum number of WebAssembly tables allowed to be created.
-W max-memories=N -- Maximum number of WebAssembly linear memories allowed to be created.
-W trap-on-grow-failure[=y|n] -- Force a trap to be raised on `memory.grow` and `table.grow` failure instead of returning -1 from these instructions.
-W timeout=N|Ns|Nms|.. -- Maximum execution time of wasm code before timing out (1, 2s, 100ms, etc)
-W all-proposals[=y|n] -- Configures support for all WebAssembly proposals implemented.
-W bulk-memory[=y|n] -- Configure support for the bulk memory proposal.
-W multi-memory[=y|n] -- Configure support for the multi-memory proposal.
-W multi-value[=y|n] -- Configure support for the multi-value proposal.
-W reference-types[=y|n] -- Configure support for the reference-types proposal.
-W simd[=y|n] -- Configure support for the simd proposal.
-W relaxed-simd[=y|n] -- Configure support for the relaxed-simd proposal.
-W relaxed-simd-deterministic[=y|n] -- Configure forcing deterministic and host-independent behavior of the relaxed-simd instructions.
-W tail-call[=y|n] -- Configure support for the tail-call proposal.
-W threads[=y|n] -- Configure support for the threads proposal.
-W memory64[=y|n] -- Configure support for the memory64 proposal.
-W component-model[=y|n] -- Configure support for the component-model proposal.
-W function-references[=y|n] -- Configure support for the function-references proposal.
ディレクトリへのアクセス許可
Wasmtimeはサンドボックスされた環境の中で、wasmファイルを実行します。実行するwasmファイルがファイルやフォルダーにアクセスする場合、wasmファイルからアクセス可能なフォルダーを明示する必要があります。
アクセス可能なフォルダーを明示せずに実行されたwasmファイルがファイルアクセスをおこなった場合、次のようなエラーが発生します。
failed to find a pre-opened file descriptor through which "./a/text/file" could be opened
アクセス可能なフォルダーは、--dir
オプションで指定します。次の例では、/some/where
を/
に設定して、ls.wasm
を起動しています。
% wasmtime --dir=/some/where ls.wasm
a.txt
b.txt
c.txt
マウントポイントを指定することもできます。次の例は、/some/where
を/data
に設定してます。公開するパスとマウントポイントとの区切りは::
です。
% wasmtime --dir=/some/where::/data ls.wasm
--dir
オプションを複数指定できます。次の例では、/some/where
を/data
に、/another/folder
を/home
に設定しています。
% wasmtime --dir=/some/where::/data --dir=/another/folder::/home ls.wasm
同じマウントポイントへ異なるフォルダーが設定されている場合は、後に指定したものが有効となります。次の例では、/another/folder
が/data
として設定されます。
% wasmtime --dir=/some/where::/data --dir=/another/folder::/data ls.wasm
Discussion