软件包管理 -------------湛湛长江去,冥冥细雨来

软件包管理

1、软件包分类

与window类似,在Linux系统上也可以安装各种应用程序,或称软件包,Linux下软件包分为三类

img

分类 安装 特点

rpm包 预先编译打包,安装简单 通常软件的稳定版会被官方做成rpm,所以软件按版本偏低

源码包 手动编译打包,安装繁琐 软件版本丰富,可选择性强

二进制包 解压即可使用,安装简单 不能修改源代码

2、什么是rpm包

在主流的Linux系统上,多数软件的安装、升级、移除以及维护工作都是使用rpm软件包管理程序来完成的,什么是rpm软件包呢?

RPM 是 Red-hat Packages Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了 RedHat的标志,但是其原始设计理念是开放的,通常软件的稳定版会被官方做成rpm,所以软件版本偏低

2.1、rpm包格式

img

rpm包格式举例

mysql-connector-odbc-5.5.5-8.el7.x86——64.rpm

软件包名:mysql-connector-odbc
版本号version:5.2.5
发布版本Release:8.el7
平台:el7.x86_64
后缀:rpm

abrt-python-doc-2.1.11-57.el7.centOS.norch.rpm

软件包名:abrt-python-doc
版本号Version:2.1.11
编译后发布次数:57
适合操作平台:el7
适合的cpu: noarch # 适应与不同版本的cpu
后缀名:.rpm

2.2、RPM闭包使用的平台

redhat
centOS
fedora
suse
查看自己当前平台:
# uname -m
x86_64
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

2.3、管理rpm包有两种命令

1. rpm命令:
需要自己找到rpm包,并且手动解决包的依赖性关系
ps:实际情况下, 很难分辨缺少什么依赖包
2.yum命令:
相关rpm包实现都存放与一个仓库里,仓库包含了所有的依赖包,所以yum可以帮我们解决依赖性问题

2.4、rpm包获取

一、# 本地的ISO镜像光盘(本地软件包可能存在版本偏低情况)挂载镜像有三种方式:
1. mount /dev/cdrom /opt/
2. mount /dev/sr0 /opt/
3. mount -o loop /xxx.iso /opt

查看光盘里的rpm包:
ls /opt/packages/
二、自己去网上下载rpm包进行安装
1.华为云镜像站
三、联网从yum仓库里获取rpm包
1.epel源下载

3、rpm命令

3.1、命令+参数

1、安装
# rpm -ivh [rpm包名全称]
2、卸载
# rpm -e [rpm包名]
3、升级
# rpm -Uvh [rpm包名]
4、查询
# rpm -qa
查询系统中安装的所有rpm软件包
# rpm -qa [rpm包名]
查询指定软件包是否已安装
示例:rpm -q zip
zip-3.0-11.el7.x86_64
# rpm -qi [rpm包名]
查询系统中已安装包的描述信息

rpm -ql [rpm包名]

查询系统中已安装包里所包含的文件
# rpm -qc [rpm包名]
查询指定软件包的所有配置文件

rpm -qd [rpm包名]

查询某个包安装的帮助文档
# rpm -qf 文件路径
查询系统中指定文件所属的软件包
# -p
在上述选项的基础上加选项 -p 可以查看尚未安装的rpm包信息
示例:
[root@localhost ~]# rpm -qip /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm
[root@localhost ~]# rpm -qlp /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm
[root@localhost ~]# rpm -qcp /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm
[root@localhost ~]# rpm -qdp /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm

额外选项:
# --nomd5
不检验软件包的签名
# --nodeps
忽略依赖性安装软件,安装后软件有可能无法使用,最好是解决依赖性后在安装
rpm -e dps2unix --nodeps #忽略依赖关系
# --force
强制安装软件包,只有安装和升级可以强制执行

3.2、安装

1、安装包在本地:
mount /dev/sr0 /opt #挂载
# rpm [安装参数] 安装包本地路径
rpm -ivh /opt/packages/dos2unix-6.0.3-7.el7.x86_64.rpm

2、rpm安装包来源于网络
# rpm [安装参数] 安装包网络路径
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
ps:如果安装过程中报错:'curl:(60)peer''s certificate has expired,请先将系统时间修改正确,再次安装即可'

3.3、安装与依赖性

rpm命令需要自己找到依赖包,手动安装解决依赖性问题

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 需要
# 解决思路:将所提示安装的库,全部进行安装。
这个过程中可能会产生额外的依赖包,都需要安装

3.4、升级rpm包

1、下载一个低版本、一个高版本--> 3.0和4.2
2、先安装低版本
3、再安装高版本----> 报错
3.1 --force 强制安装----> 不可取,不推荐
3.2 升级方式 rpm -Uvh
4.卸载旧版本和高版本
5.rpm -ivh 安装低版本
6.rpm -Uvh 清理老版本,安装新版本
7.rpm -qa | grep ... 查询,只留下了一个新的版本

3.5可以练习安装如下软件包

vsftpd
samba
nfs-utils
heepd
dhcp
postfix
php
lftp
dos2unix
unix2dos
tigervnc

4、yum管理RPM包

4.1、 yum介绍

yum 自动解决依赖关系

yum(全程为 yello dog Updater,Modified)是一个在Fedora和Redhat以及CentOS中的shell前端软件包管理器、基于RPM包管理,能够从指定的服务器自动下载RPM包并安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无需繁琐地一次次的下载、安装
命令:
rpm -q yum #查询yum安装包信息
rpm -qc yum #查询yum配置文件

yum原理

yum需要使用yum源中配置的yum仓库地址,转到对应的yum仓库中下载并安装对用的软件

4.2、yum命令常用选项

仓库

1.yum repolist #查询可用仓库
2.yum repolist all #查看包括已启用或者禁用的所有仓库状态
以下命令需要安装工具包
yum install -y yum-utils
3.yum-config-manager --disable epel
#关闭仓库epel
yum-config-manager --enable epel
#启用仓库epel

查看

1.yum list #列出可用仓库中所有的软件包
2.yum list | less
yum grouplist
# 列出可用仓库中的软件组
3.yum provides /usr/sbin/ifconfig
#查询命令所属的软件包,可以不加路径,只写命令,与 rpm -qf的区别在于yum provides后可以只跟命令名

安装

1.yum install httpd httpd-tools #加上-y选项可以变成非交互
2.yum groupinstall -y '开发工具'
yum groups install -y '开发工具'
两种方式一样
#安装软件组,一个软件组中包含了多个软件包

卸载

1.yum remove httpd httpd-tools http*
# 卸载软件包
2.yum groupremove -y '开发工具'
yum groups remove -y '开发工具'
卸载软件组,两种方式一样

重装

yum reinstall httpd #不小心删除了,可以重装

更新

1.yum check-update #检查可以更新的软件包
2.yum -y update httpd #更新某个软件包
3.yum -y update #更新所有软件包,包括内核,通常只在刚装完系统时执行,其他情况慎用!!

缓存

1.yum makecache #制作元数据缓存
2.yum clear all #清理元数据缓存
3.vim /etc/yum.conf #默认软件包下载安装后会自动删除,设置keepcache=1 及开启了软件包缓存,缓存目录为了配置文件中指定的cachedir

历史记录

1.yum history #查看执行过的yum命令历史记录
2.yum history info id号 #查看具体某一条yum命令的详细信息
3.yum history undo id号 #撤销执行过的历史命令

关于安装需要注意:

无论yum安装的软件来来自何方,yum时刻以自己仓库中的repodate存储的依赖关系为准,如果有多个仓库,就一次检索
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

要使用yum前,需要准备一个yum源(我们也称为yum仓库), 这个可以是一个互联网上的仓库,也可以是本地自己搭建的仓库.仓库里面有什么呢?里面全部都是.rpm的软件包.一台linux,可以添加N多个yum源, 能搜索的软件包数量就是N个yum源之和.

4.3、系统常见yum源

1.自定义的本地源
2.网络上的源头,如:base基础源、epel扩展源、与服务相关的源(官网)

### 4.4、镜像文件作为yum源(本地源)

4.4.1、先挂载

方式1:

mount /dev/cdrom /opt
# 方式2:
mount /dev/sr0 /opt
# 方式3:
mount -o loop /xxx.iso /opt

产看光盘里的rpm包:

ls /opt/Packages/

4.4.2、编辑repo文件

1.必须放在 /etc/yum.repos.d/
2. vim local.repo #文件名自定义,必须以.repo结尾
[local] #仓库是实际名字,任意
name=local #仓库的描述,任意
baseurl=file:///opt #仓库的位置,可以是 http:// https:// ftp:// file://
enable=1 # 启用仓库,默认是启用的
gpgcheck=0 # 检查安装的rpm是否是合法的,0表示不检验

4.4.3、检查可用仓库

yum repolist #查询可用仓库
yum repolist all #查看所有仓库,包括禁用的

4.4.3、安装、查询、卸载

yum list #列出可用的软包

yum install vsftpd -y

yum list vsftpd httpd

yum remove -y vsftpd

yum install glib* httpd -y

yum provides vsftp # 查询某个软件(可以是未安装的)是由哪个rpm包提供

yum reinstall
# rm -rf /etc/httpd/conf/httpd.conf
# yum reinstall httpd -y &> /dev/null
# ls /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf

yum update
# yum -y update samba
# yum -y update

4.4.5、软件包组安装、查询、卸载

[root@localhost ~]# yum grouplist
[root@localhost ~]# yum groupinstall "GNOME 桌面" -y
[root@egon ~]# yum groupinstall "开发工具" -y
[root@egon ~]# yum groupremove "开发工具" -y

4.5、使用开源yum源(网络源)

下载开源的yum源头

例如:

4.5.1. 阿里云的Base基础源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

4.5.2. 163 的Base基础源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo

4.5.3. 红帽的epel扩展源

可以直接下载

curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

也可以安装一个软件包来生成

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.5.4. nginx官网的软件包源

进入nginx官网->download->Pre-Built Packages->Stable and mainline->RHEL/CentOS->编辑到本地

cat nginx.repo

4.5.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]#

4.6、制作本地yum源

1. mkdir -p /var/yum/Packages # 创建yum仓库目录
2.wget # 下载软件包到 Packages/ 目录下
3.yum install createrepo yum-utils # 下载安装createrepo 和 yum-utils
4.createrepo /var/yum # 建立依赖关系,/var/yum下会创建repodata目录
5.在/etc/yum.repos.d/目录下创建以.repo结尾文件,编辑:
[local]
name='yum本地仓库'
baseurl=file:///var/yum
保存退出
6.yum clean all #清理缓存
7.yum makecache #创建元数据缓存
8.yum install 。。。 #下载软件包

4.7、扩展知识

4.7.1、yum元数据缓存

yum元数据缓存:指的将yum仓库的元数据缓存下来,下次安装时省去了检索过程,安装速度可以加快

yum clean all # 清理缓存
yum makecache # 制作缓存

#### 4.7.2、yum软件包缓存

vim ./etc/yum.conf
[main]
cachedir=/var/cache/yum/$baserch/$relrasever #指定软件安装包的缓存目录
keepcache=1 # 缓存开启
debuglevel=2

缓存目录为:ls /var/cache/yum/x86_64/7/

基于软件包缓存,可以做成自己的yum源,以此来控制各个服务的版本,通常的做法为

1.在测试环境中,在每个节点都开启软件包缓存
2.在测试环境中,安装相同版本的操作系统,安装完毕后统一执行yum update -y
3.在测试环境中,部署完你的架构,测试完毕
4.把测试环境中每台机器上缓存好的软件包安装包采集到一个文件下
find /var/cache/yum/x86_64/7/ -type f -name '.rpm' | xargs -I {} mv {} /soft/
5.然后用createrepo命令制作好依赖关系,即repodata数据库
6.然后再线上环境部署时,就用该本地源就好,不要轻易升级,不要滥用yum源,这样可以严格控制好各个版本的服务的版本

4.8、自己制作本地yum源共享给别人

简易操作

1.yum install vsftpd #下载共享文件软件包
2.mkdir /var/ftp/yum/Packages #创建共享目录
3.wget #将软件包下载在Packages目录下
4.yum install createrepo yum-utils -y
#下载以上两个软件包
5.createrepo /var/ftp/yum #建立依赖关系,系统自动创建repodate.repo文件
6.vim /etc/yum.repos.d/yum.repo
编辑:
[yum_share]
name='yum共享仓库'
baseurl=ftp://192.168.207.112
保存退出
必须在此目录下创建.repo结尾的文件进行编辑
7.yum clean all #清除所有缓存
8.yum makecache #建立软件包元数据缓存
9.在网站输入:ftp://192.168.207.112进行访问

如果出现不能访问,请关闭以下设置:
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# /etc/selinux/config 修改SELINUX为:disable

以下较为复杂,可只看上面

在服务端上执行如下操作:

4.8.1、环境准备

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's#SELINUX=.*#SELINUX' /etc/selinux/config

4.8.2、 安装ftp服务

yum install vsftpd -y #下载软件包
systemctl start vsftpd #开启
systemctl status vsftpd #查看状态,确保开启
systemctl enable vsftpd #开机自启动

4.8.3、采集软件包放到一个目录下

可以基于4.6的方式,也可以偷个懒直接用镜像里现成的,毕竟是实验嘛,但无论何种方式,都一定要解决好依赖关系才能用来做yum源,本例就用现成的吧
# mkdir /var/ftp/centos7
# mount /dev/sr0 /var/ftp/centos7

在客户端上执行如下操作:

4.8.4、环境准备

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

/etc/selinux/config 修改SELINUX为:disable

ping -c 2 192.168.12.42 # ping一下服务端的ip地址,保证网络畅通

4.8.5、在客户端配置网络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指向的目录无论是什么,在该目录的子目录一级必须有一个repodate数据库

4.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 //不检查软件包的签名

5、 源码包

5.1、官网下载,如:nginx

浏览器下载或执行命令下载

wget http://nginx.org/download/nginx-1.18.0.tar.gz

5.2、解压

tar -xvf nginx--1.18.0.tar.gz -C /tmp/

5.3、预先安装编译安装依赖的库

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"

5.4、解压、编译、编译安装

[root@localhost nginx-1.18.0]# ./configure --prefix=/usr/local/nginx-1.18.0
以下
[root@localhost nginx-1.18.0]# ./configure 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模块 添加strem模块 –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直接安装使用.

5.5、总结编译安装--->>>三部曲

./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:有一些源码包是已经编译好的结果,下载后解压即可使用

2、源代码包编译

1、需要语言编辑器
yum install gcc gcc-c++ make -y

2、下载源代码
[root@localhost ~]# wget https://nginx.org/download/nginx-1.20.1.tar.gz
[root@localhost ~]# tar -xf nginx-1.20.1.tar.gz
[root@localhost nginx-1.20.1]# cd nginx-1.20.1

3、编译安装
1、初始化配置
[root@localhost nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
2、编译
[root@localhost nginx-1.20.1]# make

3、安装
[root@localhost nginx-1.20.1]# make install

4、校验
[root@localhost nginx-1.20.1]# cd /usr/local/nginx/
[root@localhost nginx]# ./sbin/nginx

5、增加模块
[root@localhost nginx-1.20.1]# make clean all

3、二进制包安装

1、下载
[root@localhost ~]# wget https://repo.huaweicloud.com/etcd/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz
2、解压
[root@localhost ~]# tar -xf etcd-v3.4.9-linux-amd64.tar.gz -C /usr/local
3、添加环境变量
[root@localhost ~]# vim /etc/profile
export ETCD_HOME=/usr/local/etcd-v3.4.9-linux-amd64
export PATH=$PATH:$ETCD_HOME

环境变量文件:
/etcprofile 全局环境变量
/home/bashrc 单用户环境变量
/home/profile 单用户环境变量

4、测试
[root@localhost ~]# etcdctl version
etcdctl version: 3.4.9
API version: 3.4

posted @ 2021-07-05 14:35  郝怕怕  阅读(149)  评论(0)    收藏  举报