一名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章节所提供的软件版本进行核对。
所遇到过的问题与解决方案:
![](/qrcode.jpg)
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