Coreutils 软件包包括一套显示、设置基本系统属性的工具。
通常 uname 程序总是有点毛病的,比如 -punknown 的结果。下面的补丁对 Intel 平台的机器能修正这个问题:
patch -Np1 -i ../coreutils-5.96-uname-1.patch
阻止 Coreutils 安装后面将由别的包安装的程序:
patch -Np1 -i ../coreutils-5.96-suppress_uptime_kill_su-1.patch
POSIX 要求 Coreutils 的程序即使在多字节环境下也能够识别出字符的边界。下面的这个patch能够解决这个问题以及其他的一些国际化相关的问题:
patch -Np1 -i ../coreutils-5.96-i18n-1.patch
为了测试应用的patch能够运行,修改文件的权限:
chmod +x tests/sort/sort-mb-tests
过去,在这个patch里面发现了很多bug。当你向 Coreutils 的维护者发送错误报告的时候,首先确认不应用这个patch错误会不会出现。
现在已经发现在使用who -Hu时,转换的信息有时会导致缓冲区溢出。增大缓冲区大小:
sed -i 's/_LEN 6/_LEN 20/' src/who.c
为编译 Coreutils 做准备:
./configure --prefix=/usr
编译软件包:
make
Coreutils 软件包的测试套件对系统进行了某些假设,比如要求有非 root 用户和组,但是我们目前的系统中尚不存在。如果你不想运行测试套件,就直接跳过下面将要进行的测试,直接从"安装软件包"那里继续。
下面的命令为我们做测试前的准备,创建两个 dummy(伪) 组和一个 dummy(伪) 用户:
echo "dummy1:x:1000:" >> /etc/group echo "dummy2:x:1001:dummy" >> /etc/group echo "dummy:x:1000:1000::/root:/bin/bash" >> /etc/passwd
现在已经准备好可以运行测试套件了,首先运行那些需要以 root 运行的测试:
make NON_ROOT_USERNAME=dummy check-root
然后以 dummy 用户运行剩余的测试:
src/su dummy -c "make RUN_EXPENSIVE_TESTS=yes check"
测试结束后,删除 dummy 组和用户:
sed -i '/dummy/d' /etc/passwd /etc/group
安装软件包:
make install
把一些程序移动到合适的位置以符合 FHS 标准:
mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin mv -v /usr/bin/{false,hostname,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
一些 LFS-Bootscripts 包中的脚本依赖于 head, sleep,和 nice 。由于 /usr 目录有可能在系统启动过程的早期不可用(比如尚未挂载),所以这些二进制程序需要放置在根分区上:
mv -v /usr/bin/{head,sleep,nice} /bin