xdvdfs
est une collection d'outils permettant d'interagir avec les images XDVDFS/XISO.
xdvdfs-cli
est un outil de ligne de commande permettant d'interagir avec les fichiers xiso.
Si la cargaison est correctement installée sur le chemin, elle peut être installée avec :
$ cargo install xdvdfs-cli
Sinon, il peut être exécuté à partir de la racine de l'espace de travail en tant que projet par défaut.
Une distribution binaire de xdvdfs-cli est également disponible dans les versions github.
L'exécution xdvdfs
sans arguments fera apparaître l'écran d'aide, affichant les sous-commandes prises en charge :
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)
L'exécution d'une sous-commande avec l'indicateur -h
affichera des informations d'aide pour cette sous-commande spécifique.
Pour compresser une image à partir d'un répertoire, exécutez :
$ xdvdfs pack < directory > [optional output path]
Cela créera une image ISO qui correspondra 1 à 1 au répertoire d'entrée.
Les images peuvent être reconditionnées à partir d'une image ISO existante :
$ xdvdfs pack < input-image > [optional output path]
Cela créera une iso qui correspondra 1 à 1 à l'image d'entrée.
Les images peuvent être compressées lors de la réécriture des chemins d'hôte vers différentes destinations dans l'image sous-jacente à l'aide de la sous-commande xdvdfs build-image
.
Si la fonctionnalité de remappage de chemin n'est pas nécessaire (c'est-à-dire que vous voulez juste une règle /**:/{1}
), alors vous devriez plutôt préférer xdvdfs pack
.
La principale méthode pour y parvenir consiste à utiliser un fichier 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 "
En supposant que xdvdfs.toml
et tous les chemins ci-dessus sont relatifs au répertoire actuel, l'image peut être compressée avec :
# Produces `dist/image.xiso.iso` with the above configuration
$ xdvdfs build-image
Il existe d'autres façons de regrouper l'image à partir d'autres répertoires :
# 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 >
Pour voir quel mappage réel reçoit un xdvdfs.toml
sans réellement compresser l'image, utilisez l'indicateur -D
ou --dry-run
.
Il est également possible de fournir toute la configuration d'un fichier xdvdfs.toml
pour build-image
directement en ligne de commande.
-O
pour fournir le champ output
-m :
pour fournir une règle de mappage. Cela peut être répété et correspondre dans l'ordre indiqué. Ceux-ci peuvent également être combinés avec --dry-run
pour tester différents mappages.
Pour convertir un ensemble d'options de ligne de commande en build-image
en un fichier xdvdfs.toml
, utilisez la commande xdvdfs image-spec from
avec les mêmes arguments.
# 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
Le fichier de spécifications généré peut ensuite être utilisé avec build-image
.
Pour décompresser une image, exécutez :
$ xdvdfs unpack < path to image > [optional output path]
xdvdfs-cli
prend en charge des outils utilitaires supplémentaires à utiliser avec les images.
Commande | Action |
---|---|
xdvsfs ls | Répertorie les fichiers dans le répertoire spécifié, par défaut root |
xdvdfs tree | Imprime une liste de chaque fichier dans l'image |
xdvdfs md5 | Imprime les sommes md5 pour les fichiers spécifiés, ou pour chaque fichier, dans l'image |
xdvdfs checksum [path to img1]... | Calcule une somme de contrôle pour tout le contenu de l'image afin de vérifier l'intégrité par rapport à d'autres images |
xdvdfs info | Imprime les informations de métadonnées pour l'entrée de répertoire spécifiée ou le volume racine |
xdvdfs copy-out | Copie un seul fichier ou répertoire à partir de l'image fournie |
xdvdfs-core
est une bibliothèque permettant de travailler avec les métadonnées XDVDFS.
Un exemple simple de lecture d'un fichier à partir d'un chemin donné est :
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
}
Cette bibliothèque prend en charge no_std. Les périphériques de bloc personnalisés peuvent être définis en implémentant les traits dans xdvdfs::blockdev
.
Sans la fonctionnalité alloc
, seules les fonctionnalités de métadonnées de base sont prises en charge. La fonctionnalité alloc
active plusieurs fonctions utilitaires qui nécessitent une allocation (telles que read_data_all
ci-dessus.
Le code source de xdvdfs-cli fournit un exemple plus détaillé de la façon d'utiliser xdvdfs-core dans un environnement avec std.
Notez que xdvdfs n'est actuellement pas stable au niveau de l'API et qu'après Semver avec la version majeure 0, chaque modification de version mineure peut ou non inclure des modifications majeures.