软件包管理
一 软件包种类
红帽/Fedora系Linux软件包
分类 | 安装 | 优缺点 |
---|---|---|
rpm包 | 预先编译打包,安装简单 | 优点:本质就是一种压缩包,包内预定制好了一些脚本,规定好了按照的目标位置等,全都是按照官方标准走,安装简单 缺点:缺乏可定制的灵活性;并且通常只有软件的稳定版才会被官方做成rpm包,所以软件版本会偏低 跨平台性:与平台高度绑定 |
源码包 | 手动编译打包,安装繁琐 | 优点:可定制性强,软件版本丰富,最新的包肯定都是源码包 缺点:安装繁琐且速度慢,需要自己解决很多依赖包的安装 跨平台性:可以根据不同平台进行定制化的编译安装 |
二进制包 | 解压即可使用, 安装简单 | 优点:解压就能用,十分简单高效 缺点:缺乏可定制的灵活性;除了可以改变安装目录外,其他的都只能用现成的,所以说,它定制化能比rpm包要强一乃乃,但也是半斤八两 跨平台性:与平台高度绑定,换个平台就不一定可以运行 |
二 rpm包管理
1、 什么是rpm包
在红帽/Fedora系的linux系统上,多数软件的安装、升级、移除以及维护工作都是使用RPM软件包管理程序来完成的,那什么是RPM软件包呢?
RPM 是Red-Hat Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,通常软件的稳定版会被官方做成rpm,所以软件版本偏低。
2、rpm包格式
3、RPM包格式举例
# 例1 mysql-connector-odbc-5.2.5-8.el7.x86_64.rpm 软件包名:mysql-connector-odbc 版本号Version:5.2.5 发布版本Release:8.el7 平台:el7.x86_64 后缀:.rpm # 例2 abrt-python-doc-2.1.11-57.el7.centos.noarch.rpm abrt-python-doc #软件包的名称 2.1.11 #软件的版本 57 #软件编译之后的发布的次数 el7 #适合的操作系统的版本 noarch #适用于不同版本的CPU .rpm #后缀名
4、RPM包使用的平台
平台=操作系统+硬件
ps:硬件主要是cpu的架构如x84、arm等
# 支持的操作系统 redhat/centos/fedora/suse # 支持的cpu架构:在包名内有声明,我们要到平台上uname -m看下自己是否符合 # 查看自己当前平台 [root@localhost ~]# uname -m # 查看cpu的架构 x86_64 [root@localhost ~]# cat /etc/redhat-release # 查看操作系统版本 CentOS Linux release 7.6.1810 (Core)
5、管理rpm包有两种命令
# 1、rpm命令: 需要自己找到rpm包,并且手动解决包的依赖性关系 ps:实际情况下,很难分辨缺少什么依赖包 # 2、yum命令: 相关rpm包事先都被存放于一个仓库里,仓库包含了所有的依赖包,所以yum按照可以帮我们解决依赖性问题
6、RPM包获取
# 1.本地的ISO镜像光盘(软件包可能存在版本偏低情况) : 挂载镜像有以下三种方式 方式1: [root@localhost ~]# mount /dev/cdrom /opt/ 方式2: [root@localhost ~]# mount /dev/sr0 /opt/ 方式3 [root@localhost ~]# mount -o loop /xxx.iso /opt 查看光盘里的rpm包 [root@localhost ~]# ls /opt/Packages/ # centos7 [root@localhost ~]# ls /opt/minimal/Packages/ # rockylinux9.3 # 2.自己去网上下载rpm包进行安装 # 3.联网从yum仓库里获取rpm包 # yum的时候
三 rpm命令
1、选项
#1、安装:rpm -ivh <RPM包名全称> #2、卸载:rpm -e <RPM包名> #3、升级:rpm -Uvh <RPM包名> #4、查询: rpm -qa #查询系统中安装的所有RPM软件包 rpm -qa | grep php #检索系统中已经安装有关php的软件包 rpm -q <RPM包名> #查询指定软件包是否已安装 [root@egon ~]# rpm -q zip zip-3.0-11.el7.x86_64 rpm -qi <RPM包名> #查询系统中已安装包的描述信息 rpm -ql <RPM包名> #查询系统中已安装包里所包含的文件 rpm -qc <RPM包名> #查询指定软件包的所有配置文件 [root@egon ~]# rpm -qc mariadb /etc/my.cnf.d/client.cnf rpm -qd <RPM包名> # 查询某个包安装的帮助文档 [root@localhost ~]# rpm -qd zlib rpm -qf 文件路径 #查询系统中指定文件所属的软件包 [root@egon ~]# rpm -qf /usr/sbin/ifconfig net-tools-2.0-0.25.20131004git.el7.x86_64 -p # 在上述选项的基础上加选项-p,就可以查看尚未安装的rpm包信息 [root@localhost ~]# rpm -e dos2unix # 先卸载一下,证明本地rpm数据库中没有该包信息 [root@rockylinux ~]# rpm -qip /opt/minimal/Packages/dos2unix-7.4.2-4.el9.x86_64.rpm [root@rockylinux ~]# rpm -qlp /opt/minimal/Packages/dos2unix-7.4.2-4.el9.x86_64.rpm [root@rockylinux ~]# rpm -qcp /opt/minimal/Packages/dos2unix-7.4.2-4.el9.x86_64.rpm [root@rockylinux ~]# rpm -qdp /opt/minimal/Packages/dos2unix-7.4.2-4.el9.x86_64.rpm 额外选项 --nomd5 # 不检验软件包的签名 --nodeps # 忽略依赖性安装软件,安装后软件有可能无法使用,最好是解决依赖性后再安装 [root@localhost ~]# rpm -e dos2unix --nodeps # 忽略依赖关系 --force # 强制安装软件包,只有安装和升级可以强制执行
2、安装
#1、rpm包在本地 [root@egon ~]# mount /dev/sr0 /opt [root@egon ~]# rpm -ivh /opt/minimal/Packages/dos2unix-7.4.2-4.el9.x86_64.rpm #2、rpm来自于网络,如果安装过程中报错:curl: (60) Peer's Certificate has expired,请先将系统时间修改正确,然后再安装即可 [root@egon ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
当你使用 rpm -i (或者 –install) 命令来安装一个 .rpm 结尾的包时,这个命令会执行以下步骤:
1、解包:首先,command开始解压.rpm包。这个包包含预编译的二进制程序或者库,还有元数据和脚本。
2、检查:rpm然后检查新包,比如看看这个包有没有已经安装过,看看是否还有其他的包需要安装或者升级才能使这个包正常工作。如果有,命令将结束安装并返回一个错误信息。
3、文件分布:如果条件满足,rpm将把包中的文件复制到计算机中的适当的位置。怎么分布,取决于包的定义。
4、脚本:此时,可以按照需要运行一些脚本,比如初始化配置,启动服务等。
这种安装方式,只安装单个RPM包,而不会自动解决依赖问题。如果安装的软件包有依赖关系,那么在安装过程中可能会遇到问题。这也是为什么yum和dnf等高级包管理器更为常用,因为它们可以自动解决它们的依赖关系。
3、安装与依赖性
rocklinux9.3案例
# 先用一条命令把包下载下来,这条命令倒不用关注,我们是想用下载下来的包来展示 cd /root/test yum install --downloadonly --downloaddir=./ nginx [root@rockylinux test]# ls nginx-1.20.1-14.el9_2.1.x86_64.rpm nginx-filesystem-1.20.1-14.el9_2.1.noarch.rpm nginx-core-1.20.1-14.el9_2.1.x86_64.rpm rocky-logos-httpd-90.15-2.el9.noarch.rpm [root@rockylinux test]# rpm -ivh nginx-1.20.1-14.el9_2.1.x86_64.rpm error: Failed dependencies: nginx-core = 1:1.20.1-14.el9_2.1 is needed by nginx-1:1.20.1-14.el9_2.1.x86_64 nginx-filesystem = 1:1.20.1-14.el9_2.1 is needed by nginx-1:1.20.1-14.el9_2.1.x86_64 system-logos-httpd is needed by nginx-1:1.20.1-14.el9_2.1.x86_64 [root@rockylinux test]# 报上面的依赖性问题,我们需要找到依赖包并安装,而且极容易在安装一个依赖包的过程中还需要其他的依赖包,下面的步骤你可以试着打乱下顺序试试看 [root@rockylinux test]# rpm -ivh nginx-filesystem-1.20.1-14.el9_2.1.noarch.rpm Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:nginx-filesystem-1:1.20.1-14.el9_################################# [100%] [root@rockylinux test]# rpm -ivh nginx-core-1.20.1-14.el9_2.1.x86_64.rpm Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:nginx-core-1:1.20.1-14.el9_2.1 ################################# [100%] [root@rockylinux test]# rpm -ivh rocky-logos-httpd-90.15-2.el9.noarch.rpm Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:rocky-logos-httpd-90.15-2.el9 ################################# [100%] [root@rockylinux test]# [root@rockylinux test]# [root@rockylinux test]# 解决了依赖性问题之后,才能重新安装nginx [root@rockylinux test]# rpm -ivh nginx-1.20.1-14.el9_2.1.x86_64.rpm Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:nginx-1:1.20.1-14.el9_2.1 ################################# [100%] [root@rockylinux test]#
centos7案例
[root@egon ~]# rpm -ivh /opt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm 错误:依赖检测失败: /etc/mime.types 被 httpd-2.4.6-88.el7.centos.x86_64 需要 httpd-tools = 2.4.6-88.el7.centos 被 httpd-2.4.6-88.el7.centos.x86_64 需要 libapr-1.so.0()(64bit) 被 httpd-2.4.6-88.el7.centos.x86_64 需要 libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-88.el7.centos.x86_64 需要 [root@egon ~]# # 解决思路:安装提示的库,安装 [root@egon ~]# rpm -ivh /opt/Packages/apr-1.4.8-3.el7_4.1.x86_64.rpm [root@egon ~]# rpm -ivh /opt/Packages/apr-util-1.5.2-6.el7.x86_64.rpm [root@egon ~]# rpm -ivh /opt/Packages/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm [root@egon ~]# yum search mime.types # 查看到mime.types对应的依赖包为mailcap-。。。 [root@egon ~]# rpm -ivh /opt/Packages/mailcap-2.1.41-2.el7.noarch.rpm 然后重新安装 [root@egon ~]# rpm -ivh /opt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm 准备中... ################################# [100%] 正在升级/安装... 1:httpd-2.4.6-88.el7.centos ################################# [100%]
4、升级rpm包
rokcylinux9.3
yum install libcrypto* liblber* libldap* libssl* openssl* -y wget https://mirrors.aliyun.com/zabbix/zabbix/6.5/rocky/8/x86_64/zabbix-agent-7.0.0-alpha3.release1.el8.x86_64.rpm rpm -ivh zabbix-agent-7.0.0-alpha3.release1.el8.x86_64.rpm wget https://mirrors.aliyun.com/zabbix/zabbix/6.5/rocky/9/x86_64/zabbix-agent-7.0.0-alpha3.release1.el9.x86_64.rpm [root@rockylinux test]# rpm -Uvh zabbix-agent-7.0.0-alpha3.release1.el9.x86_64.rpm warning: zabbix-agent-7.0.0-alpha3.release1.el9.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 08efa7dd: NOKEY Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:zabbix-agent-7.0.0-alpha3.release################################# [ 50%] Cleaning up / removing... 2:zabbix-agent-7.0.0-alpha3.release################################# [100%] [root@rockylinux test]#
centos7案列
#1、下载一个低版本、一个高版本 wget https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.9-1.el7.x86_64.rpm wget https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.0-1.el7.x86_64.rpm #2、先安装低版本 [root@egon ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm #3、再安装高版本,会报错 [root@egon ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm #4、如果采用--force选项,那就是强制安装,会同时存在两个版本,该方案不可取 [root@egon ~]# rpm -qa |grep zabbix zabbix-agent-3.0.9-1.el7.x86_64 [root@egon ~]# rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm --force 。。。安装成功。。。 [root@egon ~]# rpm -qa |grep zabbix # 同时两个版本共存 zabbix-agent-3.0.9-1.el7.x86_64 zabbix-agent-4.2.0-1.el7.x86_64 #5、重来,采用升级方式安装 [root@egon ~]# rpm -e zabbix-agent-3.0.9-1.el7.x86_64 [root@egon ~]# rpm -e zabbix-agent-4.2.0-1.el7.x86_64 [root@egon ~]# rpm -qa |grep zabbix [root@egon ~]# rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm 。。。 [root@egon ~]# rpm -Uvh zabbix-agent-4.2.0-1.el7.x86_64.rpm 。。。清理老版本,安装新版本。。。 [root@egon ~]# rpm -qa |grep zabbix-agent # 只留下一个新版本 zabbix-agent-4.2.0-1.el7.x86_64 [root@egon ~]#
5、练习安装如下软件包:
vsftpd samba nfs-utils httpd dhcp postfix php lftp dos2unix unix2dos tigervnc
四 yum管理RPM包
1、yum介绍
yum自动解决依赖关系
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
注意:在rockylinux9.3中,yum命令链接到了dnf上,即在rockyLinux9.3中真正用的是dnf
[root@rockylinux ~]# ll /usr/bin/yum lrwxrwxrwx. 1 root root 5 Nov 1 09:53 /usr/bin/yum -> dnf-3 [root@rockylinux ~]# ll /usr/bin/dnf lrwxrwxrwx. 1 root root 5 Nov 1 09:53 /usr/bin/dnf -> dnf-3 DNF(Dandified Yum),它是 Yum(Yellowdog Updater, Modified)的下一代版本。 DNF 相比于 之前的Yum 具有更好的性能,解决依赖关系更加精准且使用更方便,这就是 Rocky Linux 选择它作为新包管理工具的原因。 软连接的目的是为了对你屏蔽掉这种改动,大多数包括yum源配置方法都是一样的
下面介绍的用法,centos7、rockylinux9.3完全一致,放心用就行
你也可以在rockylinux9.3中man dnf看一下,你拉到末尾会看到dnf相关配置 FILES Cache Files /var/cache/dnf Main Configuration /etc/dnf/dnf.conf Repository /etc/yum.repos.d/ 你 ll /etc/yum.conf会发现直接就是链接到了/etc/dnf/dnf.conf上 [root@rockylinux ~]# ll /etc/yum.conf lrwxrwxrwx. 1 root root 12 Nov 1 09:53 /etc/yum.conf -> dnf/dnf.conf
2、yum命令与配置文件
无论是centos7还是rockylinux9.3你都可以在这里配置yum配置
/etc/yum.conf # rpm -qc yum
例如你可以在配置文件中配置将yum install的包都缓存到本地某个文件夹下
默认是: /var/cache/yum 也可以在 /etc/yum.conf 指定 cachedir=/var/cache/yum #存放目录 keepcache=1 #1为保存 0为不保存 metadata_expire=1800 #过期时间
3、yum命令常用选项
常用选项说明: #仓库 yum repolist # 查询可用仓库 yum repolist all #查看包括已启用或禁用的所有仓库状态 # (centos7.9)关闭与启用仓库:本质:都是在修改repo文件中的enable的值 0 不启用 1 启用 yum-config-manager --disable epel #关闭仓库epel yum-config-manager --enable epel #启用仓库epel #查看 yum list #列出可用仓库中所有的软件包 yum list | less yum grouplist #列出可用仓库中的软件组 yum provides /usr/sbin/ifconfig #查询命令所属的软件包,可以不加路径,只写命令名字 #与rpm -qf的区别在于yum provides后可以只跟命名名 #安装 yum install httpd httpd-tools #加上-y选项可以变成非交互 yum groupinstall "开发工具" -y #安装软件组,一个软件组中包含了多个软件包 yum groups install "开发工具" -y #同上 #卸载 yum remove httpd httpd-tools http* #卸载软件包 yum groupremove "开发工具" -y. #卸载软件组 yum groups remove "开发工具" -y #同上 #重装 yum reinstall httpd #不小心删除了配置文件的时,可以reinstall一下 #更新 yum check-update #检查可以更新的软件包 yum update -y #更新所有软件包,包括内核,通常只在刚装完系统时执行 yum update httpd -y #更新某个软件包 在 CentOS 7 中,yum update 和 yum upgrade 1、相同点:都会更新所有包(包括软件与内核) 2、不同点 yum update更新的时候会保留过时的包,这对依赖老包的应用很友好 yum upgrade更新的时候会删除过时的包,如果你系统中所有的应用全都为rpm 包,那upgrade倒是不会对你有影响,因为都会一起跟着更新。但是如果你 安装的包里有自己编译安装的,而编译安装的包会依赖某个特定版本的rpm包 那upgrade升级之后,很有可能会造成你编译安装包的不可用 综上,如果是刚装系统,那就用upgrade,否则还是用update靠谱些 在rockylinux中,yum命令都链接到了dnf-3上 而在 DNF 中,,在dnf-3中,dnf update 与 dnf upgrade 是没有区别的。 具体而言,两者都是用于更新系统上已经安装的软件包到最新可用版本 #缓存 yum makecache #制作元数据缓存,并不会下载包 yum clean all #清理缓存,你如果在yum.conf配置的keepcache,之前缓存的包都会清空 vim /etc/yum.conf #默认软件包下载安装后会自动删除 #设置keepcache=1 即开启了软件包缓存 #缓存目录为配置文件中指定的cachedir #历史记录 yum history # 查看执行过的yum命令历史记录 yum history info ID号 # 查看具体某一条yum命令的详细信息 yum history undo ID号 # 撤销执行过的历史命令 # 关于安装需要注意: 无论yum安装的软件来自何方,yum时刻以自己仓库中的repodata存储的依赖关系为准,如果有多个仓库,就依次检索 #1、yum直接安装公网的rpm包, 会自动查找当前系统上已有的仓库解决依赖关系 yum install https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/samba-4.10.16-5.el7.x86_64.rpm #2、Yum直接安装本地的rpm包,会自动查找当前系统上已有的仓库解决依赖关系 yum localinstall -y /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
要使用yum前,需要准备一个yum源(我们也称为yum仓库), 这个可以是一个互联网上的仓库,也可以是本地自己搭建的仓库.仓库里面有什么呢?里面全部都是.rpm的软件包.一台linux,可以添加N多个yum源, 能搜索的软件包数量就是N个yum源之和.
系统常见yum源
1.自定义的本地源 2.网络上的源头,如:base基础源、epel扩展源、与服务相关的源(官网)
4、镜像文件作为yum源(本地源)
1.先挂载
# 方式1: [root@localhost ~]# mount /dev/cdrom /opt/ # 方式2: [root@localhost ~]# mount /dev/sr0 /opt/ # 方式3 [root@localhost ~]# mount -o loop /xxx.iso /opt 查看光盘里的rpm包 [root@localhost ~]# ls /opt/Packages/
2.编辑repo文件
强调:baseurl指定的目标路径下必须有用一个repodata目录,里面存放着包间的依赖性关系,是yum解决依赖性问题的关键
centos7.9镜像挂载到了/opt下,但repodata就在/opt
centos9.3镜像挂载到了/opt下,但repodata在/opt/minimal下
[root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# vim local.repo # 文件名自定义,必须以.repo结尾 [local] # 仓库的实际名字,任意 name=local # 仓库的描述,任意 baseurl=file:///opt # 仓库位置,可以是 http:// https:// ftp:// file:// enabled=1 # 启用仓库,默认就是启用的 gpgcheck=0 # 检查安装的rpm是否是合法的,0表示不检验
3.检查可用仓库
[root@localhost ~]# yum repolist # 查询可用仓库 [root@localhost ~]# yum repolist all # 查看所有仓库,包括禁用的
4.安装、查询、卸载
[root@localhost ~]# yum list # 列出可用的软包 [root@localhost ~]# yum install vsftpd -y [root@localhost ~]# yum list vsftpd httpd [root@localhost ~]# yum remove vsftpd -y [root@localhost ~]# yum install glib* httpd -y [root@localhost ~]# yum provides vsftp # 查询某个软件(可以是未安装的)是由哪个rpm包提供 # yum reinstall [root@egon ~]# rm -rf /etc/httpd/conf/httpd.conf [root@egon ~]# yum reinstall httpd -y &> /dev/null [root@egon ~]# ls /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf # yum update [root@localhost ~]# yum -y update samba [root@localhost ~]# yum -y update
5.软件包组安装、查询、卸载
[root@localhost ~]# yum grouplist [root@localhost ~]# yum groupinstall "GNOME 桌面" -y [root@egon ~]# yum groupinstall "开发工具" -y [root@egon ~]# yum groupremove "开发工具" -y
5、使用开源yum源(网络源)
1、为yum下载开源的Base源:
Base源里放着很多依赖的基础包
例如阿里云的Base基础源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2.例如163的Base基础源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
3.例如红帽的epel扩展源
# 可以直接下载 [root@egon ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo # 也可以安装一个软件包来生成 [root@egon ~]# yum install epel-release -y # EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。 RHEL以及他的衍生发行版如CentOS、Scientific Linux为了稳定,官方的rpm repository提供的rpm包往往是很滞后的,当然了,这样做这是无可厚非的,毕竟这是服务器版本,安全稳定是重点,官方的rpm repository提供的rpm包也不够丰富,很多时候需要自己编译那太辛苦了,而EPEL恰恰可以解决这两方面的问题。
4.使用nginx官网的软件包源
nginx的源里放着nginx相关的包,但是一些基础的依赖包还是需要从Base源里拿,所以需要配置使用
https://nginx.org/
# 进入nginx官网->download->Pre-Built Packages->Stable and mainline->RHEL/CentOS->编辑到本地 [root@egon yum.repos.d]# cat nginx.repo [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [root@egon yum.repos.d]#
5.将Centos系统默认的源备份
[root@egon ~]# cd /etc/yum.repos.d/ [root@egon yum.repos.d]# mkdir bak [root@egon yum.repos.d]# mv CentOS-* bak/ [root@egon yum.repos.d]# ls bak CentOS-Base.repo epel.repo local.repo nginx.repo [root@egon yum.repos.d]#
6、 自己制作本地yum源
1.下载好一堆rpm包,相关依赖包也都存在,将所有的rpm包都放置于一个文件夹下,比如/aaa
2.安装工具createrepo
[root@localhost ~]# yum install createrepo -y
3.制作repodata
[root@localhost ~]# createrepo /aaa/
4.配置本地repo文件,指向/aaa
[root@localhost ~]# vim /etc/yum.repos.d/soft.repo [soft] name=soft baseurl=file:///aaa enabled=1 gpgcheck=0
5.yum扩展知识
1)yum元数据缓存:指的将yum仓库的元数据缓存下来,下次安装时省去了检索过程,安装速度可以加快
[root@localhost ~]# yum clean all # 清理缓存 [root@localhost ~]# yum makecache # 制作缓存
2)yum软件包缓存:开启软件包缓存后,从网络源下载安装完的软件安装包不再删除,都缓存到了本地,
[root@localhost ~]# vim /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever # 指定软件安装包的缓存目录 keepcache=1 # 设置为1 debuglevel=2 # 缓存目录为:ls /var/cache/yum/x86_64/7/
3)基于软件包缓存,可以做成自己的yum源,以此来控制各个服务的版本,通常的做法为
# 1、在测试环境中,在每个节点上都开启软件包缓存 # 2、在测试环境中,安装相同版本的操作系统,安装完毕后统一执行yum update -y # 3、在测试环境中,部署完完你的架构,测试完毕 # 4、把测试环境中每台机器上缓存好的软件包安装包采集到一个文件下 [root@egon ~]# find /var/cache/yum/x86_64/7/ -type f -name "*.rpm" | xargs -I {} mv {} /soft/ # 5、然后用createrepo命令制作好依赖关系,即repodata数据库 # 6、然后在线上环境部署时,就用该本地源就好,不要轻易升级,不要滥用yum源,这样可以严格控制好各个服务的版本
7、 自己制作本地yum源共享给别人
==================在服务端上执行如下操作================== # 1、环境准备 [root@egon ~]# systemctl stop firewalld [root@egon ~]# systemctl disable firewalld [root@egon ~]# setenforce 0 [root@egon ~]# sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config # 2、安装ftp服务 [root@egon ~]# yum install vsftpd -y [root@egon ~]# systemctl start vsftpd [root@egon ~]# systemctl status vsftpd # 查看状态,确保开启,默认共享路径/var/ftp下的目录 [root@egon ~]# systemctl enable vsftpd # # 3、采集软件包放到一个目录下 可以基于3.3的方式,也可以偷个懒直接用镜像里现成的,毕竟是实验嘛,但无论何种方式,都一定要解决好依赖关系才能用来做yum源,本例就用现成的吧 [root@egon ~]# mkdir /var/ftp/centos7 [root@egon ~]# mount /dev/sr0 /var/ftp/centos7 # 或者拷贝 [root@egon ~]# mount /dev/sr0 /opt [root@egon ~]# mkdir /var/ftp/centos7 [root@egon ~]# find /opt/Packages/ -type f -name "*.rpm" |xargs -I {} cp -rp {} /var/ftp/centos7/ ==================在客户端上执行如下操作================== # 1、环境准备 [root@egon ~]# systemctl stop firewalld [root@egon ~]# systemctl disable firewalld [root@egon ~]# setenforce 0 [root@egon ~]# sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config [root@egon ~]# ping -c 2 192.168.12.42 # ping一下服务端的ip地址,保证网络畅通 # 2、在客户端配置网络yum源 [root@egon yum.repos.d]# cd /etc/yum.repos.d/ [root@egon yum.repos.d]# mkdir bak [root@egon yum.repos.d]# mv *.repo bak/ [root@egon yum.repos.d]# cat >> ftp.repo << EOF > [ftp_repo] > name = This is Ftp Share Repo > baseurl = ftp://192.168.12.42/centos7 > enabled = 1 > gpgcheck = 0 > EOF # 注意:客户端baseurl指向的文件夹无论是什么,在该文件夹的子目录一级必须有一个repodata数据库
8、yum的历史记录
yum history # 查看执行过的yum命令历史记录 yum history info ID号 # 查看具体某一条yum命令的详细信息 yum history undo ID号 # 撤销执行过的历史命令
9、拓展了解:签名检查机制
==RPM工具使用签名检查机制:== [root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 导入centos公钥 [root@localhost ~]# rpm --import /etc/pki/rpm-gpg/* 额外选项: --nomd5 # 不检验软件包的签名 ==YUM使用签名检查机制:== 方法一: [root@localhost yum.repos.d]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [root@localhost yum.repos.d]# vim local.repo [local] name=local baseurl=file:///opt enabled=1 gpgcheck=1 # 开启检查软件包的签名 方法二: [root@localhost yum.repos.d]# vim local.repo [local] name=local baseurl=file:///opt enabled=1 gpgcheck=1 # 开启检查软件包的签名 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 指定公钥文件 额外选项: --nogpgcheck //不检查软件包的签名
四 源码包
1、官网下载,如nginx
# 浏览器下载 # 或者执行命令 wget http://nginx.org/download/nginx-1.18.0.tar.gz 最新stable版本:(用这个版本练习,在centos7.9、rockylinux9.3上安装) wget https://nginx.org/download/nginx-1.24.0.tar.gz
2、预先安装编译安装依赖的库
yum -y install gcc gcc-c++ autoconf automake make yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel 或者 LANG=C yum -y groupinstall "Development tools"
3、解压、编译、编译安装
[root@localhost ~]# tar xvf nginx-1.18.0.tar.gz -C /tmp/ [root@localhost ~]# cd /tmp/nginx-1.18.0/ [root@localhost nginx-1.18.0]# useradd www [root@localhost nginx-1.18.0]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --with-http_gzip_static_module --with-http_sub_module #1、--prefix 指定安装的目录,/usr/local/nginx 是安装目录 #2、带ssl stub_status模块 添加stream模块 –with-stream,这样就能传输tcp协议了 #3、http_stub_status_module 状态监控 #4、http_ssl_module 配置https #5、stream 配置tcp得转发 #6、http_gzip_static_module 压缩 #7、http_sub_module 替换请求 [root@localhost nginx-1.18.0]# make && make install # 将程序设定一个软连接,便于后续的升级 [root@egon soft]# ln -s /soft/nginx-1.16.0/ /soft/nginx [root@egon ~]# /soft/nginx/sbin/nginx 注意:现在百分之90,能用上的软件,都提供了rpm包. --->使用户可以使用yum直接安装使用.
总结编译安装=》三部曲
# ./configure --prefix=/usr/local/nginx-1.18.0 a. 指定安装路径,例如--prefix=DIR b. 启用或禁用某项功能, 例如 --enable-ssl, --disable-filter --with-http_ssl_module c. 和其它软件关联,例如--with-pcre=/root/pcre-8.31 d. 检查安装环境,例如是否有编译器gcc,是否满足软件的依赖需求 最终生成:Makefile # make //按Makefile文件编译,可以使用-j 2指定两颗CPU编译 # make install //安装 ps:如果中途发生错误,多半是因为缺少必要的库支持,可以先清理 # make clean //清理掉以前编译后产生的 *.o目标文件 然后安装好依赖库,重新执行三部曲
ps:有一些源码包是已经编译好的结果,下载后解压即可使用