centos源碼編譯docker

來源:互聯網
上載者:User

標籤:docker   編譯   源碼   centos   

centos7 直接安裝golang
yum install golang
centos6需添加軟體源,然後再安裝
rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpmyum install golang

安裝依賴包
yum groupinstall 'Development tools'yum install glibc-static ?sqlite-devel.x86_64 libselinux-static libsepol-staticyum 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-progscentos7
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 ./configuremakemake 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-develcd /usr/local/lvm2 && ./configure --enable-udev_sync && make && make installcd 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

centos源碼編譯docker

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.