centos源码编译docker

centos7 直接安装golang

yum install golang

centos6需添加软件源,然后再安装

rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
yum install golang

安装依赖包

yum groupinstall 'Development tools'
yum install glibc-static ?sqlite-devel.x86_64 libselinux-static libsepol-static
yum install libuuid-devel libattr-devel zlib-devel libacl-devel e2fsprogs-devel libblkid-devel lzo-devel  asciidoc xmlto

编译device mapper

git clone --no-checkout https://git.fedorahosted.org/git/lvm2.git /usr/local/lvm2 && cd /usr/local/lvm2 && git checkout -q v2_02_103
#如果下载超时,使用https://github.com/steven676/lvm2.git代替,或直接从https://git.fedorahosted.org/cgit/lvm2.git/refs/tags下载
cd /usr/local/lvm2 && ./configure --enable-static_link && make  && make install

此处要注意别用./configure --enable-static_link && make device-mapper && make install_device-mapper只编译device mapper,这样有可能因为lvm与device
mapper不匹配,而导致lvm无法运行,在物理机下次重启时,所有lvm文件系统都不可用,只能重装操作系统了。

编译安装sqlite

wget http://www.sqlite.org/2015/sqlite-autoconf-3080803.tar.gz
<div style="word-wrap: break-word; font-family: 微软雅黑, 'Microsoft Yahei', 'Helvetica Neue', 'Hiragino Sans GB', 宋体, simsun, 黑体, Arial, sans-serif; font-size: 16px; line-height: 24px;">./configure</div><div style="word-wrap: break-word; font-family: 微软雅黑, 'Microsoft Yahei', 'Helvetica Neue', 'Hiragino Sans GB', 宋体, simsun, 黑体, Arial, sans-serif; font-size: 16px; line-height: 24px;">make install</div>

安装btrfs-progs

centos7

yum install btrfs-progs

centos6

git clone git://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git
cd btrfs-progs
./autogen.sh 
./configure
make
make install

设置环境变量

export GOPATH=/path/to/go   #docker目录放在<span style="font-family: 微软雅黑, 'Microsoft Yahei', 'Helvetica Neue', 'Hiragino Sans GB', 宋体, simsun, 黑体, Arial, sans-serif;">/path/to/go/docker</span>
export AUTO_GOPATH=1

静态编译docker

<pre name="code" class="plain"><span style="font-family: 微软雅黑, 'Microsoft Yahei', 'Helvetica Neue', 'Hiragino Sans GB', 宋体, simsun, 黑体, Arial, sans-serif;"> ./hack/make.sh binary</span>

动态编译docker

<span style="font-family: 微软雅黑, 'Microsoft Yahei', 'Helvetica Neue', 'Hiragino Sans GB', 宋体, simsun, 黑体, Arial, sans-serif;"> ./hack/make.sh dynbinary</span>

TroubleShooting

  • 执行lvm --version出错:

lvm: relocation error: lvm: symbol dm_get_status_cache, version Base not defined in file libdevmapper.so.1.02 with link time reference

这是由于之更新了device mapper,没有更新lvm导致,直接运行:

cd /usr/local/lvm2 && ./configure --enable-udev_sync && make && make install
  • 启动docker时报如下警告

level="warning" msg="WARNING: Udev sync is not supported. This will lead to unexpected behavior, data loss and errors"

原因在于编译device mapper时没有添加对 udev sync的支持,执行如下命令重新编译:

yum install libudev-devel
cd /usr/local/lvm2 && ./configure --enable-udev_sync && make && make install
cd docker && ./hack/make.sh dynbinary

由于现在udev没有可用静态库,所以只能编译device mapper的动态链接库,也就只能编译动态链接版的docker。

  • centos7编译device mapper出错,错误信息如下,未解决,求助?

/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/libselinux.a(seusers.o): In function `getseuserbyname‘:

(.text+0x334): warning: Using ‘getgrouplist‘ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/libselinux.a(seusers.o): In function `getseuserbyname‘:

(.text+0x306): warning: Using ‘getgrnam_r‘ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/libselinux.a(seusers.o): In function `getseuserbyname‘:

(.text+0x570): warning: Using ‘getpwnam_r‘ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/libselinux.a(load_policy.o): In function `selinux_mkload_policy‘:

(.text+0x302): undefined reference to `lzma_stream_decoder‘

/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/libselinux.a(load_policy.o): In function `selinux_mkload_policy‘:

(.text+0x411): undefined reference to `lzma_code‘

/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/libselinux.a(load_policy.o): In function `selinux_mkload_policy‘:

(.text+0x482): undefined reference to `lzma_end‘

/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/libselinux.a(load_policy.o): In function `selinux_mkload_policy‘:

(.text+0x642): undefined reference to `lzma_end‘

/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/libselinux.a(label_file.o): In function `closef‘:

(.text+0x136): undefined reference to `pcre_free‘

/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/libselinux.a(label_file.o): In function `closef‘:

(.text+0x13f): undefined reference to `pcre_free_study‘

/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/libselinux.a(label_file.o): In function `compile_regex.isra.5‘:

(.text+0x270): undefined reference to `pcre_compile‘

/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/libselinux.a(label_file.o): In function `compile_regex.isra.5‘:

(.text+0x291): undefined reference to `pcre_study‘

/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/libselinux.a(label_file.o): In function `lookup‘:

(.text+0x4fa): undefined reference to `pcre_exec‘

/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/libselinux.a(label_file.o): In function `lookup‘:

(.text+0x572): undefined reference to `pcre_exec‘

collect2: error: ld returned 1 exit status

make[1]: *** [dmsetup.static] Error 1

make[1]: Leaving directory `/root/lvm2-2_02_103/tools‘

make: *** [tools.device-mapper] Error 2

  • 静态编译版的docker在启动时出错(动态编译版运行正常),信息如下,未解决,求助。

# /root/go/docker/bundles/1.4.1-dev/binary/docker-1.4.1-dev -H unix:///var/run/docker.sock -H tcp://0.0.0.0:5050 -d -g /home/docker/  --bridge="" --group=""

INFO[0000] +job serveapi(unix:///var/run/docker.sock, tcp://0.0.0.0:5050)

INFO[0000] WARNING: You are running linux kernel version 2.6.32-431.el6.x86_64, which might be unstable running docker. Please upgrade your kernel to 3.8.0.

WARN[0000] WARNING: Udev sync is not supported. This will lead to unexpected behavior, data loss and errors

INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)

INFO[0000] Listening for HTTP on tcp (0.0.0.0:5050)

INFO[0000] /!\ DON‘T BIND ON ANOTHER IP ADDRESS THAN 127.0.0.1 IF YOU DON‘T KNOW WHAT YOU‘RE DOING /!\

fatal error: unexpected signal during runtime execution

[signal 0xb code=0x1 addr=0x0 pc=0x0]

runtime stack:

runtime: unexpected return pc for runtime.sigpanic called from 0x988759

runtime.throw(0x12bdce5)

/usr/lib/golang/src/pkg/runtime/panic.c:520 +0x69

runtime: unexpected return pc for runtime.sigpanic called from 0x988759

runtime.sigpanic()

/usr/lib/golang/src/pkg/runtime/os_linux.c:222 +0x3d

goroutine 24 [syscall]:

runtime.cgocall(0x402028, 0xc208399038)

/usr/lib/golang/src/pkg/runtime/cgocall.c:143 +0xe5 fp=0xc208399020 sp=0xc208398fd8

github.com/docker/docker/pkg/devicemapper._Cfunc_dm_udev_wait(0x0, 0xc2085970c0)

github.com/docker/docker/pkg/devicemapper/_obj/_cgo_defun.c:257 +0x31 fp=0xc208399038 sp=0xc208399020

github.com/docker/docker/pkg/devicemapper.dmUdevWaitFct(0x0, 0xc208399080)

/root/go/docker/pkg/devicemapper/devmapper_wrapper.go:247 +0x28 fp=0xc208399058 sp=0xc208399038

github.com/docker/docker/pkg/devicemapper.UdevWait(0x0, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/pkg/devicemapper/devmapper.go:287 +0x44 fp=0xc2083990c8 sp=0xc208399058

github.com/docker/docker/pkg/devicemapper.ActivateDevice(0xc208587b90, 0x25, 0xc2083508c0, 0x19, 0x1, 0x280000000, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/pkg/devicemapper/devmapper.go:641 +0x6a9 fp=0xc208399210 sp=0xc2083990c8

github.com/docker/docker/daemon/graphdriver/devmapper.(*DeviceSet).activateDeviceIfNeeded(0xc208041680, 0xc2080040c0, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/daemon/graphdriver/devmapper/deviceset.go:429 +0x1d3 fp=0xc2083992a8 sp=0xc208399210

github.com/docker/docker/daemon/graphdriver/devmapper.(*DeviceSet).setupBaseImage(0xc208041680, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/daemon/graphdriver/devmapper/deviceset.go:688 +0x472 fp=0xc208399378 sp=0xc2083992a8

github.com/docker/docker/daemon/graphdriver/devmapper.(*DeviceSet).initDevmapper(0xc208041680, 0x200001, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/daemon/graphdriver/devmapper/deviceset.go:1098 +0x1202 fp=0xc2083995e8 sp=0xc208399378

github.com/docker/docker/daemon/graphdriver/devmapper.NewDeviceSet(0xc2080817e0, 0x19, 0xc20000ef01, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/daemon/graphdriver/devmapper/deviceset.go:1688 +0x457 fp=0xc2083997c0 sp=0xc2083995e8

github.com/docker/docker/daemon/graphdriver/devmapper.Init(0xc2080817e0, 0x19, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/daemon/graphdriver/devmapper/driver.go:43 +0x16e fp=0xc208399890 sp=0xc2083997c0

github.com/docker/docker/daemon/graphdriver.GetDriver(0xcd1010, 0xc, 0xc20808e6e0, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)

/root/go/docker/.gopath/src/github.com/docker/docker/daemon/graphdriver/driver.go:136 +0x187 fp=0xc208399940 sp=0xc208399890

github.com/docker/docker/daemon/graphdriver.New(0xc20808e6e0, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7ff36b7071b0, 0xc2080019c0)

/root/go/docker/.gopath/src/github.com/docker/docker/daemon/graphdriver/driver.go:150 +0x2ac fp=0xc208399a98 sp=0xc208399940

github.com/docker/docker/daemon.NewDaemonFromDirectory(0x12dfc40, 0xc2080b7340, 0x0, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/daemon/daemon.go:861 +0x8b2 fp=0xc208399e18 sp=0xc208399a98

github.com/docker/docker/daemon.NewDaemon(0x12dfc40, 0xc2080b7340, 0x0, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/daemon/daemon.go:781 +0x43 fp=0xc208399e58 sp=0xc208399e18

main.func·002()

/root/go/docker/docker/daemon.go:104 +0x46 fp=0xc208399fa8 sp=0xc208399e58

runtime.goexit()

/usr/lib/golang/src/pkg/runtime/proc.c:1445 fp=0xc208399fb0 sp=0xc208399fa8

created by main.mainDaemon

/root/go/docker/docker/daemon.go:127 +0x336

goroutine 16 [chan receive]:

github.com/docker/docker/api/server.ServeApi(0xc20804cb00, 0x7ff36b70c3a8)

/root/go/docker/.gopath/src/github.com/docker/docker/api/server/server.go:1653 +0x473

github.com/docker/docker/engine.(*Job).Run(0xc20804cb00, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/engine/job.go:83 +0x837

main.mainDaemon()

/root/go/docker/docker/daemon.go:142 +0x5ba

main.main()

/root/go/docker/docker/docker.go:73 +0x424

goroutine 19 [finalizer wait]:

runtime.park(0x41a4b0, 0x12dc658, 0x12c3529)

/usr/lib/golang/src/pkg/runtime/proc.c:1369 +0x89

runtime.parkunlock(0x12dc658, 0x12c3529)

/usr/lib/golang/src/pkg/runtime/proc.c:1385 +0x3b

runfinq()

/usr/lib/golang/src/pkg/runtime/mgc0.c:2644 +0xcf

runtime.goexit()

/usr/lib/golang/src/pkg/runtime/proc.c:1445

goroutine 20 [syscall]:

os/signal.loop()

/usr/lib/golang/src/pkg/os/signal/signal_unix.go:21 +0x1e

created by os/signal.init·1

/usr/lib/golang/src/pkg/os/signal/signal_unix.go:27 +0x32

goroutine 17 [syscall]:

runtime.goexit()

/usr/lib/golang/src/pkg/runtime/proc.c:1445

goroutine 23 [chan receive]:

github.com/docker/docker/pkg/signal.func·002()

/root/go/docker/.gopath/src/github.com/docker/docker/pkg/signal/trap.go:30 +0x88

created by github.com/docker/docker/pkg/signal.Trap

/root/go/docker/.gopath/src/github.com/docker/docker/pkg/signal/trap.go:53 +0x28f

goroutine 25 [chan receive]:

github.com/docker/docker/pkg/listenbuffer.(*defaultListener).Accept(0xc20845c320, 0x0, 0x0, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/pkg/listenbuffer/buffer.go:43 +0xb3

net/http.(*Server).Serve(0xc208438de0, 0x7ff36b712a28, 0xc20845c320, 0x0, 0x0)

/usr/lib/golang/src/pkg/net/http/server.go:1698 +0x91

github.com/docker/docker/api/server.(*HttpServer).Serve(0xc20845c4a0, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/api/server/server.go:51 +0x4c

github.com/docker/docker/api/server.func·006()

/root/go/docker/.gopath/src/github.com/docker/docker/api/server/server.go:1648 +0x267

created by github.com/docker/docker/api/server.ServeApi

/root/go/docker/.gopath/src/github.com/docker/docker/api/server/server.go:1649 +0x3fa

goroutine 26 [chan receive]:

github.com/docker/docker/pkg/listenbuffer.(*defaultListener).Accept(0xc208351bc0, 0x0, 0x0, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/pkg/listenbuffer/buffer.go:43 +0xb3

net/http.(*Server).Serve(0xc2080056e0, 0x7ff36b712a28, 0xc208351bc0, 0x0, 0x0)

/usr/lib/golang/src/pkg/net/http/server.go:1698 +0x91

github.com/docker/docker/api/server.(*HttpServer).Serve(0xc208351fa0, 0x0, 0x0)

/root/go/docker/.gopath/src/github.com/docker/docker/api/server/server.go:51 +0x4c

github.com/docker/docker/api/server.func·006()

/root/go/docker/.gopath/src/github.com/docker/docker/api/server/server.go:1648 +0x267

created by github.com/docker/docker/api/server.ServeApi

/root/go/docker/.gopath/src/github.com/docker/docker/api/server/server.go:1649 +0x3fa

参考文献:

http://www.tuicool.com/articles/6VBnQj

时间: 2024-09-29 03:19:52

centos源码编译docker的相关文章

CentOS源码编译安装MySQL 5.5.15

CentOS源码编译安装MySQL 5.5.15 文章目录 [隐藏] 安装编译工具 下载源码 安装cmake和bison 编译安装MySQL 一些相关设置 安装编译工具 yum install gcc gcc-c++ yum install ncurses-devel 下载源码 mkdir -p /tmp cd /tmp wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.15.tar.gz/from/http://mysql.

CentOS 源码编译安装 Python3

准备 yum -y install wget gcc make libffi-devel zlib-devel readline-devel bzip2-devel ncurses-devel sqlite-devel gdbm-devel xz-devel tk-devel openssl-devel 说明: yum install wget gcc make readline-devel # 解决 import bz2 报错 yum install bzip2-devel # 解决 impo

centos源码编译apache

服务器 172.18.1.211         CentOS release 6.2 (Final)   2.6.32-220.7.1.el6.i686 客户机  172.18.18.212 1:在服务器上编译apache httpd的安装包可以去官网下载,最新的是http2.4 假设我服务器的那些依赖包都安装好了 下面是准备工作 [[email protected] ~]# rpm -qa |grep httpd  //查看我服务器原来有没有安装过httpd,如果有就要卸载 httpd-to

centos源码编译安装lamp环境

一.熟悉系统环境 查看系统版本号 cat /etc/issue 查看所有硬件的型号 dmidecode | more 查看memory info cat /proc/meminfo | more 查看CPU info cat /proc/cpuinfo 查看磁盘信息 df -lh 二.准备工作 更新系统时间 ntpdate time.windows.com;/sbin/hwclock -w 备份并替换系统的repo文件 sudo mv /etc/yum.repos.d/CentOS-Base.r

Linux/Centos 源码编译安装Mysql5.6

mysql安装软件版本 MySQL-5.6.32 (文中涉及到的软件包加最下方微信免费获取)上传mysql-5.6.32-linux-glibc2.5-x86_64.tar.gz到APP服务器目录:/usr/local/src (软件包见附件)#cd /usr/local/src#tar -zxvf mysql-5.6.32-linux-glibc2.5-x86_64.tar.gz#mv mysql-5.6.32-linux-glibc2.5-x86_64 /usr/local/mysql#gr

centos7 源码编译安装TensorFlow CPU 版本

一.前言 我们都知道,普通使用pip安装的TensorFlow是万金油版本,当你运行的时候,会提示你不是当前电脑中最优的版本,特别是CPU版本,没有使用指令集优化会让TensorFlow用起来更慢. 但是在编译之中,发现很多坑,由此记录一下. 环境相关: 系统:centos7 python版本:2.7.5 二.准备 1. 安装相关依赖 # 一般会缺失的依赖 yum -y install java-1.8.0-openjdk-devel automake autoconf libtool libi

centos 6.5源码编译安装subversion 1.8.10

一.简介 CentOS 6.5的yum源可以安装的SVN客户端版本太低了,1.6.11,所以需要升级到1.8.10,而官网有没有找到1.8.10的安装包,只能选择源码编译安装. 二.安装步骤 参考官网:http://svn.apache.org/repos/asf/subversion/trunk/INSTALL 源码下载:http://archive.apache.org/dist/subversion/ 源码编译subversion依赖许多别的工具,比如:apr.apr-util.libto

在CentOS 7上源码编译安装MySQL 5.7

1.系统环境 [[email protected]inux02 ~]# uname -r 3.10.0-514.el7.x86_64 [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [[email protected] ~]# rpm -qa | grep mariadb mariadb-libs-5.5.52-1.el7.x86_64 [[email protected] ~

【转】Linux CentOS内核编译:下载CentOS源码、编译2.6.32-220的错误(apic.c:819 error &#39;numi_watchdog&#39; undeclared)

一.下载CentOS源码 1.1 查看CentOS版本 cat /etc/issue 1.2 查看Linux内核版本 uname -r 1.3 下载 文件名:kernel-2.6.32-220.el6.src.rpm 下载地址:http://vault.centos.org/6.2/os/Source/SPackages/ 官网:http://vault.centos.org/ 1.4 从kernel-2.6.32-220.el6.src.rpm获取源码 1. rpm -i kernel-2.6