docker源码编译 linux_Docker最新源码编译 - 龙芯开源社区

本文详细介绍了如何在MIPS64LE架构的Linux系统上编译Docker源码,包括解决编译过程中遇到的错误,如类型不匹配问题,并提供相应的补丁和修改方案。最终,编译成功后的二进制文件位于bundles/lasted目录下。
摘要由CSDN通过智能技术生成

Docker 最新源码编译

安装依赖包

yum install -y glibc-static btrfs-progs-devel device-mapper-devel golang libselinux-static libsepol-static

yum install -y libuuid-devel libattr-devel zlib-devel libacl-devel e2fsprogs-devel libblkid

bash#git clone https://github.com/docker/docker.git  ;;克隆代码

bash#cd $DOCKER

bash#sh -x hack.sh/make.sh dynbinary  ;;编译开始

---------------------------------------------------------------------------------

' github.com/docker/docker/cmd/docker

# github.com/docker/docker/pkg/system

.gopath/src/github.com/docker/docker/pkg/system/stat_linux.go:13: cannot use s.Rdev (type uint32) as type uint64 in field value

# github.com/docker/docker/pkg/signal

.gopath/src/github.com/docker/docker/pkg/signal/signal_linux.go:33: undefined: syscall.SIGSTKFLT

.gopath/src/github.com/docker/docker/pkg/signal/signal_linux.go:41: undefined: syscall.SIGUNUSED

1.uint64(s.Rdev)

2.syscall.SIGSTKFLT-->16

3.syscall.SIGUNUSED-->31

---------------------------------------------------------------------------------

' github.com/docker/docker/cmd/dockerd

# github.com/docker/docker/vendor/github.com/boltdb/bolt

.gopath/src/github.com/docker/docker/vendor/github.com/boltdb/bolt/db.go:101: undefined: maxMapSize

.gopath/src/github.com/docker/docker/vendor/github.com/boltdb/bolt/db.go:101: invalid array bound maxMapSize

# github.com/docker/docker/vendor/github.com/vishvananda/netns

.gopath/src/github.com/docker/docker/vendor/github.com/vishvananda/netns/netns_linux.go:29: undefined: SYS_SETNS

# github.com/docker/docker/vendor/github.com/tonistiigi/fifo

.gopath/src/github.com/docker/docker/vendor/github.com/tonistiigi/fifo/handle_linux.go:39: cannot use stat.Dev (type uint32) as type uint64 in field value

.gopath/src/github.com/docker/docker/vendor/github.com/tonistiigi/fifo/handle_linux.go:65: invalid operation: stat.Dev != h.dev (mismatched types uint32 and uint64)

# github.com/docker/docker/vendor/github.com/google/certificate-transparency/go/x:509

.gopath/src/github.com/docker/docker/vendor/github.com/google/certificate-transparency/go/x509/x509.go:342: undefined: elliptic.P224

.gopath/src/github.com/docker/docker/vendor/github.com/google/certificate-transparency/go/x509/x509.go:355: undefined: elliptic.P224

.gopath/src/github.com/docker/docker/vendor/github.com/google/certificate-transparency/go/x509/x509.go:1461: undefined: elliptic.P224

# github.com/docker/docker/pkg/loopback

.gopath/src/github.com/docker/docker/pkg/loopback/loopback.go:56: invalid operation: dev == targetDevice (mismatched types uint64 and uint32)

# github.com/docker/docker/pkg/platform

.gopath/src/github.com/docker/docker/pkg/platform/architecture_linux.go:15: undefined: charsToString

1.创建 vendor/github.com/boltdb/bolt/bolt_mips64le.go文件,内容如下:

[bolt_mips64le.go]

// +build mips64le

package bolt

// maxMapSize represents the largest mmap size supported by Bolt.

const maxMapSize = 0x3FFFFFFF // 1GB

// maxAllocSize is the size used when creating array pointers.

const maxAllocSize = 0x3FFFFFFF

// Are unaligned load/stores broken on this arch?

var brokenUnaligned = false

2.创建vendor/github.com/vishvananda/netns/netns_linux_mips64le.go文件,内容如下

[netns_linux_mips64le.go]

// +build linux,mips64le

package netns

const (

SYS_SETNS = 5303

)

3.将handle_linux.go 39,65行 stat.Dev-->uint64(stat.Dev)

4.x509.go按照patch修改,内容如下:

diff --git a/vendor/src/github.com/google/certificate-transparency/go/x509/x509.go b/vendor/src/github.com/google/certificate-transparency/go/x509/x509.go

old mode 100755

new mode 100644

index cda7220..d879b91

--- a/vendor/src/github.com/google/certificate-transparency/go/x509/x509.go

+++ b/vendor/src/github.com/google/certificate-transparency/go/x509/x509.go

@@ -330,7 +330,6 @@ func getPublicKeyAlgorithmFromOID(oid asn1.ObjectIdentifier) PublicKeyAlgorithm

//

// NB: secp256r1 is equivalent to prime256v1

var (

-oidNamedCurveP224 = asn1.ObjectIdentifier{1, 3, 132, 0, 33}

oidNamedCurveP256 = asn1.ObjectIdentifier{1, 2, 840, 10045, 3, 1, 7}

oidNamedCurveP384 = asn1.ObjectIdentifier{1, 3, 132, 0, 34}

oidNamedCurveP521 = asn1.ObjectIdentifier{1, 3, 132, 0, 35}

@@ -338,8 +337,6 @@ var (

func namedCurveFromOID(oid asn1.ObjectIdentifier) elliptic.Curve {

switch {

-case oid.Equal(oidNamedCurveP224):

-return elliptic.P224()

case oid.Equal(oidNamedCurveP256):

return elliptic.P256()

case oid.Equal(oidNamedCurveP384):

@@ -352,8 +349,6 @@ func namedCurveFromOID(oid asn1.ObjectIdentifier) elliptic.Curve {

func oidFromNamedCurve(curve elliptic.Curve) (asn1.ObjectIdentifier, bool) {

switch curve {

-case elliptic.P224():

-return oidNamedCurveP224, true

case elliptic.P256():

return oidNamedCurveP256, true

case elliptic.P384():

@@ -1458,7 +1453,7 @@ func CreateCertificate(rand io.Reader, template, parent *Certificate, pub interf

hashFunc = crypto.SHA1

case *ecdsa.PrivateKey:

switch priv.Curve {

-case elliptic.P224(), elliptic.P256():

+case elliptic.P256():

hashFunc = crypto.SHA256

signatureAlgorithm.Algorithm = oidSignatureECDSAWithSHA256

case elliptic.P384():

5.将loopback.go 56行 targetDevice-->uint64(targetDevice)

6.在architecture_linux.go中添加函数

// Convert the OS/ARCH-specific utsname.Machine to string

// given as an array of signed int8

func charsToString(ca [65]int8) string {

s := make([]byte, len(ca))

var lens int

for ; lens < len(ca); lens++ {

if ca[lens] == 0 {

break

}

s[lens] = uint8(ca[lens])

}

return string(s[0:lens])

}

---------------------------------------------------------------------------------

.gopath/src/github.com/docker/docker/daemon/graphdriver/devmapper/deviceset.go:1558: cannot use dev (type uint32) as type uint64 in argument to major

.gopath/src/github.com/docker/docker/daemon/graphdriver/devmapper/deviceset.go:1559: cannot use dev (type uint32) as type uint64 in argument to minor

.gopath/src/github.com/docker/docker/daemon/graphdriver/devmapper/deviceset.go:1752: cannot use sysSt.Dev (type uint32) as type uint64 in argument to major

.gopath/src/github.com/docker/docker/daemon/graphdriver/devmapper/deviceset.go:1752: cannot use sysSt.Dev (type uint32) as type uint64 in argument to minor

1.将相应的地方,使用uint64()转换为64位

---------------------------------------------------------------------------------

编译成功会在bundles/lasted/ ,dynbinary-client dynbinary-deamon,

拷贝为binary-client binary-deamon执行make install ,可能会报错,需根据实际情况修改相应的地方。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值