xdvdfs
es una colección de herramientas para interactuar con imágenes XDVDFS/XISO.
xdvdfs-cli
es una herramienta de línea de comandos para interactuar con archivos xiso.
Si la carga está colocada correctamente en el camino, se puede instalar con:
$ cargo install xdvdfs-cli
De lo contrario, se puede ejecutar desde la raíz del espacio de trabajo como proyecto predeterminado.
También está disponible una distribución binaria de xdvdfs-cli en las versiones de github.
Al ejecutar xdvdfs
sin argumentos, aparecerá la pantalla de ayuda, que muestra los subcomandos admitidos:
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)
Al ejecutar un subcomando con el indicador -h
se mostrará información de ayuda para ese subcomando específico.
Para empaquetar una imagen desde un directorio, ejecute:
$ xdvdfs pack < directory > [optional output path]
Esto creará una ISO que coincida 1 a 1 con el directorio de entrada.
Las imágenes se pueden volver a empaquetar a partir de una imagen ISO existente:
$ xdvdfs pack < input-image > [optional output path]
Esto creará una ISO que coincida 1 a 1 con la imagen de entrada.
Las imágenes se pueden empaquetar mientras se reescriben las rutas del host a diferentes destinos en la imagen subyacente utilizando el subcomando xdvdfs build-image
.
Si la funcionalidad de reasignación de rutas no es necesaria (es decir, solo desea una regla /**:/{1}
), entonces debería preferir xdvdfs pack
.
El método principal para lograr esto es con un archivo 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 "
Suponiendo que xdvdfs.toml
y todas las rutas anteriores son relativas al directorio actual, la imagen se puede empaquetar con:
# Produces `dist/image.xiso.iso` with the above configuration
$ xdvdfs build-image
Hay otras formas de empaquetar la imagen desde otros directorios:
# 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 cuál es el mapeo real que se le da a xdvdfs.toml
sin empaquetar la imagen, use el indicador -D
o --dry-run
.
También es posible proporcionar toda la configuración de un archivo xdvdfs.toml
para build-image
directamente en la línea de comando.
-O
para proporcionar el campo output
-m :
para proporcionar una regla de mapa. Esto se puede repetir y combinar en el orden indicado. Estos también se pueden combinar con --dry-run
para probar diferentes asignaciones.
Para convertir un conjunto de opciones de línea de comando para build-image
en un archivo xdvdfs.toml
, use el comando xdvdfs image-spec from
con los mismos 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
El archivo de especificaciones generado se puede utilizar con build-image
.
Para descomprimir una imagen, ejecute:
$ xdvdfs unpack < path to image > [optional output path]
xdvdfs-cli
admite herramientas de utilidad adicionales para usar con imágenes.
Dominio | Acción |
---|---|
xdvsfs ls | Enumera los archivos dentro del directorio especificado, por defecto en la raíz |
xdvdfs tree | Imprime una lista de cada archivo dentro de la imagen. |
xdvdfs md5 | Imprime sumas md5 para archivos específicos, o cada archivo, dentro de la imagen |
xdvdfs checksum [path to img1]... | Calcula una suma de verificación para todos los contenidos de la imagen para verificar la integridad con otras imágenes. |
xdvdfs info | Imprime información de metadatos para la entrada del directorio especificado o el volumen raíz. |
xdvdfs copy-out | Copia un solo archivo o directorio de la imagen proporcionada |
xdvdfs-core
es una biblioteca para trabajar con metadatos XDVDFS.
Un ejemplo sencillo de lectura de un archivo desde una ruta determinada es:
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 admite no_std. Los dispositivos de bloques personalizados se pueden definir implementando los rasgos en xdvdfs::blockdev
.
Sin la función alloc
, solo se admiten funciones básicas de metadatos. La función alloc
habilita varias funciones de utilidad que requieren asignación (como read_data_all
arriba.
El código fuente de xdvdfs-cli proporciona un ejemplo más detallado de cómo utilizar xdvdfs-core en un entorno con std.
Tenga en cuenta que xdvdfs actualmente no es una API estable y, después de semver con la versión principal 0, cada mejora de versión menor puede incluir o no cambios importantes.