RPM包管理与nginx包结构分析
问题记录
- 问题1:如何使用yum命令仅下载RPM包而不安装?
- 问题2:如何查看RPM包内部包含的文件结构?
- 问题3:nginx包在Rocky Linux系统中的文件分布情况是怎样的?
- 问题4:nginx主包与nginx-core包有什么区别?
- 问题5:如何在不安装RPM包的情况下提取其内容?
关键概念
RPM包管理基础
- RPM (Red Hat Package Manager):Red Hat系Linux发行版(如CentOS、Rocky Linux、Fedora)使用的包管理系统
- YUM (Yellowdog Updater, Modified):基于RPM的前端工具,简化包安装和依赖管理
- 主要命令:
yum install <package>:安装包yum remove <package>:卸载包yum update:更新所有包yum search <keyword>:搜索包yum info <package>:查看包信息
仅下载RPM包而不安装
使用--downloadonly和--downloaddir参数可以仅下载包而不安装:
$ sudo yum --downloadonly --downloaddir=./ install nginx
上次元数据过期检查:1:02:21 前,执行于 2025年11月13日 星期四 14时49分10秒。
依赖关系解决。
======================================================================================================================================================================
软件包 架构 版本 仓库 大小
======================================================================================================================================================================
安装:
nginx x86_64 2:1.20.1-22.el9_6.3 appstream 36 k
安装依赖关系:
nginx-core x86_64 2:1.20.1-22.el
参数说明:
--downloadonly:仅下载包,不安装--downloaddir=./:指定下载目录为当前目录
查看下载的RPM包
$ ls -l
总用量 644
-rw-r--r--. 1 root root 37077 11月 13 15:51 nginx-1.20.1-22.el9_6.3.x86_64.rpm
-rw-r--r--. 1 root root 580062 11月 13 15:51 nginx-core-1.20.1-22.el9_6.3.x86_64.rpm
-rw-r--r--. 1 root root 9790 11月 13 15:51 nginx-filesystem-1.20.1-22.el9_6.3.noarch.rpm
-rw-r--r--. 1 root root 24225 11月 13 15:51 rocky-logos-httpd-90.16-1.el9.noarch.rpm
下载的包包括:
nginx:主包nginx-core:核心功能包nginx-filesystem:文件系统布局包rocky-logos-httpd:Rocky Linux HTTP服务器图标包(依赖)
查看RPM包内部结构
使用rpm2cpio和cpio命令可以在不安装的情况下查看RPM包内容:
$ rpm2cpio <package.rpm> | cpio -itv
命令说明:
rpm2cpio:将RPM包转换为cpio归档格式cpio -itv:列出cpio归档内容(不提取)-i:提取模式-t:列出内容-v:详细输出
nginx包结构分析
nginx主包内容
$ rpm2cpio nginx-1.20.1-22.el9_6.3.x86_64.rpm | cpio -itv
-rwxr-xr-x 1 root root 564 Jun 25 22:23 ./usr/bin/nginx-upgrade
-rw-r--r-- 1 root root 651 Jun 25 22:25 ./usr/lib/systemd/system/nginx.service
-r--r--r-- 1 root root 1305 Jun 25 22:25 ./usr/share/man/man3/nginx.3pm.gz
-rw-r--r-- 1 root root 2047 Jun 25 22:23 ./usr/share/man/man8/nginx-upgrade.8.gz
-rw-r--r-- 1 root root 2522 Jun 25 22:25 ./usr/share/man/man8/nginx.8.gz
-rw-r--r-- 1 root root 3332 Jun 25 22:23 ./usr/share/nginx/html/404.html
-rw-r--r-- 1 root root 3404 Jun 25 22:23 ./usr/share/nginx/html/50x.html
drwxr-xr-x 1 root root 0 Jun 25 22:25 ./usr/share/nginx/html/icons
lrwxrwxrwx 1 root root 30 Jun 25 22:25 ./usr/share/nginx/html/icons/poweredby.png -> ../../../pixmaps/poweredby.png
lrwxrwxrwx 1 root root 25 Jun 25 22:25 ./usr/share/nginx/html/index.html -> ../../testpage/index.html
-rw-r--r-- 1 root root 368 Jun 25 22:23 ./usr/share/nginx/html/nginx-logo.png
lrwxrwxrwx 1 root root 14 Jun 25 22:25 ./usr/share/nginx/html/poweredby.png -> nginx-logo.png
lrwxrwxrwx 1 root root 37 Jun 25 22:25 ./usr/share/nginx/html/system_noindex_logo.png -> ../../pixmaps/system-noindex-logo.png
-rw-r--r-- 1 root root 198 May 25 2021 ./usr/share/vim/vimfiles/ftdetect/nginx.vim
-rw-r--r-- 1 root root 29 May 25 2021 ./usr/share/vim/vimfiles/ftplugin/nginx.vim
-rw-r--r-- 1 root root 250 May 25 2021 ./usr/share/vim/vimfiles/indent/nginx.vim
-rw-r--r-- 1 root root 135957 May 25 2021 ./usr/share/vim/vimfiles/syntax/nginx.vim
nginx主包主要包含:
- 升级工具:
/usr/bin/nginx-upgrade - 系统服务:
/usr/lib/systemd/system/nginx.service - 帮助文档:man页面
- 网页文件:默认HTML页面和图标
- Vim支持:nginx配置文件的Vim语法高亮和缩进支持
nginx-core核心包内容
$ rpm2cpio nginx-core-1.20.1-22.el9_6.3.x86_64.rpm | cpio -itv
-rw-r--r-- 1 root root 261 Jun 25 22:23 ./etc/logrotate.d/nginx
-rw-r--r-- 1 root root 1077 Jun 25 22:25 ./etc/nginx/fastcgi.conf
-rw-r--r-- 1 root root 1077 Jun 25 22:25 ./etc/nginx/fastcgi.conf.default
-rw-r--r-- 1 root root 1007 Jun 25 22:25 ./etc/nginx/fastcgi_params
-rw-r--r-- 1 root root 1007 Jun 25 22:25 ./etc/nginx/fastcgi_params.default
-rw-r--r-- 1 root root 2837 Jun 25 22:25 ./etc/nginx/koi-utf
-rw-r--r-- 1 root root 2223 Jun 25 22:25 ./etc/nginx/koi-win
-rw-r--r-- 1 root root 5231 Jun 25 22:25 ./etc/nginx/mime.types
-rw-r--r-- 1 root root 5231 Jun 25 22:25 ./etc/nginx/mime.types.default
-rw-r--r-- 1 root root 2334 Jun 25 22:25 ./etc/nginx/nginx.conf
-rw-r--r-- 1 root root 2656 Jun 25 22:25 ./etc/nginx/nginx.conf.default
-rw-r--r-- 1 root root 636 Jun 25 22:25 ./etc/nginx/scgi_params
-rw-r--r-- 1 root root 636 Jun 25 22:25 ./etc/nginx/scgi_params.default
-rw-r--r-- 1 root root 664 Jun 25 22:25 ./etc/nginx/uwsgi_params
-rw-r--r-- 1 root root 664 Jun 25 22:25 ./etc/nginx/uwsgi_params.default
-rw-r--r-- 1 root root 3610 Jun 25 22:25 ./etc/nginx/win-utf
drwxr-xr-x 1 root root 0 Jun 25 22:25 ./usr/lib/.build-id
drwxr-xr-x 1 root root 0 Jun 25 22:25 ./usr/lib/.build-id/27
lrwxrwxrwx 1 root root 26 Jun 25 22:25 ./usr/lib/.build-id/27/8bd5e36737f33332255b443d7c93770a56180c -> ../../../../usr/sbin/nginx
drwxr-xr-x 1 root root 0 Jun 25 22:25 ./usr/lib64/nginx/modules
-rwxr-xr-x 1 root root 1329024 Jun 25 22:25 ./usr/sbin/nginx
drwxr-xr-x 1 root root 0 Jun 25 22:25 ./usr/share/doc/nginx-core
-rw-r--r-- 1 root root 311503 May 25 2021 ./usr/share/doc/nginx-core/CHANGES
-rw-r--r-- 1 root root 49 May 25 2021 ./usr/share/doc/nginx-core/README
-rw-r--r-- 1 root root 739 Jun 25 22:25 ./usr/share/doc/nginx-core/README.dynamic
drwxr-xr-x 1 root root 0 Jun 25 22:25 ./usr/share/licenses/nginx-core
-rw-r--r-- 1 root root 1397 May 25 2021 ./usr/share/licenses/nginx-core/LICENSE
drwxr-xr-x 1 root root 0 Jun 25 22:25 ./usr/share/nginx/modules
drwxrwx--- 1 root root 0 Jun 25 22:25 ./var/lib/nginx
drwxrwx--- 1 root root 0 Jun 25 22:25 ./var/lib/nginx/tmp
drwx--x--x 1 root root 0 Jun 25 22:25 ./var/log/nginx
nginx-core包包含核心功能:
- 配置文件:
/etc/nginx/目录下的所有配置文件 - 可执行文件:
/usr/sbin/nginx主程序 - 模块目录:
/usr/lib64/nginx/modules/ - 文档:许可证和变更日志
- 数据目录:
/var/lib/nginx/和/var/log/nginx/
包结构总结
文件系统布局
nginx包遵循Linux文件系统标准布局:
/etc/nginx/:配置文件/usr/sbin/:可执行程序/usr/share/nginx/:静态文件和文档/var/lib/nginx/:运行时数据/var/log/nginx/:日志文件/usr/lib/systemd/system/:系统服务定义
包之间的关系
nginx:元包,依赖于nginx-core和其他必要组件nginx-core:包含核心功能和配置nginx-filesystem:定义基本文件系统布局
待深入研究
- RPM包的构建过程和SPEC文件编写
- nginx模块化架构和动态模块加载
- yum仓库配置和包签名验证
- 不同Linux发行版中nginx包的差异
- RPM包的依赖解析机制
参考资料
- Red Hat Enterprise Linux 9 Package Management Guide
- RPM Package Manager Documentation
- Nginx Official Documentation
- How to Use rpm2cpio
- Linux File System Hierarchy Standard
文档信息
- 本文作者:soveran zhong
- 本文链接:https://blog.clockwingsoar.cyou/fragment/rpm-package-analysis/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)