DRBL 企鵝龍

Diskless Remote Boot in Linux
DRBL的安裝

[版權說明] [作者列表] [ 前言][安裝] [下載] [使用] [升級] [移除] [問題回報] [參考網址]

修改日期 2023/Sep/06



一、版權說明

本文版權屬於全體作者所有,且以 GNU FDL 授權合約發佈。在遵守 GNU FDL 授權合約的情況下,您可以複製、散佈,以及修改本文件。唯請保持作者列表的完整,若您修改過此份文件,也請在作者列表中加入您的大名。
同時請注意本文件沒有任何擔保,若因本文件而產生任何直接或間接的損失,本文作者群均不負任何法律及道義上的責任。

二、作者列表

蕭志榥 (steven _at_ nchc org tw)
黃國連 (klhaung _at_ gmail com)
王順泰 (c00wht00 _at_ nchc org tw)
孫振凱 (ceasar _at_ nchc org tw)
王耀聰 (jazzwang _at_ nchc org tw)
蔡育欽 (thomas _at_ nchc org tw)

三、前言

學校與公司在大量使用Linux機器的時候,常常會遇到一個很大的問題,就是機器數量非常多時的管理與架設,一來人力有限,二來故障除錯太耗時。因此本實驗室將在PC Cluster上使用diskless, remote boot的經驗在此野人獻曝一下。對學校的訓練教室教學而言,使用這個方式的好處在於系統管理者只需照顧到server部分,對於clients就比較不用花時間。由於硬碟目前幾乎是PC最容易故障的部分,如果使用diskless的方式,只有server有硬碟,這樣可以減少一些不必要的困擾。
DRBL與Clonezilla從2003年起在國家高速網路與計算中心的PC 教室使用,一直是很穩定的運轉中。在此網頁中,本自由軟體實驗室將架設的方式詳細說明,相信一定可以省卻您不少摸索的時間。

另外,已經有LTSP了,為何還要再開發DRBL? 我們分幾個部分來看:

  • LTSP是集中使用伺服器上資源,而DRBL採用的是分散式的作法。LTSP的client端只做終端機使用,也就是client端開啟程式的時候,用的是server的CPU,記憶體等,client幾乎純粹只做KVMN (Keyboard, Video, Mouse, NIC)的輸入輸出。另一方面,DRBL的client端是一台完整的電腦,只是硬碟在Server上而已,DRBL的client我們可以想成是一台完整安裝好Linux的機器,所以client端開啟程式的時候,使用的計算資源,例如CPU, RAM等都是client端自己的。LTSP和DRBL兩個我們可以比喻成一個是中央集權,另一個是地方分權。當"地方能力夠"的話,最好是用地方分權的方式,也就是DRBL分散式的作法。DRBL所要求的server只需中階的電腦,一台CPU 2.6 GHZ左右的server,配備多張(>=2)網路卡,然後搭配fast ethernet 的交換器就可以供目前台灣中小學電腦教室40台學生的電腦使用。同樣的配備,如果使用LTSP,可能只能供10台學生電腦使用。
  • LTSP有幾個無法克服的部分,主要就是學生電腦部分的資源使用,在LTSP環境中學生的電腦(client)上,學生無法"直接"使用光碟機來讀光碟片,您無法讓學生使用隨身碟來存取資料,還有,學生不容易直接在他那台電腦中放出音樂等等,這些限制主要是因為在LTSP環境中,學生用的硬體資源大部分是server那台的,光碟機,USB port,音效卡等都是server的。而在DRBL環境中,學生的電腦就像是Linux安裝在自己的硬碟中,他可以完全的使用那台電腦的硬體資源,只不過這個硬碟是在遠端的server而已。
  • 電腦更新速度非常快,現在新購買的電腦,CPU速度都在1 GHz以上,如果做LTSP的client的話,幾乎只是用到KVMN,未能充分使用新電腦的強大功能。現在新購買的電腦都可以輕易的當DRBL的server。使用DRBL的話,您能充分的使用Client的硬體。然而,反過來,如果舊的電腦,要資源再利用的話,LTSP就是一個好的選擇。

  • 以上的比較,我們可以看出,DRBL與LTSP兩者各有所長,您不妨依照自己的需要來選擇。

    本DRBL程式,主要是提供一個整合的安裝的方式,讓您很快的將集中管理的環境建好。安裝過程中有很多選項可以選,您可以依照您的需求選擇。

    四、DRBL的安裝

    4步安裝法

    步驟1 - 安裝您的GNU/Linux套件。

    步驟2 - server上相關套件的安裝

    這部分當然還是安裝在server上,只是這些服務是提供給client用的。再度提醒,你務必完成第一步驟的相關設定才來進行此部份的安裝。

    • <步驟2a->-依照不同的套件,有不同的方式下載drbl程式來安裝
      • Debian或是Ubuntu
        • 如果您不是系統管理者(root),執行指令"su root" (然後輸入root的密碼),如果你的套件沒有設定root密碼,可以用"sudo su " (然後該使用者的密碼)以便切換成root
        • 請先安裝DRBL的金鑰(ID: 4096R/45599AFD, Key fingerprint = 54C0 821A 4871 5DAF D61B FCAF 6678 57D0 4559 9AFD),有兩個方式可以來安裝。方法1: "sudo wget -O /etc/apt/trusted.gpg.d/drbl-gpg.asc https://drbl.org/GPG-KEY-DRBL" 。方法2: 或是由key server下載,KeyID是45599AFD,可以這樣執行"gpg --keyserver subkeys.pgp.net --recv-key 45599AFD",然後再執行"gpg -a --export 45599AFD | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/drbl-gpg.asc".
        • 請編寫/etc/apt/sources.list,至少要包含以下的儲藏庫:
        • 如果您的套件是Stretch (10.x):
          ----------
          deb http://free.nchc.org.tw/debian/ buster main
          deb http://free.nchc.org.tw/drbl-core drbl stable
          ----------
          如果您的套件是Stretch (9.x):
          ----------
          deb http://free.nchc.org.tw/debian/ stretch main
          deb http://free.nchc.org.tw/drbl-core drbl stable
          ----------
          如果您的套件是Ubuntu Jammy (22.04) (Snaps 的軟體在用戶端無法支援使用):
          ----------
          deb http://free.nchc.org.tw/ubuntu jammy main restricted universe multiverse
          deb http://free.nchc.org.tw/drbl-core drbl stable
          ----------
          如果您的套件是Ubuntu Focal (20.04):
          ----------
          deb http://free.nchc.org.tw/ubuntu focal main restricted universe multiverse
          deb http://free.nchc.org.tw/drbl-core drbl stable
          ----------
        • 以上第一行中Debian或是Ubuntu的apt repository當然可以採用其他的apt repository,但是第二行DRBL相關程式請用這個位址。
          如果您想要使用測試版本中的DRBL程式,第二行可以這樣寫:
        • ----------
          deb http://free.nchc.org.tw/drbl-core drbl testing
          ----------
          如果您想要使用不穩定版本的DRBL程式,第二行可以這樣寫:
          ----------
          deb http://free.nchc.org.tw/drbl-core drbl unstable
          ----------
        • 執行 "sudo apt-get update"
        • 執行 "sudo apt-get install drbl"來安裝drbl程式
        • 有關B2D的相關提醒:(1) B2D預設會把TCPwrapper開啟,所以你必須注意要記得改/etc/hosts.allow,寫法請參考這裡。要不然後面第三步驟執行完後client會開不了機。(2) B2D中的kdm似乎在DRBL client環境下,非常不穩定,有時候啟動時,會發現已經有kdm了,然後就不跑了,造成用戶端沒有圖形登入畫面。解決的方法就是在執行步驟2b的drblsrv之前,先安裝gdm (apt-get install gdm),然後把gdm設為預設的dm。如果已經有gdm的話,但是並不是預設的dm,可以再執行"dpkg-reconfigure gdm"來把gdm設定為預設的dm。
      • RedHat/Fedora/CentOS
        • 如果您不是系統管理者(root),執行指令"su root" (然後輸入root的密碼),如果你的套件沒有設定root密碼,可以用"sudo su " (然後該使用者的密碼)以便切換成root
        • 請先安裝DRBL的金鑰(ID: 4096R/45599AFD, Key fingerprint = 54C0 821A 4871 5DAF D61B FCAF 6678 57D0 4559 9AFD),這樣可以進一步確認您安裝的程式是本計畫所發行的程式。有兩個方式可以來安裝。方法1: "rm -f GPG-KEY-DRBL; wget http://drbl.nchc.org.tw/GPG-KEY-DRBL; rpm --import GPG-KEY-DRBL" 。方法2: 由key server下載,KeyID是45599AFD,可以這樣執行"gpg --keyserver subkeys.pgp.net --recv-key 45599AFD",然後再執行"gpg -a --export 45599AFD > GPG-KEY-DRBL; rpm --import GPG-KEY-DRBL". 如果你要查詢系統是否已經有匯入數位簽章的話,可以這樣查詢: rpm -qa gpg-pubkey*。
        • 下載DRBL的RPM檔(檔名如drbl-1.9.6-35.i386.rpm):穩定版測試中的版本,或是不穩定的版本
        • 執行"rpm -Uvh drbl-XXX.i386.rpm"或者"yum install drbl-XXX.i386.rpm" (如果你的套件有yum的話)來安裝drbl程式,drbl-XXX.i386.rpm就是您剛剛下載的檔案,如果您是下載穩定版的話,就執行"rpm -Uvh drbl-current.i386.rpm"或者"yum install drbl-current.i386.rpm"。
        • :由於drbl程式使用到一個perl的模組,一般套件都會內建安裝perl-Digest-SHA1這個package,如果您的系統中沒有的話,請自己先裝。以Fedora 8為例,可以這樣安裝(1) "yum install perl-Digest-SHA1" 或者(2) "rpm -Uvh http://opensource.nchc.org.tw/fedora/linux/releases/8/Fedora/i386/os/Packages/perl-Digest-SHA1-2.11-4.fc8.i386.rpm"
      • SuSE
        • 如果您不是系統管理者(root),執行指令"su root" (然後輸入root的密碼),如果你的套件沒有設定root密碼,可以用"sudo su " (然後該使用者的密碼)以便切換成root
        • 請先安裝DRBL的金鑰(ID: 4096R/45599AFD, Key fingerprint = 54C0 821A 4871 5DAF D61B FCAF 6678 57D0 4559 9AFD),這樣可以進一步確認您安裝的程式是本計畫所發行的程式。有兩個方式可以來安裝。方法1: "rm -f GPG-KEY-DRBL; wget http://drbl.nchc.org.tw/GPG-KEY-DRBL; rpm --import GPG-KEY-DRBL" 。方法2: 由key server下載,KeyID是45599AFD,可以這樣執行"gpg --keyserver subkeys.pgp.net --recv-key 45599AFD",然後再執行"gpg -a --export 45599AFD > GPG-KEY-DRBL; rpm --import GPG-KEY-DRBL".
      • OpenSuSE/SuSE 10.0或者以後的版本
    • 註:另外有兩個drbl-core的映射站: (1) http://ftp.twaren.net/local-distfiles/drbl-core/ (2) http://drbl.sourceforge.net/drbl-core

    步驟3 - 在server上建置client的檔案系統

      規劃您的訓練教室,請耐心瞭解以下內容
    • 以國家高速網路與計算中心的C教室為例:該教室共有40台電腦,為了提高 DRBL 的效率,我們將之分成4個子網路(subnet),分別是 192.168.100.0、192.168.101.0、192.168.102.0、192.168.103.0,DRBL 伺服器(Server)有四張網路卡, 其中一個port對外(eth0),另外4個port對內(eth0:1, eth1, eth2, eth3),對內的4個ports IP分別是192.168.100.254, 192.168.101.254,192.168.102.254,192.168.103.254; 在 DRBL 伺服器上跑的 DHCP、TFTP、NFS 都會在這4個網路卡上提供服務。
               NIC    NIC IP                    Clients
      +-----------------------------+
      | DRBL SERVER |
      | |
      |+-- [eth0] public IP +- to WAN
      | (ex. 61.216.116.23) |
      | |
      |+-- [eth0:1] 192.168.100.254 +- to clients group 1 [ 10 clients, their IP
      | | from 192.168.100.1 - 192.168.100.10]
      |+-- [eth1] 192.168.101.254 +- to clients group 1 [ 10 clients, their IP
      | | from 192.168.101.1 - 192.168.101.10]
      |+-- [eth2] 192.168.102.254 +- to clients group 2 [ 10 clients, their IP
      | | from 192.168.102.1 - 192.168.102.10]
      |+-- [eth3] 192.168.103.254 +- to clients group 3 [ 10 clients, their IP
      | | from 192.168.103.1 - 192.168.103.10]
      +-----------------------------+
    • 網路交換器與網路卡分流注意事項
      在網路交換器(switch)的部分,有一個地方要注意的,基本上建議您最好用鎖定學生電腦MAC address的方式,以確定每一台都能有固定不變的 IP(也就是在步驟3a中,執行"drblpush -i"的時候,遇到"現在我們可以收集用戶端電腦網卡卡號(MAC Adrees)!"時,回答的是"Y")。要不然如果用不鎖定MAC address (以後我們稱做range)的方式,您的switch又恰好是一台48 ports(或是多台串成一台),DRBL server採用4張網卡分流,這樣會造成有些機器從DRBL server租不到IP,自然就沒辦法開機了。
      如果您的DRBL server採用4張網路卡分流(這裡所說的4張網卡分流指的是您有4個 private subnet,例如192.168.100.x, 192.168,101,x, 192.168.102.x, 192.168.103.x),您手邊的網路交換器有4台,彼此不串接成一個網路交換器,這樣的話,您就可以用range的方式,也就是不鎖定學生電腦的MAC address。這樣是不會發生有些機器從DRBL server租不到IP而沒辦法開機。
      請記得一個規則,就是如果DRBL server用N張網卡分流,要採用range的方式,您就需要N台網路交換器,而且這N網路交換器彼此不串接(不串接這點非常重要)。
    • 從DRBL 1.6.3以後的版本,可以有Full DRBL, Full Clonezilla, DRBL SSI (Single System Image)與Clonezilla Box 四種模式,前兩個Full模式需要多一點的網路流量與硬碟空間,但是用戶端所有的檔案都會回存到伺服器。而DRBL SSI模式,乃是使用單一的主程式,用戶端開機後動態調整需要的設定。這個模式的好處是server設定以及所需的空間減少。但是缺點是每台不能回存各自的系統設定檔(使用者的設定檔與資料仍然可以回存)。用戶端電腦數目有所增加,只要改dhcpd.conf之後,執行 "dcs -> others -> gen_3N_conf"或是"drbl-3n-conf generate"即可以馬上增加用戶端電腦的數目。採用此模式,理論上server一張網卡可以支援253台client。另外Clonezilla box 模式乃是DRBL SSI的延伸,以用戶端的RAM降低網路流量,理論上server一張網卡可以支援253台client來clone。<注意>DRBL SSI模式,最好是在你用戶端電腦的RAM夠大,例如1 GB,以及所有用戶端的硬體(尤其是顯示卡)都一樣才建議使用。四種模式的比較表見此
    • 執行步驟<3a>之前,有幾個可以自行定義的地方:
      1. 如果DRBL server上有其他特別的目錄你要分享給所有用戶端的話,例如/work1,那可以用文字編輯器,開啟/etc/drbl/drbl.conf,把設定寫成diskless_root_dir_ro_user_add="/work1"(如果你的/work1是要讓用戶端只可以讀不能寫的話)或是diskless_root_dir_rw_user_add="/work1"(如果你的/work1是要讓用戶端可以讀寫的話)。<注意!!! drbl.conf檔案很重要,請小心編輯>
      2. 如果所有的用戶端本身都有硬碟,而且分割區已經格式化了(例如/dev/hda1,檔案系統是ext3),你想要用戶端開機後會自動掛載到/localwork目錄中。那你可以編輯/etc/drbl/client-append-fstab,把資料填進去,寫法如同/etc/fstab的寫法。以本例,/etc/drbl/client-append-fstab可以這樣寫:
        /dev/hda1 /localwork ext3 defaults 0 0
        (註:你不需要自行在DRBL server上建立/tftpboot/node_root/localwork目錄,待會drblpush會幫你產生)
      3. 如果你有特別的服務(例如apmd與bluetooth等)要在所有的用戶端開機後自動啟動,你可以編輯/etc/drbl/client-extra-service,把設定寫成service_extra_added="apmd bluetooth"。
      4. 如果你有部份或是全部的用戶端機器不想使用待會程式自動產生的電腦名稱,而是要自己指定用戶端電腦名稱,可以先編輯/etc/drbl/client-ip-hostname,把要指定的名稱依據IP address與名稱一行一行對應好。/etc/drbl/client-ip-hostname中沒有指定到的機器,drblpush會給與一個自動產生的機器名稱。
    • <步驟3a>瞭解您的環境以及設定後,執行
    • drblpush -i
      請注意"-i"前面有個空格。然後程式會自動偵測系統,找到參數,系統沒有設定的參數,程式會要求您輸入。執行的例子請按這裡。原則上,如果您不確定的地方,您可以直接按Enter使用預設值即可。
    • <注意>往後有新增加的client電腦或是server上新安裝了軟體等,請再執行一遍"drblpush -i"或是"drblpush -c /etc/drbl/drblpush.conf"(這個會讀取前一次存下來的設定檔)以便重新部署檔案給您的client電腦用。[註]執行完這個指令你的用戶端有可能需要重新開機才能正常運作。
    • <注意>安裝好DRBL相關這些程式後,不建議您開您的GNU/Linux啟套件自動更新的功能,因為有可能更新後,伺服器的檔案和用戶端的檔案版本不一致,如果您要開啟自動更新功能的話,必須再每次更新後,再自動執行一次上述的步驟。另外,如果要升級DRBL相關的程式,請依照後面的升級方式來進行,不適宜讓套件自動把DRBL相關程式升級。

    步驟4 - 讓client端(也就是學生用的機器)網路開機

      要讓用戶端機器能網路開機,基本上有4種狀況。(1). 用戶端機器的網卡有PXE網路開機功能 (2). 用戶端機器有軟碟機 (3). 用戶端機器有光碟機 (4). 用戶端機器本身有硬碟。(2)到(4)的部份,我們這裡以iPXE為例。
      (1). 用戶端機器的網卡有PXE網路開機功能
        直接將用戶端電腦的BIOS設定成網路開機就可以當DRBL的client了。2003年(含)以後新購買的電腦,主機板內建的網卡幾乎都有PXE功能,您可以進BIOS查看看,然後把那個PXE網路開機功能開啟。請參考你的主機板手冊為準。一般來說,設定的地方在Advanced -> Onboard Devices Configuration -> Onboard LAN -> Onboard LAN Boot Rom -> Enabled。另外,幾個地方建議這樣調整,以方便由DRBL server集中管理: (1) Boot order設成優先順序為LAN -> CDROM -> HD (2)開啟Wake on LAN (可能在APM Configuration -> Power On By PCI Devices)。
        如果您學生端機器沒有支援網路開機PXE的網路卡,可以用後面提到的軟碟,光碟或是硬碟來做到網路開機。另外,本實驗室也提供PXE網路卡製作服務,有需求者請參考這裡
      (2). 用戶端機器有軟碟機
      • <步驟4a->
        • 找到DRBL server的這個檔案"/usr/share/ipxe/ipxe.dsk"。
        • 然後放入磁片到軟碟機,
          • <步驟4b->若是在Linux下,執行 "cat /usr/share/ipxe/ipxe.dsk > /dev/fd0"
          • <步驟4b->若是在MS windows下,您要用rawrite.exe或是"RawWrite for windows" (http://uranus.it.swin.edu.au/~jn/linux/)來寫入此檔到軟碟片。
          • <步驟4c->做完的磁片要放在學生電腦的軟碟機中,並在學生電腦的BIOS中設定為軟碟開機。
      (3). 用戶端機器有光碟機
        如果要用光碟片開機的話,基本步驟是這樣:
        1. 找到DRBL server的這個檔案/usr/share/ipxe/ipxe.iso
        2. 將ISO檔燒到CD:
        在Linux例如: cdrecord -v speed=12 fs=16m dev=0,0,0 driveropts=burnproof -data /usr/share/ipxe/ipxe.iso
        (dev=0,0,0可能要改,您可根據"cdrecord -scanbus"而得知)
        (driveropts要根據您的燒錄機而定,或是乾脆不寫也可以,這麼小的image檔不太容易會出飛盤...)
        當然,您也可以把檔案傳到MS Windows上,然後用您熟悉的燒錄程式來燒到光碟上。
        3. 確定你PC的BIOS是從CDROM開機,然後放入光碟,就可以開機了.
      (4). 用戶端機器本身有硬碟
      • 如果用戶端的硬碟已經有安裝GNU/Linux的話,可以使用grub:
        1. 一般grub是安裝在Linux的檔案系統中(安裝到MS windows 2000/XP的方法見後),如果是如此的話,將server的"/usr/share/ipxe/ipxe.lkrn"複製到用戶端硬碟的"/boot/"目錄下
        2. 編輯用戶端電腦的/boot/grub/menu.lst或是/boot/grub/grub.conf (視您的套件而定):
        ---------------
        title iPXE
        kernel /boot/ipxe.lkrn
        ---------------
        3. 修改戶端電腦的/boot/grub/menu.lst或是/boot/grub/grub.conf的"default值"為上述那個區塊的對應區塊的數字, 例如"default 1"。
      • 如果用戶端的硬碟中已經安裝MS Windows XP/2K中,可以使用WINGRUB:
        請在MS Windows 2K/XP中安裝WINGRUB,將檔案ipxe.lkrn放在C:\下,而C:\boot.ini與C:\GRUB\MENU.LST的內容類似這樣(此法僅適用將wingrub的安裝設定指定在BOOT.INI (Tool -> Install grub -> Boot from BOOT.INI),有需要你可以使用wingrub其他的安裝設定方式):
        boot.ini:
        ---------------
        [boot loader]
        timeout=30
        default=C:\GRLDR
        [operating systems]
        multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect
        C:\GRLDR="iPXE"
        ---------------
        MENU.LST:
        ---------------
        timeout 7

        title etherboot
        root (hd0,0)
        kernel /ipxe.lkrn

        title Windows at (hd0,0)
        root (hd0,0)
        chainloader +1
        ---------------

      五、DRBL的使用

        由於DRBL屬於集中管理的環境,因此,透過一些指令,您可以很方便與快速的管理整個環境,下一個指令就可以讓全部的電腦使用。詳細的指令列表與說明請參考這裡,其中最常用的指令是"dcs",這個指令是用來切換用戶端電腦開機時候的模式,它的快照如下:
        drbl_client_switch screenshot
        此外,DRBL也可以搭配一些小型的GNU/Linux(DSL, PuppyLinux, INSERT, PLD, Debian Live, GeeXbox, PUD-Linux 等)讓用戶端開機後,不需要繼續插著網路線還可以繼續使用,亦即射後不理模式模式(fire and forget)。詳情請參考drbl-sl的使用。

      六、升級

        日後如要升級DRBL的話,可以這樣做:
        1. 備份重要的檔案,例如/etc/drbl下所有的檔案,以及/etc/dhcpd.conf或是/etc/dhcp3/dhcpd.conf等檔案以備不時之需
        2. 執行drblsrv -u來移除所有已經安裝過的DRBL相關檔案
        3. 回到步驟2,下載新版的DRBL主程式,然後依照DRBL安裝的步驟,重新安裝一次("drblsrv -i"與"drblpush -i")。
        如果版本還算接近的話,也許可以嘗試可以直接把相關的package升級即可,例如使用apt-get update; apt-get upgrade或是yum upgrade。但是不建議這樣做,因為,有不少檔案,只有在執行完drblsrv與drblpush之後,才會複製給用戶端的電腦使用。

      七、移除

        日後如要移除DRBL的話,只要執行"drblsrv -u",然後依照執行即可。

      八、回報問題

        如果您安裝或是使用時遇到問題,想要回報的話,請依照這樣做,可以節省大家的時間:
        • 執行drbl-bug-report,會得到一個檢查的結果(可以參考此例),並請依照格式填上您的問題。
        • 如果還沒有訂閱郵件討論區的話,請訂閱郵件討論區。如果你沒有加入郵件討論區的話,信將無法計達。
        • 把您填寫完的錯誤回報表,寄到該郵件討論區的帳號(drbl@googlegroups.com)

      參考網址