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
我们会以 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"
已知在虚拟主控台中 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三思而后行 ❤️