This repository was archived by the owner on Apr 16, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 11
This repository was archived by the owner on Apr 16, 2020. It is now read-only.
Filesystem Package Managers and rsync #81
Copy link
Copy link
Open
Labels
Description
We seem to be running into issues where using rsync on top of IPFS to load filesystem Package Manager registries into IPFS. These issues largely stem from IPFS simply being a different application than an OS's file system. There are a number of potential avenues to explore here that can each solve this problem.
- Just as we have ipget (https://github.com/ipfs/ipget) as an IPFS aware wget we could have ipsync
- We could create/utilize a filesystem layer to emulate the filesystem so that native tools like rsync work better
- FUSE: Because rsync relies on filesystem metadata this needs to be available either with some FUSE-internal metadata or within the IPLD objects describing the directories + files that FUSE is "rendering"
- Filestore: This is similar to FUSE with internal metadata since we can just leave the file metadata as it is. Currently we are not able to simply replace files stored in the Filestore and have everything work. This seems reasonable given that IPFS is an application, and the OS's default filesystem is a separate application that is totally unaware of IPFS. However, we could add some basic tooling to enable updating data stored in the Filestore API though if we wanted to.
- Strawman:
ipfs pin add --recursive --best-effort --force <path>which would change the folder from being strongly pinned (data is definitely kept) to weakly pinned (it's probably there, but no promises). Then dorsync, thenipfs pin add --recursive <path>to strongly re-pin the data.
- Strawman:
Notably each of these approaches basically amount to writing an IPFS application that properly handles rsync, whether we do it explicitly (ipsync, or a shell script) or implicitly (FUSE). When deciding a path forward we'll need to take into account Performance, DX for package managers, and Reusability beyond package managers.
Note: See #21 for more info
dirkmc