1. 程式人生 > >lfs學習筆記(一)前期準備工作

lfs學習筆記(一)前期準備工作

一名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(官網英文版)

筆記正文:

2.2章節以前的內容,仔細閱讀即可

第2.2章節 主機系統要求

具體操作:
將書中提供的命令複製到終端(命令列)執行測試並把得出結果與2.2章節所提供的軟體版本進行核對。

所遇到過的問題與解決方案:

1.使用fedora29構建過程中遇到過的問題:
未檢測到/usr/bin/yacc是bison或執行bison的小指令碼的連結
解決辦法:

#ln -s /usr/bin/bison /usr/bin/yacc   (建立連結)

類似問題解決思路:檢查缺失連結的軟體包是否安裝,如果都已經安裝,則手動建立軟連結:

第2.3章節(重要
如果不能做到在不關機的情況下一次性構建完lfs,請仔細閱讀本節內容

具體操作:
第1-4章(最好一次性完成,這一章內容很少):
每次重新啟動過後執行以下命令建立環境變數:

第5章
1.設定變數

2.掛載為lfs建立的所有分割槽

3.切換到lfs使用者,進行下一步的操作。
4.提示對軟體包編譯過程中出現解決不了的操作失誤,首先刪除所解壓的軟體包目錄,重新解壓軟體包,切入目錄,按該軟體包書籍頁操作說明重新進行編譯。
第6-8章

1.進入root使用者
2.設定變數:
3.掛載你為lfs建立的所有分割槽
4.逐步完成6.2.2與6.2.3章節內容後

5.chroot進入lfs分割槽繼續操作。

第2.4章
為lfs建立新的分割槽,列出我的分割槽方案

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.8G 0 disk 
├─sda9 8:9 0 100M 0 part /mnt/lfs/boot
├─sda10 8:10 0 50G 0 part /mnt/lfs
├─sda11 8:11 0 40G 0 part /mnt/lfs/home
└─sda12 8:12 0 1G 0 part [SWAP]

 

1.分割槽使用的命令 cfdisk或fdisk
2.boot建議單獨分割槽。建議分100M。
3./分割槽必須建立,根據機器情況自行分配大小(官方建議最小分20G)。
4.home建議單獨分割槽,大小按需分配即可。
5.swap可以與主機系統用同一個swap分割槽,也可以單獨分割槽。

第2.5章
建立檔案系統(只介紹常用的ext4格式型別)
除了swap分割槽以外的分割槽,使用如下命令格式化:

#mkfs -v -t ext4 /dev/<xxx>(替換<xxx>和<yyy>為分割槽的名稱)

swap分割槽如果是新分割槽則使用如下命令格式化:

#mkswap /dev/<yyy>(替換<xxx>和<yyy>為分割槽的名稱)

 

第2.6章
設定lfs變數,執行的命令及作用:

export LFS=/mnt/lfs(使用$LFS代替輸入/mnt/lfs目錄,每次關閉機器或終端都需要重新設定)

 

echo $LFS(輸出$LFS變數的內容,確保輸出為:/mnt/lfs)

書中本章下文內容介紹如何設定開機執行變數,不建議此項設定。
變數設定在每次重啟機器或者重啟終端時都需要重新設定,詳細參考2.3章節的筆記

第2.7章
掛載新分割槽
執行命令及作用:

#mkdir -pv $LFS(在當前系統的根目錄下建立一個/mnt/lfs的目錄)
#mount -v -t ext4 /dev/<yyy> $LFS(替換<yyy>為根分割槽位置,將根分割槽掛載到/mnt/lfs目錄)
#mkdir -v $LFS/boot(在/mnt/lfs目錄下建立boot目錄)
#mount -v -t ext4 /dev/<yyy> $LFS/boot(<yyy>替換為boot分割槽位置,將boot目錄掛載到/mnt/lfs/boot目錄)
#mkdir -v $LFS/home(在/mnt/lfs目錄下建立home目錄)
#mount -v -t ext4 /dev/<yyy> $LFS/home(<yyy>替換為home分割槽位置,將boot目錄掛載到/mnt/lfs/home目錄)
#/sbin/swapon -v /dev/<zzz>(替換<zzz>為分配的swap分割槽位置,啟用swap分割槽)
lsblk(檢視分割槽表是否正確)

書中本章中的警告內容為如何設定開機自動掛載lfs的分割槽(不建議)

第3.1章
下載軟體包並驗證md5
首先建立放置軟體包的目錄,並給相應許可權:

#mkdir -v $LFS/sources(在/mnt/lfs下建立sources目錄)
#chmod -v a+wt $LFS/sources(給sources目錄許可權)

下載軟體包的幾個問題:
1.書中建議使用wget下載,我的實際操作是用uget下載到當前系統後,移動到/mnt/lfs/source目錄。
2.書中所給的連結檔案wget-list有一部分連結出現下載失敗或網速慢的情況,
這裡需要到前文中的《檔案映象網站彙總》中自行尋找相應的包進行下載,
下面貼出替換過相應失效連結的wget-list檔案內容。

 1 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/acl-2.2.53.tar.gz
 2 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/attr-2.4.48.tar.gz
 3 http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.xz
 4 http://ftp.gnu.org/gnu/automake/automake-1.16.1.tar.xz
 5 http://ftp.gnu.org/gnu/bash/bash-4.4.18.tar.gz
 6 http://ftp.gnu.org/gnu/bc/bc-1.07.1.tar.gz
 7 http://ftp.gnu.org/gnu/binutils/binutils-2.31.1.tar.xz
 8 http://ftp.gnu.org/gnu/bison/bison-3.0.5.tar.xz
 9 http://anduin.linuxfromscratch.org/LFS/bzip2-1.0.6.tar.gz
10 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/check-0.12.0.tar.gz
11 http://ftp.gnu.org/gnu/coreutils/coreutils-8.30.tar.xz
12 https://dbus.freedesktop.org/releases/dbus/dbus-1.12.10.tar.gz
13 http://ftp.gnu.org/gnu/dejagnu/dejagnu-1.6.1.tar.gz
14 http://ftp.gnu.org/gnu/diffutils/diffutils-3.6.tar.xz
15 https://dev.gentoo.org/~blueness/eudev/eudev-3.2.5.tar.gz
16 https://downloads.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.44.3/e2fsprogs-1.44.3.tar.gz
17 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/elfutils-0.173.tar.bz2
18 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/expat-2.2.6.tar.bz2
19 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/expect5.45.4.tar.gz
20 ftp://ftp.astron.com/pub/file/file-5.34.tar.gz
21 http://ftp.gnu.org/gnu/findutils/findutils-4.6.0.tar.gz
22 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/flex-2.6.4.tar.gz
23 http://ftp.gnu.org/gnu/gawk/gawk-4.2.1.tar.xz
24 http://ftp.gnu.org/gnu/gcc/gcc-8.2.0/gcc-8.2.0.tar.xz
25 http://ftp.gnu.org/gnu/gdbm/gdbm-1.17.tar.gz
26 http://ftp.gnu.org/gnu/gettext/gettext-0.19.8.1.tar.xz
27 http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.xz
28 http://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.xz
29 http://ftp.gnu.org/gnu/gperf/gperf-3.1.tar.gz
30 http://ftp.gnu.org/gnu/grep/grep-3.1.tar.xz
31 http://ftp.gnu.org/gnu/groff/groff-1.22.3.tar.gz
32 https://ftp.gnu.org/gnu/grub/grub-2.02.tar.xz
33 http://ftp.gnu.org/gnu/gzip/gzip-1.9.tar.xz
34 http://anduin.linuxfromscratch.org/LFS/iana-etc-2.30.tar.bz2
35 http://ftp.gnu.org/gnu/inetutils/inetutils-1.9.4.tar.xz
36 https://launchpad.net/intltool/trunk/0.51.0/+download/intltool-0.51.0.tar.gz
37 https://www.kernel.org/pub/linux/utils/net/iproute2/iproute2-4.18.0.tar.xz
38 https://www.kernel.org/pub/linux/utils/kbd/kbd-2.0.4.tar.xz
39 https://www.kernel.org/pub/linux/utils/kernel/kmod/kmod-25.tar.xz
40 http://www.greenwoodsoftware.com/less/less-530.tar.gz
41 http://www.linuxfromscratch.org/lfs/downloads/8.3/lfs-bootscripts-20180820.tar.bz2
42 https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.25.tar.xz
43 ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz
44 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/libpipeline-1.5.0.tar.gz
45 http://ftp.gnu.org/gnu/libtool/libtool-2.4.6.tar.xz
46 https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.18.5.tar.xz
47 http://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.xz
48 http://ftp.gnu.org/gnu/make/make-4.2.1.tar.bz2
49 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/man-db-2.8.4.tar.xz
50 https://www.kernel.org/pub/linux/docs/man-pages/man-pages-4.16.tar.xz
51 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/meson-0.47.1.tar.gz
52 https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz
53 http://www.mpfr.org/mpfr-4.0.1/mpfr-4.0.1.tar.xz
54 https://github.com/ninja-build/ninja/archive/v1.8.2/ninja-1.8.2.tar.gz
55 http://ftp.gnu.org/gnu/ncurses/ncurses-6.1.tar.gz
56 https://openssl.org/source/openssl-1.1.0i.tar.gz
57 http://ftp.gnu.org/gnu/patch/patch-2.7.6.tar.xz
58 https://www.cpan.org/src/5.0/perl-5.28.0.tar.xz
59 https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
60 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/procps-ng-3.3.15.tar.xz
61 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/psmisc-23.1.tar.xz
62 https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
63 https://docs.python.org/ftp/python/doc/3.7.0/python-3.7.0-docs-html.tar.bz2
64 http://ftp.gnu.org/gnu/readline/readline-7.0.tar.gz
65 http://ftp.gnu.org/gnu/sed/sed-4.5.tar.xz
66 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/shadow-4.6.tar.xz
67 http://www.infodrom.org/projects/sysklogd/download/sysklogd-1.5.1.tar.gz
68 https://github.com/systemd/systemd/archive/v239/systemd-239.tar.gz
69 http://anduin.linuxfromscratch.org/LFS/systemd-man-pages-239.tar.xz
70 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/sysvinit-2.90.tar.xz
71 http://ftp.gnu.org/gnu/tar/tar-1.30.tar.xz
72 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/tcl8.6.8-src.tar.gz
73 http://ftp.gnu.org/gnu/texinfo/texinfo-6.5.tar.xz
74 https://www.iana.org/time-zones/repository/releases/tzdata2018e.tar.gz
75 http://anduin.linuxfromscratch.org/LFS/udev-lfs-20171102.tar.bz2
76 https://www.kernel.org/pub/linux/utils/util-linux/v2.32/util-linux-2.32.1.tar.xz
77 ftp://ftp.vim.org/pub/vim/unix/vim-8.1.tar.bz2
78 https://cpan.metacpan.org/authors/id/T/TO/TODDR/XML-Parser-2.44.tar.gz
79 http://ftp.lfs-matrix.net/pub/lfs/lfs-packages/8.3/xz-5.2.4.tar.xz
80 https://zlib.net/zlib-1.2.11.tar.xz
81 http://www.linuxfromscratch.org/patches/lfs/8.3/bzip2-1.0.6-install_docs-1.patch
82 http://www.linuxfromscratch.org/patches/lfs/8.3/coreutils-8.30-i18n-1.patch
83 http://www.linuxfromscratch.org/patches/lfs/8.3/glibc-2.28-fhs-1.patch
84 http://www.linuxfromscratch.org/patches/lfs/8.3/kbd-2.0.4-backspace-1.patch
85 http://www.linuxfromscratch.org/patches/lfs/8.3/ninja-1.8.2-add_NINJAJOBS_var-1.patch
86 http://www.linuxfromscratch.org/patches/lfs/8.3/sysvinit-2.90-consolidated-1.patch
87 http://www.linuxfromscratch.org/patches/lfs/8.3/systemd-239-glibc_statx_fix-1.patch

3.下載的包總計87個,軟體包80個,補丁7個。
書中的下載命令及作用:

1.#wget --input-file=wget-list --continue --directory-prefix=$LFS/sources(使用目錄檔案wget-list的連結,下載軟體包到/mnt/lfs/source目錄)。
2.補充一個內容:要將書中提供的md5sums檔案下載並且複製到/mnt/lfs/source資料夾下。
3.pushd $LFS/sources(切換到/mnt/lfs/source目錄)
4.md5sum -c md5sums(校驗md5)
5.popd(退出目錄)

 

第4.2章
建立構建第一遍工具鏈的安裝目錄並連結到主機系統

#mkdir -v $LFS/tools
#ln -sv $LFS/tools /

 

第4.3章
在主機中建立lfs使用者(第五章完成後可將建立的使用者和使用者組刪除)
使用的命令及作用

#groupadd lfs(建立lfs工作組)
#useradd -s /bin/bash -g lfs -m -k /dev/null lfs(建立lfs使用者)
#passwd lfs(給lfs使用者設定密碼)
#chown -v lfs $LFS/tools(給lfs使用者許可權)
#chown -v lfs $LFS/sources(給lfs使用者許可權)
#su - lfs(切換到lfs使用者)

 

第4.4章
為lfs使用者建立變數
使用的命令及作用(具體說明見書籍註釋):

1.cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF(將EOF中的內容 寫入檔案~/.bash_profile)

2.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(將EOF中的內容寫入檔案 ~/.bashrc)

3.source ~/.bash_profile(獲取建立的使用者配置檔案)

 

第4.5章(重要
1.這章的大概意思就是告訴你書籍中的sbu值代表構建軟體包所用的時間
2.書籍注意欄目裡面的內容是說明編譯過程中怎麼使用cpu多執行緒處理編譯過程,提升編譯速度。
3.使用的過程,make後面加上 -j4 引數
5.注意:有一些包的安裝和測試過程要求使用 make -j1執行,書中相應章節有相應的提示
6.不建議按照書中的說明建立環境變數。

第4.6章節
關於測試套件的說明
1.第五章的軟體包不建議執行測試套件,浪費時間,第五章構建的工具鏈是是臨時的並且最終被丟棄的。
2.第五章以後一些重要的軟體包(書中會提示那些是重要的軟體包)要求必須測試,並且不能出現報錯,時間很慢,請耐心等待。
3.有一部分不是很重要的軟體包的報錯可能是環境配置問題,請對應檢查2.3章節的內容。

第5.3章(重要
軟體包的編譯操作流程
具體流程如下:
1.進入sources目錄
2.解壓相應的軟體包
3.進入解壓完的軟體包目錄
4.按照書中說明構建軟體包
5.切換回sources目錄
6.除非構建說明頁有說明,否則刪除提取的軟體包目錄。

lfs學習筆記(二)的地址:https://www.cnblogs.com/renren-study-notes/p/10199381.html