使用IPFS搭建Ubuntu apt 镜像站点

使用IPFS搭建Ubuntu apt 镜像站点

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

须要这几个步骤:github

一、下载镜像包

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

具体方法参见:ubuntu

二、添加到IPFS存储中

须要启用file store特征(目前仍是体验阶段,不稳定),以下:服务器

ipfs config --json Experimental.FilestoreEnabled true

而后,运行:ionic

ipfs add -r mirror --nocopy

加了--nocopy参数后,再也不复制文件内容,能够减小存储空间和加入IPFS  repo的时间。spa

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

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

三、客户端apt访问

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

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

四、加入名称解析

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

方法主要有:

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

五、总结

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