PXE批量安裝Debian操作系統(tǒng)并自動配置網(wǎng)絡(luò)環(huán)境型酥、軟件源

本文寫于2022年05月01日山憨,閱讀時請注意時效。落筆時syslinux最新版本為6.03冕末,Debian的最新版本為11.3萍歉,本文采用了這兩個版本。

本文的實(shí)驗(yàn)材料較多档桃,建議下載 pxe-debian - github 倉庫到本地枪孩,其中包含了本文實(shí)驗(yàn)所需的所有代碼文件。

前置知識

  • Debian的手動安裝流程

  • 網(wǎng)絡(luò)配置的基礎(chǔ)知識

  • 大致讀一下SYSLINUX 網(wǎng)站中各個鏈接的所有文檔藻肄,內(nèi)容不多蔑舞,達(dá)到能當(dāng)字典查的程度就行

本文屬于GPU集群管理、使用指南中的一篇嘹屯,前置知識可以參考相應(yīng)內(nèi)容

實(shí)驗(yàn)準(zhǔn)備

  • 一臺裝好Debian 11的虛擬機(jī)(hostname: node18)攻询,不需要提前配置虛擬機(jī),方法參照前置知識中的鏈接

  • python或者其他http服務(wù)器軟件

  • 提前準(zhǔn)備好pxe-debian文件夾州弟,文件目錄如下钧栖,在pxe-debian中執(zhí)行python -m http.server 8000開啟一個http服務(wù)器

pxe-debian/
├── initpxe.sh
├── init.sh
├── interfaces
├── pxefiles
│   ├── default
│   ├── dhcpd.conf
│   ├── hosts
│   ├── interfaces
│   ├── preseed-vm-20220501.cfg
│   └── uuids
├── README.md
├── resolv.conf
└── sources.list
  • 一臺以上空白的虛擬機(jī)作為安裝操作系統(tǒng)的對象,需要提前開啟系統(tǒng)→主板→啟動順序中的網(wǎng)絡(luò)啟動并記錄他們的system-uuid婆翔,這一步是為了后續(xù)自動為機(jī)器配置網(wǎng)絡(luò)拯杠。在真實(shí)環(huán)境下一般使用機(jī)器的system-serial-number也就是序列號即可,一般服務(wù)器序列號都會貼在機(jī)器表面比較易得啃奴。virtualbox序列號均為0無法起到區(qū)分機(jī)器的作用所以使用system-uuid潭陪。獲取方法:將Debian安裝鏡像放入虛擬機(jī)光驅(qū),選擇Install進(jìn)入安裝流程最蕾,在選擇鍵盤后面的讀條結(jié)束后依溯,停在Configure the network也就是選擇網(wǎng)卡的界面的時候,按alt + f2切換到tty2瘟则,輸入命令dmidecode -s system-uuid即可得到虛擬機(jī)的uuid黎炉。
讀條
  • 之后修改pxe-debian/pxefiles/uuids與實(shí)際匹配即可,本文使用了node08 node10 node20作為待安裝操作系統(tǒng)的節(jié)點(diǎn)

初始化PXE服務(wù)器節(jié)點(diǎn)環(huán)境

在剛安裝好操作系統(tǒng)的node18醋拧,執(zhí)行wget http://192.168.56.1:8000/init.sh下載配置網(wǎng)絡(luò)環(huán)境和軟件源的腳本拜隧,這個腳本是GPU集群管理、使用指南中配置網(wǎng)絡(luò)環(huán)境趁仙、軟件源步驟的自動化洪添,其內(nèi)容如下:

#!/bin/bash
fileserver='http://192.168.56.1:8000'
stamp=$(date +%Y%m%d%H%M%S).$(whoami)
sed -i '/#PermitRootLogin/i PermitRootLogin yes' /etc/ssh/sshd_config
systemctl restart sshd
mv /etc/network/interfaces /etc/network/interfaces.${stamp}
wget -P /etc/network/ ${fileserver}/interfaces
mv /etc/resolv.conf /etc/resolv.conf.${stamp}
wget -P /etc/ ${fileserver}/resolv.conf
ifdown --all
ifup --all
mv /etc/apt/sources.list /etc/apt/sources.list.${stamp}
wget -P /etc/apt/ ${fileserver}/sources.list
apt update

下載完成后,執(zhí)行bash -x init.sh運(yùn)行腳本雀费,-x參數(shù)可以顯示即將執(zhí)行的命令干奢。

搭建PXE服務(wù)器

注意:本文選擇了Debian Installation Guide中推薦的isc-dhcp-server和tftpd-hpa提供dhcp和tftp服務(wù)。我還嘗試過dnsmasq但是在機(jī)房環(huán)境會出問題所以放棄了盏袄,如果有讀者成功可以交流一下經(jīng)驗(yàn)忿峻。

接著上面的腳本之后執(zhí)行wget http://192.168.56.1:8000/initpxe.sh下載配置PXE服務(wù)器的腳本薄啥,其內(nèi)容如下:

#!/bin/bash
apt install -y isc-dhcp-server tftpd-hpa
fileserver='http://192.168.56.1:8000/pxefiles'
mkdir pxe/
cd pxe/
wget --no-check-certificate https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz
tar -zxf syslinux-6.03.tar.gz
wget https://mirrors.ustc.edu.cn/debian/dists/bullseye/main/installer-amd64/current/images/netboot/netboot.tar.gz
mkdir netboot
tar -zxf netboot.tar.gz -C netboot/
mkdir -p /srv/tftp/lib/
mkdir -p /srv/tftp/pxelinux.cfg/
mkdir -p /srv/www/debian11/
cp syslinux-6.03/bios/com32/elflink/ldlinux/ldlinux.c32 /srv/tftp/
cp syslinux-6.03/bios/com32/libutil/libutil.c32 /srv/tftp/lib/
cp syslinux-6.03/bios/com32/menu/menu.c32 /srv/tftp/lib/
cp syslinux-6.03/bios/core/lpxelinux.0 /srv/tftp/
cp netboot/version.info /srv/www/debian11/
cp netboot/debian-installer/amd64/initrd.gz /srv/www/debian11/
cp netboot/debian-installer/amd64/linux /srv/www/debian11/
wget -P /srv/tftp/pxelinux.cfg/ ${fileserver}/default
wget -P /srv/www/ ${fileserver}/hosts
wget -P /srv/www/ ${fileserver}/interfaces
wget -P /srv/www/ ${fileserver}/preseed-vm-20220501.cfg
wget -P /srv/www/ ${fileserver}/uuids
sed -i 's/INTERFACESv4=""/INTERFACESv4="enp0s3"/' /etc/default/isc-dhcp-server
mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.$(date +%Y%m%d%H%M%S).$(whoami)
wget -P /etc/dhcp/ ${fileserver}/dhcpd.conf
systemctl restart isc-dhcp-server tftpd-hpa

可以看到內(nèi)容大部分是在復(fù)制文件,腳本執(zhí)行完成后逛尚,使用tree /srv/查看文件結(jié)構(gòu)如下垄惧,沒有tree可以用apt裝一個

root@node18:~# tree /srv/
/srv/
├── tftp
│   ├── ldlinux.c32
│   ├── lib
│   │   ├── libutil.c32
│   │   └── menu.c32
│   ├── lpxelinux.0
│   └── pxelinux.cfg
│       └── default
└── www
    ├── debian11
    │   ├── initrd.gz
    │   ├── linux
    │   └── version.info
    ├── hosts
    ├── interfaces
    ├── preseed-vm-20220501.cfg
    └── uuids

5 directories, 12 files

各文件的用途

這一部分簡單介紹/srv/目錄中文件的用途,建議通讀PXELINUX網(wǎng)站中的所有內(nèi)容以獲得syslinux绰寞、pxelinux的全面了解到逊。本文還參考了Debian Installation Guide的相關(guān)章節(jié)(4.5、5.3滤钱、附錄B)觉壶。

其中/srv/tftp/目錄中除/pxelinux.cfg/default意外其他都是syslinux的文件,不需要修改件缸,default文件是pxelinux的boot界面文件铜靶,截圖如下,下一節(jié)將介紹如何使用他炊。/pxelinux.cfg/default/文件中的語句也比較好理解争剿,這里不做過多說明,有需求的用戶可以自行修改痊末。

bootmenu

/www/debian11/中的文件是linux內(nèi)核和initial ram disk和一個用來標(biāo)識版本的文本文件蚕苇。

/www/hosts /www/interfaces是每個服務(wù)器相同的網(wǎng)絡(luò)配置文件,當(dāng)集群中具有不同結(jié)構(gòu)的網(wǎng)卡時舌胶,interfaces文件可以適當(dāng)冗余捆蜀,比如我在機(jī)房環(huán)境中使用的interfaces如下:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eno1
iface eno1 inet static
    address 172.20.137.1fakenodeid/24
    gateway 172.20.137.1
    dns-servers 8.8.8.8 114.114.114.114

auto ens10f0
iface ens10f0 inet static
    address 12.12.12.1fakenodeid/24

auto ens10f1
iface ens10f1 inet static
    address 13.13.13.1fakenodeid/24

auto enp6s0f0
iface enp6s0f0 inet static
    address 12.12.12.1fakenodeid/24

auto enp6s0f1
iface enp6s0f1 inet static
    address 13.13.13.1fakenodeid/24

其中eno1是每臺機(jī)器都同名的千兆網(wǎng)卡疮丛,而一部分服務(wù)器的兩張萬兆網(wǎng)卡名字是ens10f0 ens10f1幔嫂,另一部分機(jī)器是enp6s0f0 enp6s0f1,這里多寫的部分在名字不匹配時不會生效誊薄,從而可以用一個配置文件完成所有機(jī)器的網(wǎng)絡(luò)配置履恩。改網(wǎng)卡名字的操作我不會,有會的讀者可以交流一下呢蔫。

/www/uuids/中記錄了機(jī)器的uuid和hostname的對應(yīng)情況切心,讀者可以根據(jù)實(shí)際情況修改。機(jī)房環(huán)境一般使用dmidecode -s system-serial-number獲取序列號或者直接從機(jī)器貼的標(biāo)簽上手抄片吊。

/www/preseed-vm-20220501.cfg/是Debian安裝過程的預(yù)置文件绽昏,寫法參考bullseye preseed 。文件最后late-command部分就是shell腳本俏脊,替換掉了配置文件中的fakehost占位符全谤,完成了網(wǎng)絡(luò)的配置和軟件源的配置。如果讀者有其他需求比如需要預(yù)裝git爷贫、tree等軟件都可以直接寫在這里认然。需要注意安裝后的操作系統(tǒng)的根目錄是/target/补憾,而in-target命令的執(zhí)行目錄是在/target/root/中,而不帶這一前綴的命令執(zhí)行目錄在/root/卷员。

/    # 系統(tǒng)當(dāng)前的根目錄盈匾,在內(nèi)存中
├── bin
├── ...
├── root    # 普通命令執(zhí)行的位置
├── ...
└── target    # 系統(tǒng)重啟后的根目錄 ‘/’
    ├── bin
    ├── ...
    ├── root    # in-target命令執(zhí)行的位置
    └── ...

這里的/target/在Debian手動安裝過程中會在磁盤分區(qū)步驟結(jié)束后出現(xiàn),就是把硬盤掛載到了這個文件夾毕骡∠鞫可以在安裝時在下圖磁盤分區(qū)寫入后切換到tty2通過ls看到硬盤里的根目錄。

寫入磁盤分區(qū)

使用方法

建議同時開三個shell挺峡。

前兩個分別執(zhí)行journalctl -fu isc-dhcp-serverjournalctl -fu tftpd-hpa來跟蹤dhcp和tftp的日志葵孤。

接著在/srv/www/文件夾中執(zhí)行python3 -m http.server 80運(yùn)行http服務(wù)。

最后啟動需要安裝操作系統(tǒng)的虛擬機(jī)橱赠,在virtualbox啟動界面按f12選擇啟動介質(zhì)為lan尤仍,默認(rèn)等待3秒后進(jìn)入自動安裝。

歡迎交流

由于本文涉及的內(nèi)容過多狭姨,導(dǎo)致我很難把握寫作的分寸宰啦,其中不夠詳細(xì)/過多冗余的部分還希望讀者能夠幫忙指出。

思路總結(jié)

最開始知道PXE是以前用CentOS的時候饼拍,想要給機(jī)房機(jī)器批量安裝操作系統(tǒng)赡模,當(dāng)時看到一篇很好的step-by-step教程kickstart批量安裝CentOS7_咖喱姬姬的博客-CSDN博客,雖然沒看到SYSLINUX的官方文檔师抄,但是因?yàn)榧t帽的文檔寫的非常詳細(xì)漓柑,反復(fù)實(shí)驗(yàn)后還是照貓畫虎的把自動安裝實(shí)現(xiàn)了。

后來CentOS變陣叨吮,服務(wù)器改用Debian辆布。而Debian的官方文檔就不夠詳細(xì),在搭建的過程中總是會出現(xiàn)各種莫名的錯誤茶鉴,各種想法都只能靠自己的實(shí)驗(yàn)驗(yàn)證锋玲,網(wǎng)上也沒有一篇比較全面準(zhǔn)確的教程。

最后通讀了SYSLINUX的所有文檔涵叮,加上當(dāng)時通過Arch Linux了解到了Linux安裝的底層其實(shí)就是一個“在內(nèi)存中加載一個小型操作系統(tǒng)→將硬盤掛載到/target/→將文件從軟件源服務(wù)器安裝到硬盤”的過程惭蹂。加上debian netboot文件給的目錄過于復(fù)雜不夠清晰,最后采取了自己寫pxelinux.cfg/default配置文件的方法割粮。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盾碗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子舀瓢,更是在濱河造成了極大的恐慌廷雅,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異榜轿,居然都是意外死亡幽歼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門谬盐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甸私,“玉大人,你說我怎么就攤上這事飞傀』市停” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵砸烦,是天一觀的道長弃鸦。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任仲翎,我火速辦了婚禮浓恳,結(jié)果婚禮上漓糙,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布喊积。 她就那樣靜靜地躺著,像睡著了一般玄妈。 火紅的嫁衣襯著肌膚如雪乾吻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天拟蜻,我揣著相機(jī)與錄音绎签,去河邊找鬼。 笑死瞭郑,一個胖子當(dāng)著我的面吹牛辜御,可吹牛的內(nèi)容都是我干的鸭你。 我是一名探鬼主播屈张,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼袱巨!你這毒婦竟也來了阁谆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤愉老,失蹤者是張志新(化名)和其女友劉穎场绿,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫉入,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡焰盗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年璧尸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熬拒。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡爷光,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出澎粟,到底是詐尸還是另有隱情蛀序,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布活烙,位于F島的核電站徐裸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏啸盏。R本人自食惡果不足惜重贺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望回懦。 院中可真熱鬧檬姥,春花似錦、人聲如沸粉怕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贫贝。三九已至秉犹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稚晚,已是汗流浹背崇堵。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留客燕,地道東北人鸳劳。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像也搓,于是被迫代替她去往敵國和親赏廓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容