前言
一直以来在使用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的补丁,所以再添加补丁的时候,补丁中的行号会出现差错。
这些补丁我不可能放弃,所以就需要对照补丁,手动修改源码,然后生成新的补丁包。