說明:
1、本人LFS系統做了很多次,成功過,失敗過。也踩了很多雷,現將本人的經驗及教訓編寫成本教程,也是給自己留個備忘錄,以備隨時翻閱!
2、本教程的命令大多來自於LFS 10.0 手冊。
3、本教程命令經本人實際安裝,一步一步編入本教程。確保每一條命令的準確。寫本教程共做了6次LFS系統(2次LFS9.0,4次LFS10.0),前幾天所做教程(名稱:LFS 10.0 超詳細搭建過程),沒有經過測試就放到了網上,引來一些朋友轉載。後來親自測試,編譯gcc時忘記刪除目錄,導致後來的在編譯到內核的時候會出現GCC錯誤。
4、本教程適合初學者,高手大神請繞行。
5、LFS系統不象其它的系統或軟件,安裝只需數分鐘或數十分鐘,多的1、2個小時也基本可以搞定。LFS系統,是用天來計算。所以,安裝LFS系統要有耐心。同時,做一次LFS系統,也會讓你學到很多Linux方面的知識。
6、LFS系統不像其它Linux發行版,你根本就不知道它在你計算機裏安裝了什麼軟件。而LFS系統,我們是從源代碼一個一個軟件來安裝。這就等於是自己做了一個發行版的Linux系統一樣。
7、由於本人才疏學淺,教程中錯誤之處在所難勉。發現錯誤請留言告之,接到通知後,我會第一時間改正。同時,也讓用本教程的朋友少走一些彎路。
8、建議:LFS手冊,即是一本LFS安裝指導書,同時也是很好的一本Linux下軟件安裝、系統設置、配置系統文件、瞭解計算機啓動過程、軟件運行等方面非常棒的書。有時間的朋友建議讀一遍。
費話少說,進入正題!
第一章 準備主機系統
1、宿主系統的思路:網上安裝LFS系統,都是先安裝一個linux宿主系統。然後用這個系統啓動電腦,再進行LFS系統的安裝。這樣的作法,既浪費時間,也浪費硬盤空間。我的方法是採用VirtualBox虛擬機,用其它linux發行版的live-cd啓動電腦,安裝LFS必要的軟件,使宿主機滿足構建LFS系統的要求。這個宿主機及安裝的軟件只是存在於內存當中,不佔用硬盤空間。我選擇的是debian9.0.0的live-cd。下載地址:http://cdimage.debian.org/cdimage/archive/9.0.0-live/amd64/iso-hybrid/debian-live-9.0.0-amd64-xfce.iso (用迅雷或其它下載軟件下載,否則下載速度會很慢。)
2、電腦配置如圖:
3、虛擬機版本:
4、建立虛擬機:
打開VirtualBox 6.1軟件,給虛擬機取個名字,"版本(V)"選擇“Other Linux(64-bit)”,內存儘量設置的大些,這樣可又加快軟件的編譯速度。我設置的是4096M,虛擬硬盤:選擇“現在創建虛擬硬盤”,點擊“創建”,虛擬硬盤文件類型:選擇“VDI(VirtualBox 磁盤映像)”點擊“下一步”,存儲在物理硬盤上:選擇“動態分配”點擊“下一步”,文件位置和大小:“文件位置”可以自定義,“存儲空間”,這裏根據自己硬盤的空間自定義。我設置了40G的空間,以便折騰Blfs。點擊“創建”:
這樣,虛擬機就創建成功了。
5、虛擬機設置:
右鍵點擊虛擬機,選擇“設置”在彈出的對話中選擇“系統”,“啓動順序”取消“軟盤啓動”(將“軟盤啓動”前面的挑去掉),並將其移動到最後啓動,
點擊“處理器”,儘可量將處理器數量設置多些。我設置了“4”核心,點擊左側的“存儲”,選擇下載的debian 9.0.0 live-cd ,點擊左側“網絡”,將“網卡1”中的“啓用網絡連接(E)”的“連接方式(A):”設置成“橋接網卡”。
點擊下方的“Ok”按鈕。完成虛擬機的設置。
6、啓動虛擬機:
(1)選擇左側剛建的虛擬機,再點擊右側工具欄上的“啓動”按鈕,如圖:
出現如圖所示:
再次選擇一下debian 9.0.0的live-cd光盤。
(2)啓動後,會來到“Main Menu”的debian啓動菜單,直接選擇第一項“Debian GNU/Linux Live (kernel 4.9.0-3-amd64)”回車,如圖:
(3)系統啓動完成後,進入debian 9.0.0的安裝桌面,點擊左上角的“Applications”主菜單,選擇“Terminal Emulator”終端,如圖:
(4)終端窗口中輸入:
sudu su root
(象以上的命令,是直接在終端或Putty直接輸入,然後回車執行。)
切換到root用戶。
更改root密碼,輸入:
passwd
回車後,輸入兩次一樣的密碼。這樣,root密碼設置完成。如圖:
(5)將終端窗口最小化,點擊最下方“工具框”中的瀏覽器的圖標(那個象地球的圖標)如圖:
在瀏覽器中打開百度,搜索“debian yuan”,找到“網易debian源”點擊進入,如圖:
選擇網易提供的debian源的地址,點擊右鍵,選擇“Copy”,複製下來,如圖:
點擊剛纔最小化的終端窗口,輸入:
nano /etc/apt/sources.list.d/base.list
(用Tab鍵自動補全功能,方便快捷。)
打開源文件,如圖:
將裏面原來的源地址註釋掉,把網易的源地址粘貼到這裏。直接右鍵“Paste”粘貼,如圖:
將粘貼源地址前面的空格去掉,如下圖:
按Ctrl+o回車保存,再按Ctrl+x退出。
以root用戶運行:
apt-get update
(6)更新完軟件源後,安裝net-tools和openssh-server兩個軟件。
apt-get install net-tools
apt-get install openssh-server
apt-get install openssh-server命令輸入完後,系統需要確認,在鍵盤上輸入“y”鍵回車,電腦纔會安裝。
openssh-server安裝完成後,需要對其進行配置。輸入:
nano /etc/ssh/sshd_config
打開sshd_config文件,修改裏的PermitRootLogin prohibit-password這條語句,將前面的#號去掉,並且把後面的prohibit-password去掉,換成yes。
如圖:
將PasswordAuthentication yes前面的#號去掉,如圖:
改完後,保存退出。
啓動ssh,輸入:
/etc/init.d/ssh start
輸入:
ifconfig
如圖:
這裏需要記住網卡名、ip地址:
我的網卡名:enp0s3 (0是數字“零”,不是字母“O”),IP地址:192.168.3.27
兩個“exit”退出終端窗口,關閉瀏覽器,將虛擬機最小化。至此,虛擬機配置全部完成。
7、Putty登錄虛擬機:
打開Putty軟件,輸入IP地址:192.168.3.27,名字自己定義一個,想調整字體和字號的,在“Fonts”裏,自己設置,弄好後保存一下,雙擊Putty終端的名字,打開Putty終端,輸入用戶名:root 密碼:剛纔在虛擬機裏設置的root密碼回車,就可以登錄了。
8、安裝live-cd缺少的軟件:
創建version-check.sh腳本文件,來檢查宿主機中的軟件是否符合LFS系統的要求:
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
MYSH=$(readlink -f /bin/sh)
echo "/bin/sh -> $MYSH"
echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"
unset MYSH
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 awk 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`
python3 --version
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1 # texinfo version
xz --version | head -n1
echo 'int 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
運行version-check.sh腳本文件,輸入:
bash version-check.sh
如圖:
可以看出裏面有很多缺少很多軟件或鏈接沒有創建。下面安裝軟件及創建鏈接。輸入:
ln -sf bash /bin/sh //修改bash指向/bin/sh
apt-get install bison //安裝bison
apt-get install g++ //安裝g++
apt-get install texinfo //安裝texinfo
apt-get install gawk //安裝gawk
再次執行version-check.sh腳本,將輸出的軟件版本與下圖(手冊中提供)中的軟件版本進行比較。注意:軟件的版本不要比手冊中提供的軟件版本太低,或者太高。如下圖:
以下是我機器上的截圖:
上面兩幅圖對比可以看出,軟件基本都滿足要求。
9、硬盤分區:
(1)虛擬機只有一塊硬盤sda,這裏創建兩個分區,sda1爲交換分區,sda2爲主分區。創建新分區,輸入:
cfdisk /dev/sda
進入分區軟件,如圖:
此處選擇,dos分區,回車,如圖 :
按鍵盤上的“n”鍵,建立交換分區,空間更改爲:2048M,設置爲主分區,回到主界面,按鍵盤上的“t”鍵,分區設置爲交換分區(Linux swap / Solaris)。設置好後,如下圖:
按向下光標,移動到未劃分的空間,按鍵盤上的“n”鍵,剩餘空間全部分配給主分區,直接回車,設置成主分區,回到主界面,按鍵盤上的“b”鍵,將主分區設置爲啓動分區。設置好後如下圖:
注意:/dev/sda2 分區後面的“*”號,這代表,它是啓動分區。
向右移動光標到“write”回車,鍵盤輸入“yes”回車,保存分區。然後,按鍵盤上的“q”鍵退出分區軟件。
(2)格式化分區:
mkfs -v -t ext4 /dev/sda2
mkswap /dev/sda1
10、設置$ LFS變量,輸入:
export LFS=/mnt/lfs
11、掛載新分區,輸入:
mkdir -pv $LFS
mount -v -t ext4 /dev/sda2 $LFS
/sbin/swapon -v /dev/sda1
12、創建源代碼目錄、並賦予權限、進入目錄:
mkdir -v $LFS/sources
chmod -v a+wt $LFS/sources
cd $LFS/sources/
13、下載源代碼:
我選擇的是科大的鏡像網站,下載地址:http://mirrors.ustc.edu.cn/lfs/lfs-packages/10.0/ 先下載wget-list文件。然後,打開這個文件,將裏面文件名前方的網站改成:http://mirrors.ustc.edu.cn/lfs/lfs-packages/10.0/ 如圖:
然後,按“Ctrl+a”全選,複製。再Putty終端窗口中輸入:
nano wget-list
在Putty窗口中新建的wget-list文件裏,點擊鼠標“中鍵”,剛纔所選的鏈接就全部被粘貼到了這裏。如圖:
按鍵盤上的“Ctrl+o”回車保存,然後再換“ctrl+x”退出。Putty窗口中輸入:
wget --input-file=wget-list --continue --directory-prefix=$LFS/sources
14、校驗下載軟件包是否正確,輸入:
pushd $LFS/sources
md5sum -c md5sums
popd
15、創建所需的目錄,輸入:
mkdir -pv $LFS/{bin,etc,lib,sbin,usr,var}
case $(uname -m) in
x86_64) mkdir -pv $LFS/lib64 ;;
esac
mkdir -pv $LFS/tools
16、添加LFS用戶
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
給lfs用戶設置密碼:
passwd lfs
授予lfs用戶對所有目錄的完全訪問權限:
chown -v lfs $LFS/{usr,lib,var,etc,bin,sbin,tools}
case $(uname -m) in
x86_64) chown -v lfs $LFS/lib64 ;;
esac
chown -v lfs $LFS/sources
切換到lfs用戶:
su - lfs
17、設置環境
創建.bash_profile文件:
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
創建.bashrc文件:
cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/usr/bin
if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
PATH=$LFS/tools/bin:$PATH
export LFS LC_ALL LFS_TGT PATH
EOF
啓用剛纔創建的用戶配置:
source ~/.bash_profile
至此,主機系統已經準備就緒。下一章開始構建臨時系統。