SquashFS Tools NG
SquashFS is a highly compressed, read only file system often used as a root fs on embedded devices, live systems or simply as a compressed archive format.
Think of it as a .tar.gz that you can mount (or XZ, LZO, LZ4, ZSTD).
This project originally started out as a fork of squashfs-tools 4.3, after encountering some short comings and realizing that there have been no updates on the SourceForge site or mailing list for years.
Even before the first public release, the fork was replaced with a complete re-write after growing frustrated with the existing code base. For lack of a better name, and because the original appeared to be unmaintained at the time, the name squashfs-tools-ng was kept, although the published code base technically never had any connection to squashfs-tools.
Maintenance of the original squashfs-tools has since resumed, squashfs-tools version 4.4 was released and continues to be maintained in parallel. The utilities provided by squashfs-tools-ng offer alternative tooling and are intentionally named differently, so both packages can be installed side by side.
The actual guts of squashfs-tools-ng are encapsulated in a library with a generic API designed to make SquashFS available to other applications as an embeddable, extensible archive format (or to simply read, write or manipulate SquashFS file systems).
The utility programs are largely command line wrappers around the library. The following tools are provided:
gensquashfs
can be used to produce SquashFS images fromgen_init_cpio
like file listings or simply pack an input directory. Can use an SELinux contexts file (see selabel_file(5)) to generate SELinux labels.rdsquashfs
can be used to inspect and unpack SquashFS images.sqfs2tar
can turn a SquashFS image into a tarball, written to stdout.tar2sqfs
can turn a tarball (read from stdin) into a SquashFS image.sqfsdiff
can compare the contents of two SquashFS images.
The library and the tools that produce SquashFS images are designed to operate deterministically. Same input will produce byte-for-byte identical output. Failure to do so is treated as a critical bug.
Installing
A number of Linux distributions already offer squashfs-tools-ng through their package management system. Replogy maintains an up to date list:
Pre-compiled binary packages for Windows are available here.
Those packages contain the binaries for the tools, the SquashFS library and pre-compiled dependency libraries (zstd, lzo, lzma; others are built in).
The binary package does not contain any source code. The corresponding source code from which the 3rd party libraries have been built is also available for download at the above location.
The headers and import libraries to build applications that use libsquashfs are included. For convenience, the pre-compiled, 3rd party dependency libraries also come with headers and import libraries.
Version history
Date | Release | Remarks |
---|---|---|
2024-09-26 | squashfs-tools-ng 1.3.2 is released | Fix file prefix for manifest glob with explicit directory |
2024-05-02 | squashfs-tools-ng 1.3.1 is released | Process xattr files if a manifest file is used |
2024-03-11 | squashfs-tools-ng 1.3.0 is released | Improved Windows filename handling, tar2sqfs exclude option |
2022-12-03 | squashfs-tools-ng 1.2.0 is released | Xattr manifest & manual file sort support |
2022-12-03 | squashfs-tools-ng 1.0.7 is released | Final relase of the 1.0.x backport branch |
2022-03-30 | squashfs-tools-ng 1.1.4 is released | Mostly Windows fixes, including character encoding |
2021-08-15 | squashfs-tools-ng 1.1.3 is released | Fixed accidental 4GiB limit for tarballs |
2021-08-15 | squashfs-tools-ng 1.0.6 is released | Contains backported fixes from 1.1.3 release |
2021-06-25 | squashfs-tools-ng 1.1.2 is released | |
2021-06-25 | squashfs-tools-ng 1.0.5 is released | Contains backported fixes from 1.1.2 release |
2021-05-07 | squashfs-tools-ng 1.1.1 is released | Fixed reading parallel compressed tarballs |
2021-03-28 | squashfs-tools-ng 1.1.0 is released | Support compressed tarballs, including bzip2 |
2021-01-23 | squashfs-tools-ng 1.0.4 is released | Force exact, byte-for-byte matches in deduplication |
2020-11-05 | squashfs-tools-ng 1.0.3 is released | |
2020-09-03 | squashfs-tools-ng 1.0.2 is released | |
2020-08-03 | squashfs-tools-ng 1.0.1 is released | |
2020-06-13 | squashfs-tools-ng 1.0.0 is released | First major relase with ABI frozen |
2020-05-03 | squashfs-tools-ng 0.9.1 is released | |
2020-03-30 | squashfs-tools-ng 0.9.0 is released | |
2019-12-30 | squashfs-tools-ng 0.8.0 is released | Windows & BSD port |
2019-10-08 | squashfs-tools-ng 0.7.0 is released | Public, LGPL licensed libsquashfs added |
2019-08-27 | squashfs-tools-ng 0.6.1 is released | |
2019-08-22 | squashfs-tools-ng 0.6.0 is released | sqfsdiff added |
2019-07-28 | squashfs-tools-ng 0.5.0 is released | NFS export support, largefile support |
2019-07-17 | squashfs-tools-ng 0.4.2 is released | |
2019-07-07 | squashfs-tools-ng 0.4.1 is released | |
2019-07-04 | squashfs-tools-ng 0.4.0 is released | |
2019-06-30 | squashfs-tools-ng 0.3.0 is released | tar2sqfs and sqfs2tar added |
2019-06-13 | squashfs-tools-ng 0.2.0 is released | |
2019-06-09 | squashfs-tools-ng 0.1.0 is released | First working proof of concept |
Documentation
The doxygen reference for the current release of libsquashfs is available here: libsquashfs API reference.
A writeup on the SquashFS on-disk format is also available.
Man pages are provided for the individual tools.
Getting the Source Code
Release tar balls are published in the pub directory.
The Git tree is hosted on git.infraroot.at as well as on GitHub.
Those two Git trees are kept in sync and issues & pull-requests on the GitHub pages are accepted.
Contact
Besides the issue tracker on GitHub, you can reach me via e-mail as goliath on infraroot.at.
There is currently no official mailing list. For the time being I’ll use the existing squashfs-tools mailing list for announcments, until I’m booted off.