lfs學習筆記(三)最終構建與配置

来源:https://www.cnblogs.com/renren-study-notes/archive/2018/12/31/10199965.html
-Advertisement-
Play Games

lfs學習筆記(三)鏈接:https://www.cnblogs.com/renren-study-notes/p/10199381.html 一名linux愛好者,記錄構建Linux From Scratch的過程 經博客園-駿馬金龍前輩介紹,開始接觸學習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.6章  

運行第7.6.2章節與第7.6.4章的命令即可

因為大多數使用的都是美國鍵盤,所以本章節其他內容可忽略

第7.7章節 

運行以下命令獲取Glibc支持的所有語言環境的列表:

locale -a

結果:

C
en_US.utf8
POSIX
zh_CN.utf8

這裡我們選擇en_US.utf8

以下是對對所選擇的語言的測試

LC_ALL=<locale name> locale charmap

LC_ALL=<locale name> locale language
LC_ALL=<locale name> locale charmap
LC_ALL=<locale name> locale int_curr_symbol
LC_ALL=<locale name> locale int_prefix

確定正確的區域設置後,創建 /etc/profile文件:

cat > /etc/profile << "EOF"
# Begin /etc/profile

export LANG=en_US.utf8  (這裡替換為所選擇的語言環境)
# End /etc/profile
EOF

第7.4章

找出分配給哪個網路設備的名稱:

cat /etc/udev/rules.d/70-persistent-net.rules 
記住這個命令輸出的網路設備的名字,下一章要使用。

第7.5章

第7.5.1節

cd /etc/sysconfig/
cat > ifconfig.eth0 << "EOF"   (這裡的eth0修改為上一章節記錄的網路設備的名字)
ONBOOT=yes
IFACE=eth0  (這裡的eth0修改為上一章節記錄的網路設備的名字)
SERVICE=ipv4-static
IP=192.168.1.2
GATEWAY=192.168.1.1
PREFIX=24
BROADCAST=192.168.1.255
EOF

 第7.5.2章節

cat > /etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf

domain <Your Domain Name>
nameserver   8.8.8.8
nameserver   8.8.4.4

# End /etc/resolv.conf
EOF

這裡我們使用谷歌的dns

第7.5.3章節

echo "<lfs>" > /etc/hostname
這裡的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章

本章節中的提及的軟體包,將在其他筆記單獨記錄

運行下麵的命令,退出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操作系統。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原題傳送門:https://www.luogu.org/problemnew/show/P1209 首先,這是一道貪心題。 我們先來分析它的貪心策略。 例如,樣例: 4 50 18 3 4 6 8 1415 16 17 2125 26 27 30 31 40 41 42 43 它們之間的差是: 1 ...
  • 溫度轉換問題 一、溫度轉換 目前有兩種表示溫度的方法一種是攝氏度另一種是華氏度,攝氏度的結冰點為0度,沸點為100度將溫度等分刻畫,華氏度的結冰點為32度,沸點為212度將溫度進行等刻度劃分。 現需要將按格式輸入的攝氏度轉換為華氏度,將輸入的華氏度轉換為攝氏度。 二、問題分析 根據IPO的分析方法可 ...
  • 任何使用 async/await 進行修飾的方法,都會被認為是一個非同步方法;實際上,這些非同步方法都是基於隊列的線程任務,從你開始使用 Task 去運行一段代碼的時候,實際上就相當於開啟了一個線程,預設情況下,這個線程數由線程池 ThreadPool 進行管理的。 ...
  • 載入超過100M的xml文件時(可能不是很常見),XmlDocument這種全部載入到記憶體里的模式就有點不友好了,耗時長、記憶體高。 這時用xmlreader就會有自行車換超跑的感覺,但其間遇到幾個坑,記錄一下。 先看源碼,包括dom和sax兩種模式的讀取和寫入 DOM模式: SAX(simple A ...
  • 概述 Microsoft.AspNetCore.NodeServices庫 實例 新建aspnet core站點 添加nuget包 建立node環境,此處示例用於掃描wifi環境 建立nodejs的程式文件 index.js 設置js文件為始終複製 註入配置 在控制器-Action處調用 返回情況 ...
  • 前言 2018年還有幾天就結束了,回顧一下今年的博客blog-posts, 簡單整理一下行業與軟體過程(Software Industry & process improvement) 關註軟體過程改進到效能改進,除了軟體開發,還是軟體測試。全球Scrum在應用中,全球軟體測試行業演化;不必多說,研... ...
  • 1. 前言 KASAN是一個動態檢測記憶體錯誤的工具。KASAN可以檢測全局變數、棧、堆分配的記憶體發生越界訪問等問題。功能比SLUB DEBUG齊全並且支持實時檢測。越界訪問的嚴重性和危害性通過我之前的文章(SLUB DEBUG技術)應該有所瞭解。正是由於SLUB DEBUG缺陷,因此我們需要一種更加 ...
  • 1、首先查找tomcat目錄 ? 1 sudo find / -name *shutdown.sh* ? 1 sudo find / -name *shutdown.sh* ? 1 sudo find / -name *shutdown.sh* ? 1 sudo find / -name *shut ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...