前言

一直以来在使用cp和mv命令进行文件操作的时候,终端会处理阻塞状态,无法知晓操作进度。这种情况在操作大量文件的时候尤为明显。

mv/cp来自于GNU的coreutils软件包,已经有大佬给出了补丁,叫做Advanced Copy。这个补丁可以给mv/cp命令添加进度条,显示操作进度和传输速度。

源码:https://github.com/jarun/advcpmv.git

说明

使用上面的仓库提供的补丁和工具可以编译原版的coreutils,然后将mv/cp两个二进制文件替换原有的,或者重命名和原版共存。

我的目的则更加直接,我想编译一个RPM包,直接替换系统的coreutils。

编译RPM

下载RPM源码包

我使用的是AlmaLinux 8.5,首先去仓库下载RPM源码包。
目前最新的是8.30版本。

wget https://repo.almalinux.org/almalinux/8.5/BaseOS/Source/Packages/coreutils-8.30-12.el8.src.rpm

准备RPM编译环境

编译需要mockbuild用户和mock用户组,另外不能使用root用户进行操作,因此还需要创建一个普通用户。

groupadd mock
useradd mockbuild -s /sbin/nologin -g mock
useradd admin -m

安装编译需要的工具,并且初始化编译环境。

dnf install rpm-build rpmdevtools
rpmdev-setuptree

安装下载的源码包:

rpm -ivh coreutils-8.30-12.el8.src.rpm

安装的源码包位于生成~/rpmbuild各个目录中。参考另一篇文章:Redhat系RPM包的简单制作

修改spec,添加advcpmv补丁。然后编译即可。

advcpmv仓库中的补丁无法直接用于RPM包的编译,原因是编译RPM包已经在coreutils源码之上打了很多补丁,一些针对RedHat的补丁,所以再添加补丁的时候,补丁中的行号会出现差错。

这些补丁我不可能放弃,所以就需要对照补丁,手动修改源码,然后生成新的补丁包。

最后修改:2023 年 08 月 02 日
如果觉得我的文章对你有用,请随意赞赏