#软件管理

#软件管理
###1. 获取程序包的途径
系统发行版的光盘或官方的服务器
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
项目官方站点
第三方组织
Fedora-EPEL(推荐)
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
自己制作
###2. 软件包管理器的职责
将二进制程序,库文件,配置文件,帮助文件打包成一个文件;
安装软件时按需将二进制文件,库文件,配置文件,帮助文件放到相应的位置;
生成数据库,追踪所安装的每一个文件;
软件卸载时根据安装时生成的数据库将对应的文件删除
###3. 软件包管理器的核心功能
制作软件包
安装软件
卸载软件
升级软件
查询软件
校验软件
###4. 软件包管理
程序的组成清单(每个包独有)
文件清单
安装或卸载时运行的脚本
数据库(公共)
程序包名称及版本
依赖关系
功能说明
安装生成的各文件的文件路径及校验码信息
###5. 软件包分类

  • 二进制格式(编译好的,装上就可以用)
    rpm包作者下载源程序,编译配置完成后,制作成rpm包
    why would we do that? because:
    有些特性是编译时选定的,如果编译时未选定此特性,将无法使用
    rpm包的版本会落后于源码包,甚至落后很多
  • 源码格式(需要编译,也叫定制)
    命名方式:name-VERSION.tar.gz
    VERSION:major.minor.release
    ###6. 软件包管理工具
  • 分类:
    前端工具,常用的前端工具有以下这些:
  • yum
  • apt-get
  • zypper (suse上的rpm前端管理工具)
  • dnf(Fedora 22+ rpm前端管理工具)
    后端工具,常用的后端工具有以下这些:
  • rpm
  • dpt
    注意:
    前端工具是依赖于后端工具的
    前端工具是为了自动解决后端工具的依赖关系而存在的
    ###7. 软件安装方式
    通过前端工具安装
    通过后端工具安装
    编译安装
    ###8. rpm包命名规范
  • 包的组成
    主包: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
  • 包名格式
    name-version-release-arch.rpm
    bind-major.minor.release-release.arch.rpm
  • 包名格式说明
    major(主版本号):重大改进
    minor(次版本号):某个子功能发生重大变化
    release(发行号):修正了部分bug,调整了一点功能
  • 常见的arch
    x86:i386,i486,i586,i686
    x86_64:x64,x86_64,amd64
    跟平台无关:noarch
    ###9. rpm包管理
    ###9.1 什么是rpm及其作用
    rpm是Redhat Package Manager的简称,用于管理软件包。
    rpm有一个强大的数据库/var/lib/rpm。
    rpm的管理工作包括软件的安装、卸载、升级、查询、校验、重建数据库、验证软件包来源合法性等等。
    ###9.2 RPM包安装
    // 语法: rpm -ivh /PATH/TO/PACKAGE_FILE …
    // 常用选项:
    -i: 安装
    -v: 显示详细信息
    -h: 显示安装进度条
[root@localhost ~]# rpm -ivh /mnt/AppStream/Packages/zsh-html-5.5.1-6.el8_1.2.noarch.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:zsh-html-5.5.1-6.el8_1.2         ################################# [100%]

–test: 测试安装,但不真正执行安装过程

[root@localhost ~]# rpm -ivh --test /mnt/AppStream/Packages/sshpass-1.09-4.el8.x86_64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]

–nodeps: 忽略依赖关系

[root@localhost ~]# rpm -ivh --nodeps /mnt/AppStream/Packages/httpd-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
        package httpd-2.4.37-47.module_el8.6.0+1111+ce6f4ceb.1.x86_64 (which is newer than httpd-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64) is already installed

–replacepkgs: 重新安装,替换原有安装

[root@localhost ~]# rpm -qa | grep wget
wget-1.19.5-10.el8.x86_64
[root@localhost ~]# rpm -ivh --replacepkgs /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:wget-1.19.5-10.el8               ################################# [100%]

–oldpackage: 降级

[root@localhost ~]# rpm -qa | grep wget
wget-1.19.5-10.el8.x86_64
[root@localhost ~]# rpm -ivh --oldpackage /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
        package wget-1.19.5-10.el8.x86_64 is already installed

–force: 强行安装,可以实现重装或降级

[root@localhost ~]# rpm -ivh --force /mnt/AppStream/Packages/ftp-0.17-78.el8.x86_64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:ftp-0.17-78.el8                  ################################# [100%]

–nodigest: 不检查包的完整性

[root@localhost ~]# rpm -ivh --nodigest /mnt/AppStream/Packages/ftp-0.17-78.el8.x86_64.rpm 
Preparing...                          ################################# [100%]
        package ftp-0.17-78.el8.x86_64 is already installed

–nosignature: 不检查包的来源合法性

[root@localhost ~]# rpm -ivh --nosignature /mnt/AppStream/Packages/ftp-0.17-78.el8.x86_64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
        package ftp-0.17-78.el8.x86_64 is already installed

–noscripts: 不执行程序包脚本片断
%pre:安装前脚本 --nopre
%post:安装后脚本 --nopost
%preun:卸载前脚本 --nopreun
%postun:卸载后脚本 --nopostun
//安装软件包, 需要指定软件包绝对路径
[root@localhost ~]# rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
[root@localhost ~]# rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm

//在软件包所在目录下可以不指定绝对路径
[root@localhost ~]# cd /mnt/Packages/
[root@localhost Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm

//测试一个软件包是否能在该系统上安装
[root@localhost ~]# rpm -ivh --test /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm

//如果软件包存在, 强制再次安装
[root@localhost ~]# rpm -ivh --force /mnt/Packages/tree-1.5.3-3.el6.x86_64.rpm

//安装samba服务需要依赖其他组件, 使用–nodeps可重新强制安装
[root@localhost ~]# rpm -ivh --nodeps /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
###9.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 //查询未安装的软件包会产生哪些文件
//查询httpd这个rpm包是否安装

[root@localhost ~]# rpm -q httpd
httpd-2.4.37-47.module_el8.6.0+1111+ce6f4ceb.1.x86_64

//模糊查找系统已安装的rpm包

[root@localhost ~]# rpm -qa | grep httpd
httpd-tools-2.4.37-47.module_el8.6.0+1111+ce6f4ceb.1.x86_64
httpd-filesystem-2.4.37-47.module_el8.6.0+1111+ce6f4ceb.1.noarch
centos-logos-httpd-85.8-2.el8.noarch
httpd-2.4.37-47.module_el8.6.0+1111+ce6f4ceb.1.x86_64

//查询httpd软件包的相关信息

[root@localhost ~]# rpm -qi httpd
Name        : httpd
Version     : 2.4.37
Release     : 47.module_el8.6.0+1111+ce6f4ceb.1
Architecture: x86_64
Install Date: Mon Jul 11 14:27:07 2022
Group       : System Environment/Daemons
Size        : 4499649
License     : ASL 2.0
Signature   : RSA/SHA256, Wed Apr  6 23:16:12 2022, Key ID 05b555b38483c65d
Source RPM  : httpd-2.4.37-47.module_el8.6.0+1111+ce6f4ceb.1.src.rpm
Build Date  : Wed Apr  6 22:55:33 2022
Build Host  : x86-01.mbox.centos.org
Relocations : (not relocatable)
Packager    : CentOS Buildsys <bugs@centos.org>
Vendor      : CentOS
URL         : https://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

//查询rpm包所安装的文件

[root@localhost ~]# rpm -ql httpd
/etc/httpd/conf
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
/etc/httpd/conf.modules.d/00-optional.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-systemd.conf
/etc/httpd/conf.modules.d/01-cgi.conf
/etc/httpd/conf.modules.d/README
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/httpd/logs
/etc/httpd/modules

//查询rpm包相关的配置文件

[root@localhost ~]# rpm -qc httpd
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
/etc/httpd/conf.modules.d/00-optional.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-systemd.conf
/etc/httpd/conf.modules.d/01-cgi.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/logrotate.d/httpd
/etc/sysconfig/htcacheclean

//查询配置文件或命令来自于哪个rpm包

[root@localhost ~]# rpm -qf /etc/httpd/conf.d/autoindex.conf
httpd-2.4.37-47.module_el8.6.0+1111+ce6f4ceb.1.x86_64
[root@localhost ~]# rpm -qf /usr/share/httpd/icons/small/uu.png
httpd-2.4.37-47.module_el8.6.0+1111+ce6f4ceb.1.x86_64

//查询未安装的软件包会产生哪些文件

[root@localhost ~]# rpm -qlp /mnt/AppStream/Packages/samba-vfs-iouring-4.15.5-0.el8.x86_64.rpm
/usr/lib/.build-id
/usr/lib/.build-id/27/459288a95cff746c550db23429ea2cf654c69d
/usr/lib64/samba/vfs/io_uring.so
/usr/share/man/man8/vfs_io_uring.8.gz

//查询未安装的软件包会产生哪些文件

[root@localhost ~]# rpm -qip /mnt/AppStream/Packages/samba-vfs-iouring-4.15.5-0.el8.x86_64.rpm
Name        : samba-vfs-iouring
Epoch       : 0
Version     : 4.15.5
Release     : 0.el8
Architecture: x86_64
Install Date: (not installed)
Group       : Unspecified
Size        : 26687
License     : GPLv3+ and LGPLv3+
Signature   : RSA/SHA256, Sun Feb  6 01:15:09 2022, Key ID 05b555b38483c65d
Source RPM  : samba-4.15.5-0.el8.src.rpm
Build Date  : Sat Feb  5 15:16:48 2022
Build Host  : x86-02.mbox.centos.org
Relocations : (not relocatable)
Packager    : CentOS Buildsys <bugs@centos.org>
Vendor      : CentOS
URL         : https://www.samba.org
Summary     : Samba VFS module for io_uring
Description :
Samba VFS module for io_uring instance integration.

###9.4 RPM包升级
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE //如果装有老版本的,则升级;否则,则安装
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE //如果装有老版本的,则升级;否则,退出
–oldpackage:降级

[root@localhost ~]# rpm -Uvh /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
        package wget-1.19.5-10.el8.x86_64 is already installed
[root@localhost ~]# rpm -Fch /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm 

升级注意事项:

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

//先查询, 然后卸载

[root@localhost ~]# rpm -qa | grep vsftpd
vsftpd-3.0.3-35.el8.x86_64
[root@localhost ~]# rpm -e vsftpd
[root@localhost ~]# rpm -qa | grep vsftpd
[root@localhost ~]# 

注意:如果其他包依赖于要卸载的包,这个被依赖的包是无法卸载的,除非强制卸载,强制卸载后依赖于这个包的其他程序将无法正常工作
#yum工具的使用
###1. rpm的弊端
前面我们讲了下rpm,那么rpm有什么弊端呢?其弊端是显而易见的,当用rpm安装软件时,若遇到有依赖关系的软件,必须先安装依赖的软件才能继续安装我们要安装的软件,当依赖关系很复杂的情况下,这种安装方式就很让人头疼,所以我们需要另一种安装方式来解决这个问题,今天我们要来学习的就是这样一个工具–yum
###2. yum的优劣势
yum有什么优势呢?yum最大的优势就是能够解决rpm的依赖问题,yum能够自动解决软件安装时的依赖关系。
当然了,有优势就有劣势,人无完人嘛,软件也是一样的,yum的缺陷就是如果在未完成安装的情况下强行中止安装过程,下次再安装时将无法解决依赖关系,Fedora22+、redhat7和centos7等可以通过手动安装dnf工具来解决此问题。
dnf是redhat7上用来代替yum的一个工具,其存在的意义就是处理yum的缺陷,但其用法与yum是完全一样的,甚至连选项都是一样的,你可以理解为dnf就是yum,只是换了个名字而已。所以说只要学会了yum就自然会dnf,大家不用担心学了yum又要去学dnf之类的问题
###3. 什么是yum及其作用
那么什么是yum呢?yum是yellowdog update manager的简称,它能够实现rpm管理的所有操作,并能够自动解决各rpm包之间的依赖关系。yum是rpm的前端工具,是基于rpm来实现软件的管理的一个工具。
你不能用yum去管理windows的exe程序包,也不能用yum去管理ubuntu的deb程序包,只能用yum来管理redhat系列的rpm包
###4. 挂载光盘
插入光盘
执行以下命令

[root@localhost ~]# mount /dev/cdrom /mnt
mount: /mnt: /dev/sr0 already mounted on /run/media/roo/CentOS-Stream-8-x86_64-dvd.
[root@localhost ~]# ls /mnt/
AppStream  BaseOS  EFI  LICENSE  TRANS.TBL  images  isolinux  media.repo
[root@localhost ~]# 

###5. yum的原理
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/yum下面),每次调用yum装包的时候都会去这个cache目录下去找清单,根据清单里的rpm包描述从而来确定安装包的名字、版本号、所需要的依赖包等,然后再去yum服务器下载rpm安装。(前提是不存在rpm包的cache)
    ###6. yum的配置文件
    配置文件有哪些:
    /etc/yum.conf 作用:为所有仓库提供公共配置
    /etc/yum.repos.d/*.repo 作用:为仓库的指向提供配置
    yum的repo配置文件中可用的变量:
    $releaseversion:当前OS的发行版的主版本号
    $arch:平台类型
    b a s e a r c h :基础平台为 y u m 定义 r e p o 文件: R e p o N a m e ] :仓库名称 n a m e :描述信息 b a s e u r l :仓库的具体路径,接受以下三种类型 f t p : / / h t t p : / / f i l e : / / / e n a b l e d :可选值{ 1 | 0 }, 1 为启用此仓库, 0 为禁用此仓库 g p g c h e c k :可选值{ 1 | 0 }, 1 为检查软件包来源合法性, 0 为不检查来源如果 g p g c h e c k 设为 1 ,则必须用 g p g k e y 定义密钥文件的具体路径 g p g k e y = / P A T H / T O / K E Y v i m / e t c / y u m . c o n f c a c h e d i r = / v a r / c a c h e / y u m / basearch:基础平台 为yum定义repo文件: Repo_Name]:仓库名称 name:描述信息 baseurl:仓库的具体路径,接受以下三种类型 ftp:// http:// file:/// enabled:可选值{1|0},1为启用此仓库,0为禁用此仓库 gpgcheck:可选值{1|0},1为检查软件包来源合法性,0为不检查来源 如果gpgcheck设为1,则必须用gpgkey定义密钥文件的具体路径 gpgkey=/PATH/TO/KEY vim /etc/yum.conf cachedir=/var/cache/yum/ basearch:基础平台为yum定义repo文件:RepoName]:仓库名称name:描述信息baseurl:仓库的具体路径,接受以下三种类型ftp://http://file:///enabled:可选值{10},1为启用此仓库,0为禁用此仓库gpgcheck:可选值{10},1为检查软件包来源合法性,0为不检查来源如果gpgcheck设为1,则必须用gpgkey定义密钥文件的具体路径gpgkey=/PATH/TO/KEYvim/etc/yum.confcachedir=/var/cache/yum/basearch/$releasever //缓存目录
    keepcache=0 //缓存软件包, 1启动 0 关闭
    debuglevel=2 //调试级别
    logfile=/var/log/yum.log //日志记录位置
    exactarch=1 //检查平台是否兼容
    obsoletes=1 //检查包是否废弃
    gpgcheck=1 //检查来源是否合法,需要有制作者的公钥信息
    plugins=1 //是否启用插件
    tolerant={1|0} //容错功能,1为开启,0为关闭,当设为0时,如果用yum安装多个软件包且其中某个软件包已经安装过就会报错;当设为1时,当要安装的软件已经安装时自动忽略
    installonly_limit=5
    bugtracker_url

metadata_expire=90m //每小时手动检查元数据

in /etc/yum.repos.d //包含repos.d目录

###7. yum仓库管理
###7.1 yum本地仓库
挂载光盘参照本章第4部分内容
复制光盘内容到yum服务器

[root@localhost ~]# mkdir /opt/myrepo
[root@localhost ~]# cp -r /mnt/* /opt/myrepo/
[root@localhost ~]# ls /opt/myrepo/
addons  EULA              GPL     isolinux  media.repo  repodata                 RPM-GPG-KEY-redhat-release
EFI     extra_files.json  images  LiveOS    Packages    RPM-GPG-KEY-redhat-beta  TRANS.TBL
  • 配置repo文件
[root@localhost ~]# cat /etc/yum.repos.d/zhan.repo
[AppStream]
name=222
baseurl=file:///mnt/AppStream
gpgcheck=0
enabled=1

[BaseOS]
name=333
baseurl=file:///mnt/BaseOS
gpgcheck=0
enabled=1

清空yum本地缓存

[root@localhost ~]# dnf clean all
Failed to set locale, defaulting to C.UTF-8
34 files removed

检验yum本地仓库

[root@localhost ~]# dnf list all
......
yum.noarch                                             4.7.0-10.el8                                    baseos    
yum-utils.noarch                                       4.0.21-12.el8                                   baseos    
zenity.x86_64                                          3.28.1-2.el8                                    appstream 
zlib.i686                                              1.2.11-19.el8                                   baseos    
zlib.x86_64                                            1.2.11-19.el8                                   baseos    
zlib-devel.i686                                        1.2.11-19.el8                                   baseos    
zlib-devel.x86_64                                      1.2.11-19.el8                                   baseos    
zsh.x86_64                                             5.5.1-10.el8                                    baseos    
zsh-html.noarch                                        5.5.1-10.el8                                    appstream 
zstd.x86_64                                            1.4.4-1.el8                                     appstream 
zstd.x86_64                                            1.4.4-1.el8                                     AppStream 
zziplib.i686                                           0.13.68-9.el8                                   appstream 
zziplib.i686                                           0.13.68-9.el8                                   AppStream 
zziplib.x86_64                                         0.13.68-9.el8                                   appstream 
zziplib.x86_64                                         0.13.68-9.el8                                   AppStream 
zziplib-utils.x86_64                                   0.13.68-9.el8                                   appstream 
zziplib-utils.x86_64                                   0.13.68-9.el8                                   AppStream 
[root@localhost ~]# 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值