Giter Club home page Giter Club logo

bindfs's Introduction

Overview

bindfs - https://bindfs.org/

This repo has been patched to support NDK compilation for android, since some functions are not provided by bionic which are used in src/userinfo.c. Patch is done based on a termux patch.

bindfs is a FUSE filesystem for mirroring a directory to another directory, similarly to mount --bind. The permissions of the mirrored directory can be altered in various ways.

Some things bindfs can be used for:

  • Making a directory read-only.
  • Making all executables non-executable.
  • Sharing a directory with a list of users (or groups).
  • Modifying permission bits using rules with chmod-like syntax.
  • Changing the permissions with which files are created.

Non-root users can use almost all features, but most interesting use-cases need user_allow_other to be defined in /etc/fuse.conf.

Installation

Make sure FUSE 2.6.0 or above is installed (https://github.com/libfuse/libfuse).

Download a release or clone this repository.

Then compile and install as usual:

./configure
make
make install

If you want the mounts made by non-root users to be visible to other users, you may have to add the line user_allow_other to /etc/fuse.conf.

In Linux-based OSes, you may have to add your user to the fuse group.

Usage

See the bindfs --help or the man-page for instructions and examples.

OS X note

The following extra options may be useful under osxfuse:

-o local,allow_other,extended_security,noappledouble

See https://github.com/osxfuse/osxfuse/wiki/Mount-options for details.

Test suite

Build Status

Bindfs comes with a (somewhat brittle and messy) test suite. The test suite has two kinds of tests: those that have to be run as root and those that have to be run as non-root. To run all of the tests, do make check both as root and as non-root.

The test suite requires Ruby 1.8.7+. If you're using RVM then you may need to use rvmsudo instead of plain sudo to run the root tests.

Vagrant test runner

There is also a set of Vagrant configs for running the test suite on a variety of systems. Run them with vagrant/test.rb (add --help for extra options).

You can destroy all bindfs Vagrant machines (but not the downloaded images) with make vagrant-clean.

Cross Compile Instructions for Android Using NDK

  • bindfs requires fuse libraries for compilation. fuse compiled with NDK is used for this.

  • Follow instructions for fuse but do not build it.

  • Copy bindfs directory to android_ndk_cross_compile_build_automator/packages directory.

  • Copy bindfs/post_build_scripts/bindfs_extractor.sh file to android_ndk_cross_compile_build_automator/$POST_BUILD_SCRIPTS_DIR/ directory.

  • Add/Set fuse bindfs to $PROJECTS_TO_BUILD in android_ndk_cross_compile_build_automator.sh.

  • Add/Set fusermount_extractor.sh bindfs_extractor.fs to $POST_BUILD_SCRIPTS_TO_RUN in android_ndk_cross_compile_build_automator.sh. You can skip this optionally if you do not want to create a zip of the fusermount and bindfs binaries of all the archs that are built.

  • Add/Set armeabi armeabi-v7a arm64-v8a x86 x86-64 to $ARCHS_SRC_TO_BUILD in android_ndk_cross_compile_build_automator.sh or whatever ARCHS_SRC you want to build for. API_LEVEL in ARCH_SRC files must be 21 or higher otherwise compilation will fail. NDK must also be higher than r15. Check fuse/android_ndk_cross_compile_build.sh for more details.

#install dependencies
sudo apt install autoconf automake libtool

cd android_ndk_cross_compile_build_automator

#build
bash ./android_ndk_cross_compile_build_automator.sh

  • android_ndk_cross_compile_build_automator will call fuse/android_ndk_cross_compile_build.sh script to build and install each ARCHS_SRC. fuse for each ARCHS_SRC will be installed at android_ndk_cross_compile_build_automator/$INSTALL_DIR/fuse/$ARCHS_SRC.

  • android_ndk_cross_compile_build_automator will then call bindfs/android_ndk_cross_compile_build.sh script to build and install each ARCHS_SRC. bindfs for each ARCHS_SRC will be installed at android_ndk_cross_compile_build_automator/$INSTALL_DIR/bindfs/$ARCHS_SRC.

  • android_ndk_cross_compile_build_automator/$POST_BUILD_SCRIPTS_DIR/fusermount_extractor.sh will extract fusermount binaries from android_ndk_cross_compile_build_automator/$INSTALL_DIR/fuse/$ARCHS_SRC and zip them at android_ndk_cross_compile_build_automator/$OUT_DIR/fuse/fusermount<build-info>.zip.

  • android_ndk_cross_compile_build_automator/$POST_BUILD_SCRIPTS_DIR/bindfs_extractor.sh will extract bindfs binaries from android_ndk_cross_compile_build_automator/$INSTALL_DIR/bindfs/$ARCHS_SRC and zip them at android_ndk_cross_compile_build_automator/$OUT_DIR/bindfs/bindfs<build-info>.zip.

Install Instructions for Termux on Android

  • Download release zip or copy the zip built from source to your device.

  • Extract the binary of your device arch or abi from the zip.

#command to find device arch
uname -m

#command to find device abi
getprop ro.product.cpu.abi
  • Copy the binary to /data/data/com.termux/files/usr/bin and then set correct ownership and permissions by running the following commands in a non-root shell. If you run them in a root shell, then binary will only be runnable in a root shell.
export scripts_path="/data/data/com.termux/files/usr/bin"; export termux_uid="$(id -u)"; export termux_gid="$(id -g)"; su -c chown $termux_uid:$termux_gid "$scripts_path/bindfs" && chmod 700 "$scripts_path/bindfs";

License

GNU General Public License version 2 or any later version. See the file COPYING.

bindfs's People

Contributors

agnostic-apollo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

bindfs's Issues

Broken `--resolve-symlinks` option

If a folder is mounted using the bindfs --resolve-symlinks option this breaks the permissions of the mounted directory completely. Thus you cannot use the directory in any way even as root.

Using the arm7 version on Android 11.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.