xdvdfs
ist eine Sammlung von Tools für die Interaktion mit XDVDFS/XISO-Images.
xdvdfs-cli
ist ein Befehlszeilentool für die Interaktion mit XISO-Dateien.
Wenn die Ladung korrekt im Pfad angeordnet ist, kann sie wie folgt installiert werden:
$ cargo install xdvdfs-cli
Andernfalls kann es vom Arbeitsbereichsstammverzeichnis aus als Standardprojekt ausgeführt werden.
Eine Binärdistribution von xdvdfs-cli ist auch in den Github-Versionen verfügbar.
Wenn Sie xdvdfs
ohne Argumente ausführen, wird der Hilfebildschirm mit den unterstützten Unterbefehlen angezeigt:
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)
Wenn Sie einen Unterbefehl mit dem Flag -h
ausführen, werden Hilfeinformationen für diesen bestimmten Unterbefehl angezeigt.
Um ein Bild aus einem Verzeichnis zu packen, führen Sie Folgendes aus:
$ xdvdfs pack < directory > [optional output path]
Dadurch wird eine ISO erstellt, die 1:1 mit dem Eingabeverzeichnis übereinstimmt.
Bilder können aus einem vorhandenen ISO-Image neu gepackt werden:
$ xdvdfs pack < input-image > [optional output path]
Dadurch wird ein ISO erstellt, das 1:1 mit dem Eingabebild übereinstimmt.
Mit dem Unterbefehl xdvdfs build-image
können Bilder gepackt werden, während Hostpfade zu verschiedenen Zielen im zugrunde liegenden Bild neu geschrieben werden.
Wenn die Funktion zur Pfadneuzuordnung nicht benötigt wird (z. B. Sie möchten lediglich eine /**:/{1}
-Regel), sollten Sie stattdessen xdvdfs pack
bevorzugen.
Die primäre Methode, dies zu erreichen, ist die Verwendung einer xdvdfs.toml
Datei:
[ 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 "
Unter der Annahme, dass xdvdfs.toml
und alle oben genannten Pfade relativ zum aktuellen Verzeichnis sind, kann das Bild gepackt werden mit:
# Produces `dist/image.xiso.iso` with the above configuration
$ xdvdfs build-image
Es gibt andere Möglichkeiten, das Bild aus anderen Verzeichnissen zu packen:
# 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 >
Um zu sehen, wie die tatsächliche Zuordnung einer xdvdfs.toml
Datei aussieht, ohne das Bild tatsächlich zu packen, verwenden Sie das Flag -D
oder --dry-run
.
Es ist auch möglich, die gesamte Konfiguration einer xdvdfs.toml
Datei direkt in der Befehlszeile für build-image
bereitzustellen.
-O
, um das output
bereitzustellen-m :
um eine Kartenregel bereitzustellen. Dies kann wiederholt und in der angegebenen Reihenfolge abgeglichen werden. Diese können auch mit --dry-run
kombiniert werden, um verschiedene Zuordnungen zu testen.
Um eine Reihe von Befehlszeilenoptionen für build-image
in eine xdvdfs.toml
Datei zu konvertieren, verwenden Sie den Befehl xdvdfs image-spec from
mit denselben Argumenten.
# 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
Die generierte Spezifikationsdatei kann dann mit build-image
verwendet werden.
Um ein Bild zu entpacken, führen Sie Folgendes aus:
$ xdvdfs unpack < path to image > [optional output path]
xdvdfs-cli
unterstützt zusätzliche Hilfsprogramme zur Verwendung mit Bildern.
Befehl | Aktion |
---|---|
xdvsfs ls | Listet Dateien im angegebenen Verzeichnis auf, standardmäßig im Root-Verzeichnis |
xdvdfs tree | Druckt eine Liste aller Dateien im Bild |
xdvdfs md5 | Druckt MD5-Summen für bestimmte Dateien oder jede Datei im Bild |
xdvdfs checksum [path to img1]... | Berechnet eine Prüfsumme für alle Bildinhalte, um die Integrität mit anderen Bildern zu vergleichen |
xdvdfs info | Druckt Metadateninformationen für den angegebenen Verzeichniseintrag oder Root-Volume |
xdvdfs copy-out | Kopiert eine einzelne Datei oder ein einzelnes Verzeichnis aus dem bereitgestellten Image |
xdvdfs-core
ist eine Bibliothek zum Arbeiten mit XDVDFS-Metadaten.
Ein einfaches Beispiel für das Lesen einer Datei aus einem bestimmten Pfad ist:
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
}
Diese Bibliothek unterstützt no_std. Benutzerdefinierte Blockgeräte können durch Implementierung der Merkmale in xdvdfs::blockdev
definiert werden.
Ohne die alloc
werden nur grundlegende Metadatenfunktionen unterstützt. Die alloc
ermöglicht mehrere Dienstprogrammfunktionen, die eine Zuweisung erfordern (z. B. read_data_all
oben).
Der Quellcode für xdvdfs-cli bietet ein detaillierteres Beispiel für die Verwendung von xdvdfs-core in einer Umgebung mit std.
Beachten Sie, dass xdvdfs derzeit nicht API-stabil ist und dass nach einigen Schritten mit der Hauptversion 0 jede Nebenversionserweiterung möglicherweise wichtige Änderungen enthält oder auch nicht.