compile Linux from scratch

预热

LFS是什么?

全称Linux From Scratch, 本身并不是一个linux发行版,LFS相当于是一个厨师长,告诉你用什么材料按照什么样的步骤,可以编译出一个完整的linux系统。与之相关的还有ALFS( Automated Linux From Scratch)、BLFS(Beyond Linux From Scratch)、CLFS(Cross Linux from Scratch)、HLFS(Hardened Linux From Scratch),但本文并不涉及。

跟同样是source based的gentoo、arch有何不同?

source based的优点是可以根据机器的架构和使用需求最优的控制和编译整个系统和软件,劣势显然就是需要大量的时间和能力。
1. LFS只以文档的形式存在,而gentoo和arch是真正的发行版。
2. LFS由于不是发行版,所有不提供在线软件仓库,所有软件的安装和升级都必须手动获取源码,自行解决依赖。gentoo有自己的配置工具、软件包管理和源码仓库,软件从源码的更新和安装,自动解决依赖,可定制性很强。arch提供二进制仓库,同样也支持源码编译,包管理器(pacman)效率极高,原因之一是其需要处理的依赖关系远没有Gentoo复杂。
3. 系统安装难度 arch < gentoo <= LFS。
4. Arch Linux和Gentoo Linux都是滚动升级的发行版,所以在上游软件发布很短时间后,其上就会有软件包可用,LFS请参考2。


开始安装前

笔者安装LFS是在2016年8月9号(之后查到很多的LFS的文档都是在8月9号当天又发布或者更新的),选择的是最新版本7.9-systemd,image,当时并没有看到有正式版,所以下载的是rc1版本。

话外音,RC是什么?
- RC:(Release Candidate)用在软件上就是候选版本。系统平台上就是发行候选版本。RC版不会再加入新的功能了,主要着重于除错。
- GA:(general availability),正式发布的版本。
- Alpha: 内测版。
- Beta:公测版。
- Gamma: 相当于RC。
- Build:主要用于区分不同时期的版本,说明这个版本是第几次编译的结果。

笔者强烈建议

在等待下载过程中,建议花一个小时把对应版本的官方文档大体的看一遍,这一步很重要,要知道LFS大体的编译工作流程,文档的结构思路,防止之后编译复制粘贴一脸懵逼。之后再花一个小时在各大网站博客上浏览前人的制作经历,多在几个巨人的肩膀上看看。笔者能够一次性愉快的编译好LFS,这两步很重要,在just conding 之前,一定要 learn from others, make your mind clear.

话外音:关于宿主机发行版的选择
1. 笔者用 ubuntu14.04 LTS 编译lfs-7.9-systemd-rc1,很成功的编译。
2. 很多网友用centos6.5,arch成功的。
3. 同期一起编译的小伙伴先后采用centos6.8和centos7都没有很顺利的编译成功(不排除其他可能原因)。
4. 笔者的意见:选择常见的、有社区支持的、你自己熟悉的就可以,理由后面说,如果没有熟悉的或者对自己没信心,可以跟着我选,哈哈~。~·

如果你已经看完了,那就可以开始正式跟着文档一步一做了:
0. 介绍LFS。
1. 编译前准备,磁盘与用户。
2. temp系统的构建。
3. 开始编译LFS。
4. linux内核定制和grub启动
5. enjoy。

PS:第四步很坑啊,感觉LFS就负责把你带到这里,然后它认为你可以按照你的需求开始定制内核模块,也没有留一个链接告诉每个内核模块的参数的意义,-_-||,笔者编译好内核总是缺这个模块缺哪个模块,先后编译10+次linux内核,中间也没有找到官文关于这块的描述,最后还是靠强大的中国网友的文档,谢过~可以猛戳这里

(0) 重要的话说三遍:第一章introduction千万不要跳过^3,这一章讲了LFS包含的软件包和对应作用,以及编译所需要使用到的软件和版本,这也是我为什么说不要过于纠结发行版的原因。make sure你系统上软件的版本与LFS文档的要求的尽量一致,version-check,比如LFS推荐gcc4.7,但你的是5.3,要么换一个版本,要么查看官文是否向下兼容。很多人直接跳过这一步或者嫌麻烦根本没去了,运气好的话还行,不好就GG了。反正笔者认真做了,那你呢?

(1) 磁盘分区建议10G+,小白不要把boot单独分区(因为文档默认就是没分boot分区,你自己分的或有些地方需要改下参数)。

(2) 第二步构建temp系统,这一步是最关键的,交叉工具链编译好才能编译出与宿主系统无关的LFS系统(这些工具链包含了:compiler(就是我们常用的gcc,g++),assembler(就是把汇编程序变成a.obj文件的工具),linker(就是把很多*.obj文件和库文件链接成可运行文件a.out的工具),还有各类库文件(为后面编译其它的软件提供基础设施),Gcc,Binutils等将会编译至少三次,要注意每次编译的目录,相对目录。如果你在中间不小心断电关机或者重启(最好不要),下次进入请确保环境(交叉工具链的编译全都要用lfs这个用户):

# login as root
export LFS=/mnt/lfs
mount -v -t ext4 /dev/sdb1 $LFS ## mount your device 
su - lfs

(3) 到这里正式开始构建LFS系统,该打的patch在这一步一定要打上。这一步全程都要用root用户进行,所有的patch补丁包一定都要打上,不幸退出请确保环境:

# login as root
LFS=/mnt/lfs
mount /dev/sdb1 /$LFS
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
chroot "$LFS" /usr/bin/env -i \
HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin \
/bin/bash --login
rm -rf /tmp/*
LANG=en_US.UTF-8

(4) 关于内核的config配置,并没有什么好的方法,主要还是考虑你机器本身的硬件情况,关于配置信息,笔者编译了10多次,祝好~。~可以猛戳这里

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值