rpm 的查询与打包
目标
用 rpm 查询和验证,并用 spec 文件亲手构建软件包再安装。
为什么重要
rpm -V 会把安装时的哈希与当前文件进行比较,告知哪些内容发生了变化,是一种审计工具。配置文件发生变化是正常的,但如果二进制文件变了,就需要调查。此外,亲手制作一次软件包,就能彻底弄清其中究竟有什么——只要有文件没有写进 %files,构建就会失败,rpmbuild 的这种严格性能让软件包的内容保持准确。
步骤
- 创建目录
/root/rpmlab,把已安装的软件包数量写成一行数字,保存到/root/rpmlab/count.txt。 - 把软件包
coreutils-common的文档文件列表保存到/root/rpmlab/docs.txt。 - 把拥有
/usr/bin/ls的软件包名称写成一行,保存到/root/rpmlab/owner.txt。 - 在已安装的软件包中选一个配置文件,在其内容后追加一行,然后执行验证,把标记了被改动的那一行保存到
/root/rpmlab/verify.txt。(请选择/etc/nanorc或/etc/DIR_COLORS这样安全的文件。) - 查询任意一个已安装软件包的安装脚本,保存到
/root/rpmlab/scripts.txt。如果软件包没有脚本,就会输出这一事实。 - 创建
~/rpmbuild构建目录树,把/opt/fixtures/rpmbuild/labhub-tool-1.0打包成labhub-tool-1.0.tar.gz放到SOURCES/中,把/opt/fixtures/rpmbuild/labhub-tool.spec放到SPECS/中,然后构建。~/rpmbuild/RPMS/noarch/之下必须生成.rpm。 - 在不安装的情况下查询所构建的
.rpm,把信息和文件列表分别保存到/root/rpmlab/pkg-info.txt和/root/rpmlab/pkg-files.txt。 - 安装该软件包,并把
/root/rpmlab/report.txt写成下面这 4 行。NAME=labhub-tool/VERSION=<설치된 버전-릴리스>/ARCH=noarch/RUN=<labhub-tool 명령 실행 결과 첫 줄>(第 2 项和第 4 项的占位符依次为已安装的版本-release、运行 labhub-tool 命令得到的结果的第一行)
参考
- 构建目录树用
mkdir -p ~/rpmbuild/{SPECS,SOURCES,BUILD,BUILDROOT,RPMS,SRPMS}创建。 - tar 的形式是
tar -czf ~/rpmbuild/SOURCES/labhub-tool-1.0.tar.gz -C /opt/fixtures/rpmbuild labhub-tool-1.0。 - 构建用
rpmbuild -ba ~/rpmbuild/SPECS/labhub-tool.spec。 - 查询未安装的 rpm 要加上
-qp。 - 常见错误 1:在第 6 步中,如果 tar 内最上层目录的名称与
%{name}-%{version}不同,%setup就会失败。 - 常见错误 2:在第 4 步中,如果修改的是二进制文件而不是配置文件,系统就会被弄坏。请先用
rpm -qc确认配置文件列表。
已安装列表与详细信息
创建目录 /root/rpmlab,把已安装的软件包数量写成一行数字,保存到 /root/rpmlab/count.txt。
rpm -qa 每行输出一个。只需要统计数量。
区分文件、配置与文档
把软件包 coreutils-common 的文档文件列表保存到 /root/rpmlab/docs.txt。
-ql、-qc、-qd 这三个选项各自输出不同的列表。
查找文件的所属软件包
把拥有 /usr/bin/ls 的软件包名称写成一行,保存到 /root/rpmlab/owner.txt。
-qf 接收路径,告知它属于哪个软件包。如果只需要名称,请截取出来。
篡改检测
在已安装的软件包中选一个配置文件,在其内容后追加一行,然后执行验证,把标记了被改动的那一行保存到 /root/rpmlab/verify.txt。(请选择 /etc/nanorc 或 /etc/DIR_COLORS 这样安全的文件。)
修改配置文件后再验证,就会出现特定的字符。请把那一行原样保存。
确认安装脚本
查询任意一个已安装软件包的安装脚本,保存到 /root/rpmlab/scripts.txt。如果软件包没有脚本,就会输出这一事实。
有一个查询选项,可以查看软件包在安装前后会执行什么。
rpm 构建
创建 ~/rpmbuild 构建目录树,把 /opt/fixtures/rpmbuild/labhub-tool-1.0 打包成 labhub-tool-1.0.tar.gz 放到 SOURCES/ 中,把 /opt/fixtures/rpmbuild/labhub-tool.spec 放到 SPECS/ 中,然后构建。~/rpmbuild/RPMS/noarch/ 之下必须生成 .rpm。
创建构建目录树,把源码打成 tar 放到 SOURCES 中即可。spec 在夹具中。
拆开所构建的软件包看看
在不安装的情况下查询所构建的 .rpm,把信息和文件列表分别保存到 /root/rpmlab/pkg-info.txt 和 /root/rpmlab/pkg-files.txt。
查询未安装的文件,需要再加一个选项。
综合报告
安装该软件包,并把 /root/rpmlab/report.txt 写成下面这 4 行。
NAME=labhub-tool / VERSION=<설치된 버전-릴리스> / ARCH=noarch / RUN=<labhub-tool 명령 실행 결과 첫 줄>(第 2 项和第 4 项的占位符依次为已安装的版本-release、运行 labhub-tool 命令得到的结果的第一行)
请汇总所构建并安装的软件包的信息。值必须是实际查询的结果。