lfs學習筆記(三)最終構建與配置
lfs學習筆記(三)連結:https://www.cnblogs.com/renren-study-notes/p/10199381.html
一名linux愛好者,記錄構建Linux From Scratch的過程
經部落格園-駿馬金龍前輩介紹,開始接觸學習lfs,用部落格記錄學習筆記,如有寫的不恰當的地方,望多多指正。
筆記中只是記錄一些問題和書中表述不清晰的內容的處理辦法以及我的解決思路,僅做參考。
要實際構建lfs請結合lfs官方的書籍操作。
Linux From Scratch(LFS)是一個專案書籍,提供完全從原始碼構建自己的自定義Linux系統的分步說明。
構建過程中使用到的網站:
lfs書籍原版(英文)下載連結:http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-8.3.tar.bz2
lfs(linux中國翻譯版)下載連結:https://codeload.github.com/LCTT/LFS-BOOK/zip/8.3-translating
檔案映象網站彙總:http://www.linuxfromscratch.org/mirrors.html
使用的機器型號:Thinkpad-L450
使用主機作業系統:manjaro-xfce-18.0.1
使用lfs書籍版本lfs-book-8.3(官網英文版)
第6.7章
開始構建第一個包
第六章中構建的所有包必須進行測試。
軟體構建過程:
以下以Linux API Headers包為例,其後的軟體包構建過程大同小異,出現不同的選項會在後面補充,不完全貼出書中內容。
這時你的命令列或終端的環境應該是:
1.設定變數:
2.掛載你為lfs建立的所有分割槽
3.逐步完成6.2.2與6.2.3章節內容後
4.chroot進入lfs分割槽繼續操作。
根據上一章節的構建要求,首先進入到/mnt/lfs/sources/sources目錄
cd /sources
因為Linux API Headers在linux-4.18.5.tar.xz包中,所以解壓包:
tar -xvf linux-4.18.5.tar.xz
進入解壓完的軟體:
cd linux-4.18.5
執行書中的編譯說明
make mrproper make INSTALL_HDR_PATH=dest headers_install find dest/include \( -name .install -o -name ..install.cmd \) -delete cp -rv dest/include/*/usr/include
1.在軟體包編譯,測試,安裝過程中出現的如下命令:
make
make check
make tests
make test
make install
在沒有要求必須使用make -j1引數的情況下,make後面都可加 -j(N) 引數 提升速度
(-j [N], --jobs[=N] 同時允許 N 個任務;無引數表明允許無限個任務)
軟體包編譯安裝完成後,書中會有一些相應的配置說明,完成這些操作說明。
執行完每書中每個軟體包頁最後一個命令後執行:
cd /mnt/lfs/sources(返回sources目錄)
rm -rf binutils-2.31.1(刪除解壓的軟體包目錄)
繼續構建下一個軟體包
第6.9章
glibc的配置
按照書籍安裝步驟到(可以使用localedef程式安裝單個語言環境)步驟
我們需要安裝英文語言環境和中文語言環境
1.建立語言環境安裝目錄
mkdir -pv /usr/lib/locale
2.安裝語言環境
localedef -i en_US -f UTF-8 en_US.UTF-8 localedef -i zh_CN -f UTF-8 zh_CN.UTF-8
第6.9.22章
新增時區資料,這裡我們新增亞洲/上海時區
1.安裝和設定時區資料
tar -xf ../../tzdata2018e.tar.gz ZONEINFO=/usr/share/zoneinfo mkdir -pv $ZONEINFO/{posix,right} for tz in etcetera southamerica northamerica europe africa antarctica \ asia australasia backward pacificnew systemv; do zic -L /dev/null -d $ZONEINFO -y "sh yearistype.sh" ${tz} zic -L /dev/null -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz} zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz} done cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO zic -d $ZONEINFO -p America/New_York unset ZONEINFO
2.確定時區
tzselect
Please identify a location so that time zone rules can be set correctly. Please select a continent, ocean, "coord", or "TZ". 1) Africa 2) Americas 3) Antarctica 4) Asia 5) Atlantic Ocean 6) Australia 7) Europe 8) Indian Ocean 9) Pacific Ocean 10) coord - I want to use geographical coordinates. 11) TZ - I want to specify the time zone using the Posix TZ format.
3.這裡我們選擇4亞洲
Please select a country whose clocks agree with yours. 1) Afghanistan 18) Israel 35) Palestine 2) Armenia 19) Japan 36) Philippines 3) Azerbaijan 20) Jordan 37) Qatar 4) Bahrain 21) Kazakhstan 38) Russia 5) Bangladesh 22) Korea (North) 39) Saudi Arabia 6) Bhutan 23) Korea (South) 40) Singapore 7) Brunei 24) Kuwait 41) Sri Lanka 8) Cambodia 25) Kyrgyzstan 42) Syria 9) China 26) Laos 43) Taiwan 10) Cyprus 27) Lebanon 44) Tajikistan 11) East Timor 28) Macau 45) Thailand 12) Georgia 29) Malaysia 46) Turkmenistan 13) Hong Kong 30) Mongolia 47) United Arab Emirates 14) India 31) Myanmar (Burma) 48) Uzbekistan 15) Indonesia 32) Nepal 49) Vietnam 16) Iran 33) Oman 50) Yemen 17) Iraq 34) Pakistan
4.這裡我們選擇9中國
Please select one of the following time zone regions. 1) Beijing Time 2) Xinjiang Time
5.這裡我們選擇1北京時間
The following information has been given: China Beijing Time Therefore TZ='Asia/Shanghai' will be used. Selected time is now: Sun Dec 30 18:00:59 CST 2018. Universal Time is now: Sun Dec 30 10:00:59 UTC 2018. Is the above information OK? 1) Yes 2) No #? yes Please enter a number in range.
6.是否選擇以上資訊?這裡選擇1
You can make this change permanent for yourself by appending the line TZ='Asia/Shanghai'; export TZ to the file '.profile' in your home directory; then log out and log in again. Here is that TZ value again, this time on standard output so that you can use the /usr/bin/tzselect command in shell scripts: Asia/Shanghai
這句的意思是你可以將該配置檔案新增到/usr/bin/tzselect使其生效(暫時不予理會,系統配置完後在配置時區)
7.執行以下命令建立檔案/etc/localtime
cp -v /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
第6.31章 如果需要,在下一節中安裝flex後,可以重建bison,並且可以通過make check來執行bison檢查。(不推薦重建)
第6.48章 Libelf是elfutils-0.173包的一部分,所以需要解壓elfutils-0.173軟體包,進行編譯
第6.61章 按書籍說明,第一條修改設定命令如下
PAGE=A4 ./configure --prefix=/usr
第6.62章 我使用manjaro安裝的grub引導lfs所以在此處不安裝grub,如果需要安裝grub到lfs筆記後面,對應章節有配置說明。
第6.72章
LD_LIBRARY_PATH=/tools/lib udevadm hwdb --update
每次更新硬體資訊時都需要執行此命令。
第6.79章 從二進位制檔案和庫中刪除除錯符號 按照書籍中的命令操作即可(可選)建議執行此項操作。
第6.80章
清理執行測試剩下的一些額外檔案
rm -rf /tmp/*
退出
exit
掛載6.2.2和6.2.3章節內容
mount -v --bind /dev $LFS/dev
mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620 mount -vt proc proc $LFS/proc mount -vt sysfs sysfs $LFS/sys mount -vt tmpfs tmpfs $LFS/run
if [ -h $LFS/dev/shm ]; then mkdir -pv $LFS/$(readlink $LFS/dev/shm) fi
chroot進入lfs系統目錄
chroot "$LFS" /usr/bin/env -i \ HOME=/root TERM="$TERM" \ PS1='(lfs chroot) \u:\w\$ ' \ PATH=/bin:/usr/bin:/sbin:/usr/sbin \ /bin/bash --login
繼續執行書中所給的其他命令
第7.2章節 思路
進入sources目錄,解壓lfs-bootscripts
進入lfs-bootscripts目錄,並執行安裝。
第7.4章 第7.5章 第7.6章 第7.7章 思路 暫時執行書中所給的命令 安裝完lfs後在做相應的更改
第7.8章 第7.9章執行書中所給命令即可
第8.2章
更改為lfs所建立的分割槽到相應位置即可(這個檔案是配置lfs開機自動掛載的分割槽)
cat > /etc/fstab << "EOF" # Begin /etc/fstab # file system mount-point type options dump fsck # order /dev/sda9 /boot ext4 defaults 1 1 /dev/sda10 / ext4 defaults 1 1 /dev/sda11 /home ext4 defaults 1 1 /dev/sda12 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
第8.3章(相當重要)
配置編譯安裝linux核心
首先進入sources目錄
cd /sources
解壓核心檔案壓縮包
tar -xvf linux-4.18.5.tar.xz
進入核心包目錄
cd linux-4.18.5
準備編譯
make mrproper
設定預設核心配置狀態
make defconfig
設定核心
make menuconfig
找到以下選項
Device Drivers ---> Generic Driver Options ---> [ ] Support for uevent helper [CONFIG_UEVENT_HELPER] [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS] Kernel hacking ---> Choose kernel unwinder (Frame pointer unwinder) ---> [CONFIG_UNWINDER_FRAME_POINTER]
上下鍵翻頁找到Device Drivers --->回車進入
上下鍵翻頁找到Generic Driver Options --->回車進入
按字母n鍵去掉Support for uevent helper對話方塊的×符號
按y鍵在Maintain a devtmpfs filesystem to mount at /dev對話方塊打上×符號
左右鍵找到exit,exit兩次
上下鍵翻頁找到Kernel hacking --->回車進入
上下鍵翻頁找到Choose kernel unwinder--->回車進入
向下選擇UNWINDER_FRAME_POINTER回車確定
左右鍵選擇save,兩次回車確定儲存 選擇兩次exit退出到終端。
如果您的主機硬體使用UEFI,請自行新增此項設定
Processor type and features --->
[*] EFI stub support [CONFIG_EFI_STUB]
編譯核心映像和模組
make -j(n) n為可設定同時執行的任務數量,不設定引數預設為無限(不要輕易嘗試)
本章節警告中的內容大意
如果為boot單獨分了區,請掛載boot分割槽在進行下步操作
複製一些核心的啟動檔案到boot分割槽
cp -iv arch/x86/boot/bzImage /boot/vmlinuz-4.18.5-lfs-8.3 cp -iv System.map /boot/System.map-4.18.5 cp -iv .config /boot/config-4.18.5
安裝Linux核心的文件:
install -d /usr/share/doc/linux-4.18.5 cp -r Documentation/* /usr/share/doc/linux-4.18.5
配置linux模組載入順序
install -v -m755 -d /etc/modprobe.d cat > /etc/modprobe.d/usb.conf << "EOF" # Begin /etc/modprobe.d/usb.conf install 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
第8.4章節
安裝配置grub引導
我選擇的是用manjaro安裝的grub引導進入lfs系統所以未安裝grub軟體包
這裡介紹給lfs安裝配置grub引導的過程
在第6.62章節已經安裝了grub軟體
這裡只介紹配置
1.安裝grub引導到MBR
grub-install /dev/sda
2.建立grub配置檔案
cat > /boot/grub/grub.cfg << "EOF" # Begin /boot/grub/grub.cfg set default=0 set timeout=5 insmod ext4(這裡面更改為安裝lfs的分割槽的格式例如ext4) set root=(hd0,2) 括號裡面更改為你所安裝lfs的分割槽號 例如/dev/sda2為(hd0,2) menuentry "GNU/Linux, Linux 4.18.5-lfs-8.3" { linux /boot/vmlinuz-4.18.5-lfs-8.3 root=/dev/sda2 ro(這裡的/dev/sda2更改為你所安裝lfs的分割槽號 例如/dev/sda2) } EOF
第9.1章節
設定系統版本及版本號執行本章節命令即可
echo 8.3 > /etc/lfs-release cat > /etc/lsb-release << "EOF" DISTRIB_ID="Linux From Scratch" DISTRIB_RELEASE="8.3" DISTRIB_CODENAME="<your name here>"(括號裡改為自己起的名字) DISTRIB_DESCRIPTION="Linux From Scratch" EOF
第9.3章
本章節中的提及的軟體包,將在配置blfs時,在進行安裝配置
執行下面的命令,退出chroot,解除安裝lfs的分割槽
exit umount -v $LFS/dev/pts umount -v $LFS/dev umount -v $LFS/run umount -v $LFS/proc umount -v $LFS/sys umount -v $LFS umount -v $LFS/usr umount -v $LFS/home umount -v $LFS
如果需要本機的grub引導lfs則在root使用者下執行以下命令建立lfs的引導項
非manjaro系統需要安裝os-prober軟體包,並掛載lfs的分割槽,在執行下面命令,新增lfs的啟動項
grub-mkconfig -o /boot/grub/grub.cfg
確定新增完lfs引導項後,重啟機器進入lfs選項,即可進入lfs作業系統。