FreeBSD 使用手冊
Prev | Chapter 21 Virtualization(虛擬機器) | Next

# 21.2 安裝 FreeBSD 為 Guest OS

## 21.2.1 MacOS 上的 Parallels

Mac® 版的 Parallels Desktop 乃是可用於搭配 Intel® CPU 以及 Mac OS® 10.4.6 以上的 Apple® Mac 電腦的商業軟體。 FreeBSD 是其有完整支援的 guest OS 之一。 在 Mac OS X 裝好 Parallels 後， 必須針對所欲安裝的 guest OS 來作相關的虛擬機器設定。

### 21.2.1.1 在 Parallels/Mac OS® X 上安裝 FreeBSD

在 Mac OS X/Parallels 上安裝 FreeBSD 的第一步是新增虛擬機器。 如下所示，在提示視窗內請將 Guest OS Type 勾選為 FreeBSD：

並依據自身需求來規劃硬碟容量跟記憶體的分配。 對大多數在 Parallels 使用的情況而言，大約 4GB 硬碟以及 512MB RAM 就夠用了：

接下來，選擇網路種類以及網路卡：

最後，儲存設定檔就完成設定了：

在 FreeBSD 虛擬機器新增後，就可以繼續以其安裝 FreeBSD。 安裝方面，比較好的作法是使用官方的 FreeBSD 光碟或者從官方 FTP 站下載 ISO image 檔。 若您的 Mac 本機已經有該 ISO 檔， 或者 Mac 的光碟機內有放安裝片，那麼就可以在 FreeBSD 的 Parallels 視窗右下角按下光碟片圖示。 接著會出現一個視窗，可以把虛擬機器內的光碟機設定到該 ISO 檔， 或者是實體光碟機。

設好光碟片來源之後，就可以按下重開機圖示以重開 FreeBSD 虛擬機器。 Parallels 會以特殊 BIOS 開機，並與普通的 BIOS 一樣會先檢查是否有光碟機。

此時，它就會找到 FreeBSD 安裝片，並開始在 Chapter 2 內所介紹到的 sysinstall 安裝過程。 這時候也可順便裝 X11，但先不要進行相關設定。

完成安裝過程之後，就可以重開剛裝的 FreeBSD 虛擬機器。

### 21.2.1.2 在 Mac OS X/Parallels 上設定 FreeBSD

把 FreeBSD 成功裝到 Mac OS X 的 Parallels 之後，還需要作一些設定步驟， 以便將虛擬機器內的 FreeBSD 最佳化。

1. 設定 boot loader 參數

   最重要的步驟乃是藉由調降 `kern.hz` 來降低 Parallels 環境內 FreeBSD 的 CPU 佔用率。 可以在 `/boot/loader.conf` 內加上下列設定即可：

       kern.hz=100

   若不作這設定，那麼光是 idle 狀態的 FreeBSD (Parallels guest OS) 就會在僅單一處理器的 iMac® 上佔了大約 15% 的 CPU 佔用率。 作上述修改之後，佔用率就會降至大約 5%。

2. 設定新的 kernel 設定檔

   可以放心把所有 SCSI、FireWire、USB 相關設備都移除。 Parallels 有提供 ed(4) 的虛擬網卡，因此，除了 ed(4) 以及 miibus(4) 以外的其他網路卡也都可以從 kernel 中移除。

3. 設定網路

   可以替虛擬機器簡單用 DHCP 來設定與 Mac 相同的 LAN 網路環境，只要在 `/etc/rc.conf` 內加上 `ifconfig_ed0="DHCP"` 即可完成。 其他進階的網路設定方式，請參考 Chapter 29。

## 21.2.2 在 Linux 透過 Xen™ 跑 FreeBSD

Contributed by Fukang Chen (Loader).

Xen™ hypervisor 乃是開放源碼的 paravirtualization 產品，並由商業公司(XenSource)提供支援。 Guest OS 通常被稱為 domU domains，而 host OS 則是被稱為 dom0。 在 Linux 上建立 FreeBSD 虛擬機器的第一步，則是安裝 Linux dom0 的 Xen。 在本例中， host OS 乃是 Slackware Linux。

### 21.2.2.1 在 Linux dom0 上設定 Xen 3

1. 從 XenSource 網站下載 Xen 3.0

   從 http://www.xensource.com/ 下載 xen-3.0.4_1-src.tgz。

2. 解壓縮

       # cd xen-3.0.4_1-src
       # KERNELS="linux-2.6-xen0 linux-2.6-xenU" make world
       # make install

   > Note: 為 dom0 重新編譯 kernel：

   >     # cd xen-3.0.4_1-src/linux-2.6.16.33-xen0
   >     # make menuconfig
   >     # make
   >     # make install

   > 舊版的 Xen 可能需要用 `make ARCH=xen menuconfig`

3. 增加選項到 Grub 的 menu.lst 選單

   修改 `/boot/grub/menu.lst` 加上下列設定：

       title Xen-3.0.4
       root (hd0,0)
       kernel /boot/xen-3.0.4-1.gz dom0_mem=262144
       module /boot/vmlinuz-2.6.16.33-xen0 root=/dev/hda1 ro

4. 重開機並進入 Xen

   首先，修改 `/etc/xen/xend-config.sxp` 加上下列設定：

       (network-script 'network-bridge netdev=eth0')

   接下來，就可以啟動 Xen：

       # /etc/init.d/xend start
       # /etc/init.d/xendomains start

   現在 dom0 已經開始運作：

       # xm list
       Name                                      ID   Mem VCPUs      State   Time(s)
       Domain-0                                   0   256     1     r-----  54452.9

### 21.2.2.2 FreeBSD 7-CURRENT domU

從 http://www.fsmware.com/ 下載搭配 Xen 3.0 的 FreeBSD domU kernel 相關檔案

- kernel-current

- mdroot-7.0.bz2

- xmexample1.bsd

把 `xmexample1.bsd` 設定檔放到 `/etc/xen/`，並修改 kernel 及 disk image 相關位置。 以下是示範的例子：

    kernel = "/opt/kernel-current"
    memory = 256
    name = "freebsd"
    vif = [ '' ]
    disk = [ 'file:/opt/mdroot-7.0,hda1,w' ]
    #on_crash    = 'preserve'
    extra = "boot_verbose"
    extra += ",boot_single"
    extra += ",kern.hz=100"
    extra += ",vfs.root.mountfrom=ufs:/dev/xbd769a"

其中 `mdroot-7.0.bz2` 檔要記得解壓縮之。

接下來，要修改 `kernel-current` 設定檔的 __xen_guest 小節，並加上 Xen 3.0.3 所需的 VIRT_BASE：

    # objcopy kernel-current -R __xen_guest
    # perl -e 'print "LOADER=generic,GUEST_OS=freebsd,GUEST_VER=7.0,XEN_VER=xen-3.0,BSD_SYMTAB,VIRT_BASE=0xC0000000\x00"' > tmp
    # objcopy kernel-current --add-section __xen_guest=tmp

    # objdump -j __xen_guest -s kernel-current

    kernel-current:     file format elf32-i386

    Contents of section __xen_guest:
     0000 4c4f4144 45523d67 656e6572 69632c47  LOADER=generic,G
     0010 55455354 5f4f533d 66726565 6273642c  UEST_OS=freebsd,
     0020 47554553 545f5645 523d372e 302c5845  GUEST_VER=7.0,XE
     0030 4e5f5645 523d7865 6e2d332e 302c4253  N_VER=xen-3.0,BS
     0040 445f5359 4d544142 2c564952 545f4241  D_SYMTAB,VIRT_BA
     0050 53453d30 78433030 30303030 3000      SE=0xC0000000.

現在可以新增並啟動 domU 囉：

    # xm create /etc/xen/xmexample1.bsd -c
    Using config file "/etc/xen/xmexample1.bsd".
    Started domain freebsd
    WARNING: loader(8) metadata is missing!
    Copyright (c) 1992-2006 The FreeBSD Project.
    Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
    The Regents of the University of California. All rights reserved.
    FreeBSD 7.0-CURRENT #113: Wed Jan  4 06:25:43 UTC 2006
        kmacy@freebsd7.gateway.2wire.net:/usr/home/kmacy/p4/freebsd7_xen3/src/sys/i386-xen/compile/XENCONF
    WARNING: DIAGNOSTIC option enabled, expect reduced performance.
    Xen reported: 1796.927 MHz processor.
    Timecounter "ixen" frequency 1796927000 Hz quality 0
    CPU: Intel(R) Pentium(R) 4 CPU 1.80GHz (1796.93-MHz 686-class CPU)
      Origin = "GenuineIntel"  Id = 0xf29  Stepping = 9
      Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,
      DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
      Features2=0x4400<CNTX-ID,<b14>>
    real memory  = 265244672 (252 MB)
    avail memory = 255963136 (244 MB)
    xc0: <Xen Console> on motherboard
    cpu0 on motherboard
    Timecounters tick every 10.000 msec
    [XEN] Initialising virtual ethernet driver.
    xn0: Ethernet address: 00:16:3e:6b:de:3a
    [XEN]
    Trying to mount root from ufs:/dev/xbd769a
    WARNING: / was not properly dismounted
    Loading configuration files.
    No suitable dump device was found.
    Entropy harvesting: interrupts ethernet point_to_point kickstart.
    Starting file system checks:
    /dev/xbd769a: 18859 files, 140370 used, 113473 free (10769 frags, 12838 blocks, 4.2% fragmentation)
    Setting hostname: demo.freebsd.org.
    lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
          inet6 ::1 prefixlen 128
          inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
          inet 127.0.0.1 netmask 0xff000000
    Additional routing options:.
    Mounting NFS file systems:.
    Starting syslogd.
    /etc/rc: WARNING: Dump device does not exist.  Savecore not run.
    ELF ldconfig path: /lib /usr/lib /usr/lib/compat /usr/X11R6/lib /usr/local/lib
    a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout /usr/X11R6/lib/aout
    Starting usbd.
    usb: Kernel module not available: No such file or directory
    Starting local daemons:.
    Updating motd.
    Starting sshd.
    Initial i386 initialization:.
    Additional ABI support: linux.
    Starting cron.
    Local package initialization:.
    Additional TCP options:.
    Starting background file system checks in 60 seconds.

    Sun Apr  1 02:11:43 UTC 2007

    FreeBSD/i386 (demo.freebsd.org) (xc0)

    login:

現在 domU 應該可以跑 FreeBSD 7.0-CURRENT kernel：

    # uname -a
    FreeBSD demo.freebsd.org 7.0-CURRENT FreeBSD 7.0-CURRENT #113: Wed Jan  4 06:25:43 UTC 2006
    kmacy@freebsd7.gateway.2wire.net:/usr/home/kmacy/p4/freebsd7_xen3/src/sys/i386-xen/compile/XENCONF  i386

接下來是設定 domU 的網路，FreeBSD domU 會用代號為 `xn0` 的特殊網路卡：

    # ifconfig xn0 10.10.10.200 netmask 255.0.0.0
    # ifconfig
    xn0: flags=843<UP,BROADCAST,RUNNING,SIMPLEX> mtu 1500
        inet 10.10.10.200 netmask 0xff000000 broadcast 10.255.255.255
        ether 00:16:3e:6b:de:3a
    lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
          inet6 ::1 prefixlen 128
          inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
          inet 127.0.0.1 netmask 0xff000000

在 dom0 Slackware 上應該會出現一些 Xen 專用的網路卡：

    # ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:07:E9:A0:02:C2
              inet addr:10.10.10.130  Bcast:0.0.0.0  Mask:255.0.0.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:815 errors:0 dropped:0 overruns:0 frame:0
              TX packets:1400 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:204857 (200.0 KiB)  TX bytes:129915 (126.8 KiB)

    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:99 errors:0 dropped:0 overruns:0 frame:0
              TX packets:99 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:9744 (9.5 KiB)  TX bytes:9744 (9.5 KiB)

    peth0     Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
              UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
              RX packets:1853349 errors:0 dropped:0 overruns:0 frame:0
              TX packets:952923 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:2432115831 (2.2 GiB)  TX bytes:86528526 (82.5 MiB)
              Base address:0xc000 Memory:ef020000-ef040000

    vif0.1    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
              UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
              RX packets:1400 errors:0 dropped:0 overruns:0 frame:0
              TX packets:815 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:129915 (126.8 KiB)  TX bytes:204857 (200.0 KiB)

    vif1.0    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
              UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
              RX packets:3 errors:0 dropped:0 overruns:0 frame:0
              TX packets:2 errors:0 dropped:157 overruns:0 carrier:0
              collisions:0 txqueuelen:1
              RX bytes:140 (140.0 b)  TX bytes:158 (158.0 b)

    xenbr1    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF
              UP BROADCAST RUNNING NOARP  MTU:1500  Metric:1
              RX packets:4 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:112 (112.0 b)  TX bytes:0 (0.0 b)

    # brctl show
    bridge name     bridge id           STP enabled         interfaces
    xenbr1          8000.feffffffffff   no                  vif0.1
                                                            peth0
                                                            vif1.0

## 21.2.3 Windows® 上的 Virtual PC

Virtual PC 是 Microsoft® 的 Windows® 軟體產品，可以免費下載使用。 相關系統需求，請參閱 system requirements 說明。 在 Microsoft Windows 裝完 Virtual PC 之後， 必須針對所欲安裝的虛擬機器來作相關設定。

### 21.2.3.1 在 Virtual PC/Microsoft® Windows 上安裝 FreeBSD

在 Microsoft Windows/Virtual PC 上安裝 FreeBSD 的第一步是新增虛擬機器。 如下所示， 在提示視窗內請選擇 Create a virtual machine：

然後在 Operating system 處選 Other：

並依據自身需求來規劃硬碟容量跟記憶體的分配。 對大多數在 Virtual PC 使用 FreeBSD 的情況而言，大約 4GB 硬碟空間以及 512MB RAM 就夠用了：

儲存設定檔：

接下來選剛剛所新增的 FreeBSD 虛擬機器，並按下 Settings，以設定網路種類以及網路卡：

在 FreeBSD 虛擬機器新增後，就可以繼續以其安裝 FreeBSD。 安裝方面，比較好的作法是使用官方的 FreeBSD 光碟或者從官方 FTP 站下載 ISO image 檔。 若您的 Windows 檔案系統內已經有該 ISO 檔， 或者光碟機內有放安裝片，那麼就可以在 FreeBSD 虛擬機器上連按兩下，以開始啟動。 接著在 Virtual PC 視窗內按 CD 再按 Capture ISO Image... 。 接著會出現一個視窗，可以把虛擬機器內的光碟機設定到該 ISO 檔， 或者是實體光碟機。

設好光碟片來源之後，就可以重開機，也就是先按 Action 再按 Reset 即可。 Virtual PC 會以特殊 BIOS 開機，並與普通 BIOS 一樣會先檢查是否有光碟機。

此時，它就會找到 FreeBSD 安裝片，並開始在 Chapter 2 內所介紹到的 sysinstall 安裝過程。 這時候也可順便裝 X11，但先不要進行相關設定。

完成安裝之後，記得把光碟片退出或者 ISO image 退片。 最後， 把裝好的 FreeBSD 虛擬機器重開機即可。

### 21.2.3.2 調整 Microsoft Windows/Virtual PC 上的 FreeBSD

在 Microsoft Windows 上以 Virtual PC 裝好 FreeBSD 後，還需要作一些設定步驟， 以便將虛擬機器內的 FreeBSD 最佳化。

1. 設定 boot loader 參數

   最重要的步驟乃是藉由調降 `kern.hz` 來降低 Virtual PC 環境內 FreeBSD 的 CPU 佔用率。 可以在 `/boot/loader.conf` 內加上下列設定即可：

       kern.hz=100

   若不作這設定，那麼光是 idle 狀態的 FreeBSD Virtual PC guest OS 就會在僅單一處理器的電腦上佔了大約 40% 的 CPU 佔用率。 作上述修改之後，佔用率就會降至大約 3%。

2. 設定新的 kernel 設定檔

   可以放心把所有 SCSI、FireWire、USB 相關設備都移除。 Virtual PC 有提供 de(4) 的虛擬網卡，因此除了 de(4) 以及 miibus(4) 以外的其他網路卡也都可以從 kernel 中移除。

3. 設定網路

   可以替虛擬機器簡單用 DHCP 來設定與 host(Microsoft Windows) 相同的 LAN 網路環境，只要在 `/etc/rc.conf` 加上 `ifconfig_de0="DHCP"` 即可完成。 其他進階的網路設定方式，請參閱 Chapter 29。

## 21.2.4 在 MacOS 上的 VMware

Mac 上的 VMWare Fusion 乃是可用於搭配 Intel CPU 以及 Mac OS 10.4.9 之 Apple Mac 以上的 Apple Mac 電腦之商業軟體。 FreeBSD 是其有完整支援的 guest OS 之一。 在 Mac OS X 上裝完 VMWare Fusion 之後， 必須針對所欲安裝的 guest OS 來作相關的虛擬機器設定。

### 21.2.4.1 在 VMWare/Mac OS X 上安裝 FreeBSD

首先執行 VMWare Fusion，而其 Virtual Machine Library 也會隨之一併載入，這時請按 "New" 來建立 VM(虛擬機器)：

接著會有 New Virtual Machine Assistant 來協助您建立 VM，請按 Continue 繼續：

在 Operating System 選 Other，以及 Version 處請選擇是否要 FreeBSD 或 FreeBSD 64-bit，這部份請依自身需求是否有要 64-bit 支援而定：

接著設定 VM image 檔要存到何處，以及決定名稱：

決定該 VM 的虛擬硬碟要用多大：

選擇要裝 VM 的方式為何，要用 ISO image 檔或者光碟機：

按 Finish 以完畢，接著就會啟動該 VM：

接著就照以往安裝 FreeBSD 的方式來裝，若不熟的話請參閱 Chapter 2：

裝完之後，就可以修改一些 VM 設定，像是記憶體大小：

> Note: VM 在運作之時，不能修改 VM 的硬體設定。

調整 VM 的 CPU 數量：

光碟機狀態，通常不再需要用的時候，就可以切斷其與 VM 的連接：

最後要改的則是 VM 的網路設定。 若除了 Host OS 之外的機器也能連到 VM，那麼請選 Connect directly to the physical network (Bridged)，否則就選 Share the host's internet connection (NAT) 即可讓 VM 連到 Internet， 但外面則無法連入該 VM。

改完上述設定之後，就可以啟動新裝妥的 FreeBSD 虛擬機器。

### 21.2.4.2 調整 Mac OS X/VMWare 上的 FreeBSD

把 FreeBSD 成功裝到 Mac OS X 的 VMWare 之後，還需要作一些設定步驟， 以便將虛擬機器內的 FreeBSD 最佳化。

1. 設定 boot loader 參數

   最重要的步驟乃是藉由調降 `kern.hz` 來降低 VMWare 環境內 FreeBSD 的 CPU 佔用率。 可以在 `/boot/loader.conf` 內加上下列設定即可：

       kern.hz=100

   若不作這設定，那麼光是 idle 狀態的 FreeBSD (VMWare guest OS) 就會在僅單一處理器的 iMac 上佔了大約 15% 的 CPU 佔用率。 作上述修改之後， 佔用率就會降至大約 5%。

2. 設定新的 kernel 設定檔

   可以放心把所有 FireWire、USB 相關設備都移除。 VMWare 有提供 em(4) 的虛擬網卡， 因此，除了 em(4) 以及 miibus(4) 以外的其他網路卡， 也都可以從 kernel 中移除。

3. 設定網路

   可以替虛擬機器簡單用 DHCP 來設定與 host Mac 相同的 LAN 網路環境，只要在 `/etc/rc.conf` 加上 `ifconfig_em0="DHCP"` 即可。 其他進階的網路設定方式，請參考 Chapter 29。

Prev | Home | Next
Virtualization(虛擬機器) | Up | 以 FreeBSD 為 Host OS

本文及其他文件，可由此下載：ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。

若有 FreeBSD 方面疑問，請先閱讀 FreeBSD 相關文件，如不能解決的話，再洽詢 <questions@FreeBSD.org>。
關於本文件的問題，請洽詢 <doc@FreeBSD.org>。