什麼是FAI?
FAI 究竟是什麼呢?看到他的全名︰Fully Automatic Installation 就不難了解是一個完全自動化的安裝系統,透過FAI 我們可以大量建構許多Debian 的電腦卻完全不用人工去建立,管理者只需要將電腦教室的電源打開,然後就可以開始泡茶看報紙,然後等所有電腦都裝好就可以打卡下班了,是不是很恐怖呢?
如果您還在煩惱重新安裝系統該選擇Stable 光碟片安裝並設定每個選項或是使用debootstrap 的方法,請您全部都丟掉,給FAI 一個機會,相信會讓您對安裝Debian 有完全不同的印象喔,因為. . . “我連enter 都不用按就裝好Debian 了!”
什麼是FAI Boot-CD?
FAI Boot-CD1 是提供FAI 建立安裝光碟的軟體,由於FAI 本身無法製作出離線式的安裝光碟,所以才有這個Project 產生。因為是離線式安裝,所以捨去了網路安裝,把一個完整的系統壓縮在光碟片上,只要將電腦設定好光碟機開機,就能自動進行安裝了。
目前已知的問題是該版本已經過時,無法搭配目前的Debian Testing/Unstable 的版本產生安裝光碟,所以需要額外修改程式碼才能正常工作,但請讀者們不用擔心,筆者已經修正了FAI Boot-CD 的原始碼,後續的章節會說明如何安裝與建立安裝光碟。
FAI 的原理
FAI 的架構是採用Client/Server 的方式來實作,所以要實現FAI 必須要分別設定好Server與Client 的安裝流程。
Server 部份請先設定一台提供安裝套件的主機(以下簡稱FAI Server)。在FAI Server 上先使用debootstrap來建構一個Debian Base System,並命名成NFSROOT 提供給Client 端下載並解壓安裝。如果想要額外安裝不同的軟體,例如︰KDE, GNOME, QT. . . 等套件,FAI 會自動使用apt-get 來安裝軟體。讀者們可以先使用\debmirror" 這個程式來鏡射Debian 套件匯集庫(以下稱為pkg pool),以加快安裝速度。請參考附錄的鏡射pkg pool。筆者已事先鏡射好pkg pool 到/home/ftp 的目錄下。
Client 部份請設定\Default Task" 的每一個工作任務,例如分割硬碟,安裝軟體,甚至設定網路等。還能針對不同需求的機器新增Task 來建立工作站或伺服器等。詳細的部份會在陸續的章節說明(FAI Client 的安裝設定是在FAI Server 上完成的)。建立好NFSROOT 之後,接下來選擇Client 的開機媒體裝置,比如磁碟片、光碟、或是網路開機。Client 端只要使用這些媒體來開機,管理者剩下的工作就真的只要泡泡咖啡就可以了。
硬體設備
從FAI 的原理這一節的說明中,至少要有一台FAI Server 提供安裝的服務,至於Client端的數量就看網路負載的能力了。
FAI Server x1
(IP:192.168.0.1)
FAI Clients xN
架設FAI Server
您需要安裝下述的軟體才能建構一台完整的FAI Server :
- ● dhcp-server
- ● nfs-kernel-server
- ● debootstrap
- ● fai
- ● fai-kernel
DHCP Server
DHCP Server 是為了讓FAI Client 在開機時能夠自動取得IP、網路遮罩與通訊閘等資訊。
其中最重要的是Client 端的\Hostname"。FAI 能針對不同的Hostname 進行不一樣的安裝程序,這樣的好處在於如果要安裝Web、Mail、Proxy. . . 等服務的機器,依然可以使用FAI 來進行安裝。當然,您必須熟悉DHCP 中的\¯xed-ip" 的機制。
NFS Server
NFS Server 是為了讓FAI Client 能夠取得debootstrap 所製作出來的Debian Base System。讀者們不用擔心不熟悉debootstrap 或是NFS 的操作方式,只要交給FAI 來產生即可。
檔案結構
這一節要說明FAI 設定檔中的主要參數,請依照您的周邊環境更改FAI 的設定檔。需要更改的設定檔如下︰
/etc/fai/fai.conf
FAI 的主設定檔,主宰著Client 端抓取FAI Server 的資訊。該檔案要修改的項目不多,筆者會解釋重要參數,讀者們可以視情況修改︰
- ● installserver=192.168.0.1::: 指定FAI Server 的ip 位址
- ● mirrorhost=$installserver::: pkg pool 的服務器ip 位址,筆者已經事先下載好
- pkg pool 了,所以直接命名成FAI Server
- ● SERVERINTERFACE=eth0::: FAI Server 與Client 端溝通的網路裝置,預設是
- eth0
- ● FAI CONFIGDIR=/usr/local/share/fai::: CONFIGDIR 是存放class、hooks、install
- package. . . 等設定檔的目錄,這些設定檔控制著Client 端安裝的前置與後續作業。
以上這些參數是必須依照主機環境作更改,其餘的參數並不需要變動,請參考\fai.conf" 的說明便能了解其意義,筆者在此也不詳述了。請繼續往下看第二個設定檔的說明。
/etc/fai/make-fai-nfsroot.conf
FAI Server 會執行debootstrap 來建立一個Debian Base System 當作NFSROOT 提供給Client 端安裝。所以這個檔案是調整debootstrap 的設定檔。
- ● NFSROOT ETC HOSTS="192.168.0.1 $mirrorhost"::: 如果FAI Server 沒有DNS 服務,此選項可以設定Client 端的/etc/hosts
- ● FAI DEBOOTSTRAP="sarge ftp://$mirrorhost/debian"::: 設定debootstrap安裝Debian 版本與來源。筆者已經事先下載好pkg pool 了,所以將來源設定成FAI Server
- ● FAI LOCAL REPOSITORY="deb ¯le:/fai/¯les packages/"::: 製作本地端的pkg pool,建立NFSROOT 時會下載deb 套件檔案,設定此參數會建立本地端的pkg pool 讓FAI Client 安裝套件
- ● KERNELPACKAGE=/usr/lib/fai/kernel/kernel-image-2.4.27-fai 1 i386.deb:::此kernel-image 是用來製作開機媒體的核心,這個deb 檔案是FAI 套件內附的
etc/fai/sources.list
這是用來設定套件來源。如果FAI Server 沒有提供DNS 服務的化,請將來源的Domain Name 改成IP 位置。讀者們可以指定速度快的檔案伺服器。
由於筆者先前已經鏡射所有的pkg pool 到FAI Server 了,所以來源便設定成FAI
Server:
1 ## FAI Server
2 deb ftp://192.168.0.1/debian/ sarge main non-free contrib
設定FAI Client
以上這些動作是針對FAI Server 的架設,底下才是針對Client 端的設定與調整。這時候讀者們應該會想說FAI 怎麼會這麼麻煩呢,筆者很同意,但FAI 在設計時並非針對單一台電腦安裝,回想一下筆者在什麼是FAI這一節說明的,FAI 的特色之一是能同時針對不同的電腦進行不同的安裝模式,一般的自動安裝光碟頂多安裝好系統之後,管理者還是必須設定或安裝軟體來架設伺服器,如果電腦一多,可是會累壞管理者的。
聽到這樣也請別灰心,因為FAI 也是可以很簡單,底下筆者示範的最基本的安裝,重點在於說明\FAI CONFIGDIR" 中的設定檔,讀者們可以從example.tgz 中找到這些範例,如果想製作Debian Base System 的話,可以直接拷貝這些檔案並放到fai.conf 中定義的FAI CONFIGDIR 的目錄下,完成\建立FAI 映像檔" 這一節的內容就可以了。
Default Tasks
FAI 定義了一些Task 來進行安裝的步驟,比如解壓縮base.tgz、格式化硬碟、偵測硬體. . . 大致的流程如下︰
1. hardware detection and load kernel module
2. de¯ne classes/variables
3. partition local disks
4. create and mount the local ¯lesystems
5. install software packages
6. call speci¯c con¯guration script
7. save log ¯les
8. reboot the new machine
從上面的步驟可以了解Client 的安裝流程,其中有一些classes、variables 等陌生名詞會在稍後介紹,我們可以針對上述的Task 編寫不同的init script 進行更進階的調整。
Classes
Class 用來定義Client 端在進行安裝的Task 中所讀取的設定檔名,如果沒有額外定義的話,預設就是\Default"。
Variables
在安裝的過程中,會定義一些外部變數,比如keymap,這些變數檔放置在 FAI CONFIGDIR/class 下,請將檔名更名成[Task].var(可以有不同的Task,預設為Default),預設的檔案是\DEFAULT.var",在 de¯ne classes/variables 這個步驟中,就會讀取這個定義檔,至於讀者們針對自己定義的Task 所設定的定義檔也是會一併讀取喔。
底下是example.tgz 中所附的DEFAULT.var﹕
1 # default values for installation. You can override them in your *.var files
2
3 FAI_CONSOLEFONT=
4 FAI_KEYMAP=us-latin1
5
6 # Set UTC=yes if your system clock is set to UTC (GMT), and UTC=no if not.
7 UTC=yes
8 time_zone=Asia/Taipei
9
10 # root password for the new installed linux system; pw is "fai"
11 rootpw="56hNVqht51tzc"
12
13 # packages in /fai/files/packages/ that are installed to the new system
14 # used in scripts/DEFAULT/S01. This directory should be a simple repository.
15 # you can also include your specific kernel-image package
16 kernelversion=2.4.27 # for the packages kernel-doc and kernel-source
17 addpackages="kernel-image-2.4.27-1-386"
18
19 # modules that will be loaded by the new system, not during installation
20 # these modules will be written to /etc/modules
21 moduleslist="e100 3c59x usbkbd usb-uhci keybdev mousedev hid 8139too pcnet32"
Hard Disk Con¯g
這是硬碟分割的設定檔,FAI 會讀取該檔進行分割以及格式化的動作。筆者進行測試的電腦只有安裝一顆硬碟,且接在主機板的Primary IDE 插槽上,所以對應的device node 為hda,底下針對設定檔內容說明各欄位的意義。
<type> <mountpoint> <size in mb> [mount options] [;extra options]
- ● type:指定分割的磁區是\primary" 或是\logical",請記得將/boot 或是/ 掛載到primary 磁區,這樣才能開機喔。
- ● mountpoint:指定掛載該磁區的目錄,可以是\/home"、\/boot"、\/var". . . 等等。
- ● size in mb:該分割區的大小,以MegaBytes 為單位。
- ● mount option:掛載該磁區的設定,如\ro"(read-only)、\noatime"。
- ●;extra options:格式化該磁區的設定,比如格式化ext2/3 檔案系統時,加入\-i" 指定inode 的大小,請注意\;" 不可以省略喔。
建立FAI 映像檔
最後,請執行『fai-setup』來建構一個FAI 和NFSROOT。
上述的fai-setup 如果順利完成的話,如(圖一),您就可以開始製作Client 端的開機媒體了。
《圖一 fai-setup.txt:建立NFSROOT》 |
|
開機媒體
由於Client 端沒有任何資料,要如何在開機之後能夠自動進行系統安裝就必須仰賴FAI Server 製作出來的開機磁片或光碟。
FAI 支援的底下這幾種開機方式︰
● Booting from Network
● Boot Floppy
● Boot CD:http://holbytla.org/fai/
筆者的網路卡不支援WOL,所以改用磁碟片開機的方式,讀者們可以參考\/usr/share/doc/fai/faguide.pdf" 來實現網路開機的安裝方式。在此請執行『make-fai-°oppy -f』︰
asho@vmware:~$ sudo make-fai-bootfloppy -f fai-boot.img
1440+0 records in
1440+0 records out
1474560 bytes transferred in 0.023451 seconds (62878483 bytes/sec)
Creating an ext2 filesystem on floppy device fai-boot.img.
Creating the boot floppy with grub.
Using IP address 192.168.0.196 of eth0 for the fixed boot menu.
Writing boot data to floppy. The default boot label is:
The kernel configuration is /usr/lib/fai/nfsroot/boot/config-2.4.27-fai.
Additional kernel parameters:
執行『dd if=fai-boot.img of=/dev/fd0』將印象檔寫到磁碟片上,這就完成了Client 的開機片了。
目前FAI 不支援製作開機光碟片,請另外到http://holbytla.org/fai/ 下載fai-bootcd 來製作開機光碟片。
FAI Boot-CD
以上介紹的是FAI 的設定部份,如果讀者們都設定好且能正確執行fai-setup 沒有問題的話,那接下來建立FAI Boot-CD 就不會遇到問題了。
FAI Boot-CD 的設定與FAI 完全一樣,同樣是FAI Server/Client 的架構,所以能直接拷貝FAI 的設定給FAI Boot-CD。最大的不同點在於NFSROOT 被壓縮在一個光碟片上,完全不用仰賴網路,對於一般單機使用者來說是再方便不過了,唯一的缺點是對於不同性質的電腦必須特別製作不同的FAI Boot-CD。所以請讀者依照自己的需求取捨FAI 或者FAI Boot-CD,事不移遲,馬上來了解FAI Boot-CD 的使用流程吧。
首先加入筆者修改好的FAI Boot-CD 的來源,請編輯\/etc/apt/sources.list" 並加入以下一行的敘述:
deb http://people.debian.org.tw/~asho fai-bootcd/
請更新apt 的資料庫並安裝FAI Boot-CD:
apt-get update
apt-get install fai-bootcd
跟著底下的步驟產生FAI Boot-CD 的安裝光碟:
1. cp -a /etc/fai/* /etc/fai-bootcd/ 拷貝先前的FAI 設定檔到\/etc/fai-bootcd 目錄下",您也許需要額外的修改
2. 修改/etc/fai-bootcd/dist.conf 設定要安裝那一個Debian 版本,跟\make-fai-nfsroot.conf" 中的Debootstrap 安裝的版本一致
3. FAI CONFIGDIR 的設定檔如果您要額外修改FAI Client 的流程,請編輯FAI CONFIGDIR底下的設定檔
4. make-fai-bootcd -r -n 執行該指令產生FAI Boot-CD 的光碟映像檔最後會出現如(圖二)的訊息表示映像檔已經完成,將產生的\fai-bootcd.iso" 燒錄到光碟片上,一張熱騰騰的Debian Auto-Install Disk 就產生了。
《圖二 make-fai-bootcd.txt:產生fai-bootcd.iso 的訊息》 |
|
參考資料與下載
FAI 官方文件:/usr/share
FAI Boot-CD 的主網站:http://holbytla.org/fai/
FAI Boot-CD 修正下載點:http://people.debian.org.tw/~asho/fai/main.html
example.tgz:http://people.debian.org.tw/~asho/fai/example.tgz
autoinstall:另一套自動安裝光碟
鏡射pkg pool
debmirror 就是用來鏡射pkg pool。Client 端在上個步驟中只會安裝好一個Debian Base System,如果想要額外安裝不同的軟體,例如︰KDE, GNOME, QT. . . 等套件,FAI 會自動使用apt-get 來安裝軟體。讀者們可以在example.tgz(設定檔範例,讀者可以在參考資料與下載取得)中找到mirror debian.sh 這個script 來映射pkg pool ,這個script 搭配debmirror 就能方便下載pkg tool 到本地端的FAI Server。該script 只有抓取testing的檔案(目前為Sarge),讀者們可以仿照下列的說明修改\DISTS" 參數來增加Stable 或Unstable 的檔案:
1 DISTS="stable,testing,unstable"
2 DISTS_NONUS="stable/non-US,testing/non-US,unstable/non-US"