正式班D20
2020.11.02星期五 正式班D20
11 软件包管理
11.1 软件包介绍
11.1.1 编程语言分类
-
机器语言
-
汇编语言
-
高级语言
解释型(shell、python)
安装步骤:
1、下载python写好的软件包
2、在自己的Linux主机上安装对应版本的python解释器和依赖包
编译型(c、go)
c语言不支持跨平台编译,因此c语言写出来的源码包在不同的平台安装时都必须编译一次。
go支持跨平台编译
安装步骤:
1、下载源码包
2、在自己的Linux主机上安装好编译器
3、用编译器把源码包编译成可执行的命令
11.1.2 三种安装包
-
rpm包
预先编译打包,安装简单
软件的稳定版会被官方做成rpm,因此软件版本偏低
-
源码包
手动编译打包,安装繁琐
软件版本丰富,可选择性强
-
二进制包
安装即可使用,安装简单
不能修改源代码
rpm制作好的安装程序--------------------->安装
源码包------------------>需要自己定制安装细节-------------->安装
二进制包--------------->已经安装完毕(下载完就可以用,无需安装)
11.2 rpm包管理
11.2.1 rpm包简介
-
简介
RPM是Red-Hat Package Manager(RPM软件包管理器)的缩写,设计理念是开放式的
-
rpm包格式
举例
yum-plugin-fastestmirror-1.1.31-53.el7.noarch.rpm yum-plugin-fastestmirror # 软件包的名称 1.1.31 # 软件的版本 53 # 软件编译之后发布的次数 el7 # 适合的操作系统的版本 noarch # 适用于不同版本的CPU .rpm # 后缀名
-
rpm包使用的平台
redhat/centos/fedora/suse # 查看自己当前的平台 [root@ccc yum.repos.d]# uname -m x86_64 [root@ccc yum.repos.d]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core)
11.2.2 管理rpm包的两种方式
-
rpm命令
需要自己找到rpm包,并手动解决包的依赖性关系
(实际很难区分缺少什么包)
-
yum命令
相关的rpm包事先存放在一个仓库里,仓库包含了所有的依赖包
yum会按照仓库帮我们解决依赖性问题
11.2.3 RPM包的获取方式
-
三种方式(卸载umount)
# 1.本地的ISO镜像光盘:三种方式 方式1: [root@ccc yum.repos.d]# mount /dev/cdrom /opt mount: /dev/sr0 写保护,将以只读方式挂载 [root@ccc yum.repos.d]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.6M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda3 7.7G 6.0G 1.8G 78% / /dev/sda1 473M 123M 351M 26% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/sr0 4.5G 4.5G 0 100% /opt [root@ccc yum.repos.d]# ll /dev/cdrom lrwxrwxrwx 1 root root 3 11月 2 08:43 /dev/cdrom -> sr0 方式2: [root@ccc yum.repos.d]# mount /dev/sr0 /opt mount: /dev/sr0 写保护,将以只读方式挂载 [root@ccc yum.repos.d]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.6M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda3 7.7G 6.0G 1.8G 78% / /dev/sda1 473M 123M 351M 26% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/sr0 4.5G 4.5G 0 100% /opt 方式3: [root@ccc ~]# dd if=/dev/sr0 of=/centos7.iso 记录了9338880+0 的读入 记录了9338880+0 的写出 4781506560字节(4.8 GB)已复制,154.363 秒,31.0 MB/秒 [root@ccc ~]# mount-o loop/root/centos7.iso /opt # 查看光盘里的rpm包 [root@ccc ~]# ls /opt/Packages/ # 2.自己去网上下载rpm包进行安装 # 3.联网从yum仓库里获取rpm包
11.3 rpm命令
11.3.1 常用选项
-
安装
# rpm -ivh RPM包名全称 [root@ccc ~]# rpm -ivh /opt/Packages/zlib-devel-1.2.7-18.el7.x86_64.rpm 准备中... ################################# [100%] 软件包 zlib-devel-1.2.7-18.el7.x86_64 已经安装
-
卸载
# rpm -e RPM包名 [root@ccc ~]# rpm -e zlib-devel [root@ccc ~]# rpm -ql zlib-devel 未安装软件包 zlib-devel
-
升级
# rpm -Uvh RPM包名
-
查询
rpm -qa # 查询系统中安装的所有RPM软件包 rpm -qa | grep php # 检索系统中已经安装有关php的软件包 rpm -q RPM包名 # 查询指定软件包是否已经安装 rpm -qi RPM包名 # 查询系统中已经安装包的描述信息 rpm -ql RPM包名 # 查询系统中已安装包里所包含的文件 rpm -qc RPM包名 # 查询指定软件包的所有配置文件 rpm -qd RPM包名 # 查询某个包安装的帮助文档 rpm -qf RPM包名 # 查询系统中指定文件所属的软件包 -p # 上述选项的基础上加-p就可以查看尚未安装的rpm包的信息
-
其他
--nomd5 # 不检验软件包的签名 --nodeps # 忽略依赖性安装软件,安装后软件可能无法使用,最好解决好依赖性再安装 --force # 强制安装软件包,只有安装和升级可以强制执行
11.3.2 安装及依赖性
-
安装
# 1.RPM包在本地 [root@ccc yum.repos.d]# mount /dev/sr0 /opt [root@ccc ~]# rpm -ivh /opt/Packages/zlib-devel-1.2.7-18.el7.x86_64.rpm # 2.RPM包来源于网络 # 如果有报错 curl:(60) Peer's Certificate has expired҅将系统时间改正确重装即可 [root@ccc ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
-
安装与依赖性
# 例如安装httpd [root@ccc ~]# rpm -ivh /opt/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm 错误:依赖检测失败: /etc/mime.types 被 httpd-2.4.6-93.el7.centos.x86_64 需要 httpd-tools = 2.4.6-93.el7.centos 被 httpd-2.4.6-93.el7.centos.x86_64 需要 libapr-1.so.0()(64bit) 被 httpd-2.4.6-93.el7.centos.x86_64 需要 libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-93.el7.centos.x86_64 需要 # 安装提示的库 [root@ccc ~]# rpm -ivh /opt/Packages/httpd-tools-2.4.6-93.el7.centos.x86_64.rpm 错误:依赖检测失败: libapr-1.so.0()(64bit) 被 httpd-tools-2.4.6-93.el7.centos.x86_64 需要 libaprutil-1.so.0()(64bit)被httpd-tools-2.4.6-93.el7.centos.x86_64 需要 [root@ccc ~]# rpm -ivh /opt/Packages/apr-1.4.8-5.el7.x86_64.rpm 准备中... ################################# [100%] 正在升级/安装... 1:apr-1.4.8-5.el7 ################################# [100%] [root@ccc ~]# rpm -ivh /opt/Packages/apr-util-1.5.2-6.el7.x86_64.rpm 准备中... ################################# [100%] 正在升级/安装... 1:apr-util-1.5.2-6.el7 ################################# [100%] [root@ccc ~]# rpm -ivh /opt/Packages/httpd-tools-2.4.6-93.el7.centos.x86_64.rpm 准备中... ################################# [100%] 正在升级/安装... 1:httpd-tools-2.4.6-93.el7.centos ############################ [100%] [root@ccc ~]# yum search mime.types 已加载插件:fastestmirror Loading mirror speeds from cached hostfile ======================================== 匹配:mime.types ========================================= mailcap.noarch : Helper application and MIME type associations for file types perl-LWP-MediaTypes.noarch : Guess media type for a file or a URL [root@ccc ~]# rpm -ivh /opt/Packages/mailcap-2.1.41-2.el7.noarch.rpm 准备中... ################################# [100%] 正在升级/安装... 1:mailcap-2.1.41-2.el7 ################################# [100%] [root@ccc ~]# rpm -ivh /opt/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm 准备中... ################################# [100%] 正在升级/安装... 1:httpd-2.4.6-93.el7.cento ################################# [100%]
11.3.3 升级rpm包
# 两个版本不能共存
# -Uvp
11.4 yum命令
11.4.1 yum介绍
-
yum自动解决依赖关系
yum(Yellow dog Updater,Modified)是一个在Fedora和RedHat及CentOS中的shell前端软件包管理器。
基于RPM包管理,能够从指定的服务器自动下载RPM包并安装,可自动处理依赖关系,一次安装所有依赖的软件包。
-
常见yum命令与配置文件
[root@ccc ~]# rpm -q yum yum-3.4.3-167.el7.centos.noarch [root@ccc ~]# rpm -qc yum /etc/logrotate.d/yum /etc/yum.conf /etc/yum/version-groups.conf
-
yum命令常用选项
# 仓库 yum repolist # 查询可用仓库 yum repolist all # 查看包括已启用或禁用的所有仓库状态 # 关闭与启用仓库:本质都是在修改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 install 软件包名 -y # 安装软件-y非交互 yum groupinstall 软件组名 -y # 安装软件组,同yum groups install 软件组名 -y # 卸载 yum remove 软件包名 -y # 卸载软件包 yum groupremove 软件组名 -y # 卸载软件组 # 重装 yum reinstall 软件包名 -y # 不小心删除配置文件可以reinstall # 更新 yum check-update # 检查可以更新的软件包 yum update -y # 刚装完系统之后执行 yum update 软件包 -y # 更新某个软件包 # 缓存 yum makecache # 制作元数据缓存 yum clean all # 清理元数据缓存 vim /etc/yum.conf # 默认软件包下载安装后会自动删除,设置keepcache=1开启软件包缓存,缓存目录为配置文件中指定的cachedir
# 注意点 yum会以自己仓库中的repodata存储的依赖关系为准,有多个仓库就依次检索 # 1.yum直接安装公网的rpm包,会自动查找当前系统上已有的仓库解决依赖关系 yum install https://mirrors.aliyun.com/centos/7.6.1810/os/x86_64/Packages/samba-4.8.3-4.el7.x86_64.rpm # 2.yum直接安装本地的rpm包,会自动查找当前系统上已有的仓库解决依赖关系 yum localinstall -y /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
11.4.2 yum的历史记录
yum history # 查看执行的yum命令历史记录
yum history info ID号 # 查看具体某一条yum命令的详细信息
yum history undo ID号 # 撤销执行过的历史命令
11.4.3 本地源(镜像文件作为yum源)
-
先挂载
[root@ccc ~]# mount /dev/cdrom /opt/ [root@ccc ~]# mount /dev/sr0 /opt/ [root@ccc ~]# mount -o loop /xxx.iso /opt # 查看光盘里的rpm包 [root@ccc ~]# ls /opt/Packages/
-
编辑repo文件
[root@ccc ~]# cd /etc/yum.repos.d/ [root@ccc yum.repos.d]# vim local.repo [root@ccc yum.repos.d]# cat local.repo [local] name="this is local repo" baseurl=file:///opt enabled=1 gpgcheck=0
-
检查可用仓库
[root@ccc yum.repos.d]# yum repolist # 查询可用仓库 [root@ccc yum.repos.d]# yum repolist all # 查看所有仓库,包括禁用的
-
安装、查询、卸载
[root@ccc ~]# yum list # 列出可用的软件包 [root@ccc ~]# yum install vsftpd -y [root@ccc ~]# yum list vsftpd httpd [root@ccc ~]# yum remove vsftpd -y [root@ccc ~]# yum install glib* httpd -y [root@ccc ~]# yum provides vsftp # 查询某个软件(可未安装)是由那个rpm包提供 # yum reinstall [root@ccc ~]# rm -rf /etc/httpd/conf/httpd.conf [root@ccc ~]# yum reinstall httpd -y &> /dev/null [root@ccc ~]# ls /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf # yum update [root@ccc ~]# yum -y update samba [root@ccc ~]# yum -y update
-
软件包组安装、查询、卸载
[root@ccc yum.repos.d]# yum groupinstall "开发工具" -y [root@ccc yum.repos.d]# yum groupremove "开发工具" -y
11.4.4 网络源(开源yum源)
-
下载开源的yum头:
例如阿里云的Base基础源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
例如163的Base基础源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
例如红帽的epel扩展源
# 可以直接下载 [root@ccc ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo # 也可以安装一个包来生成 [root@ccc ~]# yum install epel-release -y
例如nginx官网的软件包源
# 进入nginx官网-->download-->Pre-Built Packages-->Stable and mainline--> # RHEL/CentOS-->编辑到本地 [root@ccc ~]# 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
将CentOS系统默认的源 备份
[root@ccc yum.repos.d]# cd /etc/yum.repos.d/ [root@ccc yum.repos.d]# mkdir bak [root@ccc yum.repos.d]# mv *.repo bak [root@ccc yum.repos.d]# ls bak
11.4.5 自己制作本地yum源
-
下载好一堆rpm包,相关依赖包也都存在,将所有rpm包都放在一个文件夹下/aaa
-
安装工具createrepo
[root@ccc ~]# yum install createrepo -y
-
制作repodata
[root@ccc ~]# createrepo /aaa/
-
配置本地repo文件,只想/aaa
[root@ccc ~]# vim /etc/yum.repos.d/soft.repo [soft] name=soft baseurl=file:///aaa enabled=1 gpgcheck=0
-
yum元数据缓存
指将yum仓库下的元数据缓存下来,下次安装时省去了检索的过程,安装速度加快
[root@ccc ~]# yum clean all # 清理缓存 [root@ccc ~]# yum makecache # 制作缓存
-
yum软件包缓存
开启软件包缓存后,从网络源下载安装完的软件包不再删除,都缓存到本地
[root@ccc ~]# vim /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever # 指定软件安装包的缓存目录 keepcache=1 # 设置为1 debuglevel=2 # 缓存目录为: /var/cache/yum/x86_64/7/
-
基于软件包缓存可以做成自己的yum源,以此来控制各个服务的版本
1、在测试环境中,在每个节点上都开启软件包缓存 2、在测试环境中,安装相同版本的操作系统,安装完毕后统一执行yum update -y 3、在测试环境中,部署完架构,测试完毕 4、把测试环境中每台机器上缓存好的软件包采集到一个目录下 [root@ccc ~]# find /var/cache/yum/x86_64/7/ -type f -name "*.rpm" | xargs -I {} mv {} /soft/ 5、用createrepo命令制作好依赖关系,即repodata数据库 6、在线上环境部署时,用本地源,不轻易升级,不滥用yum源
11.4.6 自己制作yum源共享给别人
-
服务端执行的操作
# 1、环境准备 [root@ccc ~]# systemctl stop firewalld [root@ccc ~]# systemctl disable firewalld [root@ccc ~]# setenforce 0 setenforce: SELinux is disabled [root@ccc ~]# sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config # 安装ftp服务 [root@ccc ~]# yum install vsftpd -y [root@ccc ~]# systemctl start vsftpd [root@ccc ~]# systemctl status vsftpd # 查看状态,确保开启 [root@ccc ~]# systemctl enable vsftpd # 采集关键包放到一个目录下 [root@ccc ~]# mkdir /var/ftp/centos7 [root@ccc ~]# mount /dev/sr0 /var/ftp/centos7 # 或拷贝 [root@ccc ~]# mount /dev/sr0 /opt [root@ccc ~]# mkdir /var/ftp/centos7 [root@ccc ~]# find /opt/Packages/ -type f -name "*.rpm" |xargs -I {} cp -rp{} /var/ftp/centos7/
-
在客户端上执行的操作
# 1、环境准备 [root@ccc ~]# systemctl stop firewalld [root@ccc ~]# systemctl disable firewalld [root@ccc ~]# setenforce 0 setenforce: SELinux is disabled [root@ccc ~]# sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config [root@ccc ~]# ping -c 2 192.168.12.42 # ping服务器IP地址确保网络畅通 # 在客户端配置网络yum源 [root@ccc ~]# cd /etc/yum.repos.d/ [root@ccc ~]# mkdir bak [root@ccc ~]# mv *.repo bak/ [root@ccc ~]# 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数据库