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 's@tools@usr@g' /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