本文章同步發(fā)布于
https://williamgong.github.io/2021/05/12/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E6%90%AD%E5%BB%BAhomelab3/
當(dāng) Proxmox VE 已經(jīng)搭建完成后苍姜,就可以準(zhǔn)備開發(fā)機(jī)了换薄。
創(chuàng)建虛擬機(jī)
其實(shí) PVE 虛擬機(jī)創(chuàng)建向?qū)Ш苁娣谝话闱闆r下照著來就行间景。但對(duì)于 Gentoo淀歇,從這里開始就有坑了不跟。
首先是 CPU甥温,這個(gè)雖然不是坑刷袍,但這是我的一個(gè)小小的建議翩隧,將 CPU 類型設(shè)置為 host。畢竟由于 Gentoo 的特性呻纹,可以針對(duì) CPU 進(jìn)行優(yōu)化堆生,對(duì)于像好好玩 Gentoo 的人來說,個(gè)人認(rèn)為這一點(diǎn)蠻重要的雷酪。而且由于要編譯嘛淑仆,CPU 性能能榨干一點(diǎn)是一點(diǎn)。
此外就是各驅(qū)動(dòng)了哥力。千萬不要選 VirtIO 驅(qū)動(dòng)蔗怠!除非你第一次安裝就自己配置內(nèi)核而且不使用 genkernel 生成的 initramfs。
因?yàn)橐郧氨豢舆^無數(shù)次了吩跋,所以這次第一次安裝我選擇 genkernel 直接搞定寞射。而 genkernel 在不加參數(shù)的情況下是不會(huì)選中任何 virtIO 相關(guān)選項(xiàng)的……(這是我后來才知道的)。所以如果不想被 genkernel 坑死的話就不要上 virtIO 驅(qū)動(dòng)锌钮,至少安裝系統(tǒng)時(shí)不要選桥温。
安裝 Gentoo 的指導(dǎo)
本文不會(huì)完整記錄安裝 Gentoo 的流程,因?yàn)橄啾扔谖易约簩懙牧呵穑俜降陌惭b手冊(cè)要專業(yè)得多侵浸。而對(duì)于大多數(shù)流程來說旺韭,參考手冊(cè)就行了。
此外掏觉,相比幾年前 Gentoo 安裝手冊(cè)中的不完整而且爛的翻譯区端,現(xiàn)在的中文手冊(cè)已經(jīng)看不到英文了,而且中文的翻譯質(zhì)量也不差澳腹。所以大可以安心照手冊(cè)安裝织盼,不會(huì)有什么讓人摸不著頭腦的地方的。
此處為安裝手冊(cè)的鏈接:Gentoo AMD64 Handbook 感謝每一位翻譯貢獻(xiàn)者的努力遵湖!
安裝 Gentoo 的過程
由于我本次安裝使用的 init 是 systemd悔政,而手冊(cè)默認(rèn)是為 openRC 準(zhǔn)備的晚吞,因此我會(huì)寫下不同于手冊(cè)的延旧,有關(guān)于 systemd 的配置。
選擇 stage3
如果要用 systemd 的話槽地,記得選帶 systemd 的 stage3迁沫。
雖然使用 openRC 的也行,但是切換完配置后會(huì)下載編譯 systemd 及其相關(guān)依賴捌蚊,挺耗時(shí)間的集畅。
對(duì)了,建議到鏡像站下載缅糟,比如 tuna挺智。
分區(qū)
由于 PVE 默認(rèn)使用 SeaBIOS,所以就不用 ESP 了窗宦。但如果硬盤使用 GPT 的話記得加一個(gè) BIOS 啟動(dòng)分區(qū)赦颇。
選擇配置文件
如果你使用的是最新的 stage3 而且類型選擇正確的話,這一步是可以跳過的赴涵。不過保險(xiǎn)起見媒怯,還是用eselect profile list
看一眼吧。
如果你發(fā)現(xiàn)系統(tǒng)默認(rèn)的配置文件不是你想要的話髓窜,恭喜你扇苞,你多半選錯(cuò) stage3 了!但其實(shí)也沒什么寄纵,重新選擇配置就行了鳖敷,就是要多等一會(huì)了(指至少 1 小時(shí),具體時(shí)間取決于機(jī)器配置程拭,XD定踱。
locale 配置
在更改/etc/locale.gen
,運(yùn)行locale-gen
后哺壶,最后的選擇 locale 就不能按照手冊(cè)來了屋吨。直接修改/創(chuàng)建/etc/locale.conf
蜒谤,在里面輸入LANG="en_US.utf8"
即可。
此處非常不建議選擇有關(guān) zh_CN 的任何 locale至扰。除非在安裝時(shí)就安裝好了桌面環(huán)境并確保一旦重新啟動(dòng)就能進(jìn)入桌面鳍徽,不然就等著滿屏幕的口口口吧。
內(nèi)核配置
如果在這時(shí)配置 kernel 也是可以的敢课,但我更喜歡在系統(tǒng)能正常使用的時(shí)候再折騰阶祭,所以使用 genkernel 一條龍服務(wù)吧。
而如果選擇 genkernel 的話直秆,之前的驅(qū)動(dòng)選擇就十分重要了濒募。當(dāng)然,如果你和我一樣在安裝時(shí)選擇了 virtIO 驅(qū)動(dòng)圾结,很快就會(huì)看到我之前被卡了無數(shù)次的錯(cuò)誤瑰剃,以及 genkernel 對(duì)于 virtIO 無盡的坑。
主機(jī)名與 machine ID
systemd 需要一個(gè) machine ID筝野,運(yùn)行systemd-machine-id-setup
晌姚。
對(duì)于主機(jī)名,直接在/etc/hostname
寫就行了歇竟。默認(rèn)該文件是自己創(chuàng)建的挥唠,所以看到 nano 顯示是新文件時(shí)不用驚慌。
對(duì)了焕议,記得把/etc/hosts
中的localhost
改為自己的主機(jī)名宝磨。
網(wǎng)絡(luò)配置
如果使用 dhcp 的話,記得重啟后一波systemctl enable dhcpcd.service
和systemctl start dhcpcd.service
二連就行盅安。
但如果你和我一樣使用靜態(tài) IP 的話唤锉,就不能使用 dhcpcd 了。
其實(shí)按照 wiki宽堆,是可以使用 dhcpcd 配置靜態(tài) IP 的腌紧,但我嘗試了沒成功。
此處使用 systemd-networkd 配置靜態(tài) IP畜隶。在/etc/systemd/network
下創(chuàng)建 network 配置文件壁肋,比如下面的配置文件20-wired.network
:
[Match]
Name=enp1s0
[Network]
Address=10.1.10.9/24
Gateway=10.1.10.1
DNS=10.1.10.1
#DNS=8.8.8.8
記得把Name
改為自己的網(wǎng)卡名稱。
對(duì)了籽慢,重啟后也要進(jìn)行systemctl enable systemd-networkd.service
與systemctl start systemd-networkd.service
二連浸遗。
日志工具
因?yàn)?systemd 已經(jīng)自帶了,所以手冊(cè)關(guān)于安裝日志工具的部分跳過就好箱亿。
關(guān)于錯(cuò)誤:block device is not a valid root device 的解決方法
如果你和我一樣在安裝時(shí) scsi 控制器選擇了 virtIO 驅(qū)動(dòng)時(shí)跛锌,就會(huì)在開機(jī)時(shí)看到以下類似錯(cuò)誤:
/dev/loop0: TYPE="squashfs"
/dev/sda2: UUID="eefd6088-354b-4b5b-97d8-5df2df******" TYPE="swap" PARTLABEL="primary" PARTUUID="ea452ed8-8b99-4a26-a662-ab43c******"
............
block device is not a valid root device
并且只能進(jìn)入緊急命令行。
不要急届惋,進(jìn)入緊急命令行髓帽,看看/dev/
下有什么菠赚。
如果我沒猜錯(cuò),安裝根文件的 sda郑藏,要么不見了衡查,要么變成了 hda。
對(duì)于我的情況必盖,是直接不見了拌牲。
這種情況一般是 scsi 控制器出問題了,而且多半是驅(qū)動(dòng)問題歌粥,導(dǎo)致根文件所在的硬盤無法加載塌忽。
而我的情況是,內(nèi)核沒有打入任何 virtIO 驅(qū)動(dòng)失驶,initramfs 也沒有土居。
這就是 genkernel 對(duì)于 virtIO 的巨坑,因?yàn)樗鼘?duì) genkernel 支持不佳突勇,內(nèi)核編譯時(shí)不會(huì)選中相關(guān)選項(xiàng)装盯,就算自己選上了,在制作 initramfs 時(shí)也不會(huì)打入 virtIO 相關(guān)模塊甲馋。
如果想要 genkernel 加上 virtIO 選項(xiàng)以及在 initramfs 中打入相關(guān)模塊,請(qǐng)加上--virtio
的選項(xiàng)迄损。
同時(shí)定躏,要自己配置內(nèi)核時(shí),也要選中 virtIO 的相關(guān)選項(xiàng)芹敌。
具體可參見User:Flow/Gentoo as KVM guest