一 软件包介绍
与windows类似,在linux系统上也可以安装各种应用程序,或称软件包,linux下软件包分为三类
二 rpm包管理
什么是rpm包
在主流的linux系统上,多数软件的安装、升级、移除以及维护工作都是使用RPM软件包管理程序来完成的,那什么是
RPM
软件包呢?
RPM
是Red-Hat Package Manager(RPM
软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,通常软件的稳定版会被官方做成rpm
,所以软件版本偏低。
rpm
包格式
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 #后缀名
RPM
闭包使用的平台
redhat/centos/redora/suse
查看自己当前平台
[root@localhost ~]# uname -m
x86_64
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
管理rpm
包有两种命令
-
rpm
命令:
需要自己找到rpm包,并且手动解决包的依赖性关系
ps:实际情况下,很难分辨缺少什么依赖包 -
yum
命令:
相关rpm
包事先都被存放于一个仓库里,仓库包含了所有的依赖包,所以yum
按照可以帮我们解决依赖性问题
RPM
包获取
-
本地的ISO镜像光盘(软件包可能存在版本偏低情况) : 挂载镜像有以下三种方式
方式1:
mount /dev/cdrom /opt/
方式2:
mount /dev/sr0 /opt/
方式3
mount -o loop /xxx.iso /opt
查看光盘里的rpm
包
ls /opt/Packages/
-
自己去网上下载
rpm
包进行安装 -
联网从
yum
仓库里获取rpm
包 (yum
的时候)
三 rpm命令
选项
安装:rpm -ivh <RPM包名全称>
卸载:rpm -e <RPM包名>
升级:rpm -Uvh <RPM包名>
查询:
rpm -qa
#查询系统中安装的所有RPM
软件包
rpm -qa | grep php
#检索系统中已经安装有关php
的软件包
rpm -q <RPM包名>
#查询指定软件包是否已安装,如:rpm -q zip
返回:zip-3.0-11.el7.x86_64
rpm -qi <RPM包名>
#查询系统中已安装包的描述信息
rpm -ql <RPM包名>
#查询系统中已安装包里所包含的文件
rpm -qc <RPM包名>
#查询指定软件包的所有配置文件,如:rpm -qc mariadb
,返回:/etc/my.cnf.d/client.cnf
rpm -qd <RPM包名>
# 查询某个包安装的帮助文档,如:rpm -qd zlib
rpm -qf
文件路径 #查询系统中指定文件所属的软件包,如:rpm -qf /usr/sbin/ifconfig
,返回:net-tools-2.0-0.25.20131004git.el7.x86_64
-p
# 在上述选项的基础上加选项-p
,就可以查看尚未安装的rpm
包信息rpm -qip /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm rpm -qlp /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm rpm -qcp /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm rpm -qdp /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm
额外选项
--nomd5
# 不检验软件包的签名
--nodeps
# 忽略依赖性安装软件,安装后软件有可能无法使用,最好是解决依赖性后再安装
如:rpm -e dos2unix --nodeps
# 忽略依赖关系
--force
# 强制安装软件包,只有安装和升级可以强制执行
安装
rpm
包在本地
mount /dev/sr0 /opt
rpm -ivh /opt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm
rpm
来自于网络,如果安装过程中报错:curl: (60) Peer's Certificate has expired
,请先将系统时间修改正确,然后再安装即可
输入: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 -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 需要
解决思路:安装提示的库,安装
rpm -ivh /opt/Packages/apr-1.4.8-3.el7_4.1.x86_64.rpm
rpm -ivh /opt/Packages/apr-util-1.5.2-6.el7.x86_64.rpm
rpm -ivh /opt/Packages/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
yum search mime.types # 查看到mime.types对应的依赖包为mailcap-。。。
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%]
升级rpm
包
- 下载一个低版本、一个高版本
wget https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent3.0.9-1.el7.x86_64.rpm
wget https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent4.2.0-1.el7.x86_64.rpm
- 先安装低版本
rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm
- 再安装高版本,会报错
rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm
- 如果采用
--force
选项,那就是强制安装,会同时存在两个版本,该方案不可取
rpm -qa |grep zabbix
#返回:zabbix-agent-3.0.9-1.el7.x86_64
rpm -ivh zabbix-agent-4.2.0-1.el7.x86_64.rpm --force
。。。安装成功。。。
rpm -qa |grep zabbix # 同时两个版本共存
#返回:zabbix-agent-3.0.9-1.el7.x86_64
#返回:zabbix-agent-4.2.0-1.el7.x86_64
- 重来,采用升级方式安装
rpm -e zabbix-agent-3.0.9-1.el7.x86_64
rpm -e zabbix-agent-4.2.0-1.el7.x86_64
rpm -qa |grep zabbix
rpm -ivh zabbix-agent-3.0.9-1.el7.x86_64.rpm
。。。
rpm -Uvh zabbix-agent-4.2.0-1.el7.x86_64.rpm
。。。清理老版本,安装新版本。。。
rpm -qa |grep zabbix-agent # 只留下一个新版本
#返回:zabbix-agent-4.2.0-1.el7.x86_64
练习安装如下软件包:
vsftpd
samba
nfs-utils
httpd
dhcp
postfix
php
lftp
dos2unix
unix2dos
tigervnc
三 yum管理RPM包
yum
介绍
yum
自动解决依赖关系
Yum
(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell
前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
查看yum
命令与配置文件
rpm -q yum
#返回:yum-3.4.3-161.el7.centos.noarch
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 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 #更新某个软件包
- 缓存
yum makecache #制作元数据缓存
yum clean all #清理元数据缓存
vim /etc/yum.conf #默认软件包下载安装后会自动删除
#设置keepcache=1 即开启了软件包缓存
#缓存目录为配置文件中指定的cachedir
- 历史记录
yum history # 查看执行过的yum命令历史记录
yum history info ID号 # 查看具体某一条yum命令的详细信息
yum history undo ID号 # 撤销执行过的历史命令
- 关于安装需要注意:
无论yum
安装的软件来自何方,yum
时刻以自己仓库中的repodata
存储的依赖关系为准,如果有多个仓库,就依次检索- yum直接安装公网的rpm包, 会自动查找当前系统上已有的仓库解决依赖关系
yum install https://mirrors.aliyun.com/centos/7.6.1810/os/x86_64/Packages/samba4.8.34.el7.x86_64.rpm
Yum
直接安装本地的rpm
包,会自动查找当前系统上已有的仓库解决依赖关系
yum localinstall -y /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
- yum直接安装公网的rpm包, 会自动查找当前系统上已有的仓库解决依赖关系
要使用
yum
前,需要准备一个yum
源(我们也称为yum
仓库), 这个可以是一个互联网上的仓库,也可以是本地自己搭建的仓库.仓库里面有什么呢?里面全部都是.rpm
的软件包.一台linux,可以添加N多个yum
源, 能搜索的软件包数量就是N个yum
源之和.系统常见yum
源
1.自定义的本地源
2.网络上的源头,如:base
基础源、epel
扩展源、与服务相关的源(官网)
镜像文件作为yum
源(本地源)
1、先挂载
# 方式1:
mount /dev/cdrom /opt/
# 方式2:
mount /dev/sr0 /opt/
# 方式3
mount -o loop /xxx.iso /opt
查看光盘里的rpm包
ls /opt/Packages/
2、编辑repo
文件
[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、检查可用仓库
yum repolist # 查询可用仓库
yum repolist all # 查看所有仓库,包括禁用的
4、安装、查询、卸载
yum list # 列出可用的软包
yum install vsftpd -y
yum list vsftpd httpd
yum remove vsftpd -y
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
5、软件包组安装、查询、卸载
yum grouplist
yum groupinstall "GNOME 桌面" -y
yum groupinstall "开发工具" -y
yum groupremove "开发工具" -y
使用开源yum
源(网络源)
然后下载开源的yum
源头:
例如阿里云的Base基础源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos7.repo
例如163的Base基础源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
例如红帽的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恰恰可以解决这两方面的问题。
例如nginx
官网的软件包源
# 进入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
将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
自己制作本地yum
源
- 下载好一堆
rpm
包,相关依赖包也都存在,将所有的rpm
包都放置于一个文件夹下,比如/aaa
- 安装工具
createrepo
yum install createrepo -y
- 制作
repodata
createrepo /aaa/
- 配置本地
repo
文件,指向/aaa
[root@localhost ~]# vim /etc/yum.repos.d/soft.repo
[soft]
name=soft
baseurl=file:///aaa
enabled=1
gpgcheck=0
yum扩展知识
yum
元数据缓存:指的将yum仓库的元数据缓存下来,下次安装时省去了检索过程,安装速度可以加快
yum clean all
# 清理缓存
yum makecache
# 制作缓存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/
- 基于软件包缓存,可以做成自己的
yum
源,以此来控制各个服务的版本,通常的做法为- 在测试环境中,在每个节点上都开启软件包缓存
- 在测试环境中,安装相同版本的操作系统,安装完毕后统一执行
yum update -y
- 在测试环境中,部署完完你的架构,测试完毕
- 把测试环境中每台机器上缓存好的软件包安装包采集到一个文件下
find /var/cache/yum/x86_64/7/ -type f -name "*.rpm" | xargs -I {}
mv {} /soft/
- 然后用
createrepo
命令制作好依赖关系,即repodata
数据库 - 然后在线上环境部署时,就用该本地源就好,不要轻易升级,不要用
yum
源,这样可以严格控制好各个服务的版本
自己制作本地yum
源共享给别人
在服务端上执行如下操作
# 1、环境准备
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config
# 2、安装ftp服务
yum install vsftpd -y
systemctl start vsftpd
systemctl status vsftpd # 查看状态,确保开启
systemctl enable vsftpd
# 3、采集软件包放到一个目录下
可以基于3.3的方式,也可以偷个懒直接用镜像里现成的,毕竟是实验嘛,但无论何种方式,都一定要解决好
依赖关系才能用来做yum源,本例就用现成的吧
mkdir /var/ftp/centos7
mount /dev/sr0 /var/ftp/centos7
# 或者拷贝
mount /dev/sr0 /opt
mkdir /var/ftp/centos7
find /opt/Packages/ -type f -name "*.rpm" |xargs -I {} cp -rp {}
#返回:/var/ftp/centos7/
在客户端上执行如下操作
# 1、环境准备
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config
ping -c 2 192.168.12.42 # ping一下服务端的ip地址,保证网络畅通
# 2、在客户端配置网络yum源
cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak/
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数据库
yum
的历史记录
yum history
# 查看执行过的yum
命令历史记录
yum history info ID号
# 查看具体某一条yum
命令的详细信息
yum history undo ID号
# 撤销执行过的历史命令
拓展了解:签名检查机制
RPM
工具使用签名检查机制:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 导入centos公钥
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
//不检查软件包的签名
四 源码包
官网下载,如nginx
- 浏览器下载
- 或者执行命令
wget http://nginx.org/download/nginx-1.18.0.tar.gz
预先安装编译安装依赖的库
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"
解压、编译、编译安装
[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]# ./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
--prefix
指定安装的目录,/usr/local/nginx
是安装目录- 带
ssl stub_status
模块 添加strem
模块–with-stream
,这样就能传输tcp
协议了 http_stub_status_module
状态监控http_ssl_module
配置https
stream
配置tcp
得转发http_gzip_static_module
压缩http_sub_module
替换请求
[root@localhost nginx-1.18.0]# make && make install
- 将程序设定一个软连接,便于后续的升级
注意:现在百分之90,能用上的软件,都提供了[root@egon soft]# ln -s /soft/nginx-1.16.0/ /soft/nginx [root@egon ~]# /soft/nginx/sbin/nginx
rpm
包. —>使用户可以使用yum
直接安装使用.
总结编译安装=》三部曲
# ./configure --prefix=/usr/local/nginx-1.18.0
a. 指定安装路径,例如
--prefix=DIR
b. 启用或禁用某项功能, 例如--enable-ss
l,--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:有一些源码包是已经编译好的结果,下载后解压即可使用