閱讀967 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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 編譯環境:

包含OpenJDK 源碼與IntelliJ的 Ubuntu 12.04 VM鏡像

該VM中已包含一個基於IntelliJ的 OpenJDK 編譯環境:

包含OpenJDK 9(jigsaw) 源碼與Eclipse的 Ubuntu 12.04 VM鏡像

該VM中已包含一個基於Eclipse的 OpenJDK 編譯環境:

包含OpenJDK 9(jigsaw) 源碼與IntelliJ的 Ubuntu 12.04 VM鏡像

該VM中已包含一個基於IntelliJ的 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上測試通過的軟件版本為:

下載 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之間共享文件, 如下所述:

  1. 在VM中啟用Samba服務:編輯Samba配置文件:
     sudo gedit /etc/samba/smb.conf
    

    找到[homes] 小節,將下麵的幾行取消注釋:

     [homes]
     comment = Home Directories
     browseable = yes
     writable = yes
    

    重啟Samba服務:

     sudo restart smbd
    
  2. 在宿主機上為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
    • 點擊保存.

    可以在宿主機上通過ping來測試網絡是否設置正確:

    ping 200.200.0.129
    
  3. 從宿主機上連接共享目錄:使用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

  4. 使用你熟悉的IDE,從共享目錄下編輯OpenJDK源碼

4.5 適用於 OpenJDK 8 的Vagrant Puppet 環境


概述

Ubuntu 12.04 沙盒鏡像是一個基於Vagrant, 供OpenJDK 8 運行和測試的Puppet 開發環境.

通過使用Vagrant, 你可以快速上手OpenJDK的編譯過程.

安裝需求

為了使用改環境,你必須安裝如下軟件:

使用方法

獲取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

  上一篇:go  硬件的習性
  下一篇:go  特寫|Kaggle被穀歌收購能否複製,中國的Kaggle們走到哪了