Skip to content
This repository was archived by the owner on Apr 16, 2020. It is now read-only.
This repository was archived by the owner on Apr 16, 2020. It is now read-only.

Filesystem Package Managers and rsync #81

@aschmahmann

Description

@aschmahmann

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.

  1. Just as we have ipget (https://github.com/ipfs/ipget) as an IPFS aware wget we could have ipsync
  2. 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 do rsync, then ipfs pin add --recursive <path> to strongly re-pin the data.

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions