About ***** 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). As the name suggests, this is not the original user space tooling for SquashFS, which are currently maintained in parallel elsewhere. After a long period of silence on the SourceForge site and mailing list, I attempted to fork the existing code base with the intention to restructure/clean it up and add many features I personally perceived to be missing, but I ultimately decided that it would be easier to start from scratch than to work with the existing code. Here are some of the features that primarily distinguish this package from the (at the time of writing recent) squashfs-tools 4.3: - Reproducible SquashFS images, i.e. deterministic packing without any local time stamps. - Linux `gen_init_cpio` like file listing for micro managing the file system contents, permissions, and ownership without having to replicate the file system (and especially permissions) locally. - Support for SELinux contexts file (see selabel_file(5)) to generate SELinux labels. - Structured and (hopefully) more readable source code that should be better maintainable in the long run. In addition to that, tools have been added to directly convert a tar archive into a SquashFS filesystem image and back. This allows for using existing tools can work on tar archives seamlessly on SquashFS images. The tools in this package have different names, so they can be installed together with the existing tools: - `gensquashfs` can be used to produce SquashFS images from `gen_init_cpio` like file listings or simply pack an input directory. - `rdsquashfs` can be used to inspect and unpack SquashFS images. - `sqfs2tar` can turn a SquashFS image into a tar ball, written to stdout. - `tar2sqfs` can turn a tar ball (read from stdin) into a SquashFS image. Future plans ************ In addition to the above, the following things would be really nice to have eventually: - A tool for merging multiple images into one - A tool for splitting an image - A diff tool - Diff of the directory tree of two images - Diff of the file meta data in two images - File level diffs - Combinations of the above in a still human readable form - [IN PROGRESS] A *complete* specification of the on-disk format and all the arbitrary checks enforced by the kernel. - Patching kernel and user space to support SquashFS on top of UBI - Patching kernel and user space to support ACLs Copyright & License ******************* The source code in this package has been written by me, David Oberhollenzer, in 2019 and is released under the terms and conditions of the GNU General Public License version 3 or later. To the best of my knowledge, no code has been copied over from the original SquashFS tools. The kernel documentation, the kernel headers and this web site have been used as main sources for understanding SquashFS: https://dr-emann.github.io/squashfs/ Some additional information (such as xattr implementation) has been gathered from various mailing lists and other web sources. Compressor implementations are primarily based on the documentation of the compression libraries. The existing unsquashfs tool and kernel implementation were used for trial and error testing during development.