Challenge Overview
Brotli is a compression format from Google. https://github.com/google/brotli
SquashFS is a Linux utility that can build compressed file systems. http://squashfs.sourceforge.net
For this challenge, we are going to implement a proof of concept that implements a Brotli compression wrapper for SquashFS, allowing us to use "mksquashfs" to build a file system (either a file or an external drive) that we can read and write from that is Brotli compressed.
Detailed requirements:
We are going to target the latest version of SquashFS (4.3). Your build / verification target should be Ubuntu 14.04.
Have a look at the gzip wrapper implementation to get a good idea of what is required. We want to support the Brotli compression level as a configuration parameter, similar to the GZIP_DEFAULT_COMPRESSION_LEVEL flag in the gzip_wrapper.c file.
The Brotli library should be used as a library, similar to how the zlib library is lined in for the gzip implementation.
Documentation and Verification:
Documentation and verification information are a big part of this challenge. You need to provide cleare details on how to set up Ubuntu 14.04 with the necessary development environment, how to build and install Brotli, how to build the updated codebase for verification, and anything else needed to deploy the code.
For testing, please provide at least one detailed example of how to make a Brotli-squashed file system, mounting that file system, and reading files from it.
Future
If this challenge goes well, we will be integrating the change back into the Linux kernel in a future challenge so we can boot from a Brotli-compressed file system.
Final Submission Guidelines
Please see above. Your submission needs to include:
- The updated SquashFS codebase and makefile
- Detailed deployment documentation, including how to compile brotli
- Detailed verification documentation, including how to use the updated tools for making a Brotli compressed file system.
- Make sure your verification document includes how to create a squash FS file system with test files, documentation on mounting and reading the file system, and how to create a new FS with new files.