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]
Это создаст ISO, который соответствует 1-к-1 входному каталогу.
Образы можно перепаковать из существующего ISO-образа:
$ xdvdfs pack < input-image > [optional output path]
Это создаст ISO, который соответствует 1-к-1 входному изображению.
Образы можно упаковывать, переписывая пути хостов к различным местам назначения в базовом образе с помощью подкоманды 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 предоставляет более подробный пример использования xdvdfs-core в среде с std.
Обратите внимание, что xdvdfs в настоящее время не является стабильным API, и после семвера с основной версией 0 каждое второстепенное изменение версии может включать или не включать критические изменения.