4.2 linux中安装卸载软件,rpm、yum、编译

136 阅读8分钟

linux中安装软件

1.rpm(redhat packages manager)

1.1.rpm软件介绍

rpm是红帽开发的一款安装软件的工具,但是安装包和依赖环境都需要自行解决,一般不用来安装软件,rpm命令主要用于查询软件是否安装。

1.2.rpm命令

rpm 选项 软件名含义
-q查询软件是否安装
-qa查询所有已安装软件
-qc查询软件的配置文件
-ql查询软件的所有文件列表
-qi查询软件的基本信息

1.3.rpm查询的应用

[root@localhost ~]# rpm -q tree    #查询tree是否安装
tree-1.6.0-10.el7.x86_64           #tree已安装

[root@localhost ~]# rpm -q nginx    #查询nginx是否安装
未安装软件包 nginx                      #nginx未安装

[root@localhost ~]# rpm -qi tree    #查询tree软件的基本信息
Name        : tree
Version     : 1.6.0
Release     : 10.el7
Architecture: x86_64
Install Date: 2024年04月05日 星期五 01时08分37秒
Group       : Applications/File
Size        : 89505
License     : GPLv2+
Signature   : RSA/SHA256, 2014年07月04日 星期五 13时36分46秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : tree-1.6.0-10.el7.src.rpm
Build Date  : 2014年06月10日 星期二 03时28分53秒
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://mama.indstate.edu/users/ice/tree/
Summary     : File system tree viewer
Description :
The tree utility recursively displays the contents of directories in a
tree-like format.  Tree is basically a UNIX port of the DOS tree
utility.

[root@localhost ~]# rpm -ql tree #查询tree的所有文件列表
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz


1.4.rpm的安装与卸载

rpm -ivh 软件名含义
-i安装
-v显示过程
-h进度条(人性化显示)
-e卸载

1.5.rpm安装和卸载应用

[root@localhost Packages]# rpm -e tree  #卸载tree
[root@localhost Packages]# rpm -q tree  #查询tree是否安装
未安装软件包 tree 
[root@localhost Packages]# mount /dev/sr0 /mnt    #先将光驱中的安装包挂载到/mnt上
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost Packages]# cd /mnt
[root@localhost mnt]# ls
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
[root@localhost mnt]# cd /mnt/Packages/             #Packages文件夹下为光驱自带的安装包
[root@localhost mnt]# ls             
yum-plugin-verify-1.1.31-42.el7.noarch.rpm                   #Packages文件夹下有非常多rpm安装包
yum-plugin-versionlock-1.1.31-42.el7.noarch.rpm    
yum-utils-1.1.31-42.el7.noarch.rpm
zenity-3.22.0-1.el7.x86_64.rpm
zip-3.0-11.el7.x86_64.rpm
zlib-1.2.7-17.el7.x86_64.rpm
zlib-devel-1.2.7-17.el7.x86_64.rpm
zsh-5.0.2-28.el7.x86_64.rpm
zziplib-0.13.62-5.el7.x86_64.rpm
.
.
.
[root@localhost Packages]# ls | grep tree     #列出Packages下的安装包并过滤出tree软件的安装包
texlive-pst-tree-svn24142.1.12-38.el7.noarch.rpm
tree-1.6.0-10.el7.x86_64.rpm  
[root@localhost Packages]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm  #安装tree软件
准备中...                          ################################# [100%]
正在升级/安装...
   1:tree-1.6.0-10.el7                ################################# [100%]
[root@localhost Packages]# rpm -q tree            #tree已安装
tree-1.6.0-10.el7.x86_64

2.yum安装

2.1.yum软件介绍

yum软件是rpm的升级版,相比于rpm,yum可以根据服务端的信息自动解决软件安装的依赖关系,并且yum可以依靠网络直接安装需要的软件,不仅可以建立本地yum仓库还可以上网根据服务器的信息安装软件。

yun命令

yum 选项含义
yum list显示所有安装包
yum remove卸载软件
yum install -y 软件名不询问同意安装软件

2.2yum客户端和服务端

2.2.1.客户端如何与服务器建立连接

客户端:

1.客户端需要有配置文件

2.配置文件位置必须在/dev/yum.repo.d/目录下

3.配置文件结尾必须是.repo

配置文件格式: [名字] /仓库的描述,自定义名字 name=名字 /仓库的名字,自定义,不重复即可 baseurl= /指明服务器的位置 enabled=1 /是否开启仓库(默认开启,可以省略不写) gpgcheck=0 /开启包的验证(正规渠道无需验证)

服务端:

1.安装包

2.元信息(类似数据库) A.安装包的位置 B.安装包的依赖关系

安装过程:

1.客户端发起安装软件的请求到服务端。

2.服务端先发送元信息给客户端。

3.客户端根据元信息找到包。

4.客户端下载包到本地。

2.3.本地yum仓库搭建

搭建本地yum仓库,自己既是服务端又是客户端。

在没有网络连接时,可以用来临时安装软件,软件包较少。

搭建过程:

[root@localhost ~]# mount /dev/sr0 /mnt   
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo  CentOS-CR.repo  CentOS-Debuginfo.repo  CentOS-fasttrack.repo  CentOS-Media.repo  CentOS-Sources.repo  CentOS-Vault.repo
[root@localhost yum.repos.d]# mkdir bak    #建立文件bak文件夹
[root@localhost yum.repos.d]# mv *.repo bak   #将其他服务端移到bak文件夹下
[root@localhost yum.repos.d]# ls 
bak
[root@localhost yum.repos.d]# vim local.repo #建立配置文件local.repo
[local]   #描述仓库为local
name=local #取名local
baseurl=file:///mnt   #指明服务端位置,本地/mnt
gpgcheck=0  #不验证包的信息

[root@localhost yum.repos.d]# yum clean all        #清除yum缓存
已加载插件:fastestmirror, langpacks
正在清理软件源: local
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
local                                                                                                                                                                                                                                        | 3.6 kB  00:00:00     
(1/4): local/group_gz                                                                                                                                                                                                                        | 156 kB  00:00:00     
(2/4): local/filelists_db                                                                                                                                                                                                                    | 3.1 MB  00:00:00     
(3/4): local/primary_db                                                                                                                                                                                                                      | 3.1 MB  00:00:00     
(4/4): local/other_db                                                                                                                                                                                                                        | 1.2 MB  00:00:00     
Determining fastest mirrors
元数据缓存已建立
[root@localhost yum.repos.d]# yum install -y tree        #检测本地yum仓库是否搭建成功,不询问同意安装软件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                                                          local                                                         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                                #安装完成                                                                                                                                                                                                                

完毕!
[root@localhost yum.repos.d]# tree
.
├── bak
│   ├── CentOS-Base.repo
│   ├── CentOS-CR.repo
│   ├── CentOS-Debuginfo.repo
│   ├── CentOS-fasttrack.repo
│   ├── CentOS-Media.repo
│   ├── CentOS-Sources.repo
│   └── CentOS-Vault.repo
└── local.repo

1 directory, 8 files
[root@localhost yum.repos.d]# 

2.4.网络yum源

于本地yum同理,

配置文件指明服务端为

baseurl=“https:yum源地址”

Centos7 yum源地址 (路径为centos/7/os/x86_64/)

1、清华大学yum源 mirrors.tuna.tsinghua.edu.cn/help/centos…

2、网易yum源 mirrors.163.com/.help/cento…

3、阿里云yum源

mirrors.aliyun.com/repo/Centos…

4、中科大yum源

lug.ustc.edu.cn/wiki/_expor…

5、北京理工大学

mirror.bit.edu.cn

6、兰州大学

mirror.lzu.edu.cn

7、厦门大学

mirrors.xmu.edu.cn

8、东北大学

mirror.neu.edu.cn

3.编译安装

3.1.编译安装介绍

相比于rpm和yum,编译安装需要人自己去编译安装,需要手动下载包和解决依赖关系,过程更复杂,但是编译安装可以安装软件的最新版本并且可以增加和删减自己想要的功能。

编译安装要先安装编译的软件(gcc gcc-c++ make等)和依赖的软件(安装软件所需的依赖关系)

3.2.编译安装过程——以nginx为例

nginx源码包nginx.org/download/ng…

安装所需依赖环境 make gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel

[root@localhost /]# mkdir /data;cd /data                   #在/下创建data文件夹;传送到data
[root@localhost data]# wget http://nginx.org/download/nginx-1.18.0.tar.gz              #下载nginx资源包
--2024-04-05 17:33:12--  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.gz”

100%[==========================================================================================================================================>] 1,039,530    448KB/s 用时 2.3s   

2024-04-05 17:33:15 (448 KB/s) - 已保存 “nginx-1.18.0.tar.gz” [1039530/1039530])

[root@localhost data]# ls               #查看nginx资源包
nginx-1.18.0.tar.gz                     
[root@localhost data]# tar -xf nginx-1.18.0.tar.gz                   #解压nginx资源包
[root@localhost data]# ls
nginx-1.18.0  nginx-1.18.0.tar.gz
[root@localhost data]# cd nginx-1.18.0/            #传送至解压后的文件夹下   
[root@localhost nginx-1.18.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
[root@localhost nginx-1.18.0]# yum -y install make gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel   #在安装包文件夹下安装需要的软件,解决依赖关系
已加载插件:fastestmirror, langpacks
base                                                                                                                                                         | 3.6 kB  00:00:00     
extras                                                                                                                                                       | 2.9 kB  00:00:00     
updates                                                                                                                                                      | 2.9 kB  00:00:00     
base/7/x86_64/primary_db       FAILED                                           [=========================-                                       ] 2.3 MB/s |  13 MB  00:00:08 ETA 
http://mirrors.nju.edu.cn/centos/7.9.2009/os/x86_64/repodata/6d0c3a488c282fe537794b5946b01e28c7f44db79097bb06826e1c0c88bad5ef-primary.sqlite.bz2: [Errno 14] curl#6 - "Could not resolve host: mirrors.nju.edu.cn; Name or service not known"
正在尝试其它镜像。
extras/7/x86_64/primary_db     FAILED                                          
http://mirrors.aliyun.com/centos/7.9.2009/extras/x86_64/repodata/e12dbf10e94bc2b33b1f45e026559bc868572                           make.x86_64 1:3.82-24.el7                                openssl.x86_64 1:1.0.2k-26.el7_9                               
.
.
.
作为依赖被升级:
  cpp.x86_64 0:4.8.5-44.el7                  e2fsprogs.x86_64 0:1.42.9-19.el7             e2fsprogs-libs.x86_64 0:1.42.9-19.el7          gcc-c++.x86_64 0:4.8.5-44.el7             
  gcc-gfortran.x86_64 0:4.8.5-44.el7         krb5-libs.x86_64 0:1.15.1-55.el7_9           krb5-workstation.x86_64 0:1.15.1-55.el7_9      libcom_err.x86_64 0:1.42.9-19.el7         
  libgcc.x86_64 0:4.8.5-44.el7               libgfortran.x86_64 0:4.8.5-44.el7            libgomp.x86_64 0:4.8.5-44.el7                  libkadm5.x86_64 0:1.15.1-55.el7_9         
  libquadmath.x86_64 0:4.8.5-44.el7          libquadmath-devel.x86_64 0:4.8.5-44.el7      libselinux.x86_64 0:2.5-15.el7                 libselinux-python.x86_64 0:2.5-15.el7     
  libselinux-utils.x86_64 0:2.5-15.el7       libsepol.x86_64 0:2.5-10.el7                 libss.x86_64 0:1.42.9-19.el7                   libstdc++.x86_64 0:4.8.5-44.el7           
  libstdc++-devel.x86_64 0:4.8.5-44.el7      openssl-libs.x86_64 1:1.0.2k-26.el7_9        zlib.x86_64 0:1.2.7-21.el7_9                  

完毕!
[root@localhost nginx-1.18.0]# ./configure --prefix=/apps/nginx             #检测安装环境,安装nginx并创建指定安装目录为/apps/nginx 
checking for OS
 + Linux 3.10.0-693.el7.x86_64 x86_64
checking for C compiler ... found
.
.
.
  nginx http access log file: "/apps/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

[root@localhost nginx-1.18.0]# make -j8                 #编译安装,同时由8个cpu核心完成这次安装
make -f objs/Makefile
make[1]: 进入目录“/data/nginx-1.18.0”
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/nginx.o \
	src/core/nginx.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
	-o objs/src/core/ngx_log.o \
	src/core/ngx_log.c
.
.
.
[root@localhost nginx-1.18.0]# make install                   #将软件复制到前面的路径中
	|| mkdir -p '/apps/nginx/logs'
test -d '/apps/nginx/logs' \
	|| mkdir -p '/apps/nginx/logs'
test -d '/apps/nginx/html' \
	|| cp -R html '/apps/nginx'
test -d '/apps/nginx/logs' \
	|| mkdir -p '/apps/nginx/logs'
make[1]: 离开目录“/data/nginx-1.18.0”
[root@localhost nginx-1.18.0]# ln -s /apps/nginx/sbin/nginx  /usr/local/sbin/  #建立软链接(使nginx可以tab出来)
[root@localhost nginx-1.18.0]# systemctl stop firewalld #关闭防火墙
[root@localhost nginx-1.18.0]# setenforce 0             #关闭SELinux的强制模式
[root@localhost nginx-1.18.0]# ng   #tab
ngettext  nginx 
[root@localhost nginx-1.18.0]# nginx                      #打开nginx软件
[root@localhost nginx-1.18.0]# curl 192.168.21.30 #用curl软件访问192.168.21.30   #用curl文字浏览器访问nginx
<!DOCTYPE html>                                            #nginx界面
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>