gcsfa FUSE file system based on Google Drive
GCSF is a virtual filesystem that allows users to mount their Google Drive account locally and interact with it as a regular disk partition. You can find out more in this paper
Update (April 2019): I am currently still using and maintaining this project but I have very little time to dedicate to it. As such, it might take a while before I get around to fixing known bugs / implementing feature requests / responding to open issues. Thank you for understanding and for expressing sustained interest in this project!
Requirements
GCSF requires the stable branch of the Rust programming language, which can be installed following the instructions on rustup.rs. If you already have Rust installed, make sure that it is updated to the latest version (≥1.26):
$ rustup update stable
OSX
On Mac OSX, GCSF requires osxfuse and pkg-config:
$ brew update; brew install pkg-config; brew tap homebrew/cask; brew install --cask osxfuse
Ubuntu
On Ubuntu, GCSF requires libfuse-dev, libssl-dev and pkg-config:
sudo apt-get install -y libfuse-dev libssl-dev pkg-config
Arch Linux
An AUR package is maintained by axionl: gcsf-git.
SUSE
sudo zypper install -y fuse-devel fuse rust pkgconf-pkg-config
Other linux distros
Make sure you have pkg-config
and the fuse
library installed. These are usually found in the package repositories of major distributions.
FreeBSD
Rust can be installed via the lang/rust
port. You will need to install sysutils/fusefs-libs
for the cairo install
command to succeed.
Windows
Unfortunately, Windows is not supported at the time being. See issue #19.
Installation
After all requirements are met, GCSF can be installed using cargo
:
$ cargo install gcsf
This will generate the gcsf
binary in $HOME/.cargo/bin
. Make sure that this directory is in your PATH
variable: export PATH=$PATH:$HOME/.cargo/bin
Alternatively, you can download a release binary for your platform.
Configuration
GCSF will attempt to create a configuration file in $XDG_CONFIG_HOME/gcsf/gcsf.toml
, which is usually defined as $HOME/.config/gcsf/gcsf.toml
. Credentials are stored in the same directory.
GCP
- Visit console.developers.google.com and create a new project
- Add the Google Drive API to the project
- Configure an OAuth consent screen. Verification should not be required. Should be external unless this project is something internal to your GSuite
- Configure an OAuth2.0 credential. Do not use WEB as the token type if adding
gcsf
to a headless server - you want to be using theurn:*
URI (note: if using WEB, you'll need to set the accepted domains to includehttp://localhost:8081
) - Configure GCSF to use the new
client_id
,client_secret
, andproject_id
. You should have all these values after creating the credential. - Configure GCSF
authorize_using_code=True
if configuring for headless servers. If you do this, completing the OAuth flow in a different browser will provide you a code that you can give to GCSF.
Running gcsf login some_session_name
at this point should show a URL with your client_id
query parameter.
Usage
The first step is to log in to Drive and authorize the application. A name must be provided for the session:
$ gcsf login some_session_name
Please direct your browser to https://accounts.google.com/o/oauth2/[...] and follow the instructions displayed there.
Successfully logged in. Saved credentials to "$HOME/.config/gcsf/some_session_name"
You can also list all existing sessions:
$ gcsf list
Sessions:
- personal
- some_session_name
- work
And then mount one (or more) of them:
$ gcsf mount /mnt/gcsf -s some_session_name
INFO gcsf > Creating and populating file system...
INFO gcsf > File system created.
INFO gcsf > Mounting to /mnt/gcsf
INFO gcsf > Mounted to /mnt/gcsf
You can now find the contents of your Drive account in /mnt/gcsf
:
Using Ranger:
Or Thunar:
Why GCSF?
GCSF stands for "Google Conduce Sistem de Fișiere" which translated from Romanian is "Google Drive Filesystem". However GDFS already exists so it remains GCSF.
Troubleshooting
$mountpoint
: Operation not permitted (os error 1)
Could not mount to This error occurs when user_allow_other
is not set in /etc/fuse.conf
or the file has improper permissions. Fix by running (as root):
# echo 'user_allow_other' >> /etc/fuse.conf
# chmod 644 /etc/fuse.conf
# sudo chown root:root /etc/fuse.conf
libssl.so.1.0.0
You installed the prebuilt binaries but couldn't run it. Fix by installing rust and building from source.
Contributing
Contributions are welcome. Documentation available on docs.rs/gcsf. You can also help by reporting or fixing issues.