SolidFUSE is a FUSE (Filesystem in User Space) implementation to read/write to your Solid (Social Linked Data) Pods.
It aims to provide an easier way to manipulate resources in your Solid Pods and/or integrate some system tools with it.
SolidFUSE does not really handle Linked Data, and SolidFUSE is not a replacement for Solid Apps. It merely takes advantage of the directory-like structure of resources stored in Solid Pods. To utilize the full power of Solid, you should use Solid Apps, which can make use of the social and linked data aspects of Solid.
This application is in its early stage. See Features / TODOs below. PRs are welcome.
If you are new here, the following steps need to be performed (see explanation below):
- Install dependencies
- Create configuration file
- Run application
We use poetry
to manage environment and dependencies. You need to install it in accordance to your distro.
After having it, run the following command to automatically create environment and install dependencies:
poetry install
There is an example configuration file config_example.toml
with the source. You should (make a copy and) modify it according to your credentials.
I would recommend to copy it to
config.toml
, which is ignore by git as specified in.gitignore
, in case you want to do some commits
Assume your configuration file is named config.toml
, and you want to mount it under /mnt/solid
, run the following command:
poetry run src/solid-fuse.py config.toml /mnt/solid
This project is in early-stage. Breaking changes may be expected with every update.
SolidFUSE use solid-file-python
for authentication and performing operations. Currently, we use a custom implementation that integrated solid-oidc-client to support any Solid server (NSS, CSS, ESS). This will be changed after upstream has made the support official (see this issue).
- Mount Solid Pod as a filesystem
- Present the directory structure
- Show file sizes
- More efficient method (that does not require downloading the whole file)
- Read file contents
- Text files
- Binary files
- Update cache
- Automatically update cache after modification
- Automatically update cache by time-out
- Edit files
- Create files
- Update local cache after combined writing (e.g. after
echo 1 > file.txt
, but not aftertouch file.txt
)
- Update local cache after combined writing (e.g. after
- Delete files
- Show linked files
- ACL
- Meta
- Show time
Note: creating linked files is impossible for a filesystem, because this notion does not exist.
- Log-in / Authenticate
- No-log-in support (public resources)
- Map (current user) permission as POSIX permission (no
chmod
support) - Change backend to support Solid servers other than NSS
- Refresh token after expiration (an upstream issue)
- Local (in-memory) caching
- On-demand caching (do not download everything in the beginning)
- Cache expiration
- Really async and lock
- File size async
- Async with lock
- Configuration file
- Command-line arguments
- Multiple Pods
- Unmount when stopped
- Packaging
- Extract high-level interfaces for wrapping low-level FUSE interfaces
- Maybe release as a separate library?
Copyright 2023 Rui Zhao (renyuneyun)
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.