Coreutils 软件包包含用于显示和设置基本系统特性的工具。

安装 Coreutils

首先进入到源码目录,解压软件包:

cd /sources
tar xf coreutils-8.23.tar.xz
cd coreutils-8.23

POSIX 要求 Coreutils 中的程序即使在多字节语言环境也能正确识别字符边界。下面的补丁修复这个不兼容性以及其它一些和国际化相关的 错误。之后确保 Makefile.in 文件的时间戳比其它所有文件都晚以免出现 make 错误:

patch -Np1 -i ../coreutils-8.23-i18n-1.patch 
touch Makefile.in

准备编译 Coreutils:

FORCE_UNSAFE_CONFIGURE=1 ./configure \
--prefix=/usr \
--enable-no-install-program=kill,uptime

编译软件包:

make

如果不运行测试套件的话跳到 “安装软件包”!

现在可以运行测试套件了。

首先,运行需要以 root 用户运行的测试:

make NON_ROOT_USERNAME=nobody check-root

【LFS 系列】从零开始 DIY Linux 系统:(六)构建 LFS 系统 - Coreutils-8.23_运行测试

我们会以 nobody 用户运行剩下的测试。但是,一些测试要求用户属于多个组。

由于不跳过这些测试,我们会添加一个临时的组并添加用户 nobody 作为它的成员:

echo "dummy:x:1000:nobody" >> /etc/group

修复一些权限问题以便非 root 用户可以编译和运行测试:

chown -Rv nobody . 

现在运行测试。

确保 su 环境中的 PATH 环境变量包含了 /tools/bin。

su nobody -s /bin/bash \
-c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check"

【LFS 系列】从零开始 DIY Linux 系统:(六)构建 LFS 系统 - Coreutils-8.23_sed_02

已知在虚拟主控台中 stty-pairs 测试会失败,而在 X 终端中则能通过。

移除临时组:

sed -i '/dummy/d' /etc/group

安装软件包:

make install

移动程序到 FHS 指定的位置:

mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin
mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin
mv -v /usr/bin/chroot /usr/sbin
mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8
sed -i s/\"1\"/\"8\"/1 /usr/share/man/man8/chroot.8

BLFS 以及上游中的一些软件包希望如下的程序放在 /bin 中,确保把它们放到了那里:

mv -v /usr/bin/{head,sleep,nice,test,[} /bin

安装完成后清理工作:

cd ..
rm -rf coreutils-8.23



本次分享到此结束啦~

如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。

❤️ 技术交流可以 关注公众号:Lucifer三思而后行 ❤️