xdvdfs
é uma coleção de ferramentas para interagir com imagens XDVDFS/XISO.
xdvdfs-cli
é uma ferramenta de linha de comando para interagir com arquivos xiso.
Se a carga estiver posicionada corretamente no caminho, ela poderá ser instalada com:
$ cargo install xdvdfs-cli
Caso contrário, ele poderá ser executado a partir da raiz do espaço de trabalho como projeto padrão.
Uma distribuição binária de xdvdfs-cli também está disponível nas versões do github.
Executar xdvdfs
sem argumentos abrirá a tela de ajuda, mostrando os subcomandos suportados:
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)
A execução de um subcomando com o sinalizador -h
mostrará informações de ajuda para esse subcomando específico.
Para compactar uma imagem de um diretório, execute:
$ xdvdfs pack < directory > [optional output path]
Isso criará uma iso que corresponda 1 para 1 ao diretório de entrada.
As imagens podem ser reembaladas a partir de uma imagem ISO existente:
$ xdvdfs pack < input-image > [optional output path]
Isso criará uma iso que corresponda 1 para 1 com a imagem de entrada.
As imagens podem ser compactadas ao reescrever caminhos de host para diferentes destinos na imagem subjacente usando o subcomando xdvdfs build-image
.
Se a funcionalidade de remapeamento de caminho não for necessária (ou seja, você deseja apenas uma regra /**:/{1}
), então você deve preferir xdvdfs pack
.
O principal método para fazer isso é com um arquivo 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 "
Supondo que xdvdfs.toml
e todos os caminhos acima sejam relativos ao diretório atual, a imagem pode ser compactada com:
# Produces `dist/image.xiso.iso` with the above configuration
$ xdvdfs build-image
Existem outras maneiras de compactar a imagem de outros diretórios:
# 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 >
Para ver qual é o mapeamento real fornecido em xdvdfs.toml
sem realmente compactar a imagem, use o sinalizador -D
ou --dry-run
.
Também é possível fornecer toda a configuração de um arquivo xdvdfs.toml
para build-image
diretamente na linha de comando.
-O
para fornecer o campo output
-m :
para fornecer uma regra de mapa. Isso pode ser repetido e combinado na ordem dada. Eles também podem ser combinados com --dry-run
para testar diferentes mapeamentos.
Para converter um conjunto de opções de linha de comando para build-image
em um arquivo xdvdfs.toml
, use o comando xdvdfs image-spec from
com os mesmos argumentos.
# 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
O arquivo de especificações gerado pode então ser usado com build-image
.
Para descompactar uma imagem, execute:
$ xdvdfs unpack < path to image > [optional output path]
xdvdfs-cli
oferece suporte a ferramentas utilitárias adicionais para uso com imagens.
Comando | Ação |
---|---|
xdvsfs ls | Lista os arquivos dentro do diretório especificado, com o padrão root |
xdvdfs tree | Imprime uma lista de todos os arquivos da imagem |
xdvdfs md5 | Imprime somas md5 para arquivos especificados, ou para todos os arquivos, dentro da imagem |
xdvdfs checksum [path to img1]... | Calcula uma soma de verificação para todo o conteúdo da imagem para verificar a integridade em relação a outras imagens |
xdvdfs info | Imprime informações de metadados para a entrada de diretório especificada ou volume raiz |
xdvdfs copy-out | Copia um único arquivo ou diretório da imagem fornecida |
xdvdfs-core
é uma biblioteca para trabalhar com metadados XDVDFS.
Um exemplo simples de leitura de um arquivo de um determinado caminho é:
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
}
Esta biblioteca suporta no_std. Dispositivos de bloco personalizados podem ser definidos implementando as características em xdvdfs::blockdev
.
Sem o recurso alloc
, apenas os recursos básicos de metadados são suportados. O recurso alloc
permite diversas funções utilitárias que requerem alocação (como read_data_all
acima.
O código fonte do xdvdfs-cli fornece um exemplo mais detalhado de como usar o xdvdfs-core em um ambiente com std.
Observe que xdvdfs atualmente não é estável em termos de API e, após o semver com a versão principal 0, cada aumento de versão secundária pode ou não incluir alterações significativas.