vltのPhased Package Installations
vlt v1.0.0-rc.1でPhased Package Installationsを導入。パッケージのインストールとビルドを2つのフェーズに分離し、セキュリティを向上。
従来のパッケージマネージャーはインストール時に自動的にライフサイクルスクリプト(preinstall、postinstallなど)を実行。これにより、インストール前にスクリプトの内容を確認できず、悪意のある依存関係が即座にコードを実行するリスクがあった。
vltではvlt installとvlt buildを分離。vlt installはパッケージの解決・ダウンロード・展開のみを実行し、デフォルトで全てのinstall scriptsをブロック(--allow-scriptsのデフォルト値は:not(*))。vlt buildでライフサイクルスクリプトを実行。デフォルトのvlt buildは:scripts:not(:built):not(:malware)をターゲットとし、スクリプトを持つパッケージのうち、未ビルドかつマルウェアフラグが立っていないもののみをビルド。
Dependency Selector Syntaxで細かく制御可能。特定のスコープやパッケージのみにスクリプト実行を許可、直接依存関係のみに制限、マルウェアフラグが立ったパッケージを除外などが可能。設定はvlt.jsonに保存してチーム全体で共有可能。
bash
# Phase 1: パッケージのダウンロード・展開のみ(スクリプトは実行されない)
$ vlt install
# Phase 2: ライフサイクルスクリプトの実行
$ vlt buildvlt queryで依存関係を確認可能。:scriptsでスクリプトを持つパッケージを一覧、:malwareでマルウェアフラグが立ったパッケージを確認、:builtでビルド済みパッケージを確認できる。