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 开始 ...
随机推荐
- pip安装MySQLdb报错mysql_config not found
报错EnvironmentError: mysql_config not found解决方法 1.sudo apt-get install python-setuptools 2.sudo apt-g ...
- [CF494D] Birthday 题解
首先 \(S(u)\) 显然是 \(u\) 的子树. 假如 \(u\) 是定点,问题转化为区间求平方和,十分简单. 于是我们用线段树维护区间平方和,支持区间加,然后离线问题,在 \(u\) 的位置处理 ...
- AD22 PCB导出Gerber文件详细步骤
PCB绘制好,检查完成后,就可以把文件交给PCB工厂生产了,一般有两种方式: 第一种最简单就是直接将PCB文件压缩打包,发给工厂. 第二种生成Gerber等相关资料,再压缩打包,发给工厂. 这里以AD ...
- Maxmspjitter实现实时抓取摄像头画面并制成序列图 (定时抓拍)
实时监控.拍照.录像外设的影像画面在B站上我已有所总结,见下面的网址. https://www.bilibili.com/read/cv13149329?spm_id_from=333.999.0.0 ...
- mysql 登录提示 “is not allowed to connect to this mysql server”
解决方法一 执行 mysql -u root -p 然后输入密码登陆mysql GRANT ALL PRIVILEGES ON . TO 'myuser'@'%' IDENTIFIED BY 'myp ...
- xpath 定位单选框
分析页面结构: 整个页面只有一组radiogroup 一个group地下存在两个radio 思路定位到页面唯一元素->下面具体radio 代码: //div[@class='el-radio-g ...
- 附035.Kubernetes_v1.25.3高可用部署架构二
目录 部署组件 kubeadm介绍 kubelet介绍 kubectl介绍 方案概述 方案介绍 部署规划 节点规划 主机名配置 变量准备 互信配置 环境初始化 部署高可用组件 HAProxy安装 Ke ...
- vuepress-reco搭建与部署指南
个人博客:槿苏的知识铺 一.前言 在技术飞速发展的今天,高效地编写.维护和呈现文档已成为开发者不可或缺的能力.无论是开源项目.团队协作还是个人知识沉淀,一套结构清晰.体验优雅的文档系统都能显著提升 ...
- 微信小程序云函数
小程序开发云环境设置 注意事项 每一个云函数都是一个独立的 nodeJS 项目.所以每个云函数下都有 package.json 文件 错误 前端操作数据库 1 指引 2 新建集合 3 新增记录 4 查 ...
- [源码系列:手写spring] IOC第二节:BeanDefinition和BeanDefinitionRegistry
主要内容 BeanDefinition:顾名思义,就是类定义信息,包含类的class类型.属性值.方法等信息. BeanDefinitionRegistry:添加BeanDefinitionRegis ...