searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

LFS介绍

2023-11-28 02:37:10
35
0

    LFS系统需要在一个已安装好的linux发行版(比如Debian、OpenMandriva、Fedora或OpenSUSE)中进行构建。其中,已有的linux系统(即宿主机)作为构建新系统的起始点,提供必要的程序,包括编译器、链接器和shell。通过构建LFS系统,可以更好的理解linux的工作原理以及程序是如何协同工作和相互依赖的,了解linux内部是如何工作的。

LFS的目标架构:LFS当前主要支持AMD/Intel的x86(32位)和x86_64(64位)架构的CPU。

LFS构建中的软件包逻辑:LFS的目标是构建一个完整可用的基础级系统,这其中便包含了,所有软件包需要复制自身,甚至为用户提供出一个相对最小的基础,然后根据用户选择,在这个基础上定制出一个更完善的系统。这便意味着LFS不是最小可用系统代名词,其中会包含某些重要软件包并非是严格需求的。

如何构建LFS系统前准备工作: 

     1. 创建一个新的linux本地分区和文件系统,以此作为编译和安装全新的LFS系统的地方;

     2. 下载构建LFS系统所需要的软件包和补丁,将它们保存到新的文件系统中;

     3. 设置工作环境

准备构建

  1. 准备宿主机系统: 安装用于构建LFS工具的宿主机系统,准备用于安装LFS的分区,包括建立分区、为分区设置文件系统、挂载分区
  2. 宿主机要求:宿主机系统应具有以下指定最低版本的软件

         Bash-3.2

         Binutils-2.25

         Bison-2.7

         Bzip2-1.0.4

         Coreutils-6.9

         Diffutils-2.8.1

         Findutils-4.2.31

         Gawk-4.0.1 (/usr/bin/awk 应该是 gawk 的链接)

         GCC-6.2 包括 C++ 编译器,g++ (9.2.0 以后的版本不建议使用,尚未经过测试)

         Glibc-2.11 (2.30 以后的版本不建议使用,尚未经过测试)

         Grep-2.5.1a

         Gzip-1.3.12

         Linux Kernel-3.2

         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

  1. 检查宿主机是否具备所有软件包的适当版本和编译程序的能力,脚本参考

       

 

  1. 分阶段构建LFS: LFS的设计是在一个会话中的,这也就是说假定系统在处理的过程中不会关机,但是这并不意味这LFS的构建需要一气呵成,但是如果LFS恢复时的状态和之前不同,则某些程序必须在此之后重新构建
  2. 创建新分区:与绝大多数操作系统相同,安装LFS通常需要专门的分区,构建LFS系统比较推荐的方法是使用可用的空分区,如果条件允许,最好是在未分区的空间里新建分区。

       最小化的系统需要大约6GB的分区,这足以存储所有的源码包及满足编译的需求。但如果将LFS作为主要的linux系统,可能需要安装其他附加的软件,这将需要额外的空间。考虑到日后所需的空间,一个20GB的分区是比较合理的。LFS系统本身并不会占这么多的空间,但大分区将能够提供充裕的临时存储空间,并未完成LFS以后添加附加功能留有余地。编译软件包也可能需要较大的磁盘空间,但这些空间可以在软件包安装后回收。

      由于编译过程中所需的内存(RAM)可能不足,用一个小型的磁盘分区作为swap空间是个不错的想法。内存会在此分区中存储较少使用的数据,从而为活动进程提供更多的内存。LFS系统可以与宿主系统共用swap分区,这样就没必要再新建一个了。

       启动磁盘分区程序,通过cdfisk和fdisk加上新分区所在的磁盘--例如/dev/sda作为主要的磁盘。创建一个linux本地分区,并按需创建swap分区。

      其他分区

      根分区:为LFS分配10GB的空间,这可为构建LFS和大多数BLFS提供了足够的空间

      交换分区:一般来说,交换分区的推荐大小为物理内存的两倍左右,但是鲜少需要这样做,若是磁盘空间有限,可以设置为2GB的交换分区并查看磁盘的交换量

      Brub Bios分区:如果是在GPT(GUID Partition Table, GUID分区表)下分boot磁盘,那么必然会产生一个约1MB左右的小分区,如果之前没有的话,这个分区可能还没有被格式化,但是它必须存在,GURB会在安装引导器的时候用到。注:Grub Bios分区必须位于BIOS用于引导系统的磁盘驱动盘上,却不一定要和LFS的根区分位于同一个磁盘驱动器,一个系统里的磁盘可能会用到不同类型的分区表。该磁盘仅与Boot磁盘的分区表类型有关。

      常用分区:

      /boot: 用于存储内核和其他启动信息,为了减少大容量磁盘启动时的签字啊问题,尽量将该分区设为磁盘驱动器上第一个物理分区。100MB的空间就十分充裕了

      /home: 可用于跨发行版或多个LFS版本之间共享用户自定义内容。应将尽量多的磁盘都分配给home分区

      /usr: 独立的/usr分区常见于瘦客户端服务器或无盘工作站。LFS通常不需要。5GB大小足以应付大部分安装

      /opt: 该目录常用于在BLFS中,安装多个像Gnome或KDE这样无需将文件嵌入/usr层次结构的大型软件包,如果使用的话,5到10GB的空间就足够了

      /tmp: – 独立的 /tmp 分区是比较少见的,但这在配置瘦客户端时会有用。如果使用的话,很少超过几 GB

      /usr/src: 该分区非常用于存储 BLFS 源文件并在构建不同版本的 LFS 中共享。它也可用于构建 BLFS 软件包。30-50 GB 的分区可以提供足够的空间。

      任何你需要在启动时自动挂载的单独分区都需要写入到 /etc/fstab 文件中 

  1. 在分区上创建文件

      LFS 可以使用 Linux 内核能识别的任何文件系统,最常用的类型是 ext3 和 ext4。于具体采用哪种文件系统,应该取决于所要存储的文件特点和分区的大小。

      Ext3: 是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复。是常用作一般需求的文件系统

      Ext4: 是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、以及速度的提升

  1. 设置$LFS变量: 它应该被设置为你将要构建的 LFS 系统的目录名——这里使用 /mnt/lfs 作为例子,如果你把 LFS 构建到一个单独的分区里,这个目录将成为那个分区的挂载点。选择一个本地目录并用以下命令设置该变量:export LFS=/mnt/lfs
  2. 挂载新分区:将这些建立的分区挂载到选定的挂载点

      创建挂载点并用下面的命令挂载 LFS 文件系统:

      mkdir -pv $LFS

      mount -v -t ext4 /dev/<xxx> $LFS

      请用 LFS 分区替代 <xxx>

      如果 LFS使用了多个分区(如,/ 和 /usr),需要挂载:

       

      请确保在挂载新分区时没有使用过于严格的权限参数(如 nosuid 或 nodev 选项)。运行不带任何参数的mount 命令来查看在挂载 LFS 分区时设置了什么参数。如果设置了 nosuid 和/或 nodev 参数,就需要重新挂载了。

引导LFS系统: 创建 fstab 文件、为新的 LFS 系统编译内核、安装 GRUB 引导器,就可以在电脑启动的时候选择启动 LFS 系统了。

  1. 创建 /etc/fstab 文件:/etc/fstab 文件的作用是让其它程序确定存储设备的默认挂载点、挂载参数和检查信息(例如完整性检测)。仿照以下格式新建一个文件系统列表(file system table,简称 fstab)文件:

       

  其中,<xxx>,<yyy> 和 <fff> 请使用适当的值替换。例如 sda2,sda5 和 ext4。

  基于 MS-DOS 或者是来源于 Windows 的文件系统(例如:vfat,ntfs,smbfs,cifs,iso9660,udf)需要在

      挂载选项中添加「iocharset」,才能让非 ASCII 字符的文件名正确解析。此选项的值应该与语言区域设置的值相同,以便让内核能正确处理。此选项在相关字符集定义已为内核内建或是编译为模块时生效(在文件系统-> 本地语言支持中查看)。此外,vfat 和 smbfs 还需启用「codepage」支持。例如,想要挂载 USB 闪存设备,zh-CN.GBK 用户需要在 /etc/fstab 中添加以下的挂载选项:

noauto,user,quiet,showexec,iocharset=gbk,codepage=936

对于 zh_CN.UTF-8 用户的对应选项是: noauto,user,quiet,showexec,iocharset=utf8,codepage=936

另外,一些硬盘类型在遇到电源故障时,假如在 /etc/fstab 中使用 barrier=1 这个挂载选项,则会让ext3 文件系统的数据更加安全。如需检查磁盘是否支持此选项,请运行 hdparm。例如: hdparm -I /dev/sda | grep NCQ  如果有输出内容,则代表选项可用。

0条评论
作者已关闭评论
l****n
4文章数
2粉丝数
l****n
4 文章 | 2 粉丝
l****n
4文章数
2粉丝数
l****n
4 文章 | 2 粉丝
原创

LFS介绍

2023-11-28 02:37:10
35
0

    LFS系统需要在一个已安装好的linux发行版(比如Debian、OpenMandriva、Fedora或OpenSUSE)中进行构建。其中,已有的linux系统(即宿主机)作为构建新系统的起始点,提供必要的程序,包括编译器、链接器和shell。通过构建LFS系统,可以更好的理解linux的工作原理以及程序是如何协同工作和相互依赖的,了解linux内部是如何工作的。

LFS的目标架构:LFS当前主要支持AMD/Intel的x86(32位)和x86_64(64位)架构的CPU。

LFS构建中的软件包逻辑:LFS的目标是构建一个完整可用的基础级系统,这其中便包含了,所有软件包需要复制自身,甚至为用户提供出一个相对最小的基础,然后根据用户选择,在这个基础上定制出一个更完善的系统。这便意味着LFS不是最小可用系统代名词,其中会包含某些重要软件包并非是严格需求的。

如何构建LFS系统前准备工作: 

     1. 创建一个新的linux本地分区和文件系统,以此作为编译和安装全新的LFS系统的地方;

     2. 下载构建LFS系统所需要的软件包和补丁,将它们保存到新的文件系统中;

     3. 设置工作环境

准备构建

  1. 准备宿主机系统: 安装用于构建LFS工具的宿主机系统,准备用于安装LFS的分区,包括建立分区、为分区设置文件系统、挂载分区
  2. 宿主机要求:宿主机系统应具有以下指定最低版本的软件

         Bash-3.2

         Binutils-2.25

         Bison-2.7

         Bzip2-1.0.4

         Coreutils-6.9

         Diffutils-2.8.1

         Findutils-4.2.31

         Gawk-4.0.1 (/usr/bin/awk 应该是 gawk 的链接)

         GCC-6.2 包括 C++ 编译器,g++ (9.2.0 以后的版本不建议使用,尚未经过测试)

         Glibc-2.11 (2.30 以后的版本不建议使用,尚未经过测试)

         Grep-2.5.1a

         Gzip-1.3.12

         Linux Kernel-3.2

         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

  1. 检查宿主机是否具备所有软件包的适当版本和编译程序的能力,脚本参考

       

 

  1. 分阶段构建LFS: LFS的设计是在一个会话中的,这也就是说假定系统在处理的过程中不会关机,但是这并不意味这LFS的构建需要一气呵成,但是如果LFS恢复时的状态和之前不同,则某些程序必须在此之后重新构建
  2. 创建新分区:与绝大多数操作系统相同,安装LFS通常需要专门的分区,构建LFS系统比较推荐的方法是使用可用的空分区,如果条件允许,最好是在未分区的空间里新建分区。

       最小化的系统需要大约6GB的分区,这足以存储所有的源码包及满足编译的需求。但如果将LFS作为主要的linux系统,可能需要安装其他附加的软件,这将需要额外的空间。考虑到日后所需的空间,一个20GB的分区是比较合理的。LFS系统本身并不会占这么多的空间,但大分区将能够提供充裕的临时存储空间,并未完成LFS以后添加附加功能留有余地。编译软件包也可能需要较大的磁盘空间,但这些空间可以在软件包安装后回收。

      由于编译过程中所需的内存(RAM)可能不足,用一个小型的磁盘分区作为swap空间是个不错的想法。内存会在此分区中存储较少使用的数据,从而为活动进程提供更多的内存。LFS系统可以与宿主系统共用swap分区,这样就没必要再新建一个了。

       启动磁盘分区程序,通过cdfisk和fdisk加上新分区所在的磁盘--例如/dev/sda作为主要的磁盘。创建一个linux本地分区,并按需创建swap分区。

      其他分区

      根分区:为LFS分配10GB的空间,这可为构建LFS和大多数BLFS提供了足够的空间

      交换分区:一般来说,交换分区的推荐大小为物理内存的两倍左右,但是鲜少需要这样做,若是磁盘空间有限,可以设置为2GB的交换分区并查看磁盘的交换量

      Brub Bios分区:如果是在GPT(GUID Partition Table, GUID分区表)下分boot磁盘,那么必然会产生一个约1MB左右的小分区,如果之前没有的话,这个分区可能还没有被格式化,但是它必须存在,GURB会在安装引导器的时候用到。注:Grub Bios分区必须位于BIOS用于引导系统的磁盘驱动盘上,却不一定要和LFS的根区分位于同一个磁盘驱动器,一个系统里的磁盘可能会用到不同类型的分区表。该磁盘仅与Boot磁盘的分区表类型有关。

      常用分区:

      /boot: 用于存储内核和其他启动信息,为了减少大容量磁盘启动时的签字啊问题,尽量将该分区设为磁盘驱动器上第一个物理分区。100MB的空间就十分充裕了

      /home: 可用于跨发行版或多个LFS版本之间共享用户自定义内容。应将尽量多的磁盘都分配给home分区

      /usr: 独立的/usr分区常见于瘦客户端服务器或无盘工作站。LFS通常不需要。5GB大小足以应付大部分安装

      /opt: 该目录常用于在BLFS中,安装多个像Gnome或KDE这样无需将文件嵌入/usr层次结构的大型软件包,如果使用的话,5到10GB的空间就足够了

      /tmp: – 独立的 /tmp 分区是比较少见的,但这在配置瘦客户端时会有用。如果使用的话,很少超过几 GB

      /usr/src: 该分区非常用于存储 BLFS 源文件并在构建不同版本的 LFS 中共享。它也可用于构建 BLFS 软件包。30-50 GB 的分区可以提供足够的空间。

      任何你需要在启动时自动挂载的单独分区都需要写入到 /etc/fstab 文件中 

  1. 在分区上创建文件

      LFS 可以使用 Linux 内核能识别的任何文件系统,最常用的类型是 ext3 和 ext4。于具体采用哪种文件系统,应该取决于所要存储的文件特点和分区的大小。

      Ext3: 是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复。是常用作一般需求的文件系统

      Ext4: 是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、以及速度的提升

  1. 设置$LFS变量: 它应该被设置为你将要构建的 LFS 系统的目录名——这里使用 /mnt/lfs 作为例子,如果你把 LFS 构建到一个单独的分区里,这个目录将成为那个分区的挂载点。选择一个本地目录并用以下命令设置该变量:export LFS=/mnt/lfs
  2. 挂载新分区:将这些建立的分区挂载到选定的挂载点

      创建挂载点并用下面的命令挂载 LFS 文件系统:

      mkdir -pv $LFS

      mount -v -t ext4 /dev/<xxx> $LFS

      请用 LFS 分区替代 <xxx>

      如果 LFS使用了多个分区(如,/ 和 /usr),需要挂载:

       

      请确保在挂载新分区时没有使用过于严格的权限参数(如 nosuid 或 nodev 选项)。运行不带任何参数的mount 命令来查看在挂载 LFS 分区时设置了什么参数。如果设置了 nosuid 和/或 nodev 参数,就需要重新挂载了。

引导LFS系统: 创建 fstab 文件、为新的 LFS 系统编译内核、安装 GRUB 引导器,就可以在电脑启动的时候选择启动 LFS 系统了。

  1. 创建 /etc/fstab 文件:/etc/fstab 文件的作用是让其它程序确定存储设备的默认挂载点、挂载参数和检查信息(例如完整性检测)。仿照以下格式新建一个文件系统列表(file system table,简称 fstab)文件:

       

  其中,<xxx>,<yyy> 和 <fff> 请使用适当的值替换。例如 sda2,sda5 和 ext4。

  基于 MS-DOS 或者是来源于 Windows 的文件系统(例如:vfat,ntfs,smbfs,cifs,iso9660,udf)需要在

      挂载选项中添加「iocharset」,才能让非 ASCII 字符的文件名正确解析。此选项的值应该与语言区域设置的值相同,以便让内核能正确处理。此选项在相关字符集定义已为内核内建或是编译为模块时生效(在文件系统-> 本地语言支持中查看)。此外,vfat 和 smbfs 还需启用「codepage」支持。例如,想要挂载 USB 闪存设备,zh-CN.GBK 用户需要在 /etc/fstab 中添加以下的挂载选项:

noauto,user,quiet,showexec,iocharset=gbk,codepage=936

对于 zh_CN.UTF-8 用户的对应选项是: noauto,user,quiet,showexec,iocharset=utf8,codepage=936

另外,一些硬盘类型在遇到电源故障时,假如在 /etc/fstab 中使用 barrier=1 这个挂载选项,则会让ext3 文件系统的数据更加安全。如需检查磁盘是否支持此选项,请运行 hdparm。例如: hdparm -I /dev/sda | grep NCQ  如果有输出内容,则代表选项可用。

文章来自个人专栏
ctyunos
3 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0