linux软件包管理-RPM

linux的进阶篇

一,获取程序包的途径

1.系统发行版的光盘或官方的服务器

2,项目的官方站点

3,第三方组织

  • a,fedora-EPEL(推荐)
  • b,搜索引擎:

pkgs
rpmfind
pbone

4,自己制作自己特有的包。

5,挂载系统光盘。

  • 挂载系统光盘获取rpm包的源码,进行安装

    mount /dev/cdrom /mnt
    mount: /mnt: WARNING: device write-protected, mounted read-only.
    取消挂载
    [[email protected] ~]# umount /mnt


二,软件包管理器的职责

  • 1,将二进制程序,库文件,配置文件,帮助文件打包成一个文件;
  • 2,安装软件时需要将二进制文件,库文件,配置文件,帮助文件放到相应的位置。
  • 3,生成数据库,追踪所安装的每一个文件
  • 4,软件卸载时根据安装时生成的数据库对应的文件删除。

三,软件包管理器的核心功能

  • 1,制作软件包
  • 2,安装软件
  • 3,卸载软件
  • 4,升级软件
  • 5,查询软件
  • 6,校验软件
  • 软件包分为可执行程序,库文件,配置文件,帮助文件,头文件。

四,软件包管理

1,程序组成清单(每个包独有的)

  • 文件清单
  • 安装或卸载时运行的脚本文件

2,数据库(公共的)

  • 程序包名称及版本
  • 依赖关系
  • 功能说明
  • 安装生成的各文件的文件路径及校验码信息

软件包不正当的来源或者恶意攻击者的源码包会导致本计算机被挟持为肉鸡,进行工具人行为。
可能会导致对本地的服务器进行Ddos攻击(拒绝服务攻击)


五,软件包分类

1,二进制格式(初始编译好的,装上即用)

  • rpm包作者下载源程序,编译配置完成后,制作rpm包
  • why would we do that? because:

    有些特性时编译时选定的,如果编译时未选定此特性,将无法使用
    rom包的版本会落后于源码包,甚至落后很多。

2,源码格式(需要编译,也叫自己定制化)

  • 命名方式:name-version.tar.gz

如一个文件:apache-tomact-9.0.37.tar.gz(软件名.主版本号.次版本号.发行号.文件格式)


六,软件包管理工具

1,分类

  • 前端工具,常用的前端工具有:
    • yum
    • apt-get
    • zypper(suse上的rpm前端管理工具)
    • dnf(Fedora22+rpm前端管理工具)
  • 后端管理工具,常用的工具有:
    • rpm
    • dpt

2,注意

  • 前端工具是依赖于后端工具的
  • 前端工具是为了自动解决后端工具的依赖关系而存在的。

七,软件安装方式

  • 1,通过前端工具安装
  • 2,通过后端工具安装
  • 3,编译安装

八,RPM包命令规范

在这里插入图片描述
el7的含义(Enterprise Linux 7 企业linux版本7)

1,包的组成

  • 主包:bind-9.7.1-1.el5.i586.rpm
  • 子包:bind-libs-9.7.1-1.el5.i586.rpm
  • 子包:bind-utils-9.7.1-1.el5.i586.rpm

2,包名格式

  • name-version-release-arch.rpm

name:名称
version ::版本(主版本和次版本号)
release:发行号
arch:操作系统版本

3,包名格式说明:

  • major(主版本号):一般都是重大改进–如:mysql被Oracle收购前是5.7版本,被Oracle收购后直接发布了mysql8的版本
  • minor(次版本号):某个子功能发生重大变化(偶数版本是相对稳定的版本,奇数版本一般都是开发版)
  • release (发行号):修正了部分bug,对包进行了调整优化

4,常见的Arch

  • x86:i386,i486,i586,i686
  • x86_64:x64,x84_64,amd64
  • 跟平台无关:noarch

九,RPM包管理

1,RPM是什么及其作用。

  • rpm是Redhat Package Manager的简称,用于管理软件包。红帽包管理器。-
  • rpm有一个强大的数据库/var/lib/rpm。 /var/lib/rpm/Sigmd5这个文件(signature)MD5存放签名指纹信息;
  • rpm的管理工作包括软件的安装、卸载、升级、查询、校验、重建数据库、验证软件包来源合法性等等。考试用到安装,升级、查询,卸载,校验可以通过yum后端工具进行安装。

2,RPM包安装

  • 语法:rpm -ivh /PATH/package_file …等,可装多个
  • 常用选项
-i: 安装
-v: 显示详细信息
-h: 显示安装进度条
–test: 测试安装,但不真正执行安装过程
–nodeps: 忽略依赖关系
–replacepkgs: 重新安装,替换原有安装
–oldpackage: 降级
–force: 强行安装,可以实现重装或降级
–nodigest: 不检查包的完整性
–nosignature: 不检查包的来源合法性
–noscripts: 不执行程序包脚本片断
%pre:安装前脚本 --nopre
%post:安装后脚本 --nopost
%preun:卸载前脚本 --nopreun
%postun:卸载后脚本 --nopostun
  • //安装软件包, 需要指定软件包绝对路径

    [[email protected] ~]# rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
    [[email protected] ~]# rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm

  • //在软件包所在目录下可以不指定绝对路径

    [[email protected] ~]# cd /mnt/Packages/
    [[email protected] Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm

  • //测试一个软件包是否能在该系统上安装

    [[email protected] ~]# rpm -ivh --test /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm

  • //如果软件包存在, 强制再次安装

    [[email protected] ~]# rpm -ivh --force /mnt/Packages/tree-1.5.3-3.el6.x86_64.rpm

  • //安装samba服务需要依赖其他组件, 使用–nodeps可重新强制安装

    [[email protected] ~]# rpm -ivh --nodeps /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm

3 RPM包查询

rpm -q PACKAGE_NAME //查询指定的包是否已安装
rpm -qa //查询已经安装的所有包
rpm -qi PACKAGE_NAME //查询指定包的说明信息
rpm -ql PACKAGE_NAME //查询指定软件包安装后生成的文件列表
rpm -qf /path/to/somefile //查询指定的文件是由哪个rpm包安装生成的
rpm -qc PACKAGE_NAME //查询指定包安装的配置文件
rpm -qd PACKAGE_NAME //查询指定包安装的帮助文件
rpm -q --scripts PACKAGE_NAME //查询指定包中包含的脚本
rpm -q --whatprovides CAPABILITY //查询指定的CAPABILITY(能力)由哪个包所提供
如:rpm -q --whatprovides /bin/cat
rpm -q --whatrequires CAPABILITY //查询指定的CAPABILITY被哪个包所依赖
rpm -q --changelog COMMAND //查询COMMAND的制作日志
rpm -q --scripts PACKAGE_NAME //查询指定软件包包含的所有脚本文件
rpm -qR PACKAGE_NAME //查询指定的软件包所依赖的CAPABILITY
rpm -q --provides PACKAGE_NAME //列出指定软件包所提供的CAPABILITY
rpm -qpi /PATH/TO/PACKAGE_FILE //查询指定未安装包的说明信息
rpm -qpl /PATH/TO/PACKAGE_FILE //查询未安装的软件包会产生哪些文件

4 RPM包升级

  • 语法:

    rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE //如果装有老版本的,则升级;否则,则安装
    rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE //如果装有老版本的,则升级;否则,退出
    –oldpackage:降级
    [[email protected] ~]# rpm -Uvh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm

    • 升级注意事项:

    不要对内核做升级操作
    Linux支持多内核版本并存,因此,可直接安装新版本内核(仅仅是安装最新版本的包或者内核,切记不可对内核进行升级,一旦出现故障可能导致系统不可用)
    如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

5 RPM包卸载

  • //语法:rpm -e PACKAGE_NAME
  • //先查询, 然后卸载

[[email protected] ~]# rpm -qa |grep vsftpd
[[email protected] ~]# rpm -e vsftpd
注意:如果其他包依赖于要卸载的包,这个被依赖的包是无法卸载的,除非强制卸载,强制卸载后依赖于这个包的其他程序将无法正常工作

十,关于rpm的练习

  • 如何查询 util-linux 软件包安装了哪些文件?

    [[email protected] ~]# rpm -ql util-linux
    /etc/adjtime
    /etc/mtab
    /etc/pam.d/login
    /etc/pam.d/remote
    /etc/pam.d/runuser
    /etc/pam.d/runuser-l
    /etc/pam.d/su
    /etc/pam.d/su-l
    /usr/bin/cal
    /usr/bin/chmem
    /usr/bin/chrt
    /usr/bin/col
    /usr/bin/colcrt
    /usr/bin/colrm

  • 如何查询 mkdir 命令是由哪个 RPM 软件包安装的?

    [[email protected] ~]# which mkdir
    /usr/bin/mkdir
    [[email protected] ~]# rpm -qf /usr/bin/mkdir
    coreutils-8.30-6.el8_1.1.x86_64

  • 升级软件包时,-F、-U选项有何区别?

    -F:是安装升级,如果有老版本的就升级安装,如果没有老版本就直接安装现有的版本
    -U:是升级,如果没有老版本的则安装失败,有老版本的则进行软件升级。

  • 如何检查vsftpd软件包是否安装?

    [[email protected] ~]# rpm -qa|grep vsftpd
    vsftpd-3.0.3-31.el8.x86_64

  • 如何检查vsftpd软件包所有的文件存放目录?

    [[email protected] ~]# rpm -qc vsftpd
    /etc/logrotate.d/vsftpd
    /etc/pam.d/vsftpd
    /etc/vsftpd/ftpusers
    /etc/vsftpd/user_list
    /etc/vsftpd/vsftpd.conf
    [[email protected] ~]#

  • 如何检查vsftpd软件包的配置文件?

  • 如何使用rpm安装vsftpd服务?

    [[email protected] ~]# rpm -ivh /mnt/AppStream/Packages/vsftpd-3.0.3-31.el8.x86_64.rpm
    警告:/mnt/AppStream/Packages/vsftpd-3.0.3-31.el8.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 8483c65d: NOKEY
    Verifying… ################################# [100%]
    准备中… ################################# [100%]
    软件包 vsftpd-3.0.3-31.el8.x86_64 已经安装
    [[email protected] ~]#

  • 如何使用rpm强制安装依赖包?

    [[email protected] ~]# rpm -ivh --force vsftpd-3.0.2-27.el7.x86_64.rpm
    警告:vsftpd-3.0.2-27.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    错误:依赖检测失败:
    libcrypto.so.10()(64bit) 被 vsftpd-3.0.2-27.el7.x86_64 需要
    libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit) 被 vsftpd-3.0.2-27.el7.x86_64 需要
    libcrypto.so.10(libcrypto.so.10)(64bit) 被 vsftpd-3.0.2-27.el7.x86_64 需要
    libnsl.so.1()(64bit) 被 vsftpd-3.0.2-27.el7.x86_64 需要
    libssl.so.10()(64bit) 被 vsftpd-3.0.2-27.el7.x86_64 需要
    libssl.so.10(libssl.so.10)(64bit) 被 vsftpd-3.0.2-27.el7.x86_64 需要
    libwrap.so.0()(64bit) 被 vsftpd-3.0.2-27.el7.x86_64 需要
    [[email protected] ~]# rpm -ivh --force /mnt/AppStream/Packages/vsftpd-3.0.3-31.el8.x86_64.rpm
    警告:/mnt/AppStream/Packages/vsftpd-3.0.3-31.el8.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 8483c65d: NOKEY
    Verifying… ################################# [100%]
    准备中… ################################# [100%]
    正在升级/安装…
    1:vsftpd-3.0.3-31.el8 ################################# [100%]

  • 如何使用rpm卸载vsftpd软件包?

    [[email protected] ~]# rpm -e vsftpd

猜你喜欢

转载自blog.csdn.net/LBJ19224/article/details/109224419
今日推荐