LFS7.4编译笔记(3)
在第一部分,我們編譯了一個工具鏈及臨時系統,然后在第二部分我們chroot到/mnt/lfs下面,利用臨時系統的工具編譯了我們最終的LFS系統。不過此時,我們的LFS系統還是不完整的,因為我們還沒有安裝LFS的內核和引導程序,同時系統的引導腳本和一些必要的配置文件也都還沒有配置。這一部分我們就來解決這些問題。
首先,進入chroot環境:
1 chroot "$LFS" /usr/bin/env -i \ 2 HOME=/root TERM="$TERM" PS1="\$? \u:\w\$ " \ 3 PATH=/bin:/usr/bin:/sbin:/usr/sbin \ 4 /bin/bash --login?
1.配置網卡
- 創建網卡的固定名稱
如果你的系統上只有一個網卡,這一步似乎沒什么用處。不過對于我,臺式機上有一個有線網卡和無線網卡,就不得不配置了。關于為什么要創建固定的網卡名稱,是因為Udev和模塊化的網絡驅動,導致系統每次重新啟動時識別網卡的順序不固定,就可能導致網卡1的名稱是eth0,網卡2的名稱是eth1,而在另一次的啟動時是網卡1的名稱是eth1,而網卡2的名稱是eth0。因此,Udev的配置文件是由MAC地址將網卡對應到固定的名稱的。而這個配置文件在我們第2部分安裝Udev軟件包時已經生成了,文件名是/etc/udev/rules.d/70-persistent-net.rules
此配置文件的關鍵字及其解釋如下:
NAME 的值是最重要的部分,配置下面的文件時使用此NAME值。這個配置文件一般會自動生成,只需要根據情況修改一下就可以了。下圖是我的配置情況,僅供參考。我的是自動生成的,并且復合我的實際情況,所以就不用再修改了,直接使用。
- 創建網卡的配置文件
網絡腳本開關的接口取決于 /etc/sysconfig/ 中的文件。要配置的每個網卡接口在此目錄中都應該有一個文件,例如 ifconfig.xyz,其中 “xyz” 應該是一個對管理員有意義的名稱,如設備名 (比如eth0)。此文件中是該網卡接口的屬性,例如 IP 地址、子網掩碼等。文件名的主干必須是 ifconfig。
以下命令會創建一個樣例文件,給 eth0 設備分配一個靜態 IP 地址:
1 cd /etc/sysconfig/ 2 cat > ifconfig.eth0 << "EOF" 3 ONBOOT=yes 4 IFACE=eth0 5 SERVICE=ipv4-static 6 IP=192.168.1.1 7 GATEWAY=192.168.1.2 8 PREFIX=24 9 BROADCAST=192.168.1.255 10 EOF如果 ONBOOT 變量設置為 “yes”,引導腳本中的網絡腳本會在系統引導時打開該 NIC,否則網絡腳本就會忽略之并且不會自動打開該 NIC。該接口可以使用 ifup 和 ifdown 命令來手動打開和關閉
IFACE 變量定義網卡接口名稱,例如 eth0。所有的網絡設備配置文件都需要它。這個名稱就是上一步中配置的NAME值
SERVICE 變量定義獲取 IP 地址的方法。LFS-Bootscripts 程序包有一個模塊化的 IP 對應方法,在 /lib/services/ 目錄中創建額外文件可以允許其他的 IP 對應directory allows other IP 對應方法。此項經常用于 DHCP,在 BLFS 中提到。
如果有網關,GATEWAY 變量應該包含默認網關的 IP 地址,否則注釋掉這整個變量。
PREFIX 變量包含子網使用的位數。IP 地址中有 4 個 8 位組。如果子網的掩碼是 255.255.255.0,它就使用前 3 個 8 位組指定網絡號。如果子網掩碼是 255.255.255.240,使用的就是前 28 位。超過 24 位的前綴通常被 DSL 和基于線電纜的 ISP 使用。這一例子 (PREFIX=24) 中,子網掩碼是 255.255.255.0。根據你的子網調節 PREFIX 變量的值。如果忽略,其默認值為24。
要獲取更多信息,請參考 ifup 的手冊頁。
- 創建 /etc/resolv.conf文件
如果你的系統要連接到互聯網,它需要一種 DNS 名稱解析服務來解析互聯網域名和 IP 地址,反之亦然。最佳實現方式是將 DNS 服務器的 IP 地址 (從 ISP 或者網絡管理員處獲取) 置于 /etc/resolv.conf 中。運行以下命令創建此文件:
1 cat > /etc/resolv.conf << "EOF" 2 # Begin /etc/resolv.conf 3 domain <domain> 4 nameserver <address> 5 nameserver <address> 6 # End /etc/resolv.conf 7 EOFdomain 聲明可以忽略或者以 search 聲明替換。參考 resolv.conf 的手冊頁獲取更多細節。
將 <address> 替換為最適合的 DNS 的 IP 地址。經常會有超過一個條目 (要求備選服務器有相關兼容性)。如果你只想要一個 DNS 服務器,移除文件中 nameserver 的第二行。該 IP 地址可以是本地網絡上
的一臺路由器。谷歌公開 IPv4 DNS 地址為 8.8.8.8 和 8.8.4.4。
這三處設置好之后,網卡也就基本配置完了。
2. 配置 /etc/hosts 文件
如果要配置網卡,那么就要在 /etc/hosts 文件中決定 IP 地址、FQDN 和可能使用的別名的對應關系。語法是:
運行以下命令創建 /etc/hosts 文件:
1 cat > /etc/hosts << "EOF" 2 # Begin /etc/hosts (network card version) 3 127.0.0.1 localhost 4 <192.168.1.1> <HOSTNAME.example.org> [alias1] [alias2 ...] 5 # End /etc/hosts (network card version) 6 EOF<192.168.1.1> 和 <HOSTNAME.example.org> 的值應該按照指定的用途或者需求進行修改 可選的對應名稱可以忽略。確定IP地址在私有IP地址區間內,除非你有 申請的域名。
如果不配置網卡,運行以下命令創建 /etc/hosts 文件:
下圖是我的/etc/hosts配置,僅供參考
3. LFS系統上的設備和模塊管理
這一部分的內容比較不容易理解,涉及到的硬件會比較多,感覺還是看英文原版比較好,畢竟翻譯還是有一些“失真”的。對于第一次編譯LFS的新手,沒必要花費時間來配置這方面,可以略過。當對LFS比較熟悉的時候,再回過頭來配置設備。
sysfs 文件系統 http://www.kernel.org/pub/linux/kernel/people/mochel/doc/papers/ols-2005/mochel.pdf
一種用戶空間下 devfs 的實現 http://www.kroah.com/linux/talks/ols_2003_udev_paper/Reprint-Kroah-Hartman-OLS2003.pdf
LFS7.4book Device and Module Handling on an LFS System http://www.linuxfromscratch.org/lfs/view/7.4/chapter07/udev.html4.
4. LFS-Bootscripts-20130821
LFS-Bootscripts 程序包包含一組腳本用于在引導/關機時啟動/停止 LFS 系統。
安裝引導腳本LFS-Bootscripts:
Linux 使用一種特殊的基于“運行級”的引導工具,名為 SysVinit,SysVinit (以下簡稱 “init”) 使用運行級別的方式工作。有 7 種 (編號為 0 到 6) 運行級別 (其實有更多,但只用于特殊情況,通常并不使用。更多細節參見 init(8)),每個都對應計算機在它啟動時要進行的動作。默認運行級別為 3。以下列出不同運行級別實現的描述:
0:關閉計算機 1:單用戶模式 2:不帶網絡的多用戶模式 3:帶網絡的多用戶模式 4:保留,用于自定義,否則與 3 相同 5:與 4 相同,但通常用于 GUI 登錄 (如 X 的 xdm 或者 KDE 的 kdm) 6:重新引導計算機在內核初始化過程中,第一個運行的程序要么是在命令行中指定的,要么就是默認的 init。此程序需要讀取初始化文件/etc/inittab。用下面的命令創建之:
cat > /etc/inittab << "EOF" # Begin /etc/inittabid:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc S
l0:0:wait:/etc/rc.d/init.d/rc 0 l1:S1:wait:/etc/rc.d/init.d/rc 1 l2:2:wait:/etc/rc.d/init.d/rc 2 l3:3:wait:/etc/rc.d/init.d/rc 3 l4:4:wait:/etc/rc.d/init.d/rc 4 l5:5:wait:/etc/rc.d/init.d/rc 5 l6:6:wait:/etc/rc.d/init.d/rc 6
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
su:S016:once:/sbin/sulogin
1:2345:respawn:/sbin/agetty?--noclear tty1 9600 2:2345:respawn:/sbin/agetty?tty2 9600 3:2345:respawn:/sbin/agetty?tty3 9600 4:2345:respawn:/sbin/agetty?tty4 9600 5:2345:respawn:/sbin/agetty?tty5 9600 6:2345:respawn:/sbin/agetty tty6 9600 # End /etc/inittab EOF
對此文件的解釋位于 inittab 的手冊頁中。
對于 LFS,運行的核心命令是 rc。以上的初始化文件將會要求rc 運行 /etc/rc.d/rcsysinit.d 目錄中所有以 S 開頭的腳本,然后是 /etc/rc.d/rc?.d 目錄中所有以 S 開頭的腳本,其中問號由 initdefault 的值指定。
出于方便考慮,rc 腳本讀取 /lib/lsb/init-functions 中的功能庫。此庫還讀取可選的配置文件 /etc/sysconfig/rc.site。之前幾節中描述的任何系統配置文件參數都可以置于此文件中,使得所有的系統參數合并在這一個文件中。出于調試方便考慮,功能腳本還將所有輸出以日志的形式記錄于 /run/var/bootlog 中。由于 /run目錄是一個 tmpfs,此文件在重新引導過后不會保留,然而它在引導結束時會被附加到一個更穩定的文件 /var/log/boot.log 之后。
改變運行級別通過 init <level> 完成,其中 <level> 就是目標運行級別了。例如要重新引導計算機,用戶可以執行 init 6 命令,也就是 reboot 命令的別名。相似地, init 0 也是 halt 的別名。
在 /etc/rc.d 和 rcsysinit.d 中有一些與 rc?.d 相似的目錄 (其中問號是運行級別號碼),都包含一些符號鏈接,有些以 K 開頭,其他的以 S 開頭,在開頭字母之后都有兩位數字。K 代表停止 (kill) 服務,S 代表開始服務。數字表示腳本的運行順序,從 00 到 99——數字越小執行越早。當 init 切換至另一個運行級別時,對應的服務就會開始或者停止,這取決于選定的運行級別。真實的腳本位于 /etc/rc.d/init.d。它們完成實際工作,符號鏈接也指向它們。K 鏈接和 S 鏈接都指向/etc/rc.d/init.d中的同一個腳本,這是因為這些腳本可以帶有start、stop、restart、reload 和 status 這些參數調用。當遇到 K 的時候,對應的腳本被帶stop 參數調用。當遇到 S 的時候,對應的腳本被帶 start 參數調用。這個解釋有一個例外。在 rc0.d 和 rc6.d 中的以 S 開頭的鏈接不會開始任何服務。他們會以stop 參數調用,來停止服務。它背后的邏輯是用戶要重新引導或者關閉系統,沒有什么需要開始的,系統正要終止。
你可以自由修改引導腳本工作的方式
5. 配置系統主機名
localnet 腳本的部分工作就是設置系統的主機名。它需要在 /etc/sysconfig/network 文件中配置。
創建 /etc/sysconfig/network 文件并輸入一個主機名,運行:
<lfs> 應改為計算機名。不要在此處輸入 FDQN,該信息應存入 /etc/hosts 文件。
6. 配置setclock 腳本
setclock腳本從硬件時鐘,也就是 BIOS 或 CMOS 時鐘讀取時間。如果硬件時鐘設置為 UTC ,這個腳本會使用 /etc/localtime 文件(這個文件把用戶所在的時區告訴 hwclock 程序)將硬件時鐘的時間轉換為本地時間。因為沒有辦法自動檢測硬件時鐘是否設置為 UTC 時間,因此需要手動設置這一項。
如果您忘了硬件時鐘是不是設置為 UTC 時間了,可以運行 hwclock --localtime --show 命令,這將顯示硬件時鐘當前的時間。如果顯示的時間符合您的手表的時間,那么硬件時鐘設置的是本地時間;如果 hwclock 顯示的不是本地時間,就有可能設置的是 UTC 時間,可以通過在所顯示的 hwclock 時間加上或減去您所在時區的小時數來驗證。例如,位于中國大陸的 GMT +0800 時區的用戶應該將 hwclock 的輸出減去 8 小時。
如果你的硬件使用的不是 UTC 時間,就必須將下面的 UTC 變量值設為 0 (零),而"UTC=1"表示使用的是UTC時間。運行下面的命令新建一個 /etc/sysconfig/clock 文件:
?
7. 配置Linux控制臺
本節討論如何配置 console 初始化腳本來設置鍵盤映射表和控制臺字體。如果您不使用非 ASCII 字符(英鎊和歐元符號就是非 ASCII 字符的例子),并且是美式鍵盤,可以跳過這一節,沒有配置文件的話,console 初始化腳本不會做任何事情。
console 使用 /etc/sysconfig/console 作為配置文件以決定使用什么鍵盤映射表和屏幕字體,不過對于中文、日文、韓文等一些語言,Linux 的控制臺不能顯示需要的字符。這些語種的用戶應當安裝 X Window 系統,包含所需字符集的字體,以及合適的輸入法(例如,SCIM 支持很多語言)。這應該是BLFS的內容了。在這里就不配置了。具體可以參考http://www.tldp.org/HOWTO/Chinese-HOWTO.html
8. 配置sysklogd 腳本
sysklogd 腳本用 -m 0 選項調用 syslogd 程序,此選項關閉 syslogd 默認每 20 分鐘對日志文件寫入的周期性時間戳。如果你要打開這個周期性時間標記,編輯 /etc/sysconfig/rc.site 并且將SYSKLOGD_PARMS 變量調整為需要的值。例如,把這個變量設置為空值會刪除所有的參數(SYSKLOGD_PARMS=)
請運行 man syslogd 以獲得更多信息。
9. rc.site 文件(可選)
這個文件實際上是一個綜合的配置文件,它包含啟動腳本所有的設置,同時它還可以指定/etc/sysconfig/目錄下的hostname,console和clock文件中的變量的值。如果關聯的變量在這些獨立的文件和 rc.site 中都存在,以rc.site指定的為準。
rc.site 還包括可以自定義引導進程其他方面的參數。設置 IPROMPT 變量會啟用引導腳本的選擇性運行。其他選項在文件中的注釋有介紹。此文件的默認版本如下:
自定義引導和關機腳本
LFS 引導腳本以比較高效的方式引導和關閉序同,但是你仍然可以在 rc.site 文件中進行幾項調校使它更快或者按照你的喜好調節信息。要如此做,調節以上的 /etc/sysconfig/rc.site 文件。
- 在引導腳本 udev 中調用了 udev settle,需要一定時間才能完成。這個時間是否需要取決于系統上出現的設備。如果你只有簡單分區和一塊以太網卡,引導進程可能就不必等待這一命令。要跳過之,設置變量 OMIT_UDEV_SETTLE=y。
- 引導腳本 udev_retry 默認也會運行 udev settle。此命令只在 /var 目錄獨立掛載時必須。這是因為時鐘需要 /var/lib/hwclock/adjtime 這個文件。其他的自定義可能也要等待 udev 完成,但是在很多安裝副本中并不是必須的。要跳過此命令,設置變量 OMIT_UDEV_RETRY_SETTLE=y。
- 文件系統檢查默認是靜默的。看起來是在引導過程中出現了一次延遲。要打開 fsck 的輸出,設置變量 VERBOSE_FSCK=y。
- 在重新引導過程中你可能會想要完全跳過文件系統檢查,即 fsck。要如此做,要么創建文件 /fastboot,要么在重新引導系統時使用命令 /sbin/shutdown -f -r now。另一方面,你也可以強制檢查所有的文件系統,創建 /forcefsck 或者運行 shutdown 時傳遞 -F 參數而不是 -f。設置變量 FASTBOOT=y 會在引導過程中禁用 fsck 直到被移除為止。不推薦長期如此。
- 通常在 /tmp 目錄中的所有文件在引導時都會刪除。由于出現的文件或目錄的數量不同,這一步會在引導過程中產生明顯延遲。要跳過移除這些文件,設置變量 SKIPTMPCLEAN=y。
- 在關機過程中 init 程序會給它啟動的每個程序 (例如 agetty) 發送一個 TERM 信號,等待一個設置的時間 (默認 3 秒),然后給每個進程發送一個 KILL 信號并且再次等待。此進程在 sendsignals 中對于每個沒有被自己的腳本關閉的程序循環進行。init 的延遲可以通過傳遞一個參數來設置。例如要移除init 的延遲,在關機護著重新引導時傳遞 -t0 參數 (如 /sbin/shutdown -t0 -r now)。sendsignals 腳本的延遲可以通過設置參數 KILLDELAY=0 來跳過。
10. Bash Shell 啟動文件
shell 程序 /bin/bash (以下簡稱 “shell”) 使用一系列啟動文件協助創建運行的環境。每個文件都有特定的用途,可能會以不同方式影響輸入和交互環境。位于 /etc 目錄中的文件提供全局設置。如果在主目錄中有等價的文件,它可能會覆蓋全局設置。使用 /bin/login 讀取 /etc/passwd 文件成功登錄后,啟動了一個交互登錄 shell 。用命令行可以啟動一個交互非登錄 shell(例如 [prompt]$/bin/bash)。非交互 shell 通常出現在 shell 腳本運行的時候,之所以稱為非交互的,因為它正在運行一個腳本,而且命令與命令之間并不等待用戶的輸入。
要獲得更多信息,請運行 info bash 以參考 Bash Startup Files and Interactive Shells 小節。
當以交互登錄方式運行 shell 的時候,會讀取 /etc/profile 和 ~/.bash_profile 文件。
下面是一個基本的 /etc/profile 文件,設置了本地語言支持所必需的環境變量,適當設置這些變量會導致:?
-
程序將產生翻譯成本地語言的輸出
-
正確的將字符分類為字母、數字和其它類,這樣做是必要的,可以讓 bash 在非英語 locale 下正確接收命令行輸入的非 ASCII 字符。
-
為指定的國家設置正確的字母排序
-
適當的默認頁面大小
-
為貨幣、時間和日期值設置正確的格式
運行一下命令創建/etc/profile 文件:
1 cat > /etc/profile << "EOF" 2 # Begin /etc/profile 3 4 export LANG=zh_CN.UTF-8@euro 5 6 # End /etc/profile 7 EOF?
11. 創建 /etc/inputrc 文件
inputrc 文件為特定的情況處理鍵盤映射,這個文件被 Readline 用作啟動文件,Readline 是 Bash 和其它大多數 shell 使用的與輸入相關的庫。
大多數人并不需要自定義鍵盤映射,所以下面的命令將創建一個適用于所有登陸用戶的全局 /etc/inputrc 文件。如果你需要為某個用戶覆蓋默認的設置,你可以在該用戶的主目錄中創建一個包含自定義鍵盤映射的 .inputrc 文件。
要想了解更多關于如何編輯 inputrc 文件的信息,運行 info bash 以參考 bash 的 info 頁的 Readline Init File 這一節,運行 info readline 以參考readline 自己的 info 頁也不錯。
下面是一個基本的全局 inputrc 文件,那些選項的注釋也一起包括在文件里。請注意,注釋不能和命令放在同一行里。
到此,我們的LFS的引導腳本和配置文件差不多就配置完了。一些設備配置文件和中文支持可以先略過。
下面開始編譯安裝內核以及GRUB引導程序。這一步完了之后,我們就可以啟動LFS了。
首先創建 /etc/fstab 文件來確定LFS文件系統的掛載點,以什么樣的順序以及在掛載之前需要檢查什么。
cat > /etc/fstab << "EOF" # Begin /etc/fstab# file system mount-point type options dump fsck # orderUUID="0983de48-2873-4c4a-9602-a2f2e5283f65" / ?ext4 ?defaults 1 1UUID="2850a950-6dc8-41cf-bf5b-7501048234b3" /boot ext4 defaults 0 2
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
接著開始編譯安裝內核:
cd /sourcestar xvf linux-3.10.10.tar.xz
cd linux-3.10.10
make mrproper
這能保證內核樹絕對干凈。內核開放團隊推薦每次編譯內核之前都運行這個命令。不要相信解壓后的源碼樹就是干凈的。
參考http://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt 來獲得內核配置的常規信息。
用菜單形式界面的配置內核:(由于近期在 udev 中的改動,確保選擇下面這些內容)
確保把<host_LANG_value>替換為你的宿主系統下$LANG的值。如果宿主系統沒有設置這個變量,就用宿主的$LC_ALL或者$LC_CTYPE的值代替。
在某些情況下選擇 make oldconfig,可能會更適合。閱讀 README 可獲取更多信息。
如果愿意,你可以直接從宿主系統中復制內核配置文件.config(如果可用),到linux-3.10.10的解壓目錄。當然,我們不推薦這個方式。通常探究所有配置菜單項,再根據需要創建內核是最佳的。
編譯內核鏡像和模塊:
如果配置內核時使用了模塊,那么就安裝這些模塊:
make modules_install?內核編譯完成后,需要額外的步驟來完成安裝。一些文件需要拷貝到 /boot 目錄。
內核鏡像的路徑,根據不同的平臺可能會改變,下面的文件名可根據你的喜好改變,但文件名的前綴必須是 vmlinuz 以便和下個部分中的提及的引導進程自動安裝相兼容。下面的命令假定在x86架構上:
cp -v arch/x86/boot/bzImage /boot/vmlinuz-3.10.10-lfs-7.4System.map 是一個內核的符號文件 。它映射每個內核API函數的入口,以及內核在運行中內核數據結構的地址。 運行下面這個命令安裝這個文件:
cp -v System.map /boot/System.map-3.10.10由上面的 make menuconfig 步驟生成的內核配置文件 .config 包含所有剛剛被編譯的內核配置選項。保存此文件以備日后查閱是一個好主意:
cp -v .config /boot/config-3.10.10安裝Linux內核文檔:
install -d /usr/share/doc/linux-3.10.10 cp -r Documentation/* /usr/share/doc/linux-3.10.10現在內核已經安裝好了,如果這個內核源代碼的目錄準備保留,那么對linux-3.10.10 目錄運行 chown -R 0:0命令 ,確保所有文件的屬主是 root.
配置 Linux 模塊的加載順序:
大多時候,模塊是自動被加載的,但有時候需要指定特定的順序。加載模塊的程序modprobe或insmod,使用/etc/modprobe.d/usb.conf了達到這個目的。
運行以下命令來創建一個新 /etc/modprobe.d/usb.conf 文件:
?
接下來,使用 GRUB 設置引導過程:
在這一部分,我打算把GRUB安裝到我的移動硬盤的MBR中,這樣的話,開機時選擇從U盤啟動,就可以啟動LFS系統了。
首先了解下GRUB2命名驅動器的方式:
GRUB 使用自己的名稱結構命名驅動器和分區,格式為 (hdn,m),其中 n 是硬盤驅動器編號,m 是分區編號。硬盤驅動器編號從 0 開始,但主分區的分區編號從 1 開始,擴展分區從 5 開始。注意這與早期版本中兩個編號都從 0 開始是不同的。例如 sda1 分區對 GRUB 來說是 (hd0,1) 而 sdb3 就是 (hd1,3)。與Linux 不同,GRUB 不把 CD-ROM 驅動器認作硬盤驅動器。例如,如果在 hdb 上使用 CD,第二硬盤驅動器是 hdc,那么第二硬盤驅動器仍然會是 (hd1)。
關于grub2的更多信息,請參考https://wiki.archlinux.org/index.php/GRUB_(簡體中文)
GNU GRUB的維基百科也是不錯的參考。
grub2的工作原理大致如下:
GRUB 通過向硬盤的第一物理磁道(估計就是MBR)寫入數據(boot.img)來工作。這個區域不屬于任何一個文件系統。其中的程序(boot.img,core.img)訪問引導分區中的 GRUB 模塊來進一步引導內核。grub模塊的默認路徑是 /boot/grub/。
我的移動硬盤的名稱應該是/dev/sdb,引導分區是/dev/sdb1。(見LFS編譯筆記1)
因此,安裝 GRUB 文件到 /boot/grub 并建立引導磁道的命令是:
grub-install是我們在第二部分安裝grub-2.00.tar.xz時的一個腳本,它會調用一系列命令來安裝grub文件。
創建配置文件
cat > /boot/grub/grub.cfg << "EOF" # Begin /boot/grub/grub.cfg set default=0 set timeout=5insmod ext2 set root=(hd1,1) #這一步設置的是grub的根目錄,grub會在這個目錄中尋找內核的鏡像文件。不過,由于設備名的隨機性,此處通常都是錯的。#目前,我還沒有找到比較好的方法來固定這個名稱,只能每次都在命令行下配置這一項。menuentry "GNU/Linux, Linux 3.10.10-lfs-7.4" {linux /vmlinuz-3.10.10-lfs-7.4 root=/dev/sdb2 ro #此處設置LFS系統的根目錄。更好的選擇是采用uuid而不是sdb這樣的形式。 } EOF
注意:
有一個命令 grub-mkconfig 能自動創建配置文件。它使用 /etc/grub.d/ 中的一系列腳本,并且會毀掉你的所有自定義配置。這些腳本是為不基于源代碼的發行版設計的,不推薦用于LFS。如果你安裝了商業 Linux 發行版,這個程序很可能會運行。記得備份你的 grub.cfg 文件。
到此,我們的LFS系統才真正編譯完畢了。可以輕松一下了。重啟時選擇BIOS從U盤啟動,就可以進入你的LFS系統的文本模式了。不過很有可能會卡在grub這一步,這是因為grub的配置文件設置的不正確,原因還是由于設備的命名是隨機的,我們寫在grub.cfg文件中的設備名稱可能和真實的設備名稱不同,這樣就會導致grub不能正確的引導系統。不過,你不用慌,既然可以進入grub,就沒有啟動不起來的系統。不要小看了grub的命令行啊,它可是很強大的!
如果你真的卡在了grub這一關,那么就在grub的命令行下手工輸入一下命令來啟動LFS:
轉載于:https://www.cnblogs.com/champ/p/3484765.html
總結
以上是生活随笔為你收集整理的LFS7.4编译笔记(3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电商API接口-电商OMS不可或缺的一块
- 下一篇: AI绘画发展史(伪):从免费到吃屎;YS