RPM包管理与nginx包结构分析

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包内部结构

使用rpm2cpiocpio命令可以在不安装的情况下查看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包的依赖解析机制

参考资料

文档信息

Search

    Table of Contents