Linux安装及管理程序 RPM、YUM、源码编译安装

625 阅读14分钟

如何在Linux中安装程序

在Linux中安装程序的三种方式

  • rpm(软件安装包,但是一般只用来查)
  • yum()
  • 编译(将人类使用的高级语言翻译成二进制)

常见的软件包封装类型

文件类型保存目录
RPM软件包扩展名为“.rpm” 红帽包管理系统 (对应系统centos和Redhat )
DEB软件包扩展名为“.deb” (对应系统Ubuntu)
源代码软件包一般为“.tar.gz”、“.tar.bz2”等格式的压缩包 包含程序的原始代码
绿色免安装的软件包软件包的扩展名不一,以TarBall格式的居多 在压缩包内提供已编译好的执行程序文件 解开压缩包后的文件即可直接使用
  1. RPM包 : RPM Package Manager的缩写 是红帽公司自主研发的一款工具,实用性强。RPM包是预先在linux机器上编译好并打包好的文件,安装起来非常快捷。但是也有一些缺点,比如安装的环境必须与编译时的环境一致或者相当;包与包之间存在相互依赖的情况。

  2. DEB包:在Linux系统中类似于windows中的软件包(exe),几乎不需要什么复杂的编译即可通过鼠标点击安装使用。此外,deb广泛应用于越狱后iOS软件及MeeGo(含Maemo软件)中。Debian包是将包的文件信息以及包内容,经过gzip和tar打包而成。

  3. 源代码软件包 :是需要我们自己把源代码编译成二进制的可执行文件。如果你读得懂这些源代码,那么你就可以去修改这些源代码自定义功能,然后再去编译成你想要的。使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的。

  4. 绿色免安装的软件包 :顾名思义自行理解比如Windows的截图软件

RPM

RPM包管理系统 Red-Hat package Manager

rpm是一个安装软件(类似于windows的360软件管家,但是比其弱安装包得自己找)

  • 由Red Hat公司提出,被众多Linux发行版所采用

  • 建立统一的数据库文件(一张对应表将安装软件信息写入)

  • 详细记录软件包安装、卸载等变化信息

  • 自动分析软件包依赖关系(就是因为这个缺陷,在一般情况下只用来查看是否安装或配置信息)

RPM软件包一般命名格式:bash-4.1.2.-28.el6.x86_64.rpm

一定要在官方网站获取软件包:

RPM软件包素材地址——www.rpm.org

nginx.org 软件包官网

RPM命令

rpm命令功能:

  • 查询、验证RPM软件包的相关信息
  • 安装、升级、卸载RPM软件包
  • 维护重建RPM数据库信息等综合管理操作

查询

  • 命令rpm-q[子选项][软件名]
  • 查询软件是否已安装]
选项功能效果
rpm -qa显示当前系统以rpm方式安装的所有软件
rpm -q 软件名查询某个指定软件有没有安装
rpm -qc 软件名查询某个软件的配置文件
rpm -ql 软件名某个软件的所有文件列表
rpm -qi 软件名软件的基本信息

演示:

1.查看当前系统有多少安装的软件

[root@localhost /]# rpm -qa          //查看当前安装的所有软件
[root@localhost /]# rpm -qa | wc -l  //统计有多少
1372

2.查看sysstat软件是否安装

[root@localhost /]# rpm -q  sysstat   //查看是否安装sysstat软件
sysstat-10.1.5-12.el7.x86_64

3.查看sysstat软件的配置文件

[root@localhost /]# rpm -qc  sysstat  //查看该文件的配置文件
/etc/cron.d/sysstat
/etc/sysconfig/sysstat
/etc/sysconfig/sysstat.ioconf

4.查看sysstat软件的详细信息

[root@localhost /]# rpm -qi sysstat  //查看详细信息
Name        : sysstat
Version     : 10.1.5
Release     : 12.el7
Architecture: x86_64
Install Date: 20240229日 星期四 005243Group       : Applications/System
Size        : 1158910
License     : GPLv2+
Signature   : RSA/SHA256, 20170811日 星期五 040009秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : sysstat-10.1.5-12.el7.src.rpm
Build Date  : 20170803日 星期四 173100Build Host  : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://sebastien.godard.pagesperso-orange.fr/
Summary     : Collection of performance monitoring tools for Linux

安装

  • 命令rpm -ivh [RPM文件包]

要先去官网下载安装包或者镜像里自带的安装包。

选项功能说明
iinstall安装
v显示过程
h代表了######进度条

演示:

1.由于RPM来安装软件包无法自动解决依赖关系,所以会遇到错误,需要人为解决。

[root@localhost ~]# cd /
[root@localhost /]# mount /dev/sr0  /mnt                 //把光驱中的类容挂载到mnt挂载点
mount: /dev/sr0 写保护,将以只读方式挂载
   
[root@localhost /]# cd /mnt/Packages/                   //转移工作目录到mnt下的软件包库
[root@localhost Packages]# ls | grep httpd              //筛选出httpd软件包

httpd-2.4.6-67.el7.centos.x86_64.rpm       
httpd-devel-2.4.6-67.el7.centos.x86_64.rpm
httpd-manual-2.4.6-67.el7.centos.noarch.rpm
httpd-tools-2.4.6-67.el7.centos.x86_64.rpm
libmicrohttpd-0.9.33-2.el7.x86_64.rpm
[root@localhost Packages]# rpm -ivh httpd             //必须输入完整软件包名否则就会失败
错误:打开 httpd 失败: 没有那个文件或目录
[root@localhost Packages]# rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm      //安装该文件
警告:httpd-2.4.6-67.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:                                                  //发现依赖关系
	/etc/mime.types 被 httpd-2.4.6-67.el7.centos.x86_64 需要
	httpd-tools = 2.4.6-67.el7.centos 被 httpd-2.4.6-67.el7.centos.x86_64 需要
[root@localhost Packages]# yum install mailcap               //尝试安mailcap`/etc/mime.types` 文件通常属于 `mailcap` 软件包的一部分
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * extras: mirrors.ustc.edu.cn
 * updates: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 mailcap.noarch.0.2.1.41-2.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

==========================================================================
 Package         架构           版本                   源            大小
==========================================================================
正在安装:
 mailcap         noarch         2.1.41-2.el7           base          31 k

事务概要
==========================================================================
安装  1 软件包

总下载量:31 k
安装大小:62 k
Is this ok [y/d/N]: y
Downloading packages:
警告:/var/cache/yum/x86_64/7/base/packages/mailcap-2.1.41-2.el7.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
mailcap-2.1.41-2.el7.noarch.rpm 的公钥尚未安装
mailcap-2.1.41-2.el7.noarch.rpm                      |  31 kB   00:00file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 检索密钥
导入 GPG key 0xF4A80EB5:
 用户ID     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 指纹       : 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 软件包     : centos-release-7-4.1708.el7.centos.x86_64 (@anaconda)
 来自       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
是否继续?[y/N]:y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : mailcap-2.1.41-2.el7.noarch                           1/1 
  验证中      : mailcap-2.1.41-2.el7.noarch                           1/1 

已安装:
  mailcap.noarch 0:2.1.41-2.el7                        //这样就解决完成依赖关系                   

完毕!

2.解决一个依赖关系后再来安装需要安装的软件,从而才能安装成功。

[root@localhost Packages]# cd /mnt/Packages/    //折返回继续安装,此次还需要解决一个依赖关系
[root@localhost Packages]# ls | grep httpd
httpd-2.4.6-67.el7.centos.x86_64.rpm
httpd-devel-2.4.6-67.el7.centos.x86_64.rpm
httpd-manual-2.4.6-67.el7.centos.noarch.rpm
httpd-tools-2.4.6-67.el7.centos.x86_64.rpm
libmicrohttpd-0.9.33-2.el7.x86_64.rpm
[root@localhost Packages]# rpm -vih httpd-2.4.6-67.el7.centos.x86_64.rpm
错误:依赖检测失败:                                   //检测出另一处依赖关系对应对其解决
	httpd-tools = 2.4.6-67.el7.centos 被 httpd-2.4.6-67.el7.centos.x86_64 需要
[root@localhost Packages]# rpm -vih httpd-tools-2.4.6-67.el7.centos.x86_64.rpm     //安装好依赖关系
准备中...                          ################################# [100%]
正在升级/安装...
   1:httpd-tools-2.4.6-67.el7.centos  ################################# [100%]
[root@localhost Packages]# rpm -vih httpd-2.4.6-67.el7.centos.x86_64.rpm          //安装本体,安装成功
准备中...                          ################################# [100%]
正在升级/安装...
   1:httpd-2.4.6-67.el7.centos        ################################# [100%]

总结:

由于RPM无法对依赖关系进行处理解决,需要人为手动安装,所以在生产环境中,一般来说都是用yum安装或源代码编译安装。

辅助助选项:

选项说明
-h在安装或升级软件包的过程中,以“#”号显示安装进度。
-v显示软件安装过程中的详细信息。
- -force强制安装某个软件包,比如要安装版本更旧的软件包。
--nodeps在安装或升级、卸载一个软件包时,不检查与其他软件包的依赖关系,强制安装

升级命令:

rpm -U或-F RPM包文件

  • -U:升级某个软件包,若未安装则进行安装
  • -F:升级某个软件包,若未安装则直接结束

卸载

卸载命令:

rpm -e 软件名

[root@localhost Packages]# rpm -evh httpd-2.4.6-67.el7.centos.x86_64.rpm           //卸载  httpd

维护RPM数据库

当RPM 数据库发生损坏,可通过重建RPM数据库修复。操作步骤:

1.重建RPM数据库

复制代码
rmp --rebuilddb 或 rmp --initdb

2.导入验证公钥

复制代码
rpm --import  /mnt/RPM-GPG-KEY-CentOS-7

解决软件包依赖关系的方法

1.安装有依赖关系的多个软件时

  • 被依赖的软件包需要先安装
  • 可同时指定多个.rpm包文件进行安装

2.卸载有依赖关系的多个软件时

  • 依赖其他程序的软件包需要先卸载
  • 可同时指定多个软件名进行卸载

3.忽略依赖关系

  • 结合“- -nodeps”选项,但可能导致软件异常

YUM

一、YUM的简介

YUM是建立于RPM结构基础之上的一个机制,YUM的出现解决了RPM的缺点,自动解决了依赖包的关系问题,是RPM的升级版。Yum(全称为 Yellow dog Updater, Modified) 是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。

客户端配置:

  1. yum安装软件要先有软件包,而软件包不在本地,所以要先得网络是联通的,在网络上有台服务器来提供安装包资源。

  2. 那么问题就来了网上那么多服务器,客户端如何可以找到对应的服务器。这就得在客户端中设配置文件。

  3. 客户端配置文件两个要求 :

  • 必须在 /etc/yum.repos.d/ 这个目录下
  • 配置文件必须以 *.repo 结尾

演示: 配置文件

[zhu]                   //仓库描述(可随意写)
name=ali               //仓库名称(可自定义)
baseurl=http://       //指明服务器的位置,去服务器端下载软件包
gpgcheck=0            //是否开启验证,1代表开启如果是0代表关闭包的验证
enabled=1            //是否开启仓库,默认是开启的

服务端配置文件:

服务器要有:

1.安装包(最基础)

2.元信息(数据库) 安装包的位置和安装包的依赖关系。

image.png

YUM命令

命令格式:yum [option] [command] [package...]

命令含义
yum list 软件名显示所有可用包
yum info 软件名显示所有可用包的信息
yum history查看当前yum操作历史
yum provides 关键词精确查找
yum install 软件名安装软件包

搭建本地yum仓库

1、搭建元信息和安装包

1.挂载光驱文件

[root@localhost ~]# mount /dev/sr0 /mnt          //将镜像光驱文件临时挂载到mnt文件夹下
mount: /dev/sr0 写保护,将以只读方式挂载

image.png

2.切换到指定目录,建立子文件夹,并移走网络源

image.png

[root@localhost yum.repos.d]# ls                        //查看一下文件夹内容
CentOS-Base.repo       CentOS-fasttrack.repo  CentOS-Vault.repo
CentOS-CR.repo         CentOS-Media.repo
CentOS-Debuginfo.repo  CentOS-Sources.repo 
[root@localhost yum.repos.d]# mkdir zhu                 //创建一个子文件夹准备移走网络源
[root@localhost yum.repos.d]# mv ./*.repo zhu          //移走网络源
[root@localhost yum.repos.d]# vim zhu.repo             //创建本地配置文件
[zhu]                      //仓库描述
name=zhu                  //仓库名称
baseurl=file:///mnt       //仓库的具体地址 file本机 file://固定格式
gpgcheck=0               //不打开检验


:wq

image.png

3.清除缓存下载元信息

mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo       CentOS-fasttrack.repo  CentOS-Vault.repo
CentOS-CR.repo         CentOS-Media.repo
CentOS-Debuginfo.repo  CentOS-Sources.repo
[root@localhost yum.repos.d]# mkdir zhu
[root@localhost yum.repos.d]# mv ./*.repo zhu
[root@localhost yum.repos.d]# vim zhu.repo
[root@localhost yum.repos.d]# yum clean all           //清除网络源缓存
已加载插件:fastestmirror, langpacks
正在清理软件源: zhu
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
Cleaning up list of fastest mirrors
[root@localhost yum.repos.d]# yum makecache           //下载元信息
已加载插件:fastestmirror, langpacks
zhu                                                | 3.6 kB     00:00     
(1/4): zhu/group_gz                                  | 156 kB   00:00     
(2/4): zhu/filelists_db                              | 3.1 MB   00:00     
(3/4): zhu/primary_db                                | 3.1 MB   00:00     
(4/4): zhu/other_db                                  | 1.2 MB   00:00     
Determining fastest mirrors
元数据缓存已建立
[root@localhost yum.repos.d]# 

image.png

4.下载一个软件作为验证,安装tree软件

已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 tree.x86_64.0.1.6.0-10.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

==========================================================================
 Package       架构            版本                    源            大小
==========================================================================
正在安装:
 tree          x86_64          1.6.0-10.el7            zhu           46 k

事务概要
==========================================================================
安装  1 软件包

总下载量:46 k
安装大小:87 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : tree-1.6.0-10.el7.x86_64                              1/1 
  验证中      : tree-1.6.0-10.el7.x86_64                              1/1 

已安装:
  tree.x86_64 0:1.6.0-10.el7                                              

完毕!

**

源代码编译安装

1、 源代码编译安装软件的优点

  • 获得最新的软件版本,及时修复bug;
  • 根据用户需要,自由选择模块安装,灵活定制软件功能;
  • 可以将文件放在同一目录下,便于管理。

2、编译安装过程

image.png

编译安装三步走

./configure #脚本文件,源码包中自带 最后会生成makefile文件,是你做的个性化设置(选择功能、指定路径等)

1.功能:

  • 检测安装环境 和依赖关系

  • 可以选择安装软件的哪些功能,选择好后生成一个文件make.file,按照这个文件的配置进行编译安装

  • 指定安装路径 --perfix=路径 路径可以不存在,会自动建立 ( 默认在 /usr/local/nginx )

  1. make #将源代码编译成二进制可以执行的文件

  2. make install #将软件安装进系统的指定路径 (install是cp 、 chown 、chmod 三个命令的集合)

4.三步走要在源码包下完成

用途

  • 安装较新版本的应用程序时(官方紧急发布的修复包之类)
  • 当前安装的程序无法满足需要时;
  • 需要为应用程序添加新的功能时。

演示:

1.下载所需的软件包

[root@localhost zhu]# wget http://nginx.org/download/nginx-1.18.0.tar.gz         //可单独创建一个文件夹存放下载的软件包
--2024-04-14 08:49:15--  http://nginx.org/download/nginx-1.18.0.tar.gz
正在解析主机 nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:5c0:2600::6, ...
正在连接 nginx.org (nginx.org)|3.125.197.172|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1039530 (1015K) [application/octet-stream]
正在保存至: “nginx-1.18.0.tar.gz100%[======================================>] 1,039,530    357KB/s 用时 2.8s   

2024-04-14 08:49:18 (357 KB/s) - 已保存 “nginx-1.18.0.tar.gz[1039530/1039530])

[root@localhost zhu]# ls                //查看软件包是否下载好
nginx-1.18.0.tar.gz

2.tar解压软件包

将下载好的软件包解压到指定文件夹中

  • 使用tar命令将软件包解压到指定目录,一般选择/usr/src/目录(也可自建目录)。
  • 解包后的源代码文件位置:/usr/src/软件名-版本号。
[root@localhost zhu]# tar xf nginx-1.18.0.tar.gz         //解压下载好的软件包,这里使用建立好的文件夹
[root@localhost zhu]# ls
nginx-1.18.0  nginx-1.18.0.tar.gz                       //检查软件包解压情况

3.  ./configure配置

  • 这里设置设置安装目录、安装模块等选项
  • 配置选项 --prefix=软件安装目录

演示:

[root@localhost nginx-1.18.0]# ls                        //查看是否在源代码包释放目录
auto     CHANGES.ru  configure  html     man     src
CHANGES  conf        contrib    LICENSE  README
[root@localhost nginx-1.18.0]# ./configure   --prefix=/zhu/apps/nginx           //运行configure脚本,检测安装环境,并指定安装目录

./configure: error: the HTTP rewrite module requires the PCRE library.          //发现有报错
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

[root@localhost nginx-1.18.0]# yum  -y  install  make  gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel                     //安装依赖环境随后再检测安装环境,检测完成没有报错即可。
  1. --prefix选项是指定安装目录 ,如果不配置该选项,安装后可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr/local/share,比较凌乱。
  2. 运行configure脚本后会检测make工具是否安装,若未安装会直接报错。

3. make编译与安装

  • 生成机器语言可执行的二进制文件。
  • 复制二进制的文件到系统,配置应用环境。
[root@localhost nginx-1.18.0]# make -j2          //编译-j2 2个核心编译
make -f objs/Makefile
root@localhost nginx-1.18.0]# make install      //安装(将软件复制到 前面规定的路径)

4.完成最后对软件的软连接和运行

In -s /apps/nginx/sbin/nginx /usr/local/sbin    #做软连接可以补全 
nginx                                           #执行nginx 
systemctl stop firewalld                        #关闭防火墙 
setenforce 0                                    #关闭selinux防火墙

总结

  • 1.RPM 、YUM、源码编译安装都可以安装软件包。RPM和YUM的安装对象是RPM包 ,源码编译安装的对象是源码包。RPM包的前身是源码包。
  • 2.因为PRM安装软件包时无法自动解决依赖关系,故实际项目中,一般使用YUM安装和源码编译安装。