Tclランタイムを確認して制限付きスクリプトを評価する

Tclランタイムのディスクリプターと署名付き準備状況レコードを読み取り、stdinから制限付きスクリプトを一つ評価して、そのレシートを確認します。

Linux上のAltifigence CLI 0.1.9を使用して、インストール済みのTclランタイムのディスクリプターを読み取り、署名付きのランタイム準備状況レコードを確認し、インストール済みのランナーで制限付きのTclスクリプトを一つ評価します。

ランタイムのディスクリプターを読み取る

通常のユーザーとしてコマンドを実行してください。各クエリはパッケージ化されたalti-tclのディスクリプターから応答し、JSONを出力します。

alti tcl capabilities
alti tcl environment
alti tcl commands

alti tcl commandsは、登録された製品コマンドと各コマンドの利用可否を一覧表示します。その出力はスクリプトと一緒に保管してください。

署名付きランタイムを確認する

署名付きのランタイム準備状況レコードを読み取ってください。このクエリはTclを実行しません。

set -euo pipefail
WORK="$(mktemp -d)"
alti tcl readiness > "$WORK/readiness.json"
jq '{schemaVersion, installedQualified, cryptographicVerifierLinked, blocker}' \
  "$WORK/readiness.json"

スクリプトを評価する前に、終了ステータスが0で、次の値であることを確認してください。

{
  "schemaVersion": "altifigence.eda-tcl-runtime-component-readiness.v1",
  "installedQualified": true,
  "cryptographicVerifierLinked": true,
  "blocker": null
}

スクリプトを評価する

スクリプトをstdinで渡し、レシートを保存してください。

printf '%s' 'expr {6 * 7}' | alti --json tcl evaluate > "$WORK/tcl-evaluate.json"
jq '{schema, status, inputBytes, result, resultBytes, resultArtifactId, failure}' \
  "$WORK/tcl-evaluate.json"

終了ステータスが0であることを確認してください。選択したレシートのフィールドは次のとおりです。

{
  "schema": "altifigence.cli.tcl-evaluation.v1",
  "status": "succeeded",
  "inputBytes": 12,
  "result": "42",
  "resultBytes": 2,
  "resultArtifactId": "tcl-evaluation",
  "failure": null
}

レシートにはinputSha256、jobSha256、resultArtifactSha256、provenanceも含まれます。provenanceでは、resolved_placementがlocal、resolved_device_classがcpu、backend_idがembedded-tclです。

--jsonを付けない場合、コマンドは結果をstdoutに、サマリー行をstderrに書き込みます。

printf '%s' 'expr {6 * 7}' | alti tcl evaluate
42
[succeeded] tcl.evaluate input=12 sha256=e96de7a3a920d7cd5aafa8c86630028d97a0fb0dc260da2f089de12ea4214a6f artifact=tcl-evaluation

実行のたびに、最大4194304バイトのスクリプトを一つ読み取ります。CLIはそれを/tmpの下のプライベートワークスペースに書き込み、1個のCPUスロット、536870912バイトのメモリ、5000ミリ秒のウォールタイム制限でローカルCPUジョブとして実行し、ランナーから結果を読み戻して、ワークスペースを削除します。

評価の失敗に対処する

--jsonを付けた場合は、レシートのfailure.codeとfailure.messageを読み取ってください。付けない場合、stderrにはTcl evaluation failed:に続けてコードが表示されます。

Tcl input must not be empty.を伴うTCL_INPUT_EMPTYは、終了ステータス2で終了します。空でないスクリプトをパイプで渡して、もう一度コマンドを実行してください。

Tcl input exceeds the 4194304-byte limit.を伴うTCL_INPUT_TOO_LARGEは、終了ステータス2で終了します。スクリプトは4194304バイト以内にしてください。

statusがfailedで、failure.codeがeda-tcl.local-runner.unsupported-command、メッセージがlocal Tcl evaluation failed within the requested boundaryの場合は、終了ステータス1で終了します。製品コマンドには、alti tcl commandsからavailabilityがavailableのエントリーを選んでください。例として::alti::echoや::alti::capabilitiesがあります。

The installed qualified Tcl runner is unavailable.を伴うTCL_INSTALLED_RUNNER_UNAVAILABLEは、終了ステータス127で終了します。0.1.9のブートストラップがインストールしたaltiを実行してから、もう一度alti tcl readinessを確認してください。

CLI エンジンコマンド