#ipfs #ftp #ftp-server #rsync #http #directory-structure #mfs

app ftp2mfs

将 FTP 文件夹同步到 IPFS 的实用程序

5 个不稳定版本

0.3.1 2022年1月10日
0.3.0 2020年10月24日
0.2.0 2020年9月22日
0.1.1 2020年8月3日
0.1.0 2020年7月2日

#1885 in 命令行工具

MIT 许可证

125KB
3.5K SLoC

FTP2MFS

Crates.io

将文件夹同步到 IPFS 的可变文件系统(通过 ipfs files … 可访问的目录结构)。尽管名称如此,FTP2MFS 能够从 FTP、HTTP 目录列表、rsyncd 和本地文件系统读取。

注意:ftp2mfs 可以轻松地在几小时内镜像几个 100 GB,并保持与上游和本地 IPFS 节点的同步。IPFS 不一定能够从单个节点向网络提供这么多内容,有关解释和解决方案,请参阅 hyperprov

用法

您需要创建一个配置文件,指定要同步的内容,例如至少

# FTP server to read from
source: ftp://ftp.jaist.jp/pub/Linux/ArchLinux/core/os/x86_64/
# Beware that many FTP servers don't do well with IPv6 (Or maybe the FTP library ftp2mfs uses doesn't). If in doubt, specify the server by IP address, or change /etc/gai.conf to prefer IPv4, or …

# MFS folder to write to. The actual mirrored files will be written to $target/data
target: /some-archlinux-core-mirror

将文件保存为 ftp2mfs-cfg1 并运行 ftp2mfs --config ftp2mfs-cfg1(如果您尚未 cargo install 此工具,则为 cargo run --)。FTP2MFS 首先将文件在 /temp 的某个文件夹中实例化,一旦同步成功,就会在 $target 处创建一个副本。如果操作失败,使用相同的配置文件重新启动应继续操作。请注意,在执行任何复制/下载操作之前,会完全探索源文件夹结构,因此复制任何文件可能需要一段时间。

来源

所有源类型都有其优缺点。构建良好的镜像很困难。

HTTP

  • (+) 是唯一可加密/受保护的源。
  • (-) 没有定义目录列表的格式,目录结构是从 HTML 中猜测出来的:以 / 结尾的链接被视为目录,其他视为文件。不指向当前目录直接子级的链接将被忽略。
  • (-) 为检查每个文件是否更新,必须发送一个HEAD请求。这有些低效
  • (0) 从HTML目录列表中解析修改日期和文件大小可能很好

FTP

  • (+) 列出目录和传输文件的标准化协议
  • (-) 不支持FTP(它由底层库支持,实现起来也很容易)
  • (-) 许多FTP服务器不支持MLSD命令。为了找出文件是否已更新,FTP2MFS必须逐个文件发送一个CWD、一个MDTM和一个SIZE命令。这非常低效。
  • (0) 可能会添加对解析一些最常见的目录列表格式的支持

Rsync

  • (+) 与完整元数据的高效同步
  • (-) 自制的协议实现,没有标准化且文档很少
  • (-) 不安全

本地文件系统

  • (+) 这是唯一一个同步非常简单且因此可能正确实现的实现
  • (-) 您将拥有两份文件,一份在您的文件系统中,一份在您的IPFS存储库中(无文件存储/URL存储支持)
  • (0) 与FUSE结合可能很有趣

完整的配置格式

# The server to copy from
source: ftp://…|rsync://…|…
# Reprieve period for which files will be kept in MFS after deletion on server
reprieve: "1 month"
# Ignore glob patterns when listing files on server (gitignore style)
ignore:
  # Example: Whitelist only folders a and b
  - "/*"
  - "!a"
  - "!b"
  # setting --log-level=debug may help with debugging ignore rules

# FTP credentials, defaults to anonymous, can be overwritten from command line
user: anonymous
pass: [email protected] # Many FTP servers ask you to provide your e-mail address as password

# Path on MFS where the finalized sync result is kept
target: /publish-me
# Path on MFS where files are written to during sync - defaults to /temp/$hash_of_config
workdir: /temp/foobar
# Maximum render depth for self-referential symlinks (e.g. a -> .)
max_symlink_cycle: 0

依赖项

~23–39MB
~670K SLoC