[Share Experiences] LFS:从源代码构建Linux发行版(元发行版)
Tofloor
poster avatar
流浪的加菲
deepin
2024-08-08 17:39
Author

Linux发行版除了比较知名的deb系(Debian和Ubuntu)和rpm(CentOS和Fedora)系,还有两种“元发行版”(又称为“源代码发行版”):LFS(Linux From Scratch)和Gentoo。

  • 一切开源软件包的最原始发行方式都是源代码软件包,就是tarball(.tar.Z,.tar.gz,.tar.bz2,.tar.xz)。
  • 一切Linux发行版(包括发行版和元发行版)的安装包都是tarball转换(编译打包)过来的。
  • 一切tarball都包括源代码文件和构建脚本文件,加上文档(许可协议、开发者名字列表、README等)。

这里可以扩展下:LFS没有包管理器或者说使用LFS的人本身就是LSF的包管理器,Gentoo是基于源代码在本地设备上直接编译安装软件包。

现代Linux(继承了Unix的传统),还是以C语言为基础。内核是C语言的,标准库是C语言(C语言和C++语言)的,也因此,一个Linux发行版操作系统,只能有一个C语言标准库(也只能有一个C++语言标准库)。

换句话说,因为Linux内核仍然是C语言的,标准库仍然是C语言和C++语言的。一个Linux发行版系统,不论有多少种包管理器,这些包管理器都只能给这一个系统,安装一个C语言标准库(也只能安装一个C++语言标准库)。

Linux 标准库通常指的是 GNU C Library (glibc),它是 Linux 操作系统中的核心组件,为系统中的所有程序提供基础功能。

可以对Linux标准库进行三元组(Tuple)拆分理解:Host、Build、Target,即Host的glibc(和libstdc++)、Build的glibc(和libstdc++)、Target的glibc(和libstdc++)。

image.png

再说到LFS,从源代码构建Linux发行版

  • 第一步,就是更新“gcc 第一遍”和“binutils 第一遍”,此时这“gcc 第一遍”和“bintuils 第一遍”他们两个的基础,就是Host的标准库。
  • 第二步,构建glibc(libstdc++)和“gcc 第二遍”以及“binutils 第二遍”,此时这“gcc 第二遍”和“binutils 第二遍”他们的基础,就是构建这一步先构建出来的glibc(libstdc++),这个glibc(libstdc++)就是Build的glibc(libstdc++)。
  • 最后,chroot和构建整个基本系统软件 ,构建glibc(libstdc++)和新系统的gcc及binutils,和所有其他的基础软件。这个glibc(libstdc++)就是Target的glibc(libstdc++)。

学习开源,要学习源代码,要学习构建脚本;学习Linux发行版,要学习元发行版,要学习到LFS和Gentoo。

如果不是想深入研究Linux发行版的同学,还是直接使用Debian、Ubuntu、deepin等社区编译好的发行版比较方便,毕竟自己在本地编译,不仅需要一定的技术实力,还要耗费大量的时间和计算资源。


这其实是一篇水贴,只是为了扩展大家对Linux系统的知识范围,让大家知道还有“源代码发行版”这种发行版存在applaud

另外之前转过一篇新闻,现在回头看还是觉得很炸裂,值得再拎出来给大家看看:使用Scratch 手搓 RISC-V 模拟器,成功运行 Linux 内核!

Reply Favorite View the author
All Replies

No replies yet