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.5.0"

Reading/Writing/Modifying Firmware

```rust, ignore use std::fs::File; use backhand::{Filesystem, FilesystemHeader};

// read let file = File::open("file.squashfs").unwrap(); let mut filesystem = Filesystem::from_reader(file).unwrap();

// add files let d = FilesystemHeader::default(); filesystem.pushfile("Fear is the mind-killer.", "a/d/e/newfile", d); filesystem.pushfile("It is by will alone I set my mind in motion.", "rootfile", d);

// modify file let file = filesystem.mutfile("/a/b/c/d/e/firstfile").unwrap(); file.bytes = b"The sleeper must awaken.\n".to_vec();

// write let bytes = filesystem.to_bytes().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!

unsquashfs

```console Usage: unsquashfs [OPTIONS]

Commands: extract-all Extract all files(Symlink/Files/Dirs) from image help Print this message or the help of the given subcommand(s)

Arguments: squashfs file

Options: -o, --offset [default: 0] -h, --help Print help information -V, --version Print version information ```

add

```console Binary to add file to squashfs filesystem

Usage: add

Arguments: Squashfs file

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