Skip to content
forked from CalebQ42/squashfs

A library to interact with Squashfs archives. Currently only has support for reading, but writing archives will probably come eventually.

License

Notifications You must be signed in to change notification settings

sylabs/squashfs

 
 

Repository files navigation

squashfs

PkgGoDev Go Report Card

This is a fork of CalebQ42/squashfs for the purpose of maintaing a package that removes the lzo dependency, so that it does not contain GPL code.

Branches

  • remove-lzo - main from CalebQ42/squashfs with LZO support removed.
  • remove-lzo-vX.Y.Z - vX.Y.Z from CalebQ42/squashfs with LZO support removed.

Tags

  • vX.Y.Z - vX.Y.Z from CalebQ42/squashfs with LZO support removed.

A PURE Go library to read squashfs. There is currently no plans to add archive creation support as it will almost always be better to just call mksquashfs. I could see some possible use cases, but probably won't spend time on it unless it's requested (open a discussion if you want this feature).

The library has two parts with this github.com/CalebQ42/squashfs being easy to use as it implements io/fs interfaces and doesn't expose unnecessary information. 95% this is the library you want. If you need lower level access to the information, use github.com/CalebQ42/squashfs/low where far more information is exposed.

Currently has support for reading squashfs files and extracting files and folders.

Special thanks to https://dr-emann.github.io/squashfs/ for some VERY important information in an easy to understand format. Thanks also to distri's squashfs library as I referenced it to figure some things out (and double check others).

FUSE

As of v1.0, FUSE capabilities has been moved to a separate library.

Limitations

  • No Xattr parsing.
  • Socket files are not extracted.
    • From my research, it seems like a socket file would be useless if it could be created.
  • Fifo files are ignored on darwin

Issues

  • Significantly slower then unsquashfs when extracting folders
    • This seems to be related to above along with the general optimization of unsquashfs and it's compression libraries.
    • Times seem to be largely dependent on file tree size and compression type.
      • My main testing image (~100MB) using Zstd takes about 6x longer.
      • An Arch Linux airootfs image (~780MB) using XZ compression with LZMA filters takes about 32x longer.
      • A Tensorflow docker image (~3.3GB) using Zstd takes about 12x longer.

Note: These numbers are using FastOptions(). DefaultOptions() takes about 2x longer.

Recommendations on Usage

Due to the above performance consideration, this library should only be used to access files within the archive without extraction, or to mount it via Fuse.

  • Neither of these use cases are largely effected by the issue above.

About

A library to interact with Squashfs archives. Currently only has support for reading, but writing archives will probably come eventually.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%