久仰 Linux From Sratch 大名, 最近有空来尝试一下.
Linux From Scratch (LFS) is a project that provides you with step-by-step instructions for building your own custom Linux system, entirely from source code.
官网介绍给出了几个使用 LFS 的理由, 我主要还是想通过构建一个 Linux distro 对 Linux 的各个部分了解的更深入些.
速览
我本次安装的是 13.0 版本的 Linux From Scratch. 这本书渲染成 PDF 有 300 多页, 看着有些吓人, 但编译的指令占了很多篇幅. 我实操总共历时 2 周, 但只投入了一些零碎的时间, 没有仔细统计, 实际花费的时间应该在 10 小时以内.
使用的是环境是 Ubuntu 24.04 的 PVE 虚拟机, 额外加了一块 30G 虚拟硬盘用于安装 LFS, 照抄绝大部分指令就成功了.
开始我觉得做一个 Linux 系统也就是编译一些基本软件, 拼出 rootfs, 再搞个 kernel 和 GRUB 就搞定了. 这个想法可以说是对的, 但不完全对, LFS 构建流程大概有这么几步:
- [第 2 章] LFS 磁盘分区创建和挂载
- [第 3/4 章] 下载所有所需软件的代码, 配一些 host 上的环境
- [第 5 章] 在 host 构建一个临时的 cross compiler gcc (用于保证新构建的软件不依赖到 host 的 lib)
- [第 6/7 章] 用上述临时 gcc 编译一个最小的可在目前啥也没有的 LFS 运行的 gcc, 以构建系统必须的工具 (e.g. bash/make/sed/tar 等)
- [第 8 章] chroot 到这个只有临时工具的 LFS, 用第二个 gcc 重新编译一次所有软件包, 同时运行测试和安装
- [第 9 章] 配置 timezone / locale / shell 等基础配置
- [第 10 章] 编译并安装 kernel / GRUB, 配置 fstab
- [第 11 章] 重启到 LFS, 安装完成
其中占了我一大半时间的其实还是各种编译, 手动编译 100 来次各种包还是需要不少时间的. 最怀念包管理器的一集.
整个系统安装完成后, 我第一次遇到了启动黑屏的问题, 不过按照 LFS troubleshooting 的文档, 加了几个 kernel 选项很快就解决了. 由于 LFS 运行在 QEMU 虚拟机里, 没有遇到很奇怪的硬件兼容性问题, 还是挺顺利的.
成功启动
LFS 还有一系列 DLC - BLFS, ALFS, MLFS 等. 如果你真的希望将 LFS 日常使用, 你大概率需要参考一下. 不过我就不继续坐牢手动编译了, 我宁可用 Gentoo.
一些冷知识
仅记录我之前孤陋寡闻而不知道的事, 以及觉得比较新奇的 part
- 除了 POSIX 和 FHS 标准, 还有一个叫 Linux Standard Base 的, 为商业二进制软件兼容性准备的标准
- 关于 cross compile 复杂的爱恨情仇, 以及如何 bootstrap 一个 gcc
- 人工 cosplay 包管理器的各种小技巧
- Linux dev 管理的历史故事
- Iana Etc 这个包只会安装
/etc/protocols/etc/services这两个文本文件, 而 tcpdump/nmap 等工具正是使用后者将端口号映射为其名称 (尽管大家经常随便选端口号, 导致映射不够准确) - perl/bc 都是 LSB 要求的一部分, 除此之外, 你甚至需要 tcl 这种十分冷门的语言才能运行 expect 测试
又是一篇小短篇~ 这个月突然写了好多博客
本文采用 CC BY-NC-SA 4.0 许可协议发布.
作者: lyc8503, 文章链接: https://blog.lyc8503.net/post/linux-from-scratch/
如果本文给你带来了帮助或让你觉得有趣, 可以考虑赞助我¬_¬