LFS简介与编包

Posted kylinos

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LFS简介与编包相关的知识,希望对你有一定的参考价值。

一、什么是LFS

    LFS 是Linux From Scratch的缩写。"From Scratch"是一个词组,它的意思是"从零做起,白手起家,从无到有"的意思,因此"Linux From Scratch"本质上不应当理解为一个Linux发行版名称。它最贴切的含义应当是一种"方法/思想":一切从源代码开始的方法/思想。如果把 LFS 比作建筑房子,那么LFS 提供房子的框架蓝图,但是需要你自己建造它。

二、LFS的构造

    要基于源代码的方式来编译整个系统,那首先要解决的就是工具链的问题,即需要一个编译环境。所以构造LFS系统分两大步:一是构造一个临时的编译环境;二是构建LFS系统。

    注:以下列表基于LFS-7.6整理

2.1、构造临时的编译环境

临时编译环境其实也相当于一个小的 Linux 系统。只不过这个系统将仅包含必要的工具,能够构建最终的LFS系统。构建这个小系统分两步进行,第一步是构建一个新的不依赖于宿主系统的工具链(编译器、汇编器、连接器、库文件以及一些有用的软件),第二个步骤是利用这个工具链去构建其它基本的工具。     在工具链中最基本的是:Binutils、GCC和Glibc。Binutils 是一组开发工具,包括连接器,汇编器和其它用于目标文件和档案的工具。GCC 软件包包含 GNU 编译器,其中有 C 和 C++ 编译器。Glibc 包含了主要的C库。这个库提供了基本的例程,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等等。其它的工具必须在他们的基础上建立。编包顺序依次如下表所示

编包顺序依次如下

包的描述

kylin对应包

binutils

软件包包含一个链接器,一个汇编器和其他处理目标文件的工具。安装的第一个软件包是 Binutils ,这非常重要,因为 Glibc 和 GCC 会针对可用的连接器 和汇编器进行多种测试,以决定启用它们自己的哪些特性。

binutils

gcc

GCC 软件包包含 GNU 编译器集合,包括 C 和 C++ 编译器。

gcc

kernel

为了供系统C库(在LFS中是Glibc)使用,Linux 内核需要公开应用程序接口 (API) 。 这是通过处理Linux内核源程序tar包中的各种C头文件而实现的。

kernel

glibc

Glibc 包含主要的 C 库。这个库提供了基本例程, 用于分配内存、搜索目录、 打开关闭文件、 读写文件、 字串处理、 模式匹配、 数学计算等等。

glibc

libstdc++

提供标准c++库。g++编译器所需要的。

libstdc++

binutils

同上

binutils

gcc

同上

gcc

tcl

Tcl 软件包包含工具命令语言(Tool Command Language)。该个软件包和接下来安装的两个软件包(Expect 和 DejaGNU)是为了给运行 GCC 和 Binutils 的测试程序提供支持。

tcl

expect

Expect 软件包包含一个通过执行脚本对话框与其它交互式程序通信的工具。

expect

dejagnu

DejaGNU 软件包包含了一个测试其它程序的框架。

dejagnu

check

c语言的单元测试框架

check

ncurses

Ncurses 提供独立于终端的字符终端处理库。

ncurses

bash

Bash 软件包包含 Bourne-Again SHell。

bash

bzip2

Bzip2 包含了对文件进行压缩和解压缩的工具,对于文本文件,bzip2 比传统的 gzip拥有更高压缩比。

bzip2

coreutils

包括一整套用于显示和设置基本系统特征的工具

coreutils

diffutils

包含可以显示两个文件或目录差异的程序

diffutils

file

确定文件类型的工具

file

findutils

Findutils 软件包包含查找文件的程序。这些程序被用来递归搜索目录树,并会创建,处理和搜索一个数据库 (通常比递归查找快但是在数据库没有及时更新的情况下, 结果并不可靠)。

findutils

gawk

Gawk 软件包包含处理文本文件的程序。

gawk

gettext

包含用于系统的国际化和本地化的工具。这些工具允许用NLS(本国语言支持)来编译程序,而以用户本国的语言输出消息

gettext

grep

Grep 包含查找文件中内容的程序。

grep

gzip

包含压缩和解压文件的工具

gzip

m4

M4 软件包包含一个宏处理器。

m4

make

Make 软件包包含一个编译软件包的程序。

make

patch

Patch 软件包包含一个根据“patch”文件来修改或建立文件的程序。补丁文件通常是用 diff 程序创建的。

patch

perl

Perl 软件包包含实用萃取与报告语言(Practical Extraction and Report Language)。

perl

sed

Sed 软件包包含一个流编辑器。

sed

tar

Tar 软件包含有一个归档程序。

tar

texinfo

Texinfo 软件包包含读取、写入和转换成 Info 文档的程序。

info

util-linux

包含许多基本工具

util-linux-ng

xz

支持lzma和xz格式的压缩和减压

xz

 

    由上表发现binutils和gcc编译了两次。原因第一遍是编译独立的环境,第二遍是用编好的环境编译独立的系统,一切只为了与宿主系统脱离关系。

2.2、构造LFS系统

chroot到一个新环境,使用上面构建的临时编译环境开始编译真正的系统。编包顺序如下:

LFS编包顺序

包描述

kylin对应包

kernel

Linux API Headers 是为了用户 Glibc 而公开的内核 API。

kernel

man-pages

man pages描述了 C 语言的函数、 重要的设备文件、 以及一些重要的配置文件。

man-pages

glibc

Glibc 软件包包含主要的 C 库。这个库提供了基本例程, 用于分配内存、 搜索目录、 打开关闭文件、 读写文件、 字串处理、模式匹配、数学计算等等。

glibc

zlib

Zlib 包含了一些程序会用到的压缩和解压程序。

zlib

file

File 软件包包含用来判断一个或一组文件类型的工具。

file

binutils

Binutils 软件包包含一个链接器,一个汇编器和其他处理目标文件的工具。

binutils

gmp

GMP 包含数学库,它们为任意精度计算提供了有用的函数。

gmp

mpfr

MPFR 软件包包含多精度数学函数。

mpfr

mpc

MPC包含复数等高精度函数

没有

gcc

GCC 软件包包含 GNU 编译器集合,包括 C 和 C++ 编译器。

gcc

bzip2

Bzip2 包含了对文件进行压缩和解压缩的工具

bzip2

pkg-config

pkg-config 包含一个工具,它在配置和编译可执行文件的过程中,通过include目录和/或 library目录构建工具。

pkgconfig

ncurses

Ncurses 程序包提供字符终端处理库。

ncurses

attr

管理文件系统的扩展属性

attr

acl

管理访问控制列表,定义细粒度文件和目录的自主访问权限

acl

libcap

获取和设置POSIX.1e功能

libcap

sed

Sed 软件包包含一个流编辑器。

sed

shadow

Shadow 软件包包含用于安全方式下处理密码的程序。

shadow-utils

psmisc

Psmisc 包含有用于显示进程信息的程序。

psmisc

procps-ng

Procps 软件包包含监测程序的程序。

procps

e2fsprogs

E2fsprogs 软件包包含处理ext2 文件系统的工具。 它还支持ext3 和 ext4 日志文件系统。

e2fsprogs

coreutils

Coreutils 软件包包括一套显示、设置基本系统属性的工具。

coreutils

iana-etc

Iana-Etc 软件包,提供了网络服务和协议的数据。

setup

m4

M4 软件包包含一个宏处理器。

m4

flex

Flex软件包包含一个能生成识别文本模式程序的工具。

flex

bison

Bison 软件包包含一个语法分析程序生成器。

bison

grep

Grep 可以搜索文件中符合指定匹配模式的行。

grep

readline

Readline 软件包是一个提供命令行编辑和历史纪录功能的库集合。

readline

bash

bash, bashbug, and sh

bash

bc

任意精度的数字处理

bc

libtool

Libtool 是一个GNU通用库支持脚本, 将使用动态库的复杂性隐藏在统一的、可移植的接口中。

libtool

gdbm

GDBM 包含GNU数据库管理器。 这是一个在单个文件中存储关键字/数据对的磁盘文件格式数据库。 这些存储的真实记录数据单一的关键字进行索引,这会比存在文本文件中节省时间。

gdbm

expat

解析XML的库

expat

inetutils

Inetutils 软件包包含基础网络程序。

net-tools

iputils

ftp

tftp

telnet

traceroute

perl

Perl 软件包包含实用萃取与报告语言(Practical Extraction and Report Language)。

perl

XML::Parser

解析xml的perl接口

perl-XML-Parser

autoconf

Autoconf 能生成用于自动配置源代码的 shell 脚本

autoconf

automake

Automake 与 Autoconf 配合使用,产生 Makefile 文件。

automake

diffutils

Diffutils 软件包里的程序向你显示两个文件或目录的差异。

diffutils

gawk

Gawk 包含处理文本文件的程序。

gawk

findutils

Findutils 包含查找文件的工具, 既能即时查找(递归的搜索目录, 并可以显示、 创建和维护文件), 也能在数据库里查找 (通常比递归查找快但是在数据库没有及时更新的情况下, 结果并不可靠)。

findutils

gettext

 Gettext 软件包包含国际化和本地化的工具。 这些工具允许在编译程序的时候使用 NLS (本国语言支持),可以使程序的输出使用用户设置的语言。

gettext

intltool

从源码中提取翻译字符串的国际化工具

intltool

gperf

完美的哈希函数生成器

gperf

groff

Groff 软件包包含一些处理和格式化文本的程序。

groff

xz

支持lzma和xz格式的压缩和减压

xz

grub

GRUB 程序包包含 GRand 统一引导装载程序。

grub

less

Less 软件包包含一个文本文件查看器。

less

gzip

Gzip 软件包包含压缩和解压缩文件的程序。

gzip

IPRoute2

IPRoute2 软件包包含了包含了基本的和高级的基于 IPv4 网络的程序。

iproute

net-tools

kbd

Kbd 包含键盘映射表和键盘工具。

kbd

kmod

加载内核模块的库和使用工具

module-init-tools

libpipeline

a library for manipulating pipelines of subprocesses in a flexible and convenient way.

没有

make

Make 软件包包含一个编译软件包的程序。

make

patch

Patch 软件包包含一个根据“patch”文件来修改或建立文件的程序。补丁文件通常是用 diff 程序创建的。

patch

sysklogd

Sysklogd 包含记录系统日志信息的程序,比如内核处理意外事务的日志。

没有

sysvinit

Sysvinit 软件包包含一些控制系统启动、运行、关闭的程序。

sysvinit(rhel5)

upstart(rhel6)

tar

Tar 软件包含有一个归档程序。

tar

texinfo

Texinfo 软件包包含读取、写入和转换成 Info 文档的程序。

info

udev

Udev 软件包包含动态地创建设备节点的程序。

udev

util-linux-ng

Util-linux-ng 包含各种各样的工具。其中包括处理文件系统,控制台,分区和信息的工具。

util-linux-ng

man-db

Man-DB 包含查找和显示 man 手册页的程序。

man

vim

Vim 软件包包含一个强大的文本编辑器。

vim

   

三、kylin编包    

    沿用2.1中的编包顺序,将2.2里2.1中未涉及的包追加

binutils

gcc

kernel

glibc

libstdc++

tcl

expect

dejagnu

check

ncurses

bash

bzip2

coreutils

diffutils

file

findutils

gawk

gettext

grep

gzip

m4

make

patch

perl

sed

tar

info

util-linux-ng

xz

man-pages

zlib

gmp

mpfr

pkgconfig

attr

acl

libcap

shadow-utils

psmisc

procps

e2fsprogs

setup

flex

bison

readline

bc

libtool

gdbm

expat

net-tools

iputils

ftp

tftp

telnet

traceroute

perl-XML-Parser

autoconf

automake

intltool

gperf

groff

grub

less

iproute

kbd

module-init-tools

upstart

udev

man

vim

以上是关于LFS简介与编包的主要内容,如果未能解决你的问题,请参考以下文章

Git LFS的使用

Channel-Stream与编解码器

Channel-Stream与编解码器

LFS 系列从零开始 DIY Linux 系统:基本系统配置 - 使用 GRUB 设置启动过程

[Java基础]为什么会出现字符流?与编码表介绍

H.264视频编解码器——参考软件JM的下载与编解码