打造 ubuntu server 12.04 jeos

現在都流行雲主機,虛擬主機也升級爲虛擬機。虛擬機(Virtual Machine)和虛擬主機(Virtual Host)少一個字,功能卻多太多了。


軟件產品在客戶現場部署的時候,受限於軟硬件和網絡環境,往往效率較低。對於這個問題,一種改進辦法是把軟件灌裝到工程機,做成硬件盒子銷售,不僅可以提高事實效率,還能多賣錢(交付硬件往往讓客戶覺得有價值)。另一種改進辦法則是把軟件灌裝到虛擬機,把虛擬機文件拷貝到客戶提供的主機中運行。這種技術本質上和雲主機是一樣的,雖然不能提升產品價格,但至少解決了軟件產品部署麻煩的問題。尤其在提交測試的時候非常有用。

現在的操作系統越做越大,安裝一個Linux發行版動輒上G。Ubuntu 8.0以前的時候曾出過JeOS(Just Enough OS, pronounced: "Juice"),但後來不再單獨提供JeOS光盤,而是把JeOS功能集成到Server版的安裝光盤ISO文件中。安裝界面上按F4,選擇Minimal Installation(虛擬機安裝選擇Minimal Virtual Machine)進行安裝。然而令人遺憾的是,所謂的Minimal並不小,我用VMWare試了多次,Ubuntu Server 12.04 LTS i686安裝完怎麼也得生成1GB左右的vmdk文件,與我的期望相去甚遠。Ubuntu官網上有介紹用vmbuilder定製系統地方法,由於過於複雜本人沒有試驗成功。相關資料:

JeOS介紹:https://help.ubuntu.com/community/JeOS

使用vmbuilder定製JeOS:https://help.ubuntu.com/12.10/serverguide/jeos-and-vmbuilder.html


通過不懈的研究實踐,我找到了兩個製作JeOS的方法。

第一種是從ubuntu的官網上下載ubuntu-core,並將其製作成虛擬機系統。ubuntu-core下載:http://cdimage.ubuntu.com/cdimage/ubuntu-core/releases/12.04.4/release/ubuntu-core-12.04.4-core-i386.tar.gz

ubuntu-core不是iso光盤,是官方裁剪過的文件系統打包。首先創建一個最小硬件配置的虛擬機,僅包括CPU、內存、硬盤、光驅和顯示器就夠了。然後用Ubuntu Server光盤啓動選擇“Rescue broken system”,然後進入Terminal,使用fdisk進行分區。Ubuntu Core: https://wiki.ubuntu.com/Core

由於Rescue broken system”可用命令太少,我實際是在一個安裝好的Ubuntu虛擬機掛載Ubuntu-core的vmdk格式硬盤中完成的磁盤分區操作。使用fdisk /dev/sdb(/dev/sda是安裝好的Ubuntu的硬盤)先後創建兩個primary分區/dev/sdb1和/dev/sdb2,將其中一個改爲Linux Swap。使用命令a設置/dev/sdb1爲啓動分區之後,鍵入w保存並退出fdisk。再使用mkfs.ext4和mkswap分別將/dev/sdb1和/dev/sdb2格式化爲ext4和swap。具體操作請參考:http://computernetworkingnotes.com/file-system-administration/how-to-create-swap-partition.html

視頻教程(需翻牆):http://www.youtube.com/watch?v=xiM9GOKvTI4

下載好ubuntu-core和做好磁盤分區之後,只需要掛載/dev/sdb1到/mnt/sdb1,然後將文件系統解壓到/mnt/sdb1。

由於ubuntu-core實在是什麼都沒有,還需要使用apt-get install net-tools vim-tiny grub-pc。安裝grub的命令:

#grub-install --root-directory=/mnt/sdb1 /dev/sdb1

但是以上命令還不能進入期待已久的Ubuntu core,啓動到grub就停止了。從grub進入ubuntu的參考:http://askubuntu.com/questions/21342/how-can-i-load-ubuntu-when-all-i-have-is-grub?answertab=active#tab-top 方法如下:

set root=(hd0,1)
linux /vmlinuz root=/dev/sda1
initrd /initrd.img
boot

注意:由於ubuntu-core中的/boot是空的,/vmlinuz和/initrd.img並不存在,我是從安裝好的UbuntuServer 12.04中複製過來的,並重新做了軟鏈接。每次啓動都要通過grub太麻煩了,手工編輯一下:

vi /etc/default/grub
修改GRUB_DEFAULT=0爲1

參考:http://askubuntu.com/questions/265010/how-do-i-edit-grub-menu

全部安裝完成後,硬盤vmdk文件控制在200多兆,算是小有收穫吧。

總結:終於可以進入ubuntu-core了,但是要做的工作還有很多,比如還需要手工編輯網卡等等。實踐證明這條路不夠好。


第二種是下載做好的Ubuntu-12.04LTS-JeOS虛擬機:http://virtualappliances.eu/

下載文件只有不到60MB,生成虛擬機後,硬盤vmdk文件也只有150MB。更重要的是相比第一種方法,這種方法來的太方便了。但是別急,該JeOS只分配了2GB的硬盤空間,這哪裏夠用啊。要解決這個問題,也有兩個辦法,一種辦法是對硬盤進行擴容(不是添加新硬盤,而是對老硬盤擴容);另一種辦法則是將該JeOS的文件系統複製到一個新的大容量vmdk硬盤中去。

硬盤擴容使用vmware圖形界面或者vmware-vdiskmanager.exe -x 工具就可以。但是由於涉及到保留文件系統的情況下對分區進行擴容resize2fs還是比較麻煩的。我沒有去實踐如何對硬盤擴容,只是查詢了相關資料。http://blog.sina.com.cn/s/blog_643e8386010142zq.html 大家可以自行研究補充。

前面大篇幅講述如何安裝Ubuntu-core,實際是爲了將這個JeOS用相同的方法複製到配置了大容量硬盤vmdk的虛擬機中去。具體過程也參考了http://virtualappliances.eu/ DOCUMENT>BUILDING A JEOS APPLIANCE

到最後一步修改grub的方法稍有不同。先進入Ubuntu,使用blkid查詢/dev/sda1的UUID。參考:http://serverfault.com/questions/3132/how-do-i-find-the-uuid-of-a-partition

$ sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext4"

然後修改/boot/grub/grub.conf,將查詢到的UUID替換掉相關內容即可。最終製作好的jeos(UbuntuServer12.04LTS i686 + 4GB RAM + 80G HardDisk) ovf格式vmdk文件大小爲60MB。生成VMWare虛擬機爲167MB。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章