Linux From Scratch 12.2 systemd 编译安装成功留念
Linux From Scratch 12.2 Systemd 留念


Linux From Scratch 12.2 Systemd 总耗时约一周完结。写下这篇以作留念。
要始终把精力放在解决问题上面,不用自怨自艾。因为不管你关注不关注问题都是那个样子 ——《毛选》
我推荐使用 Hyper-V 来做 LFS,编译速度和真机差不多。推荐使用 Arch Linux Live-CD 或者 Ubuntu Live-CD(Ubuntu 可能需要略微调整)。
编译后启动不了
我的宿主机是 Arch,使用宿主机的 GRUB 引导启动失败了。一直提示挂载根分区失败,我换成了 Arch Linux 的内核和 initramfs 也无法正常启动。我猜测应该是引导的问题,网上关于这个问题的解决办法要么是重新配置 GRUB 要么修改内核编译参数,我确保内核和 GRUB 的配置都没有问题,只有一个可能那就是UEFI 的问题。
我使用的是宿主机的启动分区,没有重新运行 grub-install,直接调整了 grub.cfg,而且之前是 UEFI 开启的,一直启动不了。
Remember: BIOS 启动的 Linux 可以只分一个/根分区。
我将 LFS 根分区备份,重新用 Virtual Box 以 Ubuntu 为宿主机用 BIOS 启动就成功引导了 LFS。
其他的一些记录
Windows 11 家庭版启用 Hyper-V 可以使用这个脚本: Hyper-V.bat。
可以把 LFS 当作是从源码编译的 Arch Linux,基本上安装过程是一致的。
整体流程:创建一个虚拟机 BIOS 引导,一个硬盘 40G 添加 Live-CD 的 DVD,然后进行 LFS 分区,方案见下文。然后开始对着 LFS 的指令一步一步操作即可。
LFS 网站阅读不是很方便。阅读 PDF 和单 HTML 会更方便一点,点 LFS 后可以在左侧点击 Download 找到想要看的版本的离线版,HTML NOCHOUNK 版就比分页的阅读方便。
LFS 的网站找东西不是很方便。首页左侧的导航窗口有个 Website Mirros,这里有一个 Website Mirros 和 Files Mirrors,下载软件包一定要从镜像站去下载,不然很慢。
在 LFS 的学习过程中,遇到了一些问题,也解决了一些问题。我曾经尝试自己打一个 DEB 包( Rust 写的网易云音乐),为什么 Rust 程序打包 DEB 的时候必须使用仓库里面的 Rust 来编译?
LFS 第八章中安装 Python 的一段介绍很好。因为 LFS 没有包管理器,直接用 root 用户使用 pip3 不会和包管理器冲突。而使用包管理器的 Linux 如果某个软件包依赖 python 库,为了这个软件包能正常安装依赖,就必须把依赖的 python 库也提供包管理器仓库的包。这里的考虑是既然 Linux 使用了包管理器就不应该使用编程语言提供的包管理器了,因为这可能会导致冲突。关于软件包的管理 LFS 中还有对各种解决方法更细节的介绍,但今天流行的发行版都采用了包管理器,而避免冲突就是使用软件仓库提供的包。所以通常开发的程序打包成 DEB 或者 RPM 就应该使用软件仓库的包来编译。
遇到的耗时最久的问题就是启动失败。就学习 Linux From Scratch 来说,采用什么样的分区方案最好呢?
LFS 编译的 GRUB 还不支持 UEFI,除非你很有信心能解决引导问题,如果只是学习的话使用 BIOS 引导就可以了(虚拟机不要启用 EFI)。推荐的分区方案:
sda
|--sda1 1M
|__sda2 40G /
没有使用 UEFI 模式就不需要 EFI 分区(ESP),那就只分一个/分区。sda1是1M的Grub BIOS分区,不需要格式化,因为我使用了GUID 分区表 (GPT),这个分区不能格式化,在安装启动引导器时必须能够被 GRUB 发现。这个分区的类型是BIOS Boot。
使用这个简单的分区方案也能直接使用 LFS 书上的 grub.cfg。如果使用 fdisk 来操作分区,/dev/sda1的开始扇区是2048,结束扇区是4096,刚好 1M。
有必要先安装一个 Linux 然后添加一个硬盘来安装 LFS 吗?
不管是学习还是真机安装,都可以直接启动一个 Ubuntu Live-CD 或者 Arch Linux 的 Live-CD。安装 LFS 应该主要是学习目的,使用虚拟机添加一个 40G 的硬盘,然后添加 Live-CD 的 DVD 就可以了。启动到 Live-CD 就可以开始进行分区,挂载对应的目录,然后下载源码开始编译。
网上说编译 glibc, gcc 要一个小时甚至几个小时有必要用真机来加速编译吗?
顺利的情况下,大概需要三天。主要是命令比较多,会不断地重复 tar xf,configure,make,make install。使用Intel i5 14400开 HyperV 二代虚拟机 4G 内存编译 gcc 可能也不超过 30 分钟,编译速度比想象中要快。想编译速度快可以直接使用 HyperV 虚拟机,第二代 HyperV 好像必须是 UEFI,所以引导启动这里不能解决 UEFI 的话,可以编译完了后按照第七章的备份和还原就能把编译好的 LFS 迁移到 VMware 或者 VirtualBox。不过备份是有一点慢的,可能需要 30 分钟甚至一个小时。
为什么推荐使用 BIOS 引导?
如果对 Linux 不是那么熟悉,引导失败可能会自己解决不了。第一次学习的话我就推荐使用 BIOS 引导,启动成功后自己可以备份 rootfs,重新建分区方案,做 UEFI 引导。可能需要参考 BLFS 自己重新生成一个 initramfs。
Linux From Scratch 12.2 systemd 编译安装成功留念的更多相关文章
- linux下Mysql 8.0.19 编译安装
1 前言 linux下安装MySQL的方式有很多种,包括以仓库的方式安装(yum,apt,zypper),以包的方式安装(rpm,deb),以docker方式安装,从压缩包解压安装,从源码编译安装,这 ...
- Linux中服务器软件为什么需要编译安装
为什么服务器软件需要编译安装?一个流传很广的说法是编译安装性能更好,其实这是个谣言. 服务器CPU事实已经被Intel垄断了,就那么几种型号,编来编去生成的机器码是一样的.Intel宣传自己的编译工具 ...
- Ubuntu 12.04本地编译安装Vim
1.下载Vim,参考http://www.vim.org/git.php 2.编译安装Vim,参考https://github.com/Valloric/YouCompleteMe/wiki/Buil ...
- linux C单元测试工具CUnit的编译安装及使用
1 下载CUnit安装包CUnit-2.1-3.tar.bz2保存至/home/用户/ (安装包版本为文章做成时2016-05-25的最新版本) https://sourceforge.NET/pro ...
- ubuntu 12.04下编译安装nginx-1.9.3
1,下载nginx-1.9.3.tar.gz 两种方式: (1).ubuntu 下终端中(ctrl+alt+t) 运行命令: wget http://nginx.org/download/nginx- ...
- Linux下./configure && make && make install 编译安装和卸载
正常的编译安装/卸载: 源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install). configure文件是一个可执行的脚本文件,它有很多选项, ...
- Linux MySQL单实例源码编译安装5.5.32
cmake软件 tar -zxvf cmake-2.8.8.tar.gz cd cmake-2.8.8 ./bootstrap make make install cd ../ 依赖包 yum i ...
- Linux MySQL单实例源码编译安装5.6
cmake软件 tar -zxvf cmake-2.8.11.2.tar.gz cd cmake-2.8.11.2 ./bootstrap make make install cd ../ 依赖包 ...
- ubuntu 12.04 server编译安装nginx
tar -xvf zlib-1.2.8.tar.gz cd zlib-1.2.8 ./config make make install above is for zlib(refers http:// ...
- linux服务基础(一)之CentOS6编译安装httpd2.4
安装http-2.4 Http依赖于apr-1.4+,apr-util-1.4+ CentOS6上默认是apr-1.3,apr-util1.3 先编译安装apr-1.5,apr-util-1.5 开始 ...
随机推荐
- List<Map<String, Object>> 排序
一.代码 public class Test { public static void main(String[] args) { Map<String, Object> map = ne ...
- windows的恶意代码自定义
代码执行步骤: 1,新建"文本文档" 2,输入代码 3,@echo off format C: /q/u/y 4,保存"文本文档" 文本文档.txt改为.bat ...
- MacOS环境配置Homebrew
Homebrew笔记 1. 介绍 官网:https://brew.sh/ 对于习惯了使用命令来完成一切的程序员来说,安装软件这种小事,自然是能够用命令解决,就不用图形界面选择.但是在 Linux 中, ...
- QT5笔记:27. MDI应用程序设计
MDI:Multiple Document Interface 多窗口文档界面 例子: MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H # ...
- MybatisPlus - [02] HelloWorld
参考:https://www.cnblogs.com/haoxinyue/p/5208136.html(分布式系统唯一ID生成方案汇总) 一.准备工作 (1)创建数据库: create databas ...
- Azure - [01] 订阅管理
题记部分 001 || 核心功能 (1)访问控制 Azure订阅通过基于角色的访问控制(RBAC)系统,允许管理员精细管理用户.组和应用程序对资源的访问权限.RBAC系统通过将权限分配给角色,再将 ...
- Flink运行时架构
一.运行时的组件和基本原理 1.作业管理器 (1)控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的JobManager所控制执行. (2)JobManager会先接收到要执行的应用 ...
- mysql常用函数、查询和事务说明笔记
1.MySQL中内置了很多字符串函数,常用的几个如下: 运用示例:示例表里初始数据: 字段title和titleImage concat : 字符串拼接 select concat(title,tit ...
- php批量删除记录
<?php $arr = $_POST["item"]; $db = new mysqli("localhost","root",&q ...
- 记录:tinyrenderer---1.2 Rasterizing the boundary
光栅化三角形 Scanline rendering(扫描线渲染),一个老式的算法 按y轴坐标进行排序,我这里采取降序,ay > by > cy 同时光栅化三角形的左右两边 绘制水平线段,连 ...