xdvdfs
、XDVDFS/XISO イメージを操作するためのツールのコレクションです。
xdvdfs-cli
xiso ファイルを操作するためのコマンド ライン ツールです。
カーゴがパス内に正しく設定されている場合は、次の方法でインストールできます。
$ cargo install xdvdfs-cli
それ以外の場合は、ワークスペース ルートからデフォルト プロジェクトとして実行できます。
xdvdfs-cli のバイナリ配布も github リリースで入手できます。
引数なしでxdvdfs
実行すると、ヘルプ画面が表示され、サポートされているサブコマンドが表示されます。
Usage: xdvdfs [COMMAND]
Commands:
ls List files in an image
tree List all files in an image, recursively
md5 Show MD5 checksums for files in an image
checksum Compute deterministic checksum of image contents
info Print information about image metadata
copy-out Copy a file or directory out of the provided image file
unpack Unpack an entire image to a directory
pack Pack an image from a given directory or source ISO image
build-image Pack an image from a given specification
image-spec Manage image spec `xdvdfs.toml` files
compress Pack and compress an image from a given directory or source ISO image
help Print this message or the help of the given subcommand(s)
-h
フラグを指定してサブコマンドを実行すると、その特定のサブコマンドのヘルプ情報が表示されます。
ディレクトリからイメージをパックするには、次を実行します。
$ xdvdfs pack < directory > [optional output path]
これにより、入力ディレクトリと 1 対 1 で一致する ISO が作成されます。
イメージは既存の ISO イメージから再パックできます。
$ xdvdfs pack < input-image > [optional output path]
これにより、入力画像と 1 対 1 で一致する ISO が作成されます。
xdvdfs build-image
サブコマンドを使用して、基になるイメージ内のホスト パスを別の宛先に書き換えながら、イメージをパックできます。
パスの再マッピング機能が必要ない場合 (つまり、 /**:/{1}
ルールだけが必要な場合) は、代わりにxdvdfs pack
選択する必要があります。
これを実現する主な方法は、 xdvdfs.toml
ファイルを使用することです。
[ metadata ]
# Relative path to output iso, if not specified in command [optional]
output = " dist/image.xiso.iso "
# List of host-to-image path mapping rules. At least one rule is required.
# All paths are relative to the provided source path, the `xdvdfs.toml` file,
# or the working directory, in that priority order
# Host paths are matched by glob pattern
# Image paths have fields given by `{x}` substituted, where `x` is the index
# of the glob match, starting at 1. `{0}` matches the entire host path.
# Globs are evaluated in the provided order
[ map_rules ]
# Map contents of the "bin" directory to the image root
bin = " / "
# Map anything in the assets directory to `/assets/`
# Equivalent to `assets = "/assets"`
"assets/**" = " /assets/{1} "
# Map any file in the `sound` subdirectory with name `priority`
# and any extension to the same path in the image
# Note that `{0}` matches the entire relative host path
# Also note that due to the linear ordering of glob matches,
# this takes precedence over the below rule
"sound/priority.*" = " /{0} "
# Map any file in the `sound` subdirectory with extension `a`, `b`, or `c`,
# to `/a/filename`, "/b/filename" or `/c/filename`, based on its filename
# and extension.
"sound/*.{a,b,c}" = " /{2}/{1} "
# but, exclude any files in the `sound` subdirectory with filename `excluded`
# The image path is a don't-care value, and has no effect
"!sound/excluded.*" = " "
# Since globs are evaluated in order, this includes any otherwise excluded
# files in the `sound` subdirectory with name `excluded` and extension `c`
"sound/excluded.c" = " /c/excluded "
xdvdfs.toml
と上記のすべてのパスが現在のディレクトリに対して相対的であると仮定すると、イメージは次のようにパックできます。
# Produces `dist/image.xiso.iso` with the above configuration
$ xdvdfs build-image
他のディレクトリからイメージをパックする方法は他にもあります。
# Produces `/dist/image.xiso.iso`
$ xdvdfs build-image < path-to-source-dir >
# Also produces `/dist/image.xiso.iso`
$ xdvdfs build-image < path-to-source-dir > /xdvdfs.toml
# Produces `./dist/output.xiso.iso` in the current directory
$ xdvdfs build-image < path-to-source-dir > dist/output.xiso.iso
# Produces `/dist/image.xiso.iso`, with `xdvdfs.toml` not
# necessarily being in `. Here it is in the current directory
$ xdvdfs build-image -f xdvdfs.toml < path-to-source-dir >
実際にイメージをパックせずに、 xdvdfs.toml
に与えられた実際のマッピングを確認するには、 -D
または--dry-run
フラグを使用します。
xdvdfs.toml
ファイルのすべての構成をコマンド ラインで直接build-image
に提供することもできます。
-O
を使用してoutput
フィールドを指定します-m :
使用してマップ ルールを指定します。これを繰り返し、指定された順序で照合することができます。これらを--dry-run
と組み合わせて、さまざまなマッピングをテストすることもできます。
build-image
への一連のコマンド ライン オプションをxdvdfs.toml
ファイルに変換するには、同じ引数を指定してxdvdfs image-spec from
コマンドを使用します。
# Outputs equivalent `xdvdfs.toml` to stdout
$ xdvdfs image-spec from -O dist/image.iso -m " bin:/ " -m " assets:/{0} "
# Outputs equivalent `xdvdfs.toml` to a file
$ xdvdfs image-spec from -O dist/image.iso -m " bin:/ " -m " assets:/{0} " xdvdfs.toml
生成されたスペック ファイルはbuild-image
で使用できます。
イメージを解凍するには、次を実行します。
$ xdvdfs unpack < path to image > [optional output path]
xdvdfs-cli
イメージで使用する追加のユーティリティ ツールをサポートしています。
指示 | アクション |
---|---|
xdvsfs ls | 指定されたディレクトリ内のファイルをリストします。デフォルトはルートです。 |
xdvdfs tree | 画像内のすべてのファイルのリストを印刷します |
xdvdfs md5 | イメージ内の指定されたファイルまたはすべてのファイルの md5 合計を出力します。 |
xdvdfs checksum [path to img1]... | すべての画像コンテンツのチェックサムを計算して、他の画像との整合性をチェックします |
xdvdfs info | 指定されたディレクトリエントリまたはルートボリュームのメタデータ情報を出力します。 |
xdvdfs copy-out | 提供されたイメージから単一のファイルまたはディレクトリをコピーします |
xdvdfs-core
XDVDFS メタデータを操作するためのライブラリです。
指定されたパスからファイルを読み取る簡単な例は次のとおりです。
async fn read_from_path ( xiso : & Path , file_path : & str ) -> Box < [ u8 ] > {
let mut xiso = std :: fs :: File :: open ( xiso ) . unwrap ( ) ;
let volume = xdvdfs :: read :: read_volume ( & mut xiso ) . await . unwrap ( ) ;
let file_dirent = volume . root_table . walk_path ( & mut xiso , file_path ) . await . unwrap ( ) ;
let data = file_dirent . node . dirent . read_data_all ( & mut xiso ) . await . unwrap ( ) ;
data
}
このライブラリは no_std をサポートしています。カスタム ブロック デバイスは、 xdvdfs::blockdev
の特性を実装することで定義できます。
alloc
機能がない場合、基本的なメタデータ機能のみがサポートされます。 alloc
機能は、割り当てを必要とするいくつかのユーティリティ関数 (上記のread_data_all
など) を有効にします。
xdvdfs-cli のソース コードには、std を使用した環境で xdvdfs-core を使用する方法の詳細な例が記載されています。
現在、xdvdfs は API が安定していないため、メジャー バージョン 0 の semver に続いて、各マイナー バージョンの変更に重大な変更が含まれる場合と含まれない場合があることに注意してください。