Adopt Open JDK官方文檔(四)基於虛擬機的編譯環境
4.基於虛擬機的編譯環境
- 準備工作
- 編譯你自己的虛擬機
- 編譯你自己的輕量級虛擬機
- 在Host 與 Guest VM 之間共享文件
- 適用於 OpenJDK 8 的Vagrant Puppet 環境
4.1 準備工作
請注意,因為所需下載的VM鏡像文件高達數GB, 請在穩定的網絡環境中進行下載。如果有可能,請使用支持斷點續傳的下載管理器。
MacOS 用戶: 請使用 zipeg 來解壓縮下載後的文件。
下載後的 .OVA 與 .OVF 文件可以使用VirtualBox進行裝載(Import Appliance…)
這些VM鏡像包含了OpenJDK 8 與 OpenJDK 9 相關的源碼和編譯環境.
運行這些VM鏡像的最低配置需求:
- 64-bit 架構的操作係統和CPU
- 15-20 GB 可用磁盤空間
- 一台可以高速運行虛擬機的筆記本/Server
- 已安裝VirtualBox
- 理解Java相關技術
- 了解一些OpenJDK相關的知識
包含OpenJDK 源碼與Eclipse的 Ubuntu 12.04 VM鏡像
該VM中已包含一個基於Eclipse的 OpenJDK 編譯環境:
- 下載地址: https://bit.ly/1bgs369
- Login/password: openjdk / j1a2v3a4
包含OpenJDK 源碼與IntelliJ的 Ubuntu 12.04 VM鏡像
該VM中已包含一個基於IntelliJ的 OpenJDK 編譯環境:
- 下載地址: https://yq.aliyun.com/articles/ftp://bgjug.sty-consulting.com/openjdk-ubuntu/Ubuntu_12.04_OpenJDK_dev.ova
- Login/password: openjdk / j1a2v3a4
包含OpenJDK 9(jigsaw) 源碼與Eclipse的 Ubuntu 12.04 VM鏡像
該VM中已包含一個基於Eclipse的 OpenJDK 編譯環境:
- 下載地址: https://copy.com/tA0l06zDrJNNDKVL
- Login/password: openjdk / openjdk123
包含OpenJDK 9(jigsaw) 源碼與IntelliJ的 Ubuntu 12.04 VM鏡像
該VM中已包含一個基於IntelliJ的 OpenJDK 編譯環境:
- 下載地址: https://yq.aliyun.com/articles/ftp://bgjug.sty-consulting.com/openjdk-fedora/openjdk-fedora.ova
- Login/password: openjdk / openjdk
4.2 設置編譯VM
如果你已經下載了設置後的VM鏡像,你可以:
- 使用Build your own VirtualBox VM 項目提供的可執行腳本(基於Packer/Puppet/Vagrant/Chef)來執行編譯VM自動化環境設置. 詳細步驟可以參考該項目的 wiki.
4.3 創建輕量級VM鏡像
這裏簡化地描述如何設置一個用於編譯OpenJDK的標準VM
快速指南
從https://www.vagrantup.com/downloads.html下載 Vagrant (1.7.2或更高版本)。
下載完成後,請執行如下命令:
# Clone the adopt-openjdk-kiss-vagrant repo
$ git clone git@github.com:neomatrix369/adopt-openjdk-kiss-vagrant.git
# Change to a folder to create the Vagrantfile
$ cd adopt-openjdk-kiss-vagrant.git
$ vagrant init
# Start up the machine
$ vagrant up
# ssh into the VM
$ vagrant ssh
# in the ssh shell
# Mapping in place: /vagrant/scripts/ ==> [currentfolder]/scripts
請注意這裏將 當前目錄/scripts
映射到了VM中的 /vagrant/scripts/
目錄. 之後的鏡像構建過程中都需要在scripts目錄中執行各種腳本。在完成上訴步驟後,你便已成功構建了一個VM鏡像。此時你可以使用 Build your own VirtualBox VM 項目提供的可執行腳本來設置編譯VM. 詳細步驟可以參考該項目的 wiki.
請注意:創建VM鏡像大致需要下載 377MB 數據,如果你的網速不佳,請下載事先編譯好的VM鏡像。使用編譯VM,從頭開始編譯OpenJDK 9 大概需要1個小時(MacBook pro 2013, 16GB內存, SSD磁盤).
詳細技術實現
這裏描述上述快速指南中涉及到的技術細節。 這裏的文檔描述中,所有標注(*)的步驟都是必須執行的,所有粗體章節將會提供詳細解釋或可選配置項。所有以($)開頭的命令行均代表需要在Vagrant VM 中執行。
- 安裝Virtual Box, Vagrant 與 Git
- 下載 Ubuntu VM鏡像
- 初始化 Vagrant VM 設置
- 編譯 OpenJDK 9
安裝Virtual Box, Vagrant 與 Git
至目前為止(2015/01/18),在Mac上測試通過的軟件版本為:
- Virtual Box v4.3.20(https://www.virtualbox.org/wiki/Downloads)
- Vagrant v1.7.1(https://www.vagrantup.com/downloads.html)
- Git v2.2(https://git-scm.com/downloads)
下載 Ubuntu VM鏡像
當Vagrant安裝完成後,可以從Ubuntu倉庫從下載VM鏡像(377MB):
vagrant box add ubuntu-14.10-amd64 https://cloud-images.ubuntu.com/vagrant/utopic/current/utopic-server-cloudimg-amd64-vagrant-disk1.box;
下載完成後,可使用Virtual Box 裝載並啟動鏡像。
初始化 Vagrant VM 設置
當VM依賴設置完成並且成功啟動後,下一步則需要更新OpenJDK 9 源碼:
$ vagrant ssh
$ sh /vagrant/scripts/source-share-with-host.sh
編譯 OpenJDK 9
$ vagrant ssh
$ cd /vagrant/sources/jdk9 ;
$ bash get_source.sh ;
$ bash configure;
or
$ bash configure --disable-warnings-as-errors;
$ make clean images ;
$ make test ;
此外,也可以使用該https://github.com/neomatrix369/adopt-openjdk-kiss-vagrant 提供的腳本來完成上述工作.
4.4 在Host 與 Guest VM 之間共享文件
本節描述如何在宿主機器上使用IDE訪問虛擬機中的Java源碼。當設置完成後,你可以在自己熟悉的IDE(IntelliJ/Eclipse)中編輯源碼,當編輯完成後再切換到虛擬機中執行JDK Build。
本節所述步驟均在 Mac OSX 10.10 + VirtualBox 4.3.20 上使用VM 鏡像(Ubuntu_12.04_OpenJDK_dev_1) 通過測試.
理想情況下,VirtualBox 就自帶了文件夾共享功能,但是該共享方式無法與OpenJDK 編譯係統完美工作, 特別是C++預編譯頭文件的處理上.目前為止,我們使用Samba方式來在宿主機和VM之間共享文件, 如下所述:
- 在VM中啟用Samba服務:編輯Samba配置文件:
sudo gedit /etc/samba/smb.conf
找到[homes] 小節,將下麵的幾行取消注釋:
[homes] comment = Home Directories browseable = yes writable = yes
重啟Samba服務:
sudo restart smbd
- 在宿主機上為VM分配靜態IP地址:在Virtual Box中,訪問菜單項: Machine > Network > Attached to
- 在 Attached to 下拉列表中選擇: Bridged Adapter
- 在 Name 下拉列表中選擇: en0
將虛擬機的子網設置為與宿主機一致, 你可以在宿主機上通過
ifconfig
命令(windows為ipconfig
)來查看子網地址. 這裏以200.200.0.xxx
為例, 使用一個未被占用的地址200.200.0.129
:- 點擊 Network
- 在左側列表中選中 Wired
- 點擊 Options Button
- 選擇 IPv4 選項欄
- 在 Method 列表中選擇 Manual
- 在 Addresses 下方,點擊 Add 並輸入:
- 未占用的IP地址,例如:
200.200.0.129
- 與宿主機一致的子網掩碼, 例如:
255.255.255.0
- 當前網絡的網管地址, 例如:
200.200.0.90
- 當前網絡的DNS服務器地址, 例如:
200.200.0.90
- 未占用的IP地址,例如:
- 點擊保存.
可以在宿主機上通過
ping
來測試網絡是否設置正確:ping 200.200.0.129
- 從宿主機上連接共享目錄:使用Samba 映射如下共享目錄:
- VM服務器: openjdk
- 用戶: OpenJDK
Windows 宿主機, 使用Explorer 映射地址: \200.200.0.129\OpenJDK
Mac 宿主機, 在Finder中使用CMD-K 連接地址: smb://200.200.0.129/openjdk
可以參見這兩篇文章進行設置: Share Ubuntu Home Directories using samba Share Virtual Box folders in reverse guest host
- 使用你熟悉的IDE,從共享目錄下編輯OpenJDK源碼
4.5 適用於 OpenJDK 8 的Vagrant Puppet 環境
概述
Ubuntu 12.04 沙盒鏡像是一個基於Vagrant, 供OpenJDK 8 運行和測試的Puppet 開發環境.
通過使用Vagrant, 你可以快速上手OpenJDK的編譯過程.
安裝需求
為了使用改環境,你必須安裝如下軟件:
- Virtual Box v4.3.20(https://www.virtualbox.org/wiki/Downloads)
- Vagrant v1.7.1(https://www.vagrantup.com/downloads.html)
- Git v2.2(https://git-scm.com/downloads)
使用方法
獲取puppet vm 配置
git clone https://github.com/soujava/adoptjdk-puppet-vm.git
Initial Startup
在adoptjdk-puppet-vm
目錄下,執行如下腳本來啟動Puppet 沙盒環境:
$ vagrant up
Puppet 會自動安裝Mercurial和OpenJDK. 其克隆 OpenJDK 8
項目, 執行 get_source.sh
以下載所有模塊源碼,之後執行 ‘bash configure’ 保證編譯環境配置正確. 最後執行 make images
來編譯JDK 8 分發鏡像.
注意,該過程可能會持續 50分鍾左右.(測試機: MacPro 2014 250GB SSD 16GB RAM).
如果一切執行順利,你將會看到如下日誌輸出:
==> default: ## Finished images (build time 00:00:49)
==> default: ----- Build times -------
==> default: Start 2015-05-01 20:04:30
==> default: End 2015-05-01 20:51:58
==> default: 00:00:42 corba
==> default: 00:00:53 demos
==> default: 00:34:31 hotspot
==> default: 00:00:49 images
==> default: 00:00:26 jaxp
==> default: 00:00:38 jaxws
==> default: 00:08:28 jdk
==> default: 00:00:49 langtools
==> default: 00:00:12 nashorn
==> default: 00:47:28 TOTAL
==> default: -------------------------
==> default: Finished building OpenJDK for target 'images'
最後更新:2017-05-22 15:33:47