Linux From Scratch(從零開始構建Linux系統,簡稱LFS)- Version 7.7

来源:http://www.cnblogs.com/Mr-kevin/archive/2016/07/09/5656303.html
-Advertisement-
Play Games

一. 準備工作 1. 需要一個Linux宿主系統,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架構上可以運行的其它發行版 二. LFS目標架構 LFS主要支持 AMD/Intel 的 x86(32 位)和 x86_64(64 位) 的目標架構。另外,做一些更改可以讓LF ...


一. 準備工作

  1. 需要一個Linux宿主系統,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架構上可以運行的其它發行版

    如果想實現Win7與Linux雙系統,可參考我的上一篇博文:Win7下硬碟安裝Ubuntu 12.04.3雙系統  

 

二. LFS目標架構

    LFS主要支持 AMD/Intel 的 x86(32 位)和 x86_64(64 位) 的目標架構。另外,做一些更改可以讓LFS 順利地在 Power PC 和

  ARM CPU 上運行。

    假如按照本文的預設方式構建,那麼你將得到一個“純” 64 位系統————這意味著你僅能夠執行64 位的程式。有一些異常老舊的

  包無法在“純” 64位系統上構建,或者是需要專門的編譯指令。通常出現這樣的問題是因為這些包包含有一些與32 位系統緊密相關的

  彙編指令。大多數問題都有解決方案,但可能需要特別的方法或者是補丁。

 

三. 宿主系統需求

    確保宿主系統已經包含了所有合適的軟體版本,具有了編譯程式的能力,這對於一個現代的Linux發行版系統不是一個問題。

  你需要運行以下指令:

cat > version-check.sh << "EOF"
#!/bin/bash
# Simple script to list version numbers of critical development tools
export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
echo "/bin/sh -> `readlink -f /bin/sh`"
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1
if [ -h /usr/bin/yacc ]; then
echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
elif [ -x /usr/bin/yacc ]; then
echo yacc is `/usr/bin/yacc --version | head -n1`
else
echo "yacc not found"
fi
bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
if [ -h /usr/bin/awk ]; then
echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
elif [ -x /usr/bin/awk ]; then
echo yacc is `/usr/bin/awk --version | head -n1`
else
echo "awk not found"
fi
gcc --version | head -n1
g++ --version | head -n1
ldd --version | head -n1 | cut -d" " -f2- # glibc version
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1
xz --version | head -n1
echo 'main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
then echo "g++ compilation OK";
else echo "g++ compilation failed"; fi
rm -f dummy.c dummy
EOF
bash version-check.sh
View Code

  同時,還請進行庫文件的一致性檢查,這些文件應該要麼都在或者是都缺失,而不應該只有一兩個。

cat > library-check.sh << "EOF"
#!/bin/bash
for lib in lib{gmp,mpfr,mpc}.la; do
echo $lib: $(if find /usr/lib* -name $lib|
grep -q $lib;then :;else echo not;fi) found
done
unset lib
EOF
bash library-check.sh
View Code

 

四. 準備新分區

  1. 創建新分區    

    a. 創建10G的空閑分區,存儲所有的源碼包及滿足編譯的需求。

    b. 如果宿主系統創建了swap 分區,則LFS 系統可以與之共用,如果沒有,則新建,推薦大小為物理記憶體的兩倍左右。

  2. 在分區上創建文件系統   

    a. 在 LFS 分區上創建 ext4 文件系統,運行以下命令:

mkfs -v -t ext4 /dev/<xxx>

    b. 如果是新建 swap 分區,需要用下麵的命令初始化:

mkswap /dev/<yyy>

    <xxx> 、<yyy>都需要替換為實際的設備名稱(如 sda1,sdb2),以下同。

  3. 掛載新分區

    a. 設置掛載點為 $LFS 環境變數:

export LFS=/mnt/lfs

    b. 創建掛載點並用下麵的命令掛載 LFS 文件系統:

mkdir -pv $LFS    # 建立掛載點
mount -v -t ext4 /dev/<xxx> $LFS    # 將 /dev/<xxx> 掛載到 $LFS

    如果重啟設備,可能進入後發現 /mnt/lfs 目錄下沒有內容,這時只需要再次掛載 /dev/<xxx> 到 /mnt/lfs。       

    c.  如果你正在使用交換分區,用 swapon 命令確保它已經啟用

/sbin/swapon -v /dev/<yyy>

 

五. 軟體包與補丁  

  1. 以 root 用戶執行下麵的命令創建$LFS/sources目錄,用於保存軟體包和補丁,同時用來解壓源代碼並執行編譯

mkdir -v $LFS/sources

  2. 設置目錄的寫許可權和粘滯模式

chmod -v a+wt $LFS/sources

    “粘滯模式”意思是就算有多個用戶對某個目錄有寫許可權,仍然只有該文件的主人能刪除一個粘滯目錄里的文件。

  3. 下載需要的軟體包和補丁,它們用來構建一個基本的 Linux 系統  

    a. 下載方式一:點擊此直接下載

    b. 下載方式二:點擊此下載 wget-list 文件作為 wget 的輸入。例如:

wget --input-file=wget-list --continue --directory-prefix=$LFS/sources

      由於這些文件都分佈在國外的不同站點上,因此有些會下載很慢。感謝中科大提供的鏡像:wget-list-LFS7.7-systemd-USTC

  4. 校驗所有的文件是否都正確

    點擊此下載 md5sums 文件,將這個文件拷貝到 $LFS/sources 目錄里並執行:

pushd $LFS/sources
md5sum -c md5sums
popd

    多數情況下校對會不成功,並不影響構建。

 

六. 最後的準備工作

  1. 創建 $LFS/tools 文件夾

    以 root 用戶運行以下的命令:

mkdir -v $LFS/tools

    編譯的臨時工具會安裝到 $LFS/tools 文件夾,不會成為最終 LFS 系統的一部分。

  2. 在宿主系統中創建 /tools 的符號鏈接,將其指向$LFS/tools

    以 root 用戶運行以下的命令:

ln -sv $LFS/tools /

    創建的符號鏈接使得編譯的工具鏈總是指向 /tools 文件夾。

  3. 添加lfs用戶

    以 root 用戶運行以下命令來添加新組和新用戶:

groupadd lfs    # 添加新組
useradd -s /bin/bash -g lfs -m -k /dev/null lfs     # 添加新用戶    
passwd lfs      # 為用戶設置密碼
chown -v lfs $LFS/tools     # 賦予了訪問 $LFS/tools 文件夾的所有許可權
chown -v lfs $LFS/sources   # 賦予了訪問 $LFS/sources 文件夾的所有許可權
su - lfs    # 切換用戶
View Code

    當以 root 用戶登錄時,犯一個小錯誤可能會破壞或摧毀整個系統。

  4. 設置環境

    lfs 用戶登錄運行以下兩個命令,為 bash shell 創建兩個開機啟動的文件。

cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
View Code
cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
EOF
View Code

    啟用配置文件:

source ~/.bash_profile

 


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

-Advertisement-
Play Games
更多相關文章
  • 簡介 數據安全是現在互聯網安全非常重要一個環節。而且一旦數據出現問題是不可逆的,甚至是災難性的。 有一些防護措施應該在前面幾個博文說過了,就不再贅述。比如通過防火牆控制,通過系統的用戶控制,通過web應用的控制等。 想說的是,任何一個節點都不是單獨存在的。 場景 1. 確保應用本身安全。 2. 控制 ...
  • 簡介 由於網路技術日趨成熟,黑客們也將註意力從以往對網路伺服器的攻擊逐步轉移到了對web應用的攻擊。據最新調查,信息安全有75%都發生在web應用而非網路層面。 場景 1. 控制訪問的許可權。只讓可以訪問的訪問到最小的資源和許可權。 2. 控制輸入內容。所有輸入都可能是不安全的,所以要過濾。 3. 保證 ...
  • 什麼是MVP?在“MVP初探”里就有講過了,就是一種UI的架構模式。 什麼是Unity、PIAB、Exception Handling?可以去Bing一下。 為使M/V/P之間更好的解耦,我們通過引入Enterprise Library的Exception Handling Application ...
  • 簡介 最小(少)原則,是安全的重要原則。最小的許可權,最小的用戶,最少的服務,最少的進程,是最安全的。 系統安全包括:文件系統保護、用戶管理安全、進程的保護以及日誌的管理。 場景 1. 確保服務最少,每個都是有用,而且許可權最小化。 2. 確保用戶最少,每個都是有用,而且許可權最小化。 3. 確保文件許可權 ...
  • Ubuntu 固定IP 1. 更改/etc/network/interfaces的內容 1.1 註釋掉原來的內容 1.2 添加以下內容 auto eth0 iface eth0 inet static address 192.168.1.119 netmask 255.255.255.0 getew ...
  • 在RHEL5.x版本下麵,在添加磁碟分區等操作後,一直使用partproble命令使內核重新讀取分區表信息,從而不用重新啟動。但是最近在RHEL 6(Red Hat Enterprise Linux Server release 6.6 (Santiago))下,使用partprobe出現錯誤。 [... ...
  • Kubernetes為Google開源的容器管理框架,提供了 Docker容器的誇主機、集群管理、容器部署、高可用、彈性伸縮 等一系列功能;Kubernetes的設計目標包括使容器集群任意時刻都處於用戶期望的狀態,因而建立了一整套集群管理機制:容器自動重啟、自動備份、容器自動伸縮等;Kubernet ...
  • 我會用幾篇博客總結一下在Linux中進程之間通信的幾種方法,我會把這個開頭的摘要部分在這個系列的每篇博客中都打出來 進程之間通信的方式 管道 消息隊列 信號 信號量 共用存儲區 套接字(socket) 進程間通信(三)—信號量傳送門:http://www.cnblogs.com/lenomirei/ ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...