{"id":16876446,"url":"https://github.com/raphaelsc/ghostfs","last_synced_at":"2025-04-11T11:32:45.574Z","repository":{"id":150403568,"uuid":"49220204","full_name":"raphaelsc/ghostfs","owner":"raphaelsc","description":"Ghost File System or simply GhostFS","archived":false,"fork":false,"pushed_at":"2016-02-17T03:56:31.000Z","size":760,"stargazers_count":16,"open_issues_count":1,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-25T07:51:13.668Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raphaelsc.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-01-07T17:43:04.000Z","updated_at":"2023-03-23T02:55:32.000Z","dependencies_parsed_at":"2023-05-02T19:48:04.011Z","dependency_job_id":null,"html_url":"https://github.com/raphaelsc/ghostfs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelsc%2Fghostfs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelsc%2Fghostfs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelsc%2Fghostfs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphaelsc%2Fghostfs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raphaelsc","download_url":"https://codeload.github.com/raphaelsc/ghostfs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248384142,"owners_count":21094675,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T15:39:28.483Z","updated_at":"2025-04-11T11:32:45.549Z","avatar_url":"https://github.com/raphaelsc.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Ghost File System or simply GhostFS\n\nSay hi to our mascot, his name is Ghoster:\n    https://github.com/raphaelsc/ghostfs/blob/master/images/ghoster.jpg\n\nFile system created to allow an user to randomly access content of a remote\nfile as if the file were stored locally.\n\nWhat does make GhostFS different than other network-based file systems?\nTo answer that, let me first introduce a new term:\nGhost File: Think of it as a symbolic link that is linked to a remote file.\nGhostFS allows coexistence of ghost files that are linked to remote files from\ndifferent servers that use different protocols.\nGhostFS was also designed to easily support new protocols, even those ones that\nhave no notion of files, such as SQL. GhostFS can also be seen as a powerful\ntool to interact with cloud storage services, such as Google Drive and Dropbox.\n\nOnly HTTP and HTTPS protocols are supported at the moment, but the goal is to\nadd support to other protocols, such as FTP, SCP and even SQL.\n\nGhostFS takes advantange of Linux filesystem interface to allow users to use\ntheir existing tools on files stored in a GhostFS mount point.\n\nHow to build it?\n\nInstalling required packages for \n    Fedora:\n    yum install -y fuse fuse-devel libcurl libcurl-devel python-devel\n    \n    Debian:\n    apt-get install -y curl libcurl-dev fuse libfuse-dev libboost-all-dev libpython-dev\n\nBuild the project with:\n    cmake .; make;\n\nInstall it with:\n    sudo make install\n    \nCreate a deb or rpm package with:\n    sudo make package\n\nHow to use it?\n\n1) Mount the file system:\n    ./ghostfs /path/to/mount/point\n2) Create an empty file:\n    touch /path/to/mount/point/\u003cfile\u003e\n3) Set attribute url of the empty file using extended attribute:\n    setfattr -n url -v http://\u003caddress\u003e /path/to/mount/point/\u003cfile\u003e\n\nFor debugging, GhostFS may be mounted as follow:\n    ./ghostfs -d /path/to/mount/point\n\nSteps 1, 2 and 3 can be done in a single step with:\n    ./gmount /path/to/mount/point http://\u003caddress\u003e \u003cfile\u003e\n\nAnd that's all. Now you can randomly access content of the remote file.\n\nFor example, let's do that with a remote video file:\n\n1) Mount the file system:\n    mkdir ./my_ghost_fs; ./ghostfs ./my_ghost_fs\n2) Create a file in ./my_ghost_fs pointing to the remote video:\n    touch ./my_ghost_fs/video.mp4\n    setfattr -n url -v \\\n    http://bollywoodmp4.net/videos/2016/saala-khadoos/hq/saala-khadoos-bollywoodmp4-net.mp4 \\\n    ./my_ghost_fs/video.mp4\n\nNow you can watch the video by opening ./my_ghost_fs/video.mp4\n\nNOTE: In the future, we may replace extended attribute with symbolic link, so\nstep 2 and 3 (of 'How to use it?') would be replaced by:\n    ln -s /path/to/mount/point/\u003cfile\u003e http://\u003caddress\u003e\nSimpler, no?\n\nNOTE: By the way, a protocol plugin system was recently added to GhostFS (kudos\nto Pericles (@gogo40)), so adding support to new protocols may be relatively easy.\nTake a look at /protocol for a better understanding of how it works.\n\nFor further information, feel free to reach me at:\n    raphael.scarv@gmail.com\n\nThanks.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphaelsc%2Fghostfs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraphaelsc%2Fghostfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphaelsc%2Fghostfs/lists"}