在临时系统构建完成后,从现在开始,就进入正式构建阶段。
根据 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、如果系统中没有文件,需要上网查找
或者该文件是你公司内部自建库,这就需要你找开发索要了
放到系统中后按第一第二步修改就可以了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)