日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LFS7.4编译笔记(3)

發(fā)布時間:2024/5/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LFS7.4编译笔记(3) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在第一部分,我們編譯了一個工具鏈及臨時系統(tǒng),然后在第二部分我們chroot到/mnt/lfs下面,利用臨時系統(tǒng)的工具編譯了我們最終的LFS系統(tǒng)。不過此時,我們的LFS系統(tǒng)還是不完整的,因為我們還沒有安裝LFS的內(nèi)核和引導程序,同時系統(tǒng)的引導腳本和一些必要的配置文件也都還沒有配置。這一部分我們就來解決這些問題。

首先,進入chroot環(huán)境:

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.配置網(wǎng)卡

  • 創(chuàng)建網(wǎng)卡的固定名稱

如果你的系統(tǒng)上只有一個網(wǎng)卡,這一步似乎沒什么用處。不過對于我,臺式機上有一個有線網(wǎng)卡和無線網(wǎng)卡,就不得不配置了。關于為什么要創(chuàng)建固定的網(wǎng)卡名稱,是因為Udev和模塊化的網(wǎng)絡驅(qū)動,導致系統(tǒng)每次重新啟動時識別網(wǎng)卡的順序不固定,就可能導致網(wǎng)卡1的名稱是eth0,網(wǎng)卡2的名稱是eth1,而在另一次的啟動時是網(wǎng)卡1的名稱是eth1,而網(wǎng)卡2的名稱是eth0。因此,Udev的配置文件是由MAC地址將網(wǎng)卡對應到固定的名稱的。而這個配置文件在我們第2部分安裝Udev軟件包時已經(jīng)生成了,文件名是/etc/udev/rules.d/70-persistent-net.rules

此配置文件的關鍵字及其解釋如下:

  • SUBSYSTEM=="net" — 此項告訴 Udev 忽略不是網(wǎng)卡的設備。
  • ACTION=="add" — 此項告訴 Udev 對于非添加的 uevent ("移除" 和 "改變" 這兩個 uevents 也會發(fā)生,但是無需重命名網(wǎng)絡接口) 忽略此規(guī)則。
  • DRIVERS=="?*" — 此項存在時 Udev 會忽略 VLAN 或者子接口 (因為子接口沒有驅(qū)動)。這些子接口要跳過是為了防止名稱與其父設備沖突。
  • ATTR{address} — 此關鍵字的值是 NIC 的 MAC 地址。
  • ATTR{type}=="1" — 此項確保此規(guī)則對于某些創(chuàng)建多個虛擬接口的無線驅(qū)動只匹配首要接口。跳過次要接口的原因和 VLAN 以及子接口的原因相同:若不如此會出現(xiàn)沖突。
  • KERNEL=="eth*" — 此關鍵字添加到 Udev 規(guī)則創(chuàng)建器以處理具有多個網(wǎng)絡接口而且有相同的 MAC地址的情況 (例如 PS3).如果獨立的接口有不同的基礎名稱,此關鍵字就將允許 Udev 區(qū)分它們。對于多數(shù) LFS 用戶而言此項并不必須然而無害。
  • NAME — 此關鍵字的值是 Udev 將會給此接口分配的名稱
  • NAME 的值是最重要的部分,配置下面的文件時使用此NAME值。這個配置文件一般會自動生成,只需要根據(jù)情況修改一下就可以了。下圖是我的配置情況,僅供參考。我的是自動生成的,并且復合我的實際情況,所以就不用再修改了,直接使用。

    • 創(chuàng)建網(wǎng)卡的配置文件

    網(wǎng)絡腳本開關的接口取決于 /etc/sysconfig/ 中的文件。要配置的每個網(wǎng)卡接口在此目錄中都應該有一個文件,例如 ifconfig.xyz,其中 “xyz” 應該是一個對管理員有意義的名稱,如設備名 (比如eth0)。此文件中是該網(wǎng)卡接口的屬性,例如 IP 地址、子網(wǎng)掩碼等。文件名的主干必須是 ifconfig。

    以下命令會創(chuàng)建一個樣例文件,給 eth0 設備分配一個靜態(tài) 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”,引導腳本中的網(wǎng)絡腳本會在系統(tǒng)引導時打開該 NIC,否則網(wǎng)絡腳本就會忽略之并且不會自動打開該 NIC。該接口可以使用 ifup 和 ifdown 命令來手動打開和關閉
    IFACE 變量定義網(wǎng)卡接口名稱,例如 eth0。所有的網(wǎng)絡設備配置文件都需要它。這個名稱就是上一步中配置的NAME值
    SERVICE 變量定義獲取 IP 地址的方法。LFS-Bootscripts 程序包有一個模塊化的 IP 對應方法,在 /lib/services/ 目錄中創(chuàng)建額外文件可以允許其他的 IP 對應directory allows other IP 對應方法。此項經(jīng)常用于 DHCP,在 BLFS 中提到。
    如果有網(wǎng)關,GATEWAY 變量應該包含默認網(wǎng)關的 IP 地址,否則注釋掉這整個變量。
    PREFIX 變量包含子網(wǎng)使用的位數(shù)。IP 地址中有 4 個 8 位組。如果子網(wǎng)的掩碼是 255.255.255.0,它就使用前 3 個 8 位組指定網(wǎng)絡號。如果子網(wǎng)掩碼是 255.255.255.240,使用的就是前 28 位。超過 24 位的前綴通常被 DSL 和基于線電纜的 ISP 使用。這一例子 (PREFIX=24) 中,子網(wǎng)掩碼是 255.255.255.0。根據(jù)你的子網(wǎng)調(diào)節(jié) PREFIX 變量的值。如果忽略,其默認值為24。
    要獲取更多信息,請參考 ifup 的手冊頁。

    • 創(chuàng)建 /etc/resolv.conf文件

    如果你的系統(tǒng)要連接到互聯(lián)網(wǎng),它需要一種 DNS 名稱解析服務來解析互聯(lián)網(wǎng)域名和 IP 地址,反之亦然。最佳實現(xiàn)方式是將 DNS 服務器的 IP 地址 (從 ISP 或者網(wǎng)絡管理員處獲取) 置于 /etc/resolv.conf 中。運行以下命令創(chuàng)建此文件:

    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 EOF

    domain 聲明可以忽略或者以 search 聲明替換。參考 resolv.conf 的手冊頁獲取更多細節(jié)。
    將 <address> 替換為最適合的 DNS 的 IP 地址。經(jīng)常會有超過一個條目 (要求備選服務器有相關兼容性)。如果你只想要一個 DNS 服務器,移除文件中 nameserver 的第二行。該 IP 地址可以是本地網(wǎng)絡上
    的一臺路由器。谷歌公開 IPv4 DNS 地址為 8.8.8.8 和 8.8.4.4。
    這三處設置好之后,網(wǎng)卡也就基本配置完了。

    2. 配置 /etc/hosts 文件
    如果要配置網(wǎng)卡,那么就要在 /etc/hosts 文件中決定 IP 地址、FQDN 和可能使用的別名的對應關系。語法是:

    IP_address myhost.example.org aliases

    運行以下命令創(chuàng)建 /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地址區(qū)間內(nèi),除非你有 申請的域名。
    如果不配置網(wǎng)卡,運行以下命令創(chuàng)建 /etc/hosts 文件:

    1 cat > /etc/hosts << "EOF" 2 # Begin /etc/hosts (no network card version) 3 127.0.0.1 <HOSTNAME.example.org> <HOSTNAME> localhost 4 # End /etc/hosts (no network card version) 5 EOF

    下圖是我的/etc/hosts配置,僅供參考


    3. LFS系統(tǒng)上的設備和模塊管理

    這一部分的內(nèi)容比較不容易理解,涉及到的硬件會比較多,感覺還是看英文原版比較好,畢竟翻譯還是有一些“失真”的。對于第一次編譯LFS的新手,沒必要花費時間來配置這方面,可以略過。當對LFS比較熟悉的時候,再回過頭來配置設備。

    sysfs 文件系統(tǒng) http://www.kernel.org/pub/linux/kernel/people/mochel/doc/papers/ols-2005/mochel.pdf
    一種用戶空間下 devfs 的實現(xiàn) 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 系統(tǒng)。
    安裝引導腳本LFS-Bootscripts:

    1 tar xvf lfs-bootscripts-20130821.tar.bz2 2 cd lfs-bootscripts-20130821 3 make install 4 cd .. 5 rm -rf lfs-bootscripts-20130821

    Linux 使用一種特殊的基于“運行級”的引導工具,名為 SysVinit,SysVinit (以下簡稱 “init”) 使用運行級別的方式工作。有 7 種 (編號為 0 到 6) 運行級別 (其實有更多,但只用于特殊情況,通常并不使用。更多細節(jié)參見 init(8)),每個都對應計算機在它啟動時要進行的動作。默認運行級別為 3。以下列出不同運行級別實現(xiàn)的描述:

    0:關閉計算機 1:單用戶模式 2:不帶網(wǎng)絡的多用戶模式 3:帶網(wǎng)絡的多用戶模式 4:保留,用于自定義,否則與 3 相同 5:與 4 相同,但通常用于 GUI 登錄 (如 X 的 xdm 或者 KDE 的 kdm) 6:重新引導計算機

    在內(nèi)核初始化過程中,第一個運行的程序要么是在命令行中指定的,要么就是默認的 init。此程序需要讀取初始化文件/etc/inittab。用下面的命令創(chuàng)建之:

    cat > /etc/inittab << "EOF" # Begin /etc/inittab
    id: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。之前幾節(jié)中描述的任何系統(tǒng)配置文件參數(shù)都可以置于此文件中,使得所有的系統(tǒng)參數(shù)合并在這一個文件中。出于調(diào)試方便考慮,功能腳本還將所有輸出以日志的形式記錄于 /run/var/bootlog 中。由于 /run目錄是一個 tmpfs,此文件在重新引導過后不會保留,然而它在引導結束時會被附加到一個更穩(wěn)定的文件 /var/log/boot.log 之后。

    改變運行級別通過 init <level> 完成,其中 <level> 就是目標運行級別了。例如要重新引導計算機,用戶可以執(zhí)行 init 6 命令,也就是 reboot 命令的別名。相似地, init 0 也是 halt 的別名。
    在 /etc/rc.d 和 rcsysinit.d 中有一些與 rc?.d 相似的目錄 (其中問號是運行級別號碼),都包含一些符號鏈接,有些以 K 開頭,其他的以 S 開頭,在開頭字母之后都有兩位數(shù)字。K 代表停止 (kill) 服務,S 代表開始服務。數(shù)字表示腳本的運行順序,從 00 到 99——數(shù)字越小執(zhí)行越早。當 init 切換至另一個運行級別時,對應的服務就會開始或者停止,這取決于選定的運行級別。真實的腳本位于 /etc/rc.d/init.d。它們完成實際工作,符號鏈接也指向它們。K 鏈接和 S 鏈接都指向/etc/rc.d/init.d中的同一個腳本,這是因為這些腳本可以帶有start、stop、restart、reload 和 status 這些參數(shù)調(diào)用。當遇到 K 的時候,對應的腳本被帶stop 參數(shù)調(diào)用。當遇到 S 的時候,對應的腳本被帶 start 參數(shù)調(diào)用。這個解釋有一個例外。在 rc0.d 和 rc6.d 中的以 S 開頭的鏈接不會開始任何服務。他們會以stop 參數(shù)調(diào)用,來停止服務。它背后的邏輯是用戶要重新引導或者關閉系統(tǒng),沒有什么需要開始的,系統(tǒng)正要終止。
    你可以自由修改引導腳本工作的方式

    5. 配置系統(tǒng)主機名
    localnet 腳本的部分工作就是設置系統(tǒng)的主機名。它需要在 /etc/sysconfig/network 文件中配置。
    創(chuàng)建 /etc/sysconfig/network 文件并輸入一個主機名,運行:

    echo "HOSTNAME=lfs-desktop" > /etc/sysconfig/network

    <lfs> 應改為計算機名。不要在此處輸入 FDQN,該信息應存入 /etc/hosts 文件。

    6. 配置setclock 腳本
    setclock腳本從硬件時鐘,也就是 BIOS 或 CMOS 時鐘讀取時間。如果硬件時鐘設置為 UTC ,這個腳本會使用 /etc/localtime 文件(這個文件把用戶所在的時區(qū)告訴 hwclock 程序)將硬件時鐘的時間轉(zhuǎn)換為本地時間。因為沒有辦法自動檢測硬件時鐘是否設置為 UTC 時間,因此需要手動設置這一項。
    如果您忘了硬件時鐘是不是設置為 UTC 時間了,可以運行 hwclock --localtime --show 命令,這將顯示硬件時鐘當前的時間。如果顯示的時間符合您的手表的時間,那么硬件時鐘設置的是本地時間;如果 hwclock 顯示的不是本地時間,就有可能設置的是 UTC 時間,可以通過在所顯示的 hwclock 時間加上或減去您所在時區(qū)的小時數(shù)來驗證。例如,位于中國大陸的 GMT +0800 時區(qū)的用戶應該將 hwclock 的輸出減去 8 小時。
    如果你的硬件使用的不是 UTC 時間,就必須將下面的 UTC 變量值設為 0 (零),而"UTC=1"表示使用的是UTC時間。運行下面的命令新建一個 /etc/sysconfig/clock 文件:

    1 cat > /etc/sysconfig/clock << "EOF" 2 # Begin /etc/sysconfig/clock 3 UTC=0 4 # Set this to any options you might need to give to hwclock, 5 # such as machine hardware clock type for Alphas. 6 CLOCKPARAMS= 7 # End /etc/sysconfig/clock 8 EOF

    ?

    7. 配置Linux控制臺
    本節(jié)討論如何配置 console 初始化腳本來設置鍵盤映射表和控制臺字體。如果您不使用非 ASCII 字符(英鎊和歐元符號就是非 ASCII 字符的例子),并且是美式鍵盤,可以跳過這一節(jié),沒有配置文件的話,console 初始化腳本不會做任何事情。

    console 使用 /etc/sysconfig/console 作為配置文件以決定使用什么鍵盤映射表和屏幕字體,不過對于中文、日文、韓文等一些語言,Linux 的控制臺不能顯示需要的字符。這些語種的用戶應當安裝 X Window 系統(tǒng),包含所需字符集的字體,以及合適的輸入法(例如,SCIM 支持很多語言)。這應該是BLFS的內(nèi)容了。在這里就不配置了。具體可以參考http://www.tldp.org/HOWTO/Chinese-HOWTO.html


    8. 配置sysklogd 腳本
    sysklogd 腳本用 -m 0 選項調(diào)用 syslogd 程序,此選項關閉 syslogd 默認每 20 分鐘對日志文件寫入的周期性時間戳。如果你要打開這個周期性時間標記,編輯 /etc/sysconfig/rc.site 并且將SYSKLOGD_PARMS 變量調(diào)整為需要的值。例如,把這個變量設置為空值會刪除所有的參數(shù)(SYSKLOGD_PARMS=)
    請運行 man syslogd 以獲得更多信息。

    9. rc.site 文件(可選)

    這個文件實際上是一個綜合的配置文件,它包含啟動腳本所有的設置,同時它還可以指定/etc/sysconfig/目錄下的hostname,console和clock文件中的變量的值。如果關聯(lián)的變量在這些獨立的文件和 rc.site 中都存在,以rc.site指定的為準。
    rc.site 還包括可以自定義引導進程其他方面的參數(shù)。設置 IPROMPT 變量會啟用引導腳本的選擇性運行。其他選項在文件中的注釋有介紹。此文件的默認版本如下:

    1 # rc.site 2 # Optional parameters for boot scripts. 3 4 # Distro Information 5 # These values, if specified here, override the defaults 6 #DISTRO="Linux From Scratch" # The distro name 7 #DISTRO_CONTACT="lfs-dev@linuxfromscratch.org" # Bug report address 8 #DISTRO_MINI="LFS" # Short name used in filenames for distro config 9 10 # Define custom colors used in messages printed to the screen 11 12 # Please consult `man console_codes` for more information 13 # under the "ECMA-48 Set Graphics Rendition" section 14 # 15 # Warning: when switching from a 8bit to a 9bit font, 16 # the linux console will reinterpret the bold (1;) to 17 # the top 256 glyphs of the 9bit font. This does 18 # not affect framebuffer consoles 19 20 # These values, if specified here, override the defaults 21 #BRACKET="\\033[1;34m" # Blue 22 #FAILURE="\\033[1;31m" # Red 23 #INFO="\\033[1;36m" # Cyan 24 #NORMAL="\\033[0;39m" # Grey 25 #SUCCESS="\\033[1;32m" # Green 26 #WARNING="\\033[1;33m" # Yellow 27 28 # Use a colored prefix 29 # These values, if specified here, override the defaults 30 #BMPREFIX=" " 31 #SUCCESS_PREFIX="${SUCCESS} * ${NORMAL}" 32 #FAILURE_PREFIX="${FAILURE}*****${NORMAL}" 33 #WARNING_PREFIX="${WARNING} *** ${NORMAL}" 34 35 # Interactive startup 36 #IPROMPT="yes" # Whether to display the interactive boot prompt 37 #itime="3" # The amount of time (in seconds) to display the prompt 38 39 # The total length of the distro welcome string, without escape codes 40 #wlen=$(echo "Welcome to ${DISTRO}" | wc -c ) 41 #welcome_message="Welcome to ${INFO}${DISTRO}${NORMAL}" 42 43 # The total length of the interactive string, without escape codes 44 #ilen=$(echo "Press 'I' to enter interactive startup" | wc -c ) 45 #i_message="Press '${FAILURE}I${NORMAL}' to enter interactive startup" 46 47 # Set scripts to skip the file system check on reboot 48 #FASTBOOT=yes 49 50 # Skip reading from the console 51 #HEADLESS=yes 52 53 # Write out fsck progress if yes 54 #VERBOSE_FSCK=no 55 56 # Speed up boot without waiting for settle in udev 57 #OMIT_UDEV_SETTLE=y 58 59 # Speed up boot without waiting for settle in udev_retry 60 #OMIT_UDEV_RETRY_SETTLE=yes 61 62 # Skip cleaning /tmp if yes 63 #SKIPTMPCLEAN=no 64 65 # For setclock 66 #UTC=1 67 #CLOCKPARAMS= 68 69 # For consolelog 70 #LOGLEVEL=5 71 72 # For network 73 #HOSTNAME=mylfs 74 75 # Delay between TERM and KILL signals at shutdown 76 #KILLDELAY=3 77 78 # Optional sysklogd parameters 79 #SYSKLOGD_PARMS="-m 0" 80 81 # Console parameters 82 #UNICODE=1 83 #KEYMAP="de-latin1" 84 #KEYMAP_CORRECTIONS="euro2" 85 #FONT="lat0-16 -m 8859-15" 86 #LEGACY_CHARSET=

    自定義引導和關機腳本
    LFS 引導腳本以比較高效的方式引導和關閉序同,但是你仍然可以在 rc.site 文件中進行幾項調(diào)校使它更快或者按照你的喜好調(diào)節(jié)信息。要如此做,調(diào)節(jié)以上的 /etc/sysconfig/rc.site 文件。

    • 在引導腳本 udev 中調(diào)用了 udev settle,需要一定時間才能完成。這個時間是否需要取決于系統(tǒng)上出現(xiàn)的設備。如果你只有簡單分區(qū)和一塊以太網(wǎng)卡,引導進程可能就不必等待這一命令。要跳過之,設置變量 OMIT_UDEV_SETTLE=y。
    • 引導腳本 udev_retry 默認也會運行 udev settle。此命令只在 /var 目錄獨立掛載時必須。這是因為時鐘需要 /var/lib/hwclock/adjtime 這個文件。其他的自定義可能也要等待 udev 完成,但是在很多安裝副本中并不是必須的。要跳過此命令,設置變量 OMIT_UDEV_RETRY_SETTLE=y。
    • 文件系統(tǒng)檢查默認是靜默的。看起來是在引導過程中出現(xiàn)了一次延遲。要打開 fsck 的輸出,設置變量 VERBOSE_FSCK=y。
    • 在重新引導過程中你可能會想要完全跳過文件系統(tǒng)檢查,即 fsck。要如此做,要么創(chuàng)建文件 /fastboot,要么在重新引導系統(tǒng)時使用命令 /sbin/shutdown -f -r now。另一方面,你也可以強制檢查所有的文件系統(tǒng),創(chuàng)建 /forcefsck 或者運行 shutdown 時傳遞 -F 參數(shù)而不是 -f。設置變量 FASTBOOT=y 會在引導過程中禁用 fsck 直到被移除為止。不推薦長期如此。
    • 通常在 /tmp 目錄中的所有文件在引導時都會刪除。由于出現(xiàn)的文件或目錄的數(shù)量不同,這一步會在引導過程中產(chǎn)生明顯延遲。要跳過移除這些文件,設置變量 SKIPTMPCLEAN=y。
    • 在關機過程中 init 程序會給它啟動的每個程序 (例如 agetty) 發(fā)送一個 TERM 信號,等待一個設置的時間 (默認 3 秒),然后給每個進程發(fā)送一個 KILL 信號并且再次等待。此進程在 sendsignals 中對于每個沒有被自己的腳本關閉的程序循環(huán)進行。init 的延遲可以通過傳遞一個參數(shù)來設置。例如要移除init 的延遲,在關機護著重新引導時傳遞 -t0 參數(shù) (如 /sbin/shutdown -t0 -r now)。sendsignals 腳本的延遲可以通過設置參數(shù) KILLDELAY=0 來跳過。


    10. Bash Shell 啟動文件
    shell 程序 /bin/bash (以下簡稱 “shell”) 使用一系列啟動文件協(xié)助創(chuàng)建運行的環(huán)境。每個文件都有特定的用途,可能會以不同方式影響輸入和交互環(huán)境。位于 /etc 目錄中的文件提供全局設置。如果在主目錄中有等價的文件,它可能會覆蓋全局設置。使用 /bin/login 讀取 /etc/passwd 文件成功登錄后,啟動了一個交互登錄 shell 。用命令行可以啟動一個交互非登錄 shell(例如 [prompt]$/bin/bash)。非交互 shell 通常出現(xiàn)在 shell 腳本運行的時候,之所以稱為非交互的,因為它正在運行一個腳本,而且命令與命令之間并不等待用戶的輸入。

    要獲得更多信息,請運行 info bash 以參考 Bash Startup Files and Interactive Shells 小節(jié)。

    當以交互登錄方式運行 shell 的時候,會讀取 /etc/profile 和 ~/.bash_profile 文件。

    下面是一個基本的 /etc/profile 文件,設置了本地語言支持所必需的環(huán)境變量,適當設置這些變量會導致:?

    • 程序?qū)a(chǎn)生翻譯成本地語言的輸出

    • 正確的將字符分類為字母、數(shù)字和其它類,這樣做是必要的,可以讓 bash 在非英語 locale 下正確接收命令行輸入的非 ASCII 字符。

    • 為指定的國家設置正確的字母排序

    • 適當?shù)哪J頁面大小

    • 為貨幣、時間和日期值設置正確的格式

    運行一下命令創(chuàng)建/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. 創(chuàng)建 /etc/inputrc 文件
    inputrc 文件為特定的情況處理鍵盤映射,這個文件被 Readline 用作啟動文件,Readline 是 Bash 和其它大多數(shù) shell 使用的與輸入相關的庫。
    大多數(shù)人并不需要自定義鍵盤映射,所以下面的命令將創(chuàng)建一個適用于所有登陸用戶的全局 /etc/inputrc 文件。如果你需要為某個用戶覆蓋默認的設置,你可以在該用戶的主目錄中創(chuàng)建一個包含自定義鍵盤映射的 .inputrc 文件。
    要想了解更多關于如何編輯 inputrc 文件的信息,運行 info bash 以參考 bash 的 info 頁的 Readline Init File 這一節(jié),運行 info readline 以參考readline 自己的 info 頁也不錯。
    下面是一個基本的全局 inputrc 文件,那些選項的注釋也一起包括在文件里。請注意,注釋不能和命令放在同一行里。

    1 cat > /etc/inputrc << "EOF" 2 # Begin /etc/inputrc 3 # Modified by Chris Lynn <roryo@roryo.dynup.net> 4 5 # Allow the command prompt to wrap to the next line 6 set horizontal-scroll-mode Off 7 8 # Enable 8bit input 9 set meta-flag On 10 set input-meta On 11 12 # Turns off 8th bit stripping 13 set convert-meta Off 14 15 # Keep the 8th bit for display 16 set output-meta On 17 18 # none, visible or audible 19 set bell-style none 20 21 # All of the following map the escape sequence of the value 22 # contained in the 1st argument to the readline specific functions 23 "\eOd": backward-word 24 "\eOc": forward-word 25 26 # for linux console 27 "\e[1~": beginning-of-line 28 "\e[4~": end-of-line 29 "\e[5~": beginning-of-history 30 "\e[6~": end-of-history 31 "\e[3~": delete-char 32 "\e[2~": quoted-insert 33 34 # for xterm 35 "\eOH": beginning-of-line 36 "\eOF": end-of-line 37 38 # for Konsole 39 "\e[H": beginning-of-line 40 "\e[F": end-of-line 41 42 # End /etc/inputrc 43 EOF

    到此,我們的LFS的引導腳本和配置文件差不多就配置完了。一些設備配置文件和中文支持可以先略過。

    下面開始編譯安裝內(nèi)核以及GRUB引導程序。這一步完了之后,我們就可以啟動LFS了。

    首先創(chuàng)建 /etc/fstab 文件來確定LFS文件系統(tǒng)的掛載點,以什么樣的順序以及在掛載之前需要檢查什么。

    cat > /etc/fstab << "EOF" # Begin /etc/fstab# file system mount-point type   options dump fsck # orderUUID="0983de48-2873-4c4a-9602-a2f2e5283f65"    / ?ext4 ?defaults   1 1
    UUID="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

    接著開始編譯安裝內(nèi)核:

    cd /sources
    tar xvf linux-3.10.10.tar.xz
    cd linux-3.10.10
    make
    mrproper

    這能保證內(nèi)核樹絕對干凈。內(nèi)核開放團隊推薦每次編譯內(nèi)核之前都運行這個命令。不要相信解壓后的源碼樹就是干凈的。

    參考http://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt 來獲得內(nèi)核配置的常規(guī)信息。
    用菜單形式界面的配置內(nèi)核:(由于近期在 udev 中的改動,確保選擇下面這些內(nèi)容)

    Device Drivers --->Generic Driver Options --->Maintain a devtmpfs filesystem to mount at /dev make LANG=zh_CN.UTF-8 LC_ALL= menuconfig

    確保把<host_LANG_value>替換為你的宿主系統(tǒng)下$LANG的值。如果宿主系統(tǒng)沒有設置這個變量,就用宿主的$LC_ALL或者$LC_CTYPE的值代替。

    在某些情況下選擇 make oldconfig,可能會更適合。閱讀 README 可獲取更多信息。

    如果愿意,你可以直接從宿主系統(tǒng)中復制內(nèi)核配置文件.config(如果可用),到linux-3.10.10的解壓目錄。當然,我們不推薦這個方式。通常探究所有配置菜單項,再根據(jù)需要創(chuàng)建內(nèi)核是最佳的。
    編譯內(nèi)核鏡像和模塊:

    make

    如果配置內(nèi)核時使用了模塊,那么就安裝這些模塊:

    make modules_install

    ?內(nèi)核編譯完成后,需要額外的步驟來完成安裝。一些文件需要拷貝到 /boot 目錄。

    內(nèi)核鏡像的路徑,根據(jù)不同的平臺可能會改變,下面的文件名可根據(jù)你的喜好改變,但文件名的前綴必須是 vmlinuz 以便和下個部分中的提及的引導進程自動安裝相兼容。下面的命令假定在x86架構上:

    cp -v arch/x86/boot/bzImage /boot/vmlinuz-3.10.10-lfs-7.4

    System.map 是一個內(nèi)核的符號文件 。它映射每個內(nèi)核API函數(shù)的入口,以及內(nèi)核在運行中內(nèi)核數(shù)據(jù)結構的地址。 運行下面這個命令安裝這個文件:

    cp -v System.map /boot/System.map-3.10.10

    由上面的 make menuconfig 步驟生成的內(nèi)核配置文件 .config 包含所有剛剛被編譯的內(nèi)核配置選項。保存此文件以備日后查閱是一個好主意:

    cp -v .config /boot/config-3.10.10

    安裝Linux內(nèi)核文檔:

    install -d /usr/share/doc/linux-3.10.10 cp -r Documentation/* /usr/share/doc/linux-3.10.10

    現(xiàn)在內(nèi)核已經(jīng)安裝好了,如果這個內(nèi)核源代碼的目錄準備保留,那么對linux-3.10.10 目錄運行 chown -R 0:0命令 ,確保所有文件的屬主是 root.

    配置 Linux 模塊的加載順序:

    大多時候,模塊是自動被加載的,但有時候需要指定特定的順序。加載模塊的程序modprobe或insmod,使用/etc/modprobe.d/usb.conf了達到這個目的。
    運行以下命令來創(chuàng)建一個新 /etc/modprobe.d/usb.conf 文件:

    install -v -m755 -d /etc/modprobe.d cat > /etc/modprobe.d/usb.conf << "EOF" # Begin /etc/modprobe.d/usb.confinstall ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true# End /etc/modprobe.d/usb.conf EOF

    ?

    接下來,使用 GRUB 設置引導過程:
    在這一部分,我打算把GRUB安裝到我的移動硬盤的MBR中,這樣的話,開機時選擇從U盤啟動,就可以啟動LFS系統(tǒng)了。

    首先了解下GRUB2命名驅(qū)動器的方式:
    GRUB 使用自己的名稱結構命名驅(qū)動器和分區(qū),格式為 (hdn,m),其中 n 是硬盤驅(qū)動器編號,m 是分區(qū)編號。硬盤驅(qū)動器編號從 0 開始,但主分區(qū)的分區(qū)編號從 1 開始,擴展分區(qū)從 5 開始。注意這與早期版本中兩個編號都從 0 開始是不同的。例如 sda1 分區(qū)對 GRUB 來說是 (hd0,1) 而 sdb3 就是 (hd1,3)。與Linux 不同,GRUB 不把 CD-ROM 驅(qū)動器認作硬盤驅(qū)動器。例如,如果在 hdb 上使用 CD,第二硬盤驅(qū)動器是 hdc,那么第二硬盤驅(qū)動器仍然會是 (hd1)。
    關于grub2的更多信息,請參考https://wiki.archlinux.org/index.php/GRUB_(簡體中文)
    GNU GRUB的維基百科也是不錯的參考。

    grub2的工作原理大致如下:
    GRUB 通過向硬盤的第一物理磁道(估計就是MBR)寫入數(shù)據(jù)(boot.img)來工作。這個區(qū)域不屬于任何一個文件系統(tǒng)。其中的程序(boot.img,core.img)訪問引導分區(qū)中的 GRUB 模塊來進一步引導內(nèi)核。grub模塊的默認路徑是 /boot/grub/。

    我的移動硬盤的名稱應該是/dev/sdb,引導分區(qū)是/dev/sdb1。(見LFS編譯筆記1)
    因此,安裝 GRUB 文件到 /boot/grub 并建立引導磁道的命令是:

    grub-install /dev/sdb

    grub-install是我們在第二部分安裝grub-2.00.tar.xz時的一個腳本,它會調(diào)用一系列命令來安裝grub文件。

    創(chuàng)建配置文件

    cat > /boot/grub/grub.cfg << "EOF" # Begin /boot/grub/grub.cfg set default=0 set timeout=5insmod ext2 set root=(hd1,1)  #這一步設置的是grub的根目錄,grub會在這個目錄中尋找內(nèi)核的鏡像文件。不過,由于設備名的隨機性,此處通常都是錯的。
                #目前,我還沒有找到比較好的方法來固定這個名稱,只能每次都在命令行下配置這一項。menuentry
    "GNU/Linux, Linux 3.10.10-lfs-7.4" {linux /vmlinuz-3.10.10-lfs-7.4 root=/dev/sdb2 ro    #此處設置LFS系統(tǒng)的根目錄。更好的選擇是采用uuid而不是sdb這樣的形式。 } EOF

    注意:
    有一個命令 grub-mkconfig 能自動創(chuàng)建配置文件。它使用 /etc/grub.d/ 中的一系列腳本,并且會毀掉你的所有自定義配置。這些腳本是為不基于源代碼的發(fā)行版設計的,不推薦用于LFS。如果你安裝了商業(yè) Linux 發(fā)行版,這個程序很可能會運行。記得備份你的 grub.cfg 文件。

    到此,我們的LFS系統(tǒng)才真正編譯完畢了。可以輕松一下了。重啟時選擇BIOS從U盤啟動,就可以進入你的LFS系統(tǒng)的文本模式了。不過很有可能會卡在grub這一步,這是因為grub的配置文件設置的不正確,原因還是由于設備的命名是隨機的,我們寫在grub.cfg文件中的設備名稱可能和真實的設備名稱不同,這樣就會導致grub不能正確的引導系統(tǒng)。不過,你不用慌,既然可以進入grub,就沒有啟動不起來的系統(tǒng)。不要小看了grub的命令行啊,它可是很強大的!
    如果你真的卡在了grub這一關,那么就在grub的命令行下手工輸入一下命令來啟動LFS:

    1 set root=(hd1,1) 2 linux /vmlinuz root=/dev/sdb2 ro 3 initrd /initrd.img 4 boot

    轉(zhuǎn)載于:https://www.cnblogs.com/champ/p/3484765.html

    總結

    以上是生活随笔為你收集整理的LFS7.4编译笔记(3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。