使用IPFS搭建Ubuntu apt 镜像站点

使用IPFS搭建Ubuntu apt 镜像站点

Ubuntu apt安装和更新软件包太慢,考虑使用IPFS建立一个镜像站点。使用IPFS建立软件仓库源可以将版本永久保存,防止软件包灭失和版本错误。而且可以在任何地方建立存储,通过使用P2P机制传输,从而有可能大大加快安装过程。

需要这几个步骤:

1、下载镜像包

第一次下载的Ubuntu镜像包将近一个G,需要较长的时间。

具体方法参见:

2、添加到IPFS存储中

需要启用file store特征(目前还是体验阶段,不稳定),如下:

ipfs config --json Experimental.FilestoreEnabled true

然后,运行:

ipfs add -r mirror --nocopy

加了--nocopy参数后,不再复制文件内容,可以减少存储空间和加入IPFS  repo的时间。

不过,在运行到这里时,出错。再次运行,还是出错。反馈IPFS开发组后,只能暂时等等了。

added Qmety5wAXby6LRpfki6cTHsBuho643x32Ye49NyN6bW1Gc mirror/ubuntu/dists/bionic/main/installer-i386/20101020ubuntu529/images/netboot/mini.iso
 7.28 GB / 856.61 GB [==>-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------]   0.85% 4h3m11spanic: interface conversion: interface {} is cmdkit.Error, not *coreunix.AddedObject

goroutine 37 [running]:
github.com/ipfs/go-ipfs/core/commands.glob..func7.2(0xc4201600c0)
	/go/src/github.com/ipfs/go-ipfs/core/commands/add.go:405 +0xa60
created by github.com/ipfs/go-ipfs/core/commands.glob..func7.3
	/go/src/github.com/ipfs/go-ipfs/core/commands/add.go:467 +0xc7

3、客户端apt访问

apt主要依据/etc/apt/source.list的配置进行访问安装包的源。需要:

  • 将具体IPFS地址(如:http://127.0.0.1/ipfs/HashIDXXXX,或者http://ipfs.io/ipfs/HashIDXXXX)替换source.list中的地址。但是,内容变化了以后,哈希地址也会发生改变。

4、加入名称解析

因为IPFS是设计为永久保存的版本化存储系统,而Ubuntu的镜像库每天都有更新,每一次更新后再加入IPFS后,主目录的HashID会发生变化,从而导致客户端访问地址发生改变。因此,需要将这个动态的IPFS地址映射到一个不变的域名地址上去,以避免每次修改客户端的apt访问地址。

方法主要有:

  • 直接使用IPNS,但是目前的解析速度比较慢。IPNS可以将本地目录映射到主站ID,而主站ID是建立后就不变的。
  • 使用DNS服务器记录映射到最终的IPFS服务,每次更新后同时去更新DNS服务器记录。但是每天都更新的话,就比较烦了。
  • 直接将IPFS存储放在外网服务器,更新后直接Update Web服务器的解析地址配置表。这个因为需要比较大的存储和带宽,比较费银子。也没有发挥出IPFS泛在存储、P2P传输的优势。
  • 在外网建立一个Web服务器,每一次重新定向到新的地址。在每次更新后,需要将变更后的地址写入Web服务器的配置表中。但这需要每次变更后登录服务器进行修改,有一些麻烦(当然也可以写个脚本来干这个事)。
  • 每次产生一个新的source.list列表,上传到给定外网服务器地址。每次apt运行之前,先下载最新的source.list文件,然后再连接安装包的源进行正常的更新。或者只是上传这个HashID,客户端写个脚本,自动产生新的source.list,然后再进行apt的更新。这种方法比较简单有效,后面有时间再去尝试。

5、总结

  • 目前的实验不算成功,后续还需努力。
  • Ubuntu安装软件源的第一次同步是成功的,花费了接近十天,虽然中间rsync数次自动终止然后手动重启。
  • 添加到IPFS存储,如果使用复制模式则需要耗费双倍的存储空间、每次更新后都需要花费大量时间再次加入。但如果使用--nocopy选项,不复制内容,目前版本(4.14-dev)中间退出,不成功。
  • 为了每次更新后,Apt都能使用,需要将动态地址IPFS地址映射到固定域名和访问地址。目前的IPNS还需要大力改进,源于底层的DHT更新机制改进或者创建新的机制。一个可行的方案是主动更新source.list列表,建立apt仓库的二级更新机制。

猜你喜欢

转载自my.oschina.net/u/2306127/blog/1626254