在mips架构的系统上安装ipfs

最近接到了一个任务,在一块板上调试ipfs。所以呢,首先就要在板子上安装ipfs,可是令人头疼的是,那块板的芯片架构是mips架构的,ipfs官网没有提供支持mips架构的安装包。我就想着,既然没有,我就自己编译一个出来呗,接着就展开了以下工作,使用ipfs源码,编译出适合mips架构的安装包:

1.由于板子上没有搭建go环境,不可以直接编译go-ipfs,所以我就选择在虚拟机上先编译好,再移植过去(有好处,请接着看)。虚拟机上的golang版本是1.10版本的(可以选择其他版本,但可能执行交叉编译的时候有问题),虚拟机是amd64架构的,不可以直接编译出mips架构可以执行的文件,因此需要进行交叉编译。具体的交叉编译步骤以下会简单介绍,你也可以自行google或baidu。

2.获取源代码

go get -u -d github.com/ipfs/go-ipfs     //也可以使用git clone https://github.com/ipfs/go-ipfs.git  获取

3.编译源代码

export GOPATH=/root/code/go     //可以自定义目录的

把源代码放到   $GOPATH/src/github.com/ipfs/go-ipf 目录下,执行以下命令

cd $GOPATH/src/github.com/ipfs/go-ipf

make install

4.好了?不,早着呢!执行make install可能会遇到一大堆问题

第一,网络问题,由于编译的时候,需要从ipfs官网下载一些包,ipfs官网需要fq才能访问,最好是搞个fq路由器,这样命令行也可以fq,不然普通的fq方法只能使浏览器可以访问。

第二,执行make install 时,首先会从ipfs官网下载gx/gx-go(go-ipfs的包管理工具),把GOARCH设置为amd64后(export GOARCH=amd64),执行make install,此时除了网络问题,其他的应该问题不大,但是编译出来的ipfs执行文件(在/root/code/go/bin/目录下)只能在amd64架构执行。

以上步骤其实就是普通的编译安装ipfs过程,但是执行以上过程之后,我们就已经把所有需要的包都下载到本地了,接下来才是真正编译出mips架构可执行文件

1.设置交叉编译环境:

export GOOS=linux

export GOARCH=mipsle

2.执行

make install

此时将不会再遇到什么网络问题了,因为所需文件都已经下载到本地。但是由于ipfs源码不支持mips架构,所以还是会遇到一大堆问题的,比如:

gx/ipfs/QmTEmsyNnckEq8rEfALfdhLHjrEHGoSGFDrAYReuetn7MC/go-net/ipv4
../../../../../gx/ipfs/QmTEmsyNnckEq8rEfALfdhLHjrEHGoSGFDrAYReuetn7MC/go-net/ipv4/icmp.go:34:2: undefined: sysICMPFilter
gx/ipfs/QmTEmsyNnckEq8rEfALfdhLHjrEHGoSGFDrAYReuetn7MC/go-net/ipv6
../../../../../gx/ipfs/QmTEmsyNnckEq8rEfALfdhLHjrEHGoSGFDrAYReuetn7MC/go-net/ipv6/icmp.go:34:2: undefined: sysICMPv6Filter

就是说icmp.go文件里的sysICMPFilter、sysICMPv6Filter等未定义,解决方法是:

首先,在gen.go文件里添加mipsle的判断,可以参考https://bugzilla.redhat.com/attachment.cgi?id=1147705&action=diff,接着从网上自行找一份zsys_linux_mipsle.go文件添加到对应得文件夹里面,可以从以下链接尝试寻找:

https://github.com/kubeflow/katib/blob/master/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go

https://github.com/intel/multus-cni/tree/master/vendor/golang.org/x/net/ipv4

然后,再次执行make install,若还是以上问题,则需要在zsys_linux_mipsle.go文件里面添加sysICMPFilter结构,可以参考其他的zsys_linux文件;接着遇到的问题也与以上的大同小异,解决方法也是修改zsys_linux_mipsle.go文件(注意ipv4、ipv6的都要改)。

最好,再次执行make install,此时应该没有什么大问题了,生成的执行文件在/root/code/go/bin/linux_mips/ipfs 路径下。把对应的ipfs执行文件移植到mips板子上,应该就可以执行成功了!

好了,以上就是本文章的全部内容了,希望可以帮到你。若有什么疑问,可以在下方进行评论留言,我们一起探讨!

本文章为原创内容,未经允许,不得转发!

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值