backhand

github crates.io docs.rs build status

Library and binaries for the reading, creating, and modification of SquashFS file systems.

| :warning: WARNING | |:-------------------------------------------------------------------------------------------| | The API for this library isn't complete. I will most likely break this for improvements |

Library

Add the following to your Cargo.toml file: toml [dependencies] backhand = "0.9.1"

Reading/Writing/Modifying Firmware

```rust,no_run use std::fs::File; use std::io::Cursor; use backhand::{FilesystemReader, FilesystemWriter, NodeHeader};

// read let file = File::open("file.squashfs").unwrap(); let readfilesystem = FilesystemReader::fromreader(file).unwrap();

// convert to writer let mut writefilesystem = FilesystemWriter::fromfsreader(&readfilesystem).unwrap();

// add file with data from slice let d = NodeHeader::default(); let bytes = Cursor::new(b"Fear is the mind-killer."); writefilesystem.pushfile(bytes, "a/d/e/new_file", d);

// add file with data from file let newfile = File::open("dune").unwrap(); writefilesystem.pushfile(newfile, "/root/dune", d);

// modify file let bytes = Cursor::new(b"The sleeper must awaken.\n"); writefilesystem.replacefile("/a/b/c/d/e/first_file", bytes).unwrap();

// write into a new file let mut output = File::create("modified.squashfs").unwrap(); write_filesystem.write(&mut output).unwrap(); ```

Testing

This library is tested with unpacking and packing SquashFS firmwares and testing that result with unsquashfs. openwrt binaries are primarily being tested.

Binaries

These are currently under development and are missing features, MR's welcome!

To install, run cargo install backhand.

unsquashfs

```console tool to uncompress, extract and list squashfs filesystems

Usage: unsquashfs [OPTIONS]

Arguments: Squashfs file

Options: -o, --offset Skip BYTES at the start of FILESYSTEM [default: 0] -l, --list List filesystem, do not write to DEST -d, --dest Extract to [PATHNAME] [default: squashfs-root] -i, --info Print files as they are extracted -f, --force If file already exists then overwrite -s, --stat Display filesystem superblock information -h, --help Print help information -V, --version Print version information ```

add

```console tool to add files to squashfs filesystems

Usage: add

Arguments: Squashfs file

Options: -h, --help Print help information -V, --version Print version information ```