This is a fork from union-fs (https://github.com/rpodgorny/unionfs-fuse) with small changes made to make it build on MacOS and also this git repo provides MacOS binaries.
The release is built on MacOS using following software macOS 12.4 Xcode 13.4.1 cmake version 3.23.0
Optionally if ninja is installed it will build with that rather than make.
To build run ./build.sh
With the above setup this will build without errors and warnings. The result will be in directory output
.
This branch is forked from master branch of union-fuse, this is currently a pre-release of 2.3
Prebuilt binaries are in release/unionfs-fuse-macos-2.3-prerelease.tar.gz
. These are universal2 macOS binaries (intel and arm64)
This is my effort to create a unionfs filesystem implementation which is way more flexible than the current in-kernel unionfs solution.
I'm open to patches, suggestions, whatever...
The preferred way is the github issue tracker with the mailing list at [email protected] as backup. Or see http://groups.google.com/group/unionfs-fuse.
- The filesystem has to be mounted after the roots are mounted when using the standard module. With unionfs-fuse, you can mount the roots later and their contents will appear seamlesly
- You get caching (provided by the underlying FUSE page cache) which speeds things up a lot for free
- Advanced features like copy-on-write and more
- Compared to kernel-space solution we need lots of useless context switches which makes kernel-only solution clear speed-winner (well, actually I've made some tests and the hard-drives seem to be the bottleneck so the speed is fine, too)
You can either use plain make or cmake (pick one).
- plain make
Just issue make
- this compiles the code with some static settings (xattrs enabled, hard-coded libfuse2, ...) tuned for my linux system.
- cmake
mkdir build
cd build
cmake ..
make
This should allow for compilation on wider variety of systems (linux, macos, ...) and allows to enable/disable some features (xattrs, libfuse2/libfuse3, ...).
To see the list of all options, run cmake -LAH
after the cmake ..
step.
Example of option usage:
cmake .. -DWITH_LIBFUSE3=FALSE -DWITH_XATTR=FALSE
unionfs-fuse has been successfully compiled and run on MacOS (with the help of macfuse - formerly osxfuse).
Since I have no access to Apple hardware+software I'm only dependent on other people's contributions.
When building for MacOS on MacOS, the "cmake option" is the recommended one.
For the linux-based development I've managed to create a limited MacOS testing environment with Vagrant (see below) but it took me absurd amount of time and was so much pain in the ass I have no further intention to waste a single minute more on closed-source systems. Thanks Apple for reminding me of my old days with Windows and how horrible time it was. ;-)
To run the vagrant-based macos tests, just execute ./test_vagrant_macos.sh
.
This depends on a custom vagrant box. You can use the one I've built or you can build your own - all the required stuff should be in macos_vagrant
directory.