LFS 搭建 4 正式构建 (1)

LFS 搭建 4 正式构建 (1),第1张

在临时系统构建完成后,从现在开始,就进入正式构建阶段。

根据 LFS 手册,绝大多数包在编译时都不使用静态库,且一般都会在 configure 中直接关闭,不过 gcc 之类需要的除外。

在现阶段我并没有移植包管理器的打算,也许以后有时间我会出一篇将 Portage 移植到 LFS 的教程吧。 :D

每次登录,都要检查 $LFS :

首先先挂载 /dev 和内核虚拟文件系统

现在开始 chroot

这个包只需要将文件复制到 /etc 下即可。

这应该是最后一遍了吧。

此处需要修复一个安全问题:

打补丁

建立 /build

确保将 ldconfig 和 sln 工具安装到 /usr/sbin 目录中:

configure

编译:

检查:

glibc 这么大的包,一共 4488 项测试,有几个错误很正常,如果只有几个错误的话忽略就行。此外手册已知会出现两个错误,分别是:

安装时,可能会报错 /etc/ld.so.conf 找不到,此错误无害,建立个空的就行

还要修正 Makefile 跳过一个检查

安装

改正 ldd 脚本中硬编码的可执行文件加载器路径

安装 nscd 的配置文件和运行时目录:

安装 nscd 对 systemd 的支持

现在安装 locale。

手册提供的只能用于满足测试,简体中文是没有的。因此下面的命令我加了 zh_CN-UTF-8 。

当然也可以全部安装,不过需要的时间就很长了:

创建 /etc/nsswitch.conf :

安装时区数据:

注意:此时仍在 glibc 的 build 目录下,如果在其他目录要根据路径改下列命令。

此处顺手配置时区:

现在还需要配置动态加载器。

创建一个新的 /etc/ld.so.conf :

不过下面的命令可能会更优雅:

以上两个命令可以全部使用,因为第二个命令不会擦除原 ld.conf.d 的内容

此处需要删除一些无用的静态库

这里需要加补丁

需要修改 Makefile 保证安装的符号链接是相对的。

确保 man 被安装到正确位置:

编译前还需要进行一些处理

编译:

安装:

此处对其共享库进行了一些处理

删除静态库

configure

编译,检查和安装

如果编译时出现 "failed" 时,那没有问题,只有 "FAIL"才是失败。但测试需要全部通过。

安装

删除静态库

重新安装 Readline 会导致旧版本的库被重命名为 <库名称>.old 。这一般不是问题,但某些情况下会触发 ldconfig 的一个链接 bug。运行下面的两条 sed 命令防止这种情况:

configure

编译和安装:

安装文档(可选):

configure

编译,检查和安装

添加一个 lex 到 flex 的符号链接

这是三个需要用到的测试套件其中之一。

进入安装目录后,要解压文档,在解压源码时要注意区分。

这里的 configure 有点特殊

编译,也有点特殊

测试

已知测试 unitInit-1.2 会失败。

安装,并修改安装好的库的权限:

安装头文件,这是等一会要安装的 expect 的依赖

创建符号链接

最后修改一个与 Perl man 冲突的错误:

三个测试套件之二。

configure

编译,测试

安装

三个测试套件之三。

此处需要 build

configure

直接安装

当然也可以测试,虽然没有必要

这应该是最后一遍了吧。

同样需要对 pty 进行测试,该命令应返回 spawn ls :

手册在这里打补丁,其实在进入目录后就可以打:

绕过关于 man 的一个问题:

创建 build :

configure

编译及测试

一定要运行测试!

已知四项与 zlib 有关的测试会失败。

安装,删除无用的静态库

如果宿主机硬件是 64 位但安装的 OS 是 32 位,还有 CFLAGS 变量时,需要运行

取消处理器优化,生成通用库。(可选,且如果宿主机 CPU 与目标机一致就不用选,在 live CD 里编译也不用。)

configure

编译并生成文档

测试:

一定要测试!

因为 GMP 编译时是针对 CPU 高度优化的,有时会错误识别 CPU 功能导致测试时大概率出现一堆 Illegal instruction 。此时就需要重新编译并加上 --build=x86_64-pc-linux-gnu 。

以下命令查看通过测试的数量,GMP 一共 197 项测试,务必全部通过。

安装,包括文档

configure

编译并生成文档:

测试:

一定要测试!

确保全部通过。

安装

configure

编译,测试和安装

configure

编译,测试和安装

configure

编译和安装:

acl 的测试依赖于连接了 Acl 的Coreutils,如果要测试,应在 Coreutils 构建完成后进行。

因此,构建完成后源码目录暂不删除。

防止安装静态库:

编译,测试,安装

修改权限

禁止该包安装 groups 程序和它的 man 页面,因为 Coreutils 会提供更好的版本。

不使用默认的 crypt 加密方法,使用更安全的 SHA-512 方法加密密码,该方法也允许长度超过 8 个字符的密码。还需要把用户邮箱位置 /var/spool/mail 改为 /var/mail 。另外,从默认的 PATH 中删除 /bin 和 /sbin ,因为它们只是指向 /usr 中对应目录的符号链接:

修复程序中的一处低级错误:

configure

编译:

安装:

启用用户密码的加密

启用组密码加密

shadow 带了一个 useradd 的默认配置文件,其中会为新用户创建邮箱文件,若关闭,运行

这一遍需要巨长的时间。

修复在使用 Glibc-2.34 的系统上构建该软件包时导致 libasan.a 无法使用的问题:

修改 64 位库默认路径

创建 build

configure

编译:

增加栈空间

以非特权用户身份测试编译结果,但出错时继续执行其他测试:

查看摘要

已知错误如下:

同时,还有少量错误是十分正常的,毕竟这是 gcc。 (

哪怕测试时间比编译时间还要长十倍也要坚持测试!

安装该软件包,并移除一个不需要的目录:

修正之前因为测试而临时更改的文件所有者

创建一个符号链接

现在工具链已经完成安装,需要进行一次完整的确认。

离开源码目录,然后

如果正常,输出的最后一行会是(具体名称取决于平台)

然后

正常输出应该是这样:

gcc 应该找到所有三个 crt*.o 文件,它们应该位于 /usr/lib 目录中。

确认编译器能正确查找头文件:

这是正常输出:

其中三元组的名称取决于平台。

确认新的链接器使用了正确的搜索路径:

路径应该要包含

当然 32 位的路径会有不同。

确认使用了正确的 libc:

应该输出

确认 GCC 使用了正确的动态链接器:

正常输出:

如果有问题,一定要修复,不能硬着头皮往下做,不然更折腾人。

如果一切正常,删除测试文件:

最后移动一个位置不正确的文件:

configure

编译,检查,安装

configure

编译,安装

这个包有测试,但需要安装后面的包,所以跳过。

创建符号链接:

删除一个 configure 脚本未处理的静态库:

安装文档(可选):

测试:

安装:

configure

编译,检查

测试时间会和编译时间一样长。

安装:

可以测试,不过时间有点长。(可选):

configure

编译:

测试(可选):

安装:

换 shell:

测试,这里建议打开多线程:

这里的线程数一般为逻辑 CPU 数 + 1。

已知会有5个因循环依赖导致的失败,但安装 automake 后可通过。

安装,删除静态库:

configure

编译,测试:

已知 gdbmtool 测试会失败。

安装:

这里开 -j1 是因为多线程会导致错误。

configure

编译,检查,安装:

安装文档(可选):

至此,软件包安装完成过半。

剩下的下篇再继续。

1、先查找系统中有没有这个文件

find / -name libfai.so.1

2、如果有,进入家目录,修改.bashrc将文件目录添加进去

cd ~

vi .bashrc

按i编辑

添加export LD_LIBRARY_PATH=查找到的目录

wq保存退出

重新执行.bashrc

. .bashrc

3、如果系统中没有文件,需要上网查找

或者该文件是你公司内部自建库,这就需要你找开发索要了

放到系统中后按第一第二步修改就可以了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8315071.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存