获取程序包的途径



rpm Redhat Package Manager

  • 将二进制程序,库文件,配置文件,帮助文件打包成一个文件; (编码方式)
  • 安装软件时按需将二进制文件,库文件,配置文件,帮助文件放到相应的位置; (下载文件)
  • 生成数据库,追踪所安装的每一个文件; (相当于windows的注册表用来记录下载信息)
  • 软件卸载时根据安装时生成的数据库将对应的文件删除 (删除文件)

    软件包管理的核心功能


  • 制作软件包
  • 安装软件
  • 卸载软件
  • 升级软件
  • 查询软件
  • 校验软件

    软件包管理


  • 程序的组成清单(每个包独有)
    • 文件清单
    • 安装或卸载时运行的脚本
  • 数据库(公共)
    • 程序包名称及版本
    • 依赖关系
    • 功能说明
    • 安装生成的各文件的文件路径及校验码信息
      1. [root@Gin-Kin ~]# md5sum anaconda-ks.cfg
      2. 0f0bbd992ea7667342775fda92e978fd anaconda-ks.cfg

      软件包分类


  • 二进制格式(编译好的,装上就可以用)
    • rpm包作者下载源程序,编译配置完成后,制作成rpm包
    • why would we do that? because:
      • 有些特性是编译时选定的,如果编译时未选定此特性,将无法使用
      • rpm包的版本会落后于源码包,甚至落后很多
  • 源码格式(需要编译,也叫定制)
    • 命名方式:name-VERSION.tar.gz
      • VERSION:major.minor.release
  • 相比较

rmp包对于使用者来说简单方便安装和使用但是能够自定义功能的部分很少
源码包对于使用者来说安装过程较多时间较长相比rmp包较费力但可以完全按使用需求安装相应功能

软件包管理工具


  • 分类:

前端工具,常用的前端工具有以下这些:

  1. - yum Redhat
  2. - apt-get
  3. - zypper (suse上的rpm前端管理工具)
  4. - dnfFedora 22+ rpm前端管理工具)(Redhat
  • 后端工具,常用的后端工具有以下这些:
    • rpm
    • dpt
      • 注意:
  • 前端工具是依赖于后端工具的
  • 前端工具是为了自动解决后端工具的依赖关系而存在的

    软件安装方式


  • 通过前端工具安装
  • 通过后端工具安装
  • 编译安装

    rmp包命令规范


image.png

  • el7指企业红帽Linux7
  • 包的组成
    • 主包:bind-9.7.1-1.el5.i586.rpm (i586指32位)
    • 子包:bind-libs-9.7.1-1.el5.i586.rpm bind-utils-9.7.1-1.el5.i586.rpm
  • 包名格式
    • name-version-release-arch.rpm
      • bind-major.minor.release-release.arch.rpm
  • 包名格式说明
    • major(主版本号):重大改进 (bind-libs-9)
    • minor(次版本号):某个子功能发生重大变化 (bind-libs-9.7.1)
    • release(发行号):修正了部分bug,调整了一点功能 (.el5.i586.rpm )
  • 常见的arch
    • x86:i386,i486,i586,i686
      • i386,i486,i586,i686——-最后86为32位操作系统
    • x86_64:x64,x86_64,amd64
    • 跟平台无关:noarch (在32位和64位中都可以但不可以跨系统)

      rpm包管理


什么是rpm及其作用

rpm是Redhat Package Manager的简称,用于管理软件包。
rpm有一个强大的数据库/var/lib/rpm。

  1. [root@Gin-Kin ~]# ls /var/lib/rpm
  2. Basenames Filetriggername Obsoletename Requirename Supplementname
  3. Conflictname Group Packages Sha1header Transfiletriggername
  4. Dirnames Installtid Providename Sigmd5 Triggername
  5. Enhancename Name Recommendname Suggestname


rpm的管理工作包括软件的安装、卸载、升级、查询、校验、重建数据库、验证软件包来源合法性等等。

RPM包管理(注重查询)

  1. //在使用rpm前先挂载光盘
  2. [root@Gin-Kin ~]# mount /dev/cdrom /mnt
  3. mount: /mnt: WARNING: device write-protected, mounted read-only.
  4. [root@Gin-Kin ~]# ls /mnt/
  5. AppStream BaseOS EFI images isolinux LICENSE media.repo TRANS.TBL
  6. // 语法: rpm -ivh /PATH/TO/PACKAGE_FILE ...
  7. // 常用选项:
  8. -i: 安装
  9. -v: 显示详细信息
  10. -h: 显示安装进度条
  11. //实例
  12. [root@Gin-Kin ~]# rpm -ivh /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm
  13. warning: /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
  14. Verifying... ################################# [100%]
  15. Preparing... ################################# [100%]
  16. Updating / installing...
  17. 1:wget-1.19.5-10.el8 ################################# [100%]
  18. -e:卸载安装包
  19. //实例
  20. [root@Gin-Kin ~]# rpm -e wget
  21. [root@Gin-Kin ~]#
  22. --test: 测试安装,但不真正执行安装过程 -q:查询安装包
  23. //实例
  24. [root@Gin-Kin ~]# rpm -ivh --test /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm
  25. warning: /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
  26. Verifying... ################################# [100%]
  27. Preparing... ################################# [100%]
  28. [root@Gin-Kin ~]# rpm -q wget
  29. package wget is not installed
  30. [root@Gin-Kin ~]#
  31. --nodeps: 忽略依赖关系
  32. --replacepkgs: 重新安装,替换原有安装 //较少使用
  33. --oldpackage: 降级 //较少使用
  34. --force: 强行安装,可以实现重装或降级
  35. //实例
  36. [root@Gin-Kin ~]# rpm -ivh --force /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm
  37. warning: /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
  38. Verifying... ################################# [100%]
  39. Preparing... ################################# [100%]
  40. Updating / installing...
  41. 1:wget-1.19.5-10.el8 ################################# [100%]
  42. [root@Gin-Kin ~]# rpm -q wget
  43. wget-1.19.5-10.el8.x86_64
  44. --nodigest: 不检查包的完整性
  45. --nosignature: 不检查包的来源合法性
  46. --noscripts: 不执行程序包脚本片断 //较少使用
  47. %pre:安装前脚本 --nopre
  48. %post:安装后脚本 --nopost
  49. %preun:卸载前脚本 --nopreun
  50. %postun:卸载后脚本 --nopostun
  51. //安装软件包, 需要指定软件包绝对路径
  52. [root@localhost ~]# rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
  53. [root@localhost ~]# rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm
  54. //在软件包所在目录下可以不指定绝对路径
  55. [root@localhost ~]# cd /mnt/Packages/
  56. [root@localhost Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm
  57. //测试一个软件包是否能在该系统上安装
  58. [root@localhost ~]# rpm -ivh --test /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm
  59. //如果软件包存在, 强制再次安装
  60. [root@localhost ~]# rpm -ivh --force /mnt/Packages/tree-1.5.3-3.el6.x86_64.rpm
  61. //安装samba服务需要依赖其他组件, 使用--nodeps可重新强制安装
  62. [root@localhost ~]# rpm -ivh --nodeps /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm

RPM包查询


  1. rpm -q PACKAGE_NAME //查询指定的包是否已安装
  2. //实例
  3. [root@Gin-Kin ~]# rpm -q wget
  4. wget-1.19.5-10.el8.x86_64
  5. rpm -qa //查询已经安装的所有包
  6. //实例
  7. [root@Gin-Kin ~]# rpm -qa | head -n 5
  8. sudo-1.8.29-6.el8.x86_64
  9. libconfig-1.5-9.el8.x86_64
  10. hypervfcopyd-0-0.29.20180415git.el8.x86_64
  11. javapackages-filesystem-5.3.0-1.module_el8.0.0+11+5b8c10bd.noarch
  12. lsof-4.93.2-1.el8.x86_64
  13. rpm -qi PACKAGE_NAME //查询指定包的说明信息
  14. //实例
  15. [root@Gin-Kin ~]# rpm -qi wget
  16. Name : wget
  17. Version : 1.19.5
  18. Release : 10.el8
  19. Architecture: x86_64
  20. Install Date: Fri 08 Jul 2022 03:21:18 PM CST
  21. Group : Applications/Internet
  22. Size : 2895440
  23. License : GPLv3+
  24. Signature : RSA/SHA256, Wed 29 Apr 2020 12:08:57 AM CST, Key ID 05b555b38483c65d
  25. Source RPM : wget-1.19.5-10.el8.src.rpm
  26. Build Date : Mon 27 Apr 2020 10:09:54 AM CST
  27. Build Host : x86-02.mbox.centos.org
  28. Relocations : (not relocatable)
  29. Packager : CentOS Buildsys <bugs@centos.org>
  30. Vendor : CentOS
  31. URL : http://www.gnu.org/software/wget/
  32. Summary : A utility for retrieving files using the HTTP or FTP protocols
  33. Description :
  34. GNU Wget is a file retrieval utility which can use either the HTTP or
  35. FTP protocols. Wget features include the ability to work in the
  36. background while you are logged out, recursive retrieval of
  37. directories, file name wildcard matching, remote file timestamp
  38. storage and comparison, use of Rest with FTP servers and Range with
  39. HTTP servers to retrieve files over slow or unstable connections,
  40. support for Proxy servers, and configurability.
  41. rpm -ql PACKAGE_NAME //查询指定软件包安装后生成的文件列表
  42. //实例
  43. [root@Gin-Kin ~]# rpm -ql wget
  44. /etc/wgetrc
  45. /usr/bin/wget
  46. /usr/lib/.build-id
  47. /usr/lib/.build-id/8d
  48. /usr/lib/.build-id/8d/ec58c9a41fa3f0d9966de12c634bfa25b11451
  49. /usr/share/doc/wget
  50. .......
  51. /usr/share/man/man1/wget.1.gz
  52. rpm -qf /path/to/somefile //查询指定的文件是由哪个rpm包安装生成的
  53. //实例
  54. rpm -qc PACKAGE_NAME //查询指定包安装的配置文件
  55. //实例
  56. [root@Gin-Kin ~]# rpm -qc wget
  57. /etc/wgetrc
  58. rpm -qd PACKAGE_NAME //查询指定包安装的帮助文件
  59. //实例
  60. [root@Gin-Kin ~]# rpm -qd wget
  61. /usr/share/doc/wget/AUTHORS
  62. /usr/share/doc/wget/COPYING
  63. /usr/share/doc/wget/MAILING-LIST
  64. /usr/share/doc/wget/NEWS
  65. /usr/share/doc/wget/README
  66. /usr/share/doc/wget/sample.wgetrc
  67. /usr/share/info/wget.info.gz
  68. /usr/share/man/man1/wget.1.gz
  69. rpm -q --scripts PACKAGE_NAME //查询指定包中包含的脚本
  70. //实例
  71. [root@Gin-Kin ~]# rpm -q --scripts wget
  72. postinstall scriptlet (using /bin/sh):
  73. /sbin/install-info /usr/share/info/wget.info.gz /usr/share/info/dir || :
  74. preuninstall scriptlet (using /bin/sh):
  75. if [ "$1" = 0 ]; then
  76. /sbin/install-info --delete /usr/share/info/wget.info.gz /usr/share/info/dir || :
  77. fi
  78. rpm -q --whatprovides CAPABILITY //查询指定的CAPABILITY(能力)由哪个包所提供
  79. 如:rpm -q --whatprovides /bin/cat
  80. //实例
  81. [root@Gin-Kin ~]# rpm -q --whatprovides vim
  82. vim-enhanced-8.0.1763-15.el8.x86_64
  83. rpm -q --whatrequires CAPABILITY //查询指定的CAPABILITY被哪个包所依赖
  84. //实例
  85. [root@Gin-Kin ~]# rpm -q --whatrequires vim
  86. no package requires vim
  87. [root@Gin-Kin ~]# rpm -q --whatrequires passwd
  88. usermode-1.113-1.el8.x86_64
  89. rpm -q --changelog COMMAND //查询COMMAND的制作日志
  90. //实例
  91. [root@Gin-Kin ~]# rpm -q --changelog passwd
  92. * Fri Dec 13 2019 Jiri Kucera <jkucera@redhat.com> - 0.80-3
  93. - fix inconsistencies in manpage
  94. - fix incorrect -S output
  95. Resolves: #1612906, #1740168
  96. .....
  97. * Sat Apr 10 1999 Cristian Gafton <gafton@redhat.com>
  98. - first build from the new source code base.
  99. rpm -q --scripts PACKAGE_NAME //查询指定软件包包含的所有脚本文件
  100. //实例
  101. [root@Gin-Kin ~]# rpm -q --scripts wget
  102. postinstall scriptlet (using /bin/sh):
  103. /sbin/install-info /usr/share/info/wget.info.gz /usr/share/info/dir || :
  104. preuninstall scriptlet (using /bin/sh):
  105. if [ "$1" = 0 ]; then
  106. /sbin/install-info --delete /usr/share/info/wget.info.gz /usr/share/info/dir || :
  107. fi
  108. rpm -qR PACKAGE_NAME //查询指定的软件包所依赖的CAPABILITY
  109. //实例
  110. [root@Gin-Kin ~]# rpm -qR wget
  111. /bin/sh
  112. /bin/sh
  113. /sbin/install-info
  114. /sbin/install-info
  115. config(wget) = 1.19.5-10.el8
  116. .....
  117. rpmlib(PayloadIsXz) <= 5.2-1
  118. rtld(GNU_HASH)
  119. rpm -q --provides PACKAGE_NAME //列出指定软件包所提供的CAPABILITY
  120. //实例
  121. [root@Gin-Kin ~]# rpm -qR --provides wget
  122. /bin/sh
  123. /bin/sh
  124. /sbin/install-info
  125. /sbin/install-info
  126. config(wget) = 1.19.5-10.el8
  127. ......
  128. wget = 1.19.5-10.el8
  129. wget(x86-64) = 1.19.5-10.el8
  130. rpm -qpi /PATH/TO/PACKAGE_FILE //查询指定未安装包的说明信息
  131. //实例
  132. [root@Gin-Kin mnt]# rpm -qpi /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm
  133. warning: /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
  134. Name : wget
  135. Version : 1.19.5
  136. Release : 10.el8
  137. Architecture: x86_64
  138. Install Date: (not installed)
  139. Group : Applications/Internet
  140. Size : 2895440
  141. License : GPLv3+
  142. Signature : RSA/SHA256, Wed 29 Apr 2020 12:08:57 AM CST, Key ID 05b555b38483c65d
  143. Source RPM : wget-1.19.5-10.el8.src.rpm
  144. Build Date : Mon 27 Apr 2020 10:09:54 AM CST
  145. Build Host : x86-02.mbox.centos.org
  146. Relocations : (not relocatable)
  147. Packager : CentOS Buildsys <bugs@centos.org>
  148. Vendor : CentOS
  149. URL : http://www.gnu.org/software/wget/
  150. Summary : A utility for retrieving files using the HTTP or FTP protocols
  151. Description :
  152. GNU Wget is a file retrieval utility which can use either the HTTP or
  153. FTP protocols. Wget features include the ability to work in the
  154. background while you are logged out, recursive retrieval of
  155. directories, file name wildcard matching, remote file timestamp
  156. storage and comparison, use of Rest with FTP servers and Range with
  157. HTTP servers to retrieve files over slow or unstable connections,
  158. support for Proxy servers, and configurability.
  159. rpm -qpl /PATH/TO/PACKAGE_FILE //查询未安装的软件包会产生哪些文件
  160. //实例
  161. [root@Gin-Kin mnt]# rpm -qpl /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm
  162. warning: /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
  163. /etc/wgetrc
  164. /usr/bin/wget
  165. /usr/lib/.build-id
  166. /usr/lib/.build-id/8d
  167. /usr/lib/.build-id/8d/ec58c9a41fa3f0d9966de12c634bfa25b11451
  168. /usr/share/doc/wget
  169. /usr/share/doc/wget/AUTHORS
  170. /usr/share/doc/wget/COPYING
  171. /usr/share/doc/wget/MAILING-LIST
  172. /usr/share/doc/wget/NEWS
  173. /usr/share/doc/wget/README
  174. /usr/share/doc/wget/sample.wgetrc
  175. /usr/share/info/wget.info.gz
  176. .......
  177. /usr/share/man/man1/wget.1.gz
  178. //查询vsftpd这个rpm包是否安装
  179. [root@localhost ~]# rpm -q vsftpd
  180. //模糊查找系统已安装的rpm
  181. [root@localhost ~]# rpm -qa |grep ftp
  182. //查询vsftpd软件包的相关信息
  183. [root@localhost ~]# rpm -qi vsftpd
  184. //查询rpm包所安装的文件
  185. [root@localhost ~]# rpm -ql vsftpd
  186. //查询rpm包相关的配置文件
  187. [root@localhost ~]# rpm -qc vsftpd
  188. //查询配置文件或命令来自于哪个rpm
  189. [root@localhost ~]# rpm -qf /etc/vsftpd/vsftpd.conf
  190. [root@localhost ~]# rpm -qf /usr/sbin/vsftpd
  191. //查询未安装的软件包会产生哪些文件
  192. [root@localhost ~]# rpm -qlp /mnt/Packages/samba-3.6.23-41.el6.x86_64.rpm
  193. //查询未安装的软件包会产生哪些文件
  194. [root@localhost ~]# rpm -qip /mnt/Packages/samba-3.6.23-41.el6.x86_64.rpm

RPM包升级


  1. //跟上绝对路径
  2. rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE //如果装有老版本的,则升级;否则,则安装
  3. rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE //如果装有老版本的,则升级;否则,退出
  4. --oldpackage:降级
  5. //实例
  6. [root@Gin-Kin ~]# ls //这里事先下载好了一个老版本的wget软件包
  7. anaconda-ks.cfg wget-1.14-18.el7_6.1.x86_64.rpm
  8. ///这里使用-Uvh升级 注意在没有安装老版本的情况下 将自动安装最新版本
  9. [root@Gin-Kin ~]# rpm -Uvh /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm warning: /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
  10. Verifying... ################################# [100%]
  11. Preparing... ################################# [100%]
  12. Updating / installing...
  13. 1:wget-1.19.5-10.el8 ################################# [100%]
  14. ///-Uvh在安装老版本的情况下 将进行升级
  15. [root@Gin-Kin ~]# rpm -ivh --nodeps wget-1.14-18.el7_6.1.x86_64.rpm
  16. warning: wget-1.14-18.el7_6.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
  17. Verifying... ################################# [100%]
  18. Preparing... ################################# [100%]
  19. Updating / installing...
  20. 1:wget-1.14-18.el7_6.1 ################################# [100%]
  21. [root@Gin-Kin ~]# rpm -Uvh /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm warning: /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
  22. Verifying... ################################# [100%]
  23. Preparing... ################################# [100%]
  24. Updating / installing...
  25. 1:wget-1.19.5-10.el8 ################################# [ 50%]
  26. Cleaning up / removing...
  27. 2:wget-1.14-18.el7_6.1 ################################# [100%]
  28. [root@Gin-Kin ~]# rpm -qa | grep wget
  29. wget-1.19.5-10.el8.x86_64
  30. //实例
  31. [root@Gin-Kin ~]# rpm -qa | grep wget //这里使用-Fvh因为没安装老版本所有升级时会退出
  32. [root@Gin-Kin ~]# rpm -Fvh /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm warning: /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
  33. ///安装老版本后
  34. [root@Gin-Kin ~]# rpm -ivh --nodeps wget-1.14-18.el7_6.1.x86_64.rpm
  35. warning: wget-1.14-18.el7_6.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
  36. Verifying... ################################# [100%]
  37. Preparing... ################################# [100%]
  38. Updating / installing...
  39. 1:wget-1.14-18.el7_6.1 ################################# [100%]
  40. [root@Gin-Kin ~]# rpm -Fvh /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm warning: /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
  41. Verifying... ################################# [100%]
  42. Preparing... ################################# [100%]
  43. Updating / installing...
  44. 1:wget-1.19.5-10.el8 ################################# [ 50%]
  45. Cleaning up / removing...
  46. 2:wget-1.14-18.el7_6.1 ################################# [100%]
  47. [root@Gin-Kin ~]# rpm -qa | grep wget
  48. wget-1.19.5-10.el8.x86_64
  49. [root@localhost ~]# rpm -Uvh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm

升级注意事项:

  • 不要对内核做升级操作
    • Linux支持多内核版本并存,因此,可直接安装新版本内核
  • 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

    RPM包卸载


  1. //语法:rpm -e PACKAGE_NAME
  2. //先查询, 然后卸载
  3. [root@Gin-Kin ~]# rpm -qa | grep wget
  4. wget-1.19.5-10.el8.x86_64
  5. [root@Gin-Kin ~]# rpm -e wget
  6. [root@Gin-Kin ~]#

注意:如果其他包依赖于要卸载的包,这个被依赖的包是无法卸载的,除非强制卸载,强制卸载后依赖于这个包的其他程序将无法正常工作

rpm的弊端


前面我们讲了下rpm,那么rpm有什么弊端呢?其弊端是显而易见的,当用rpm安装软件时,若遇到有依赖关系的软件,必须先安装依赖的软件才能继续安装我们要安装的软件,当依赖关系很复杂的情况下,这种安装方式就很让人头疼,所以我们需要另一种安装方式来解决这个问题,今天我们要来学习的就是这样一个工具—yum

yum的优劣势


yum有什么优势呢?
yum最大的优势就是能够解决rpm的依赖问题,yum能够自动解决软件安装时的依赖关系。
当然了,有优势就有劣势,人无完人嘛,软件也是一样的,
yum的缺陷
就是如果在未完成安装的情况下强行中止安装过程,下次再安装时将无法解决依赖关系,Fedora22+、redhat7和centos7等可以通过手动安装dnf工具来解决此问题。
dnf是redhat7上用来代替yum的一个工具
其存在的意义就是处理yum的缺陷,但其用法与yum是完全一样的,甚至连选项都是一样的,你可以理解为dnf就是yum,只是换了个名字而已。
所以说只要学会了yum就自然会dnf,大家不用担心学了yum又要去学dnf之类的问题

什么是yum及其作用


那么什么是yum呢?(黄狗更新管理器)
yum是yellowdog update manager的简称,它能够实现rpm管理的所有操作,并能够自动解决各rpm包之间的依赖关系。yum是rpm的前端工具,是基于rpm来实现软件的管理的一个工具。
你不能用yum去管理windows的exe程序包,也不能用yum去管理ubuntu的deb程序包,只能用yum来管理redhat系列的rpm包

挂载光盘


  • 插入光盘
  • 执行以下命令
    1. [root@Gin-Kin ~]# mount /dev/cdrom /mnt
    2. mount: /dev/sr0 is write-protected, mounting read-only
    3. [root@Gin-Kin ~]# ls /mnt/
    4. addons EULA GPL isolinux media.repo repodata RPM-GPG-KEY-redhat-release
    5. EFI extra_files.json images LiveOS Packages RPM-GPG-KEY-redhat-beta TRANS.TBL
    6. [root@Gin-Kin ~]#

    yum的原理


image.png
yum的工作需要两部分来合作,一部分是yum服务器,另一部分就是client的yum工具。下面分别介绍两部分工作原理。
yum服务器端工作原理
所有要发行的rpm包都放在yum服务器上以提供别人来下载,rpm包根据kernel的版本号,cpu的版本号分别编译发布。
yum服务器只要提供简单的下载就可以了,ftp或者http的形式都可以。
yum服务器有一个最重要的环节就是整理出每个rpm包的基本信息,包括rpm包对应的版本号、conf文件、binary信息,以及很关键的依赖信息。
在yum服务器上提供了createrepo工具,用于把rpm包的基本概要信息做成一张“清单”,这张“清单”就是描述每个rpm包的spec文件中信息。
client端工作原理
client每次调用yum install或者search的时候,都会去解析/etc/yum.repos.d下面所有以.repo结尾的配置文件,这些配置文件指定了yum服务器的地址。
yum会定期去更新yum服务器上的rpm包清单,然后把清单下载保存到yum客户端自己的cache里面,根据/etc/yum.conf里配置(默认是/var/cache/dnf下面),每次调用yum装包的时候都会去这个cache目录下去找清单,根据清单里的rpm包描述从而来确定安装包的名字、版本号、所需要的依赖包等,然后再去yum服务器下载rpm安装。(前提是不存在rpm包的cache)

yum的配置文件


  • 配置文件有哪些:
    • /etc/yum.conf 作用:为所有仓库提供公共配置
    • /etc/yum.repos.d/*.repo 作用:为仓库的指向提供配置
  • yum的repo配置文件中可用的变量:
    • $releaseversion:当前OS的发行版的主版本号
    • $arch:平台类型
    • $basearch:基础平台

为yum定义repo文件:

  1. [Repo_Name]:仓库名称
  2. name:描述信息
  3. baseurl:仓库的具体路径,接受以下三种类型
  4. ftp://
  5. http://
  6. file:///
  7. enabled:可选值{10},1为启用此仓库,0为禁用此仓库
  8. gpgcheck:可选值{10},1为检查软件包来源合法性,0为不检查来源
  9. 如果gpgcheck设为1,则必须用gpgkey定义密钥文件的具体路径
  10. gpgkey=/PATH/TO/KEY
  1. //最好不要做更改
  2. vim /etc/yum.conf
  3. cachedir=/var/cache/yum/$basearch/$releasever //缓存目录
  4. keepcache=0 //缓存软件包, 1启动 0 关闭
  5. debuglevel=2 //调试级别
  6. logfile=/var/log/yum.log //日志记录位置
  7. exactarch=1 //检查平台是否兼容
  8. obsoletes=1 //检查包是否废弃
  9. gpgcheck=1 //检查来源是否合法,需要有制作者的公钥信息
  10. plugins=1 //是否启用插件
  11. tolerant={1|0} //容错功能,1为开启,0为关闭,当设为0时,如果用yum安装多个软件包且其中某个软件包已经安装过就会报错;当设为1时,当要安装的软件已经安装时自动忽略
  12. installonly_limit=5
  13. bugtracker_url
  14. # metadata_expire=90m //每小时手动检查元数据
  15. # in /etc/yum.repos.d //包含repos.d目录