1. 程式人生 > >lfs學習筆記(二)構建第一遍工具鏈

lfs學習筆記(二)構建第一遍工具鏈

lfs學習筆記(一)的地址:https://www.cnblogs.com/renren-study-notes/p/10199344.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(官網英文版)

第5.4章開始構建第一個包

第五章中構建的所有包不建議進行測試。

軟體構建過程:
以下以 binutils包為例,其後的軟體包構建過程大同小異,出現不同的選項會在後面補充,不完全貼出書中內容。
這時你的命令列或終端的環境應該是:
1.變數:export LFS=/mnt/lfs
2.已經掛載你為lfs建立的所有分割槽
3.切換到lfs使用者。

根據上一章節的構建要求,首先進入到/mnt/lfs/sources/sources目錄

cd /mnt/lfs/sources/sources


解壓Binutils包:

tar -xvf binutils-2.31.1.tar.xz


進入解壓完的軟體包目錄:

cd binutils-2.31.1

執行書中的構建過程(貼出書中內容並做解釋)

mkdir -v build(建立一個目錄)
cd build(進入該目錄)
設定Binutils進行編譯
../configure --prefix=/tools \
--with-sysroot=$LFS \
--with-lib-path=/tools/lib \
--target=$LFS_TGT \
--disable-nls \
--disable-werror

make -j4(編譯包,使用-j4引數加速編譯) case $(uname -m) in x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;; esac(書中要求在x86_64機器上建立符號連結) make -j4 install(安裝包,並在make後面加上-j4引數加速安裝)

 

1.在軟體包編譯,測試,安裝過程中出現的如下命令:

make 
make check
make tests
make test
make install

在沒有要求必須使用make -j1引數的情況下,make後面都可加 -j(N) 引數 提升速度

(make   -j [N], --jobs[=N]          同時允許 N 個任務;無引數表明允許無限個任務)
軟體包編譯安裝完成後,書中會有一些相應的配置說明,完成這些操作說明。
執行完每書中每個軟體包頁最後一個命令後執行:

cd /mnt/lfs/sources(返回sources目錄)
rm -rf binutils-2.31.1(刪除解壓的軟體包目錄)

繼續構建下一個軟體包

第5.6章注意 :Linux API Headers在linux-4.18.5.tar.xz中,需要解壓並操作的包是linux-4.18.5.tar.xz軟體包。
第5.7章注意:要求使用make -j1進行操作,否則可能會失敗,警告頁內容為檢查工具鏈是否正常執行,執行完命令後仔細核對。
第5.8章注意:Libstdc ++在gcc軟體包中,解壓gcc-8.2.0包,並進入gcc目錄進行構建

第5.3章

刪除沒有用的連結及文件(可選)

1.刪除除錯符號

strip --strip-debug /tools/lib/*
/usr/bin/strip --strip-unneeded /tools/{,s}bin/*

2.刪除不需要的檔案及文件

rm -rf /tools/{,share}/{info,man,doc}
find /tools/{lib,libexec} -name \*.la -delete

 第5.36章

改變檔案所有權

1.切換為root使用者

exit
su
cd  /mnt/lfs/sources/

2.將檔案的所有許可權改為root

chown -R root:root $LFS/tools

第6.2章

建立虛擬核心檔案系統

mkdir -pv $LFS/{dev,proc,sys,run}

mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 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

第6.4章

進入chroot環境

chroot "$LFS" /tools/bin/env -i \
    HOME=/root                  \
    TERM="$TERM"                \
    PS1='(lfs chroot) \u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
    /tools/bin/bash --login +h

第6.5章

建立lfs系統的目錄結構

mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt}
mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
install -dv -m 0750 /root
install -dv -m 1777 /tmp /var/tmp
mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man}
mkdir -v  /usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -v  /usr/libexec
mkdir -pv /usr/{,local/}share/man/man{1..8}

case $(uname -m) in
 x86_64) mkdir -v /lib64 ;;
esac

mkdir -v /var/{log,mail,spool}
ln -sv /run /var/run
ln -sv /run/lock /var/lock
mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local}

第6.6章

建立基本檔案和符號

ln -sv /tools/bin/{bash,cat,dd,echo,ln,pwd,rm,stty} /bin
ln -sv /tools/bin/{env,install,perl} /usr/bin
ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
ln -sv /tools/lib/libstdc++.{a,so{,.6}} /usr/lib
for lib in blkid lzma mount uuid
do
    ln -sv /tools/lib/lib$lib.so* /usr/lib
done
ln -svf /tools/include/blkid    /usr/include
ln -svf /tools/include/libmount /usr/include
ln -svf /tools/include/uuid     /usr/include
install -vdm755 /usr/lib/pkgconfig
for pc in blkid mount uuid
do
    sed '[email protected]@[email protected]' /tools/lib/pkgconfig/${pc}.pc \
        > /usr/lib/pkgconfig/${pc}.pc
done
ln -sv bash /bin/sh
ln -sv /proc/self/mounts /etc/mtab
cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/bin/false
daemon:x:6:6:Daemon User:/dev/null:/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
EOF
cat > /etc/group << "EOF"
root:x:0:
bin:x:1:daemon
sys:x:2:
kmem:x:3:
tape:x:4:
tty:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
systemd-journal:x:23:
input:x:24:
mail:x:34:
nogroup:x:99:
users:x:999:
EOF

刪除我沒有名字的提示

exec /tools/bin/bash --login +h

建立登入日誌檔案

touch /var/log/{btmp,lastlog,faillog,wtmp}
chgrp -v utmp /var/log/lastlog
chmod -v 664  /var/log/lastlog
chmod -v 600  /var/log/btmp

lfs學習筆記(三)連結:https://www.cnblogs.com/renren-study-notes/p/10199965.html