Linux From Scratch(從零開始構建Linux系統,簡稱LFS)- Version 7.7,scratchlfs
一. 準備工作
1. 需要一個Linux宿主系統,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架構上可以啟動並執行其它發行版
二. 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 toolsexport LC_ALL=Cbash --version | head -n1 | cut -d" " -f2-4echo "/bin/sh -> `readlink -f /bin/sh`"echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-bison --version | head -n1if [ -h /usr/bin/yacc ]; thenecho "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";elif [ -x /usr/bin/yacc ]; thenecho yacc is `/usr/bin/yacc --version | head -n1`elseecho "yacc not found"fibzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2diff --version | head -n1find --version | head -n1gawk --version | head -n1if [ -h /usr/bin/awk ]; thenecho "/usr/bin/awk -> `readlink -f /usr/bin/awk`";elif [ -x /usr/bin/awk ]; thenecho yacc is `/usr/bin/awk --version | head -n1`elseecho "awk not found"figcc --version | head -n1g++ --version | head -n1ldd --version | head -n1 | cut -d" " -f2- # glibc versiongrep --version | head -n1gzip --version | head -n1cat /proc/versionm4 --version | head -n1make --version | head -n1patch --version | head -n1echo Perl `perl -V:version`sed --version | head -n1tar --version | head -n1makeinfo --version | head -n1xz --version | head -n1echo 'main(){}' > dummy.c && g++ -o dummy dummy.cif [ -x dummy ]then echo "g++ compilation OK";else echo "g++ compilation failed"; firm -f dummy.c dummyEOFbash version-check.shView Code
同時,還請進行庫檔案的一致性檢查,這些檔案應該要麼都在或者是都缺失,而不應該只有一兩個。
cat > library-check.sh << "EOF"#!/bin/bashfor lib in lib{gmp,mpfr,mpc}.la; doecho $lib: $(if find /usr/lib* -name $lib|grep -q $lib;then :;else echo not;fi) founddoneunset libEOFbash library-check.shView Code