寫在前面:
本文將對LFS系統進行引導配置,包含對/etc/fstab的配置和grub的配置。
本文將進行linux系統內核的安裝。
警告:本文中的每個配置都是關鍵配置,配置一旦錯誤將會導致系統無法運行,請打起十二分精神!!!
/etc/fstab配置
/etc/fstab是用於確定每個分區含義的配置文件。
在10.2中,文章給了你fstab文件的模板,它長這樣:
cat > /etc/fstab << "EOF" # Begin /etc/fstab # file-system mount-point type options dump fsck # order /dev/<xxx> / <fff> defaults 1 1 /dev/<yyy> swap swap pri=1 0 0 proc /proc proc nosuid,noexec,nodev 0 0 sysfs /sys sysfs nosuid,noexec,nodev 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 tmpfs /run tmpfs defaults 0 0 devtmpfs /dev devtmpfs mode=0755,nosuid 0 0 # End /etc/fstab EOF
輸入完該命令後,並非萬事大吉,因爲你還要將<xxx>,<yyy>和<fff>設置爲正確的內容
其中:
<xxx>表示root所對應的分區,注意根目錄磁盤是配置好的,新的,用於安裝LFS的磁盤
<fff>表示root分區的文件系統類型,筆者的文件系統是ext4
下方的<yyy>對應swap分區
對於sdb,筆者的分區情況如下:
因此,<xxx>對應sdb3,<fff>對應ext4,<yyy>對應sdb2
但是,我們還有boot分區,該分區也要一併設置進fstab中,我們還要增加boot的設置
填充後的fstab如下表所示:
cat > /etc/fstab << "EOF" # Begin /etc/fstab # filesystem mount-point type options dump fsck # order /dev/sdb3 / ext4 defaults 1 1 /dev/sdb1 /boot ext4 defaults,noauto 0 2 /dev/sdb2 swap swap pri=1 0 0 proc /proc proc nosuid,noexec,nodev 0 0 sysfs /sys sysfs nosuid,noexec,nodev 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 tmpfs /run tmpfs defaults 0 0 devtmpfs /dev devtmpfs mode=0755,nosuid 0 0 # End /etc/fstab EOF
然後,考慮到在接下來的設置中,由於磁盤將會互換(詳見第二章中提到的),sdb會變爲sda,編號不穩定,我們可以用穩定的UUID進行磁盤確認。
我們可以用以下的指令獲取磁盤的UUID,命令和輸出如下圖所示
我們用sdb1/2/3對應的UUID對上面的fstab進行替換,替換後的fstab如下:
cat > /etc/fstab << "EOF" # Begin /etc/fstab # file system mount-point type options dump fsck # order #/dev/sda3 is the root UUID=76f5021a-8167-44a2-b374-0f3d1e29cbd4 / ext4 defaults 1 1 #/dev/sda1 is the boot UUID=b6113556-ac9b-4b3a-9cbd-6d2ee13a2b71 /boot ext4 defaults,noauto 0 2 #/dev/sda2 is the swap UUID=fd80d9b0-f028-49b6-958c-342c40f35ec9 swap swap pri=1 0 0 proc /proc proc nosuid,noexec,nodev 0 0 sysfs /sys sysfs nosuid,noexec,nodev 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 tmpfs /run tmpfs defaults 0 0 devtmpfs /dev devtmpfs mode=0755,nosuid 0 0 # End /etc/fstab EOF
上文是筆者最終採用的寫入fstab的代碼
警告:該部分fstab切勿直接複製,請確認自己的LFS上root和swap對應的磁盤號和UUID,再確認是否有boot存在,否則LFS有變磚可能
Linux內核安裝
和普通的包安裝一樣,我們先解壓,再cd,然後執行以下指令,以確保內核源代碼絕對乾淨
make mrproper make defconfig
隨後,運行以下代碼,以下代碼將會進入內核編譯配置界面
make menuconfig
這個指令將會打開一個奇怪的配置界面(有點像BIOS)
然後按照下方的提示去完成,提示長這樣:
Processor type and features ---> [*] Build a relocatable kernel [CONFIG_RELOCATABLE] [*] Randomize the address of the kernel image (KASLR) [CONFIG_RANDOMIZE_BASE] General setup ---> [ ] Compile the kernel with warnings as errors [CONFIG_WERROR] < > Enable kernel headers through /sys/kernel/kheaders.tar.xz [CONFIG_IKHEADERS] General architecture-dependent options ---> [*] Stack Protector buffer overflow detection [CONFIG_STACKPROTECTOR] [*] Strong Stack Protector [CONFIG_STACKPROTECTOR_STRONG] Device Drivers ---> Graphics support ---> Frame buffer Devices ---> [*] Support for frame buffer devices ---- Generic Driver Options ---> [ ] Support for uevent helper [CONFIG_UEVENT_HELPER] [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS] [*] Automount devtmpfs at /dev, after the kernel mounted the rootfs [CONFIG_DEVTMPFS_MOUNT]
對於不同的選項,其存在有縮進,縮進表示的是該菜單的級別(因爲有二級甚至三級菜單)
我以Support for frame buffer devices舉例,這個是要你在菜單中依次選擇Device Drivers——Graphics support——Frame buffer Devices,隨後在選項中找到Support for frame buffer devices,並將這個選項選上。
這個菜單隻能用鍵盤進行操控,可用的爲鍵盤的上下左右鍵,以及Y鍵和N建(筆者沒用到N鍵)
你需要按照上文的提示,對編譯進行配置。
如果你是64位系統,你需要進行下列配置
Processor type and features ---> [*] Support x2apic [CONFIG_X86_X2APIC] Device Drivers ---> [*] PCI Support ---> [CONFIG_PCI] [*] Message Signaled Interrupts (MSI and MSI-X) [CONFIG_PCI_MSI] [*] IOMMU Hardware Support ---> [CONFIG_IOMMU_SUPPORT] [*] Support for Interrupt Remapping [CONFIG_IRQ_REMAP]
如果你在虛擬機環境中,你還需要將以下選項全部選上
警告:如果在虛擬機環境下,沒有選擇上述的選項,將會導致vfs unable to mount root fs on unknown-block(0 0)的提示,將會導致LFS無法啓動
該部分內容在LFS-BOOK中是沒有的,但非常重要
Device Drivers ---> Generic Driver Options ---> [*] Maintain a devtmpfs filesystem to mount at /dev [*]Network device support ---> [*]Ethernet Driver support ---> [*] AMD PCnet32 PCI support [*]Fusion MPT device support ---> <*> Fusion MPT ScsiHost drivers for SAS <*> Fusion MPT misc device (ioctl) driver [*] Fusion MPT logging facility SCSI device support ---> [*] SCSI low-level drivers File Systems ---> [*] Ext3 Journaling file system support
以下配置假設你在虛擬機中使用SCSI配置的虛擬磁盤(詳見筆者第二章)
如果在GRUB引導啓動LFS的過程中,出現了以下提示:
vfs unable to mount root fs on unknown-block(0 0)
則說明在配置linux內核的過程中,沒有選上上述的選項,需要重新進行配置,重裝linux內核即可解決問題。
(如果你不斷地進行VMware的鏡像,那麼這不是什麼大問題,莫慌,筆者也掛了一次)
完成上述設置後,運行make
接着,運行make modules_install
完成後,我們要完成一些文件的複製,命令如下
cp -iv arch/x86/boot/bzImage /boot/vmlinuz-5.19.2-lfs-11.2 cp -iv System.map /boot/System.map-5.19.2 cp -iv .config /boot/config-5.19.2
如果有需要的話,可以安裝一些文檔,命令如下
install -d /usr/share/doc/linux-5.19.2 cp -r Documentation/* /usr/share/doc/linux-5.19.2
運行下列命令,確保內核源代碼目錄中所有文件都屬於root
chown -R 0:0 ../linux-5.19.2
和一般的包安裝相同,我們cd出去,然後清理該安裝包,即完成了linux內核的安裝。
GRUB安裝
警告:不正確的GRUB安裝及配置將會導致LFS系統無法啓動
無需解壓和cd,我們直接運行以下命令
grub-install /dev/<sd?>
注意<sd?>通常設置爲sda,因爲BIOS只在第一塊磁盤中讀取GRUB信息。
但是,在筆者的系統中,<sd?>設置爲了sdb,這是因爲在完成安裝後,筆者將會在虛擬機中調換兩塊硬盤的位置,LFS所在的磁盤將會變成sda
創建/boot/grub/grub.cfg
警告:該部分需要結合自己電腦的配置進行,不當設置將會導致LFS變磚
cat > /boot/grub/grub.cfg << "EOF" # Begin /boot/grub/grub.cfg set default=0 set timeout=5 insmod ext2 set root=(hd0,1) menuentry "GNU/Linux, Linux 5.19.2-lfs-11.2" { linux /vmlinuz-5.19.2-lfs-11.2 root=/dev/sda3 ro } EOF
set root=(hd0,1)的含義爲:要在第0塊硬盤的第1個分區,作爲boot所在的分區(即爲sda1)
爲何設置爲sda1?這是因爲LFS中的boot分區設置在sdb1,而且未來將會互換LFS和宿主機的磁盤,sdb1將會變爲sda1。
root=/dev/sda3 ro的含義爲:在互換LFS和宿主機硬盤後,root分區將會出現在sda3的位置。
備註:以上配置爲boot爲單獨分區的配置,如果你沒有設置boot分區,那麼/vmlinuz-5.19.2-lfs-11.2前需要加一個/boot
寫在末尾
至此,我們完成了第十章中三個關鍵的配置
再次警告:這三個配置務必再三確認,在進一步向前時請務必備份,否則你將前功盡棄。