lfs構建流程(1) --- 9.0版本


LFS學習筆記第一篇:准備篇

lfs 9.0版本文檔 https://lctt.github.io/LFS-BOOK
linux from scratch 官網: http://www.linuxfromscratch.org/
lfs 資源包下載地址 http://mirror.jaleco.com/lfs/pub/lfs/lfs-packages/lfs-packages-9.0.tar
查看自己的機有幾個內核 more /proc/cpuinfo |grep "physical id"|wc -l器
cpu :8核 版本 CentOS Linux release 7.7.1908 (Core)
宿主機系統分區:

lfs分區: /dev/sdd1 20GB 無swap分區

檢查宿主機器中的軟件

https://lctt.github.io/LFS-BOOK/lfs-systemd/chapter02/hostreqs.html
上面的鏈接列出一些需要的內容 比如 7.6系統下make默認為3.6版本,而他要求的是4.0版本
https://blog.csdn.net/whatday/article/details/102473679 升級方式
其實和我們后面的工作一樣,編譯安裝

編譯最小系統主要地點是在宿主機器上完成,編譯的過程中需要用到宿主機器上的一些軟件
為了防止破壞宿主機器上原有的內容需要做到環境隔離,這里隔離使用chroot

檢查軟件環境

mkdir lfs_make
cd lfs_make

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

sh version-check.sh

如果出現了一些錯誤,則需要安裝對應的軟件,這是必須的
其中makeinfo == yum install texinfo
g++ == yum install gcc-c++
gcc == yum install gcc
version-check.sh: not found == yum install bzip2 也不知道為什么沒有顯示出軟件包的名字
yacc not found == ln -s /usr/bin/bison /usr/bin/yacc 網上是說下載byacc 但是這里軟連接過來也沒問題

系統隔離

分區

fdisk /dev/sdc
n --> p --> 1 --> Enter --> +20G --> w --> p


   設備 Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    41945087    20971520   83  Linux

分區可啟動

fdisk /dev/sdc
a --> 1 --> w

制作文件系統
mkfs -v ext4 /dev/sdc1

掛載分區
mkdir /opt/lfs
mount /dev/sdc /opt/lfs

准備編譯環境

下載安裝包

在文檔中 會用$LFS來表明一個路徑,但我覺得不好用。。

export LFS=/opt/lfs  # 聲明變量 如果需要重啟不變,可以在.brashrc中設置
mkdir -v $LFS/sources # 創建資源文件夾 主要用來存放安裝包和補丁
chmod -v a+wt $LFS/sources # 更改權限  -->
wget https://linux.cn/lfs/LFS-BOOK-7.7-systemd/wget-list  # 獲取包列表,這里是國外的
# 國內的建議使用 https://github.com/LCTT/LFS-BOOK-7.7-systemd/edit/master/wget-list-LFS7.7-systemd-USTC
wget --input-file=wget-list --continue --directory-prefix=$LFS/sources
# 根據安裝包列表 下載到資源文件夾 並使用斷點傳序的方式下載,即中途斷開可以繼續下載

創建tool目錄

這個目錄主要是用來存放整個lfs的環境,即到時候我們會進入資源文件夾進行壓縮和編譯,將編譯出來的內容放到/opt/lfs/tools下面。想要了解整個過程,可以在每次編譯完一個包后查看tools中的變化

mkdir -v /opt/lfs/tools
ln -sv /opt/lfs/tools / # 將tools映射到根目錄下面 這里需要注意的是 擴展鏈接。只要不刪除/opt/lfs下面的/tools文件夾 就沒事了 

用戶環境

為了不污染宿主系統的內容,我們會創建一個用戶來作為操作者,在安裝之前所有的編譯工作都教給這個操作者即lfs

groupadd lfs #添加用戶組
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs 
123
chown -v lfs.lfs $LFS/tools   # 更改文件權限
# changed ownership of "/tools" from root:root to lfs:lfs   
chown -v lfs.lfs $LFS/sources # 更改文件權限
# changed ownership of "/sources" from root:root to lfs:lfs
su - lfs # 切換lfs用戶並跳到指定給lfs的家目錄 

# 設置.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=/opt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
export MAKEFLAGS='-j 4'        #四核機器,設置編譯時使用4個cpu,加快編譯速度
EOF

# 如果你不清楚你的機器是幾核的
more /proc/cpuinfo |grep "physical id"|wc -l


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM