@deno/sandbox でapt-get install ~ はできる

先日、「@deno/sandbox をさわってみる」を書きましたが、内容更新です。

参考

導入方法

apt-get install は可能か

@deno/sandbox は、Deno 上でサンドボックス化された任意コード実行環境を提供します。
先日記事では、apt-get install はできないと書きました。

コミュニティで情報をいただき、sudo をすることで、apt-get install が可能であることがわかりました。

ドキュメントもありましたが、やや深いところに記載でした。
@deno/sandbox - Sandbox.prototype.sh

sandbox 上で imagemagick を動かしてみる

sudo を入れて実行すると通ります。
以下のように実装します。

sandbox-sudo.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { Sandbox } from "@deno/sandbox";

console.log("creating sandbox");
await using sandbox = await Sandbox.create({ memoryMb: 4096 });

console.log("apt update");
await sandbox.sh`apt-get update > /dev/null 2>&1`.sudo(); // << .sudo() を入れる

console.log("apt install imagemagick");
await sandbox.sh`apt-get install -y imagemagick`.sudo();

console.log("write image to sandbox");
await sandbox.writeFile("img.png", await Deno.readFile("./img.png"));

console.log("convert image (resize + sepia)");
await sandbox.sh`convert img.png -resize 100x100 -sepia-tone 80% converted.png`;

console.log("read image and write to host");
await Deno.writeFile("converted.png", await sandbox.readFile("converted.png"));

これを実行すると、sandbox 内で imagemagick がインストールされ、画像変換が実行されます。

1
$ deno run --env -ERNRW sandbox-sudo.ts

セットアップに要する処理時間はそれなりにあるので、Webの処理に組み合わせるのは安直には難しい様子です。
作ったsandboxのスナップショットを取って、呼び出して使えるような機能の拡充に期待したいです。
しかしそれはただのdockerなのではという感じではありますが。

では。