首页 > 其他分享 >二、分阶段构建 LFS

二、分阶段构建 LFS

时间:2023-08-09 21:11:27浏览次数:36  
标签:bin head -- echo version 构建 LFS n1 分阶段

概述

在本章中,我们会检查那些构建 LFS 系统必须的宿主工具,如果必要的话就安装它们。之后我们会准备一个容纳 LFS 系统的分区。我们将亲自建立这个分区,在分区上建立文件系统,并挂载该文件系统。

宿主系统需求

您的宿主系统必须拥有下列软件,且版本不能低于我们给出的最低版本。要注意的是,很多发行版会把软件的头文件放在单独的软件包中,这些软件包的名称往往是 “<软件包名>-devel” 或者 “<软件包名>-dev”。如果您的发行版为下列软件提供了这类软件包,一定要安装它们。

比下列最低版本更古老的版本可能正常工作,但作者没有进行测试。

  • Bash-3.2 (/bin/sh 必须是到 bash 的符号链接或硬连接)

  • Binutils-2.13.1 (比 2.40 更新的版本未经测试,不推荐使用)

  • Bison-2.7 (/usr/bin/yacc 必须是到 bison 的链接,或者是一个执行 bison 的小脚本)

  • Coreutils-6.9

  • Diffutils-2.8.1

  • Findutils-4.2.31

  • Gawk-4.0.1 (/usr/bin/awk 必须是到 gawk 的链接)

  • GCC-5.1,包括 C++ 编译器 g++ (比 12.2.0 更新的版本未经测试,不推荐使用)。C 和 C++ 标准库 (包括头文件) 也必须可用,这样 C++ 编译器才能构建宿主环境的程序

  • Grep-2.5.1a

  • Gzip-1.3.12

  • Linux Kernel-3.2

    内核版本的要求是为了符合第 5 章第 8 章中编译 glibc 时开发者推荐的配置选项。

    如果宿主内核比 3.2 更早,您需要将内核升级到较新的版本。升级内核有两种方法,如果您的发行版供应商提供了 3.2 或更新的内核软件包,您可以直接安装它。如果供应商没有提供一个足够新的内核包,或者您不想安装它,您可以自己编译内核。编译内核和配置启动引导器 (假设宿主使用 GRUB) 的步骤在第 10 章中。

  • M4-1.4.10

  • Make-4.0

  • Patch-2.5.4

  • Perl-5.8.8

  • Python-3.4

  • Sed-4.1.5

  • Tar-1.22

  • Texinfo-4.7

  • Xz-5.0.0

为了确定您的宿主系统拥有每个软件的合适版本,且能够编译程序,请运行下列命令:

#!/bin/bash
# Simple script to list version numbers of critical development tools
export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
MYSH=$(readlink -f /bin/sh)
echo "/bin/sh -> $MYSH"
echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"
unset MYSH
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1
if [ -h /usr/bin/yacc ]; then
 echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
elif [ -x /usr/bin/yacc ]; then
 echo yacc is `/usr/bin/yacc --version | head -n1`
else
 echo "yacc not found"
fi
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
if [ -h /usr/bin/awk ]; then
 echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
elif [ -x /usr/bin/awk ]; then
 echo awk is `/usr/bin/awk --version | head -n1`
else
 echo "awk not found"
fi

gcc --version | head -n1
g++ --version | head -n1
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
python3 --version
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1 # texinfo version
xz --version | head -n1
echo 'int main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
 then echo "g++ compilation OK";
 else echo "g++ compilation failed"; fi
rm -f dummy.c dummy

 

2.3. 分阶段构建 LFS

LFS 被设计为在一次会话中构建完成。换句话说,本书的指令假设,在整个编译过程中,系统不会关闭或重启。当然,构建过程不需要严格地一气呵成,但是要注意如果在重新启动后继续编译 LFS,根据构建进度的不同,可能需要再次进行某些操作。

2.3.1. 第 1–4 章

这些章节在宿主系统运行命令。在重启后,注意下列事项:

  • 在第 2.4 节之后,以 root 用户身份执行的步骤要求 LFS 环境变量已经为 root 用户设置好。

2.3.2. 第 5–6 章

  • /mnt/lfs 分区需要重新挂载。

  • 这两章的步骤必须由用户 lfs 完成。在进行这些步骤时,必须先执行 su - lfs 命令。否则,您可能会将软件包安装到宿主系统上,这可能导致宿主系统无法使用。

  • 编译过程的一般说明中的过程是关键的。如果无法确定一个软件包是否正确安装,首先确认之前解压的源码包已经被删除,然后重新解压源码包的文件,重新执行该软件包对应章节的所有命令。

2.3.3. 第 7–10 章

  • /mnt/lfs 分区需要重新挂载。

  • 从 “改变所有权” 到 “进入 Chroot 环境” 的一些操作必须以 root 身份完成,且 LFS 环境变量必须为 root 用户设定。

  • 在进入 chroot 环境时,LFS 环境变量必须为 root 设置好。在进入 chroot 环境后就不需要 LFS 变量。

  • 虚拟文件系统必须挂载好。在进入 chroot 环境之前,请切换到一个宿主系统的虚拟终端,以 root 身份执行第 7.3.1 节 “挂载和填充 /dev”第 7.3.2 节 “挂载虚拟内核文件系统”中的命令。

 

 

标签:bin,head,--,echo,version,构建,LFS,n1,分阶段
From: https://www.cnblogs.com/linuxws/p/17617997.html

相关文章

  • 从零开始:构建您自己的直播带货软件开发计划
    1.确定目标和需求在开始开发之前,您需要明确您的目标和需求。考虑以下问题:您的直播带货软件是面向哪个市场和用户群体?您的软件需要支持哪些主要功能,如实时视频直播、商品展示、购买支付、实时互动等?您是否需要支持多平台,如移动设备和桌面电脑?2.技术栈选择根据您的需求,选择合适的......
  • 从零玩转系列之微信支付实战PC端项目构建+页面基础搭建 | 技术创作特训营第一期
    一、前言欢迎来到本期的博客!在这篇文章中,我们将带您深入了解前端开发领域中的一个热门话题:如何使用Vue3和Vite构建前端项目。随着现代Web应用程序的需求不断演进,选择适当的工具和技术变得至关重要。Vue3作为一种流行的前端框架,以其出色的性能和灵活的特性赢得了众多开......
  • BuilderPattern-构建器模式
    在C#中,构造器模式(BuilderPattern)是一种创建型设计模式,用于创建一个复杂对象的过程,并将其分解为多个简单步骤进行创建。与其他创建型模式(如工厂模式)不同,构造器模式着重于对象的构建过程,而不是直接创建对象。构造器模式通常由以下几个关键组件组成:产品类(Product):表示构造器模式中......
  • vue3 + h5 构建流程
    目录目录初始化项目架构技术栈工具类环境搭建流程初始化项目初始化git运行项目配置server环境vite.config.ts配置项目环境增加三个文件修改package.json脚本如何使用重新启动配置Eslint增加文件.eslintrc.cjs对vite.config.ts修改重新启动......
  • 中电金信发布源启·数字构建平台 全面跃升应用研发全生命周期数字生产力
    6月28日,中电金信发布源启·数字构建平台。源启·数字构建平台是企业级研发全生命周期支持管理平台、工程平台、工具链平台。面向金融等重点行业超大规模、超复杂度的数字化应用,源启·数字构建平台通过灵活、强大的平台赋能,端到端支持应用研发全生命周期实现,让金融机构及大型企业......
  • maven构建非法字符解决办法
    使用maven做版本构建时候碰到了一个问题,有个java源码始终编译报错,错误发生在文件第一行。出错内容是:***.java:[1,1]非法字符:\65279 此问题是文件编码问题。这一个java文件的编码格式是UTF-8BOM格式的。其它源码的编码格式都正常。修改方法具体如下:先在eclipse的projec......
  • 使用Blazor构建现代的Web界面
    当谈到构建现代的Web界面时,Blazor已经成为一个备受关注的技术。Blazor是一个由微软开发的.NET平台上的Web框架,它允许您使用C#编程语言来构建交互式、现代化的前端应用程序。在本篇博客中,我们将探讨如何使用Blazor来构建现代的Web界面,并附上一些示例代码来帮助您入门。......
  • 在家构建您的迷你聊天Chat gpt
    推荐:使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景什么是指令遵循模型?语言模型是机器学习模型,可以根据句子的前一个单词预测单词概率。如果我们向模型请求下一个单词,并将其递减地反馈给模型以请求更多单词,则模型正在执行文本生成。文本生成模型是许多大型语言模型(如GPT3)......
  • 构建虚拟与现实的桥梁:数字孪生技术在建筑领域的应用
    在数字化时代,科技的飞速发展正在深刻影响着建筑行业。数字孪生技术作为数字化转型的重要组成部分,正在为建筑环境带来革命性的变革。数字孪生技术通过将现实世界与虚拟模型实时同步,为建筑规划、施工、运营和维护等各个环节提供了更智能、高效的解决方案。 数字孪生技术在建筑设......
  • 使用Python中从头开始构建决策树算法
    决策树(DecisionTree)是一种常见的机器学习算法,被广泛应用于分类和回归任务中。并且再其之上的随机森林和提升树等算法一直是表格领域的最佳模型,所以本文将介绍理解其数学概念,并在Python中动手实现,这可以作为了解这类算法的基础知识。在深入研究代码之前,我们先要了解支撑决策树的......