LFS搭建总结

news2024/11/24 7:42:46

该文档参考LFS官网 和 https://www.cnblogs.com/alphainf/p/16661308.html
下文中未提及的部分参考官方文档

环境准备

在Oracle VM VirtualBox中先创建一个20G的磁盘,安装bebian操作系统,此时该硬盘为sda,分了三个区,分别是Linux,Extended和Swap。(ps:系统安装在固态硬盘中,不然后续编译会很慢)

分区

在Oracle VM VirtualBox再安装一个40G的磁盘sdb用于后续使用

根据书中的要求,我们要对即将构造lfs的磁盘sdb进行分区。
我们将其分成三个分区,分别为boot,swap,root。其中:
boot分区用于进行系统引导,且是sdb的第一个分区,分区大小为256MB。
swap分区用于进行内存交换,分区大小为2G。该分区将用于进行内存交换(当运行内存不足时将会发生交换)
root分区为主分区,整个LFS系统将会构造在其中

在分区上创建文件系统

我们需要将boot分区(/dev/sdb1)和root分区(/dev/sdb3/)设置为ext4文件系统
对于swap分区(/dev/sdb2),我们需要将其设置为交换目录,命令如下

mkfs -v -t ext4 /dev/sdb1
mkfs -v -T small -t ext4 /dev/sdb3
mkswap /dev/sdb2

设置$LFS环境变量

export LFS=/mnt/lfs

注意:随时查看$LFS环境变量,切换用户和退出程序的时候可能丢失

挂载分区

我们创建文件夹/mnt/lfs,并将root分区(/dev/sdb3)挂载到/mnt/lfs中,代码如下:

mkdir -pv $LFS
mount -v -t ext4 /dev/sdb3 $LFS

我们创建文件夹LFS/boot,并将boot分区(/dev/sdb1)挂载到
LFS/boot下,代码如下:

mkdir -v $LFS/boot
mount -v -t ext4 /dev/sdb1 $LFS/boot

我们用下面这条指令挂载swap分区

/sbin/swapon -v /dev/sdb2

文件安装

依照官方文档

注意:
1.当一个软件多次安装的时候(例如gcc第二次)需要删除原来的文件并重新解压,不能被以前的数据影响
2.编译和测试的时候可以使用多线程提升速度:make -j4 或者 make -j4 check

进入Chroot并构建临时工具

注意:
1.进入chroot的时候必须用su - root不能用su root,不然不会有chroot命令
2.如果出现机器重启的情况,需要重新“挂载和激活/dev” 和“挂载虚拟文件系统”以及“创建shm目录”
3.chroot步骤的安装参考以前的安装方式,只不过目录为chroot下的sources

文件备份

Oracle VM VirtualBox提供了快照功能,可以忽略这一部分。

软件安装及清理

注意:
1.安装软件的时候make check可能会错误,有一些错误可以忽略
2.官方文档第八章glibc设置时区:Americas-》United States-》Eastern

系统配置

文档9.6.5的配置

cat > /etc/sysconfig/console << "EOF"
# Begin /etc/sysconfig/console

UNICODE="1"
KEYMAP="us"
FONT="lat1-16 -m 8859-1"

# End /etc/sysconfig/console
EOF

文档9.7 shell配置(用到8.5节安装过的语言)

LC_ALL=en_US.iso88591 locale charmap
LC_ALL=en_US.iso88591 locale language
LC_ALL=en_US.iso88591 locale int_curr_symbol
LC_ALL=en_US.iso88591 locale int_prefix
cat > /etc/profile << "EOF"
# Begin /etc/profile

export LANG=en_US.ISO-8859-1

# End /etc/profile
EOF

使 LFS 系统可引导

文档10.2创建/etc/fstab

对照官方文档:本人机器 <xxx>对应sdb3,<fff>对应ext4,<yyy>对应sdb2
但是,我们还有boot分区,该分区也要一并设置进fstab中,我们还要增加boot的设置

然后,考虑到在接下来的设置中,由于磁盘将会互换,sdb会变为sda,编号不稳定,我们可以用稳定的UUID进行磁盘确认。
使用如下命令:

blkid

用sdb1/2/3对应的UUID对上面的fstab进行替换,替换后的fstab如下:

cat > /etc/fstab << "EOF"
# Begin /etc/fstab
# file system mount-point type options dump fsck
# order
#/dev/sda3 is the root
UUID=4ee938e6-61f5-42cc-aa5d-b86f7df71b81 / ext4 defaults 1 1
#/dev/sda1 is the boot
UUID=ee79b98c-8393-43a4-8e90-23a228329b83 /boot ext4 defaults,noauto 0 2
#/dev/sda2 is the swap
UUID=b8010fbf-3557-4277-9bca-153a276ca2d8 swap swap pri=1 0 0
proc /proc proc nosuid,noexec,nodev 0 0
sysfs /sys sysfs nosuid,noexec,nodev 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /run tmpfs defaults 0 0
devtmpfs /dev devtmpfs mode=0755,nosuid 0 0
# End /etc/fstab
EOF

Linux内核安装

make mrproper
make defconfig  #这一行主要是进行一些默认配置
make menuconfig

在虚拟机下应该勾选上如下的选项

Device Drivers --->
   Generic Driver Options --->
   [*]Network device support --->
      [*]Ethernet Driver support --->
         [*] AMD PCnet32 PCI support
   [*]Fusion MPT device support --->
      <*> Fusion MPT ScsiHost drivers for SAS
      <*> Fusion MPT misc device (ioctl) driver  
      [*] Fusion MPT logging facility 
   SCSI device support --->
      [*] SCSI low-level drivers

GRUB安装

无需解压和cd,我们直接运行以下命令
本人机器使用如下命令:

grub-install /dev/sdb

创建/boot/grub/grub.cfg

cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod ext2
set root=(hd0,1)

menuentry "GNU/Linux, Linux 5.10.17-lfs-10.1" {
        linux   /boot/vmlinuz-5.10.17-lfs-10.1 root=/dev/sda3 ro
}
EOF

收尾并启动LFS

echo 10.1 > /etc/lfs-release

cat > /etc/lsb-release << "EOF"
DISTRIB_ID="Linux From Scratch"
DISTRIB_RELEASE="10.1"
DISTRIB_CODENAME="xwj"
DISTRIB_DESCRIPTION="Linux From Scratch"
EOF

cat > /etc/os-release << "EOF"
NAME="Linux From Scratch"
VERSION="10.1"
ID=lfs
PRETTY_NAME="Linux From Scratch 10.1"
VERSION_CODENAME="xwj"
EOF

离开chroot环境

完成这些工作后,我们输入以下命令离开chroot环境

logout

解除挂载

umount -v $LFS/dev/pts
umount -v $LFS/dev
umount -v $LFS/run
umount -v $LFS/proc
umount -v $LFS/sys
umount -v $LFS/boot
umount -l $LFS

更改磁盘顺序

先关机,关机后,我们调整两块磁盘的挂载顺序。
我们更改LFS安装的磁盘的挂载位置,使其从SCSI 0:1变更为SCSI 0:0,变更后的情况如图所示
在这里插入图片描述
将虚拟硬盘端口互换

启动LFS

启动虚拟机成功以后,登录用户使用root

项目遇到的非技术问题:

1.使用快捷键的时候小心ctrl+shift和其他键的组合可能造成FireFox浏览器故障
2.虚拟机自带的火狐浏览器偶尔会解析不了网址,需要换一个更稳定的浏览器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652396.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Selenium Python 教程第3章: 页面的相关操作

3、针对Web页面的相关操作 最基本的页面操作也许是使用WebDriver打开一个链接。 常规的方法是调用 get 方法: driver.get("http://www.python.org")WebDriver 将等待&#xff0c;直到页面完全加载完毕&#xff08;其实是等到 onload 方法执行完毕&#xff09;&…

VS报错 --- error LNK2019: 无法解析的外部符号

运行vs程序时候&#xff0c;一般会出现这个错误 &#xff1a; 1 error LNK2019: 无法解析的外部符号 _lws_create_context4&#xff0c;该符号在函数 "public: bool __thiscall WebsocketServerApp::startServer(char const *,int)" (?startServerWebsocketServe…

只是做笔记有必要入手苹果笔吗?好用又便宜的平替苹果笔

苹果原装电容笔和那种只具备倾斜压感的平替电容笔不一样&#xff0c;平替电容笔并没有具备重力压感。但是&#xff0c;如果你并不经常需要绘画的话&#xff0c;那么你也不必花费太多的金钱来购买一支价格如此贵的苹果电容笔&#xff0c;选择一款平替电容笔即可。在这里&#xf…

【期末复习】云计算要点

【选择】 【判断】 【解答】打*为录音明确提出的内容 1*.大数据现象是怎么形成的&#xff1f; 大数据就是&#xff1a;海量数据或巨量数据&#xff0c;其规模巨大到无法通过目前主流的计算机系统在合理时间内获取、存储、管理、处理并提炼以帮助使用者决策。大数据产生的原因…

SSH服务器

文章目录 文字接口连接服务器&#xff1a;SSH服务器连接加密技术简介启动SSH服务SSH客户端连接程序SSH&#xff1a;直接登录远程主机的指令使用案例 服务器公钥记录文件&#xff1a;~/.ssh/known_hosts报错解决 模拟FTP的文件传输方式&#xff1a;SFTP使用案例 文件异地直接复制…

用python写网络爬虫

第二章 数据抓取 首先 &#xff0c; 我们会介绍一个叫 做Firebug Lite 的浏览器扩展&#xff0c; 用 于检查网页 内容 &#xff0c; 如 果你有一些网络开发背景的话&#xff0c; 可能 己经对该扩展十分熟悉 了 。 然后 &#xff0c;我们会介绍三 种抽取网 页数据的 方法 &…

【算法刷题】其他技巧

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招算法的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于网上知识点进行的&#xff0c;每个代码参考热门博客和GPT3.5&#…

vivo 帐号服务稳定性建设之路-平台产品系列06

作者&#xff1a;vivo 互联网平台产品研发团队- Shi Jianhua、Sun Song 帐号是一个核心的基础服务&#xff0c;对于基础服务而言稳定性就是生命线。在这篇文章中&#xff0c;将与大家分享我们在帐号稳定性建设方面的经验和探索。 一、前言 vivo帐号是用户畅享整个vivo生态服务…

【CEEMDAN-VMD-GRU】完备集合经验模态分解-变分模态分解-门控循环单元预测研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Python】数据容器总结 ② ( 数据容器元素排序 | 字符串大小比较 | 字符大小比较 | 长短一样的字符串大小比较 | 长短不一样的字符串大小比较 )

文章目录 一、数据容器元素排序二、字符串大小比较1、字符大小比较2、长短一样的字符串大小比较3、长短不一样的字符串大小比较 一、数据容器元素排序 调用 sorted 函数 , 可以对 数据容器 中的元素进行排序 ; sorted(数据容器变量, [reverseTrue])上述两个参数 , 第一个 数据…

开源!一款.Net开发的全能工具EverythingToolbar,节约你90%操作时间!

今天给大家推荐一款已获得6.3K stars的.Net开发的开源全能工具EverythingToolbar。EverythingToolbar 是由 Everything 提供支持的 Windows 任务栏的即时文件搜索集成&#xff0c;可以替换操作系统任务栏上的 Windows 搜索&#xff0c;使 Windows 上的文件搜索更快、更可靠。 …

Hive 库表相关操作

1、Hive内部表和外部表 1.内部表&#xff1a;未被external修饰&#xff1b;外部表&#xff1a;被external修饰。 区别&#xff1a; &#xff08;1&#xff09;内部表数据由Hive自身管理&#xff0c;外部表数据由HDFS管理&#xff1b; &#xff08;2&#xff09;内部表数据存…

ESP32(Micro Python) LVGL 传感器数值显示

本程序用于显示SR04超声波传感器和BMP280气压温度传感器的读数。由于高度数值类型不符合要求&#xff0c;BMP280改为显示气压和温度值。气压值分两部分显示&#xff0c;分别为千帕值-100&#xff08;避免超出表盘显示范围&#xff09;和千帕值的两位小数。由于标签不能显示动态…

在Mybatis执行插入数据时,如何将Date类型字段设置为“yyyy-MM-dd”的格式

1、问题描述 使用mybatis新增插入一条数据到MySQL数据库时&#xff0c; 其中实体类对象的一个属性”hiredate“的类型是日期类型Date&#xff0c; 此属性在数据库中对应的字段“hiredate”类型也是日期Date类型&#xff0c; 但是在数据库中要求“hiredate”字段的字段值为“yy…

瑞萨RA4M2 基于CAN总线的UDS诊断升级MCU工具 /bootloader/UDS诊断/14229/15765

基于can总线的UDS软件升级 最近学习UDS诊断协议&#xff08;ISO14229&#xff09;&#xff0c;是一项国际标准&#xff0c;为汽车电子系统中的诊断通信定义了统一的协议和服务。它规定了与诊断相关的服务需求&#xff0c;并没有设计通信机制。ISO14229仅对应用层和会话层做出了…

【SpringCloud入门】-- 认识微服务

目录 1. 什么是微服务&#xff1f; 2. 微服务的优势&#xff1f; 3. 单体架构&#xff0c;分布式架构&#xff0c;微服务架构的区别以及优缺点&#xff1f; 4. SpringCloud和Spring Cloud Alibaba是什么&#xff1f; 5. SpringCloud和SpringCloudAlibaba的区别&#xff1f…

apple pencil二代值不值得买?口碑好的电容笔排行榜

事实上&#xff0c;苹果Pencil与市场上普通的电容笔最大的区别就是在重量和压感上。苹果pencil拥有着独特的重力压感&#xff0c;可以很好运用于绘画上&#xff0c;但是&#xff0c;随着苹果Pencil的价格一直高居不下&#xff0c;而平替电容笔各种性能的不断提高&#xff0c;苹…

Vue中如何进行3D场景展示与交互(如Three.js)

Vue中如何进行3D场景展示与交互&#xff08;如Three.js&#xff09; 随着WebGL技术的发展&#xff0c;越来越多的网站开始使用3D场景来展示产品、游戏等内容。在Vue中&#xff0c;我们可以使用第三方库Three.js来实现3D场景的展示与交互。本文将介绍如何在Vue中使用Three.js来…

和 if else说再见,SpringBoot 这样做参数校验才足够优雅!

1. 概述 当我们想提供可靠的 API 接口&#xff0c;对参数的校验&#xff0c;以保证最终数据入库的正确性&#xff0c;是 必不可少 的活。比如下图就是 我们一个项目里 新增一个菜单校验 参数的函数&#xff0c;写了一大堆的 if else 进行校验&#xff0c;非常的不优雅&#xf…

语音验证码短信原理和应用场景分析

引言 随着移动互联网的快速发展&#xff0c;短信验证码成为了许多应用和服务中常用的身份验证方式。然而&#xff0c;有时候用户可能由于各种原因无法接收到短信验证码&#xff0c;或者对于文字验证码不够方便或友好。 为了解决这些问题&#xff0c;语音验证码短信API 应运而…