🏟️

Wasmtimeコマンドラインツールのtips

2023/12/26に公開

Wasmtimeコマンドラインツールのtipsを集めました。

Wasmtimeとは

インストール

公式ドキュメントで解説されている通り、インストールスクリプトを実行してインストールします。

% $ 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