在編譯docker代碼之前肯定需要研究一下docker的代碼結構以及官方推薦的方式,因為docker是開源的,所以很多第三方開發(fā)者參與。那么官方肯定會給出開發(fā)環(huán)境搭建的文檔,所以拿到代碼肯定先研究官方的編譯方法。通過文檔和代碼了解到docker官方推薦的是在docker本身的容器里面搭建環(huán)境和編譯,官方給出的是一個基于ubuntu的dockerfile。不過正是這個dockerfile可以清楚的知道需要為了編譯準備哪些依賴環(huán)境,為我們后面自己編譯提供了環(huán)境搭建的基礎。然后就嘗試了官方的編譯方案,結果各種網絡問題導致編譯通不過,當然網上也有相應的解決方案,基本上就是替換一些依賴源(國外的被墻了)。但是就算編譯通過了也只是一個基于ubuntu的二進制文件,只能在ubuntu的相應的系統(tǒng)上運行。我們需要的是一個可以在centos7上運行的二進制文件,關鍵要搭建一個可以持續(xù)開發(fā)和編譯測試的環(huán)境。當然也可以制作一個centos7的dockerfile文件,對照著官方的ubuntu的dockerfile也很簡單。但是這些都是還需要有一個前提,就是需要先安裝一個以前版本的docker來啟動這個環(huán)境澀,好處也是杠杠的,可以在任何一臺能夠運行docker的系統(tǒng)上進行開發(fā)和測試,而且可以進行持續(xù)集成。不過對于我們來說能夠編譯出一個穩(wěn)定運行在centos7上的二進制文件即可,所以就嘗試直接在本地進行編譯,而不是通過docker的容器進行。
創(chuàng)新互聯是一家業(yè)務范圍包括IDC托管業(yè)務,雅安服務器托管、主機租用、主機托管,四川、重慶、廣東電信服務器租用,四川主機托管,成都網通服務器托管,成都服務器租用,業(yè)務范圍遍及中國大陸、港澳臺以及歐美等多個國家及地區(qū)的互聯網數據服務公司。
經過研究docker的官方編譯腳步,發(fā)現本地編譯也很簡單,只需要在docker源碼的目錄下執(zhí)行如下命令即可:
./hack/make.sh binary
上面這條命令就只會生成docker的二進制文件,不過肯定不會這么順利的,執(zhí)行這個命令你就會發(fā)現錯誤。如果第一次執(zhí)行報的錯誤應該是找不到相應的go依賴包。那么現在就開始解決第一個問題,go依賴包。
解決go依賴包最直接的方法就一個一個去github或者其他地方去下載到本地,但是這樣做很麻煩,docker依賴的go語言包很多,然后依賴包可能又依賴其他包。這里有一個簡單實用的辦法,也是go語言管理項目的方便之處。通過go get命令來自動下載,例如發(fā)現報錯的是docker某一個目錄下的依賴包,那么可以如下執(zhí)行:
go get -v ./src/github.com/docker/docker/...
這條命令執(zhí)行以后整個docker目錄下源文件依賴的包都會被自動下載。如果發(fā)現其他目錄下源文件也報同樣的錯誤,可以按照次方法解決。不過這里需要強調一點,這些下載都是會下載最新的包,如果編譯老的docker肯定會出問題,如果編譯最新的docker代碼肯定不會有問題,因為官方的編譯是這種方式。
上面執(zhí)行的命令都是建立在go語言環(huán)境建立成功的基礎上,我安裝的go遇到是1.3.3版本的,采用源碼方式安裝。安裝在/export/servers/go下面,然后所有的go語言工程源碼目錄放在/export/servers/gopath。然后配置環(huán)境變量在用戶的根目錄下的.bashrc文件里面如下:
export GOPATH=/export/servers/gopath
export GOROOT=/export/servers/go
export GOARCH=amd64
export GOOS=linux
然后docker的代碼目錄如下:/export/servers/gopath/src/github.com/docker/docker。這樣才能在gopath下面進行依賴包的下載。通過上面的方法把所有依賴包下載完以后就可以進行編譯了。
在繼續(xù)編譯的過程中還會遇到缺少c語言依賴包缺少的問題,主要有三個,(1)sqlite3;(2)device-mapper;(3)btrfs.
第一個sqlite3可以使用如下命令安裝依賴:yum install sqlite-devel.x86_64
第二個在官方的dockerfile文件里面有解決方案,執(zhí)行如下命令:
git clone --no-checkout /usr/local/lvm2 cd /usr/local/lvm2 git checkout -q v2_02_103
cd /usr/local/lvm2 ./configure --enable-static_link make device-mapper make install_device-mapper
第三個btrfs使用如下安裝依賴: yum install btrfs-progs。
這些依賴都解決了就繼續(xù)編譯,這個時候可能會出現ld連接錯誤,提示找不到庫。因為docker編譯的方式完全是static,所以所有依賴的庫必須還要有相應的靜態(tài)庫(.a),而不是動態(tài)庫(.so)。剛才通過yum install sqlite-devel.x86_64安裝了sqlite3的依賴,但是最后發(fā)現里面沒有靜態(tài)庫,所以編譯ld的時候出錯了。我的解決辦法就是重新到sqlite3的官方網站下載了源碼包,然后編譯安裝即可。
編譯完成以后,就會在docker源碼目錄下的bundles/1.3.1/binary/目錄有如下文件:
docker docker-1.3.1 docker-1.3.1.md5 docker-1.3.1.sha256
docker-1.3.1這個文件就是我們需要的二進制文件了,docker是一個軟連接到docker-1.3.1的文件。
到此就成功完成編譯了,以后修改了代碼重新支持編譯腳步即可:
./hack/make.sh binary
1.1 Go 安裝
Go的三種安裝方式
Go有多種安裝方式,你可以選擇自己喜歡的。這里我們介紹三種最常見的安裝方式:
Go源碼安裝:這是一種標準的軟件安裝方式。對于經常使用Unix類系統(tǒng)的用戶,尤其對于開發(fā)者來說,從源碼安裝可以自己定制。
Go標準包安裝:Go提供了方便的安裝包,支持Windows、Linux、Mac等系統(tǒng)。這種方式適合快速安裝,可根據自己的系統(tǒng)位數下載好相應的安裝包,一路next就可以輕松安裝了。**推薦這種方式**
第三方工具安裝:目前有很多方便的第三方軟件包工具,例如Ubuntu的apt-get、Mac的homebrew等。這種安裝方式適合那些熟悉相應系統(tǒng)的用戶。
最后,如果你想在同一個系統(tǒng)中安裝多個版本的Go,你可以參考第三方工具GVM,這是目前在這方面做得最好的工具,除非你知道怎么處理。
Go源碼安裝
在Go的源代碼中,有些部分是用Plan 9 C和ATT匯編寫的,因此假如你要想從源碼安裝,就必須安裝C的編譯工具。
在Mac系統(tǒng)中,只要你安裝了Xcode,就已經包含了相應的編譯工具。
在類Unix系統(tǒng)中,需要安裝gcc等工具。例如Ubuntu系統(tǒng)可通過在終端中執(zhí)行sudo apt-get install gcc
libc6-dev來安裝編譯工具。
在Windows系統(tǒng)中,你需要安裝MinGW,然后通過MinGW安裝gcc,并設置相應的環(huán)境變量。
你可以直接去官網下載源碼,找相應的goVERSION.src.tar.gz的文件下載,下載之后解壓縮到$HOME目錄,執(zhí)行如下代碼:
cd go/src
./all.bash
運行all.bash后出現"ALL TESTS PASSED"字樣時才算安裝成功。
上面是Unix風格的命令,Windows下的安裝方式類似,只不過是運行all.bat,調用的編譯器是MinGW的gcc。
如果是Mac或者Unix用戶需要設置幾個環(huán)境變量,如果想重啟之后也能生效的話把下面的命令寫到.bashrc或者.zshrc里面,
export GOPATH=$HOME/gopath
export PATH=$PATH:$HOME/go/bin:$GOPATH/bin
如果你是寫入文件的,記得執(zhí)行bash .bashrc或者bash
.zshrc使得設置立馬生效。
如果是window系統(tǒng),就需要設置環(huán)境變量,在path里面增加相應的go所在的目錄,設置gopath變量。
當你設置完畢之后在命令行里面輸入go,看到如下圖片即說明你已經安裝成功
圖1.1 源碼安裝之后執(zhí)行Go命令的圖
如果出現Go的Usage信息,那么說明Go已經安裝成功了;如果出現該命令不存在,那么可以檢查一下自己的PATH環(huán)境變中是否包含了Go的安裝目錄。
關于上面的GOPATH將在下面小節(jié)詳細講解
Go標準包安裝
Go提供了每個平臺打好包的一鍵安裝,這些包默認會安裝到如下目錄:/usr/local/go
(Windows系統(tǒng):c:\Go),當然你可以改變他們的安裝位置,但是改變之后你必須在你的環(huán)境變量中設置如下信息:
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
上面這些命令對于Mac和Unix用戶來說最好是寫入.bashrc或者.zshrc文件,對于windows用戶來說當然是寫入環(huán)境變量。
CentOS 7服務器的默認語言為英文,如果我們英文不好看著就不舒服,有時候操作并不方便,那么想要換成默認為中文的怎么弄呢?
1.首先通過你的遠程工具鏈接到你的CentOS 7系統(tǒng)中。
2.修改語言文件
輸入命令【vi /etc/locale.conf】然后回車
3.然后按下字母【i】進入插入模式
4.移動光標將
將默認的【LANG=en_US.UTF-8】
修改為【LANG=zh_CN.UTF-8】
5.保存更改并退出:
按【Esc】鍵,直接輸入【:wq】然后回車
6.然后關閉連接,再次打開??匆呀涀兂闪酥形牧?/p>
當前標題:centos7go語言 go centos
網站網址:http://weahome.cn/article/hhsgss.html