ITEEDU

6.22. Coreutils-8.4

Coreutils 软件包包括一套显示、设置基本系统属性的工具。

预计编译时间: 3.2 SBU 包括测试
所需磁盘空间: 98 MB 包括测试

6.22.1. 安装 Coreutils

这个软件包中的uname 程序有一个已知的问题,就是在使用 -p 选项时,总是返回unknown。 下面的补丁对 Intel 平台的机器能修正这个问题:

case `uname -m` in
 i?86 | x86_64) patch -Np1 -i ../coreutils-8.4-uname-1.patch ;;
esac

POSIX 要求 Coreutils 的程序即使在多locale环境下也能够识别出字符的边界。 下面的这个patch能够解决这个问题以及其他的一些国际化相关的问题:

patch -Np1 -i ../coreutils-8.4-i18n-1.patch
[Note]

注意

过去,这个补丁发现了很多bug。当你向 Coreutils 的维护者发送错误报告的时候, 首先确认不应用这个patch错误会不会出现。

现在为编译 Coreutils 做准备:

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

配置选项的含义:

--enable-no-install-program=kill,uptime

这个选项的目的是阻止 Coreutils安装二进制文件,它以后会在其他软件包中安装。

编译这个软件包:

make

如果不运行测试程序,请直接跳到 “安装软件包”。

现在准备运行测试程序。首先运行那些需要以 root 运行的测试:

make NON_ROOT_USERNAME=nobody check-root

然后,我们以nobody 用户运行剩下的测试。然而, Certain 测试需要这个用户是一个以上组的成员, 所以我们要添加一个临时组,并把nobody 用户加入这个组:

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

为了非root用户可以编译并运行测设程序,要修改一些权限:

chown -Rv nobody . 

现在运行测试程序:

su-tools nobody -s /bin/bash -c "make RUN_EXPENSIVE_TESTS=yes check"

删除临时组:

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

一些 LFS-Bootscripts 包中的脚本依赖于 head, sleep nice。由于 /usr 目录有 可能在系统启动过程的早期不可用,所以这些二进制程序需要放置在根分区上:

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

6.22.2. Coreutils 的内容

安装的程序: base64, basename, cat, chcon, chgrp, chmod, chown, chroot, cksum, comm, cp, csplit, cut, date, dd, df, dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, id, install, join, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mktemp, mv, nice, nl, nohup, nproc, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, rm, rmdir, runcon, seq, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, shred, shuf, sleep, sort, split, stat, stdbuf, stty, sum, sync, tac, tail, tee, test, timeout, touch, tr, true, truncate, tsort, tty, uname, unexpand, uniq, unlink, users, vdir, wc, who, whoami, and yes

简要描述

base64

按照base64 (RFC 3548)规范,对数据进行编码和解码

basename

去掉文件名中的目录和后缀

cat

把文本文件的内容发送到标准输出

chcon

改变文件和目录的安全内容

chgrp

改变文件和目录属组

chmod

改变每个文件的权限到指定模式;该模式或者将权限改变成符号形式, 或者变成八进制数字形式

chown

改变文件和目录的属主和/或属主组

chroot

使用特定的目录作为执行某个命令的根( /) 目录