《深入探究 Linux 软件安装:从编译到 RPM、Yum,附 Yum 仓库镜像站详解》

《深入探究 Linux 软件安装:从编译到 RPM、Yum,附 Yum 仓库镜像站详解》

《深入探究 Linux 软件安装:从编译到 RPM、Yum,附 Yum 仓库镜像站详解》

2.15 Linux软件安装代码语言:javascript代码运行次数:0运行复制## 学习这个课程之前,我们先将虚拟机恢复一下快照。

## 不管是什么系统,安装软件都有多种方式。比如前面讲解windows的时候,我们也说到了几种安装方式,linux也不列外,也有多种软件安装方式。而linux安装软件其实是比windows要复杂一些的,原因如下image-20230708172103844代码语言:javascript代码运行次数:0运行复制## Linux软件安装复杂主要就复杂在软件的依赖文件上了,也叫做依赖包,要想安装某个软件,先要去安装它的依赖包。2.15.1 编译安装2.15.1 编译安装代码语言:javascript代码运行次数:0运行复制## 我们有时候安装软件,下载下来的是软件源代码,不能直接运行,需要编译之后才能运行,源代码-->编译-->二进制机器码,才能运行。比如windows的某些软件是从源代码编译打包之后才生成exe程序,平常我们接触不到,大家安装的软件都是基本别人编译好的。而linux下编译之后会生成二进制的可执行文件,不是exe程序昂,和windows不同,这种文件没有后缀名。其实linux系统下就没有文件后缀名这个概念,好多后缀名都是我们人工自己加上去的,为了让自己知道文件是干嘛的,主要是给我们自己看的,区分作用。

## 我们用一个网站服务软件来玩一玩试试:

1.下载源码包

cd /opt/

rm -fr *

curl -o nginx.tar.gz http://nginx.org/download/nginx-1.20.1.tar.gz

2.编译安装

tar xf nginx.tar.gz

cd nginx-1.20.1/

[root@localhost nginx-1.20.1]# ls

auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src

# 1.配置编译参数

# 这个软件给我们提供了很多功能,我们在编译的过程中可以自己选择哪些功能要,哪些功能不要,所有功能都要就是完整版,好多功能都 不要就成了精简版,比如qq精简版,不知道大家听没听过。

./configure --prefix=/usr/local/nginx --without-pcre --without-http_rewrite_module --without-http_gzip_module

#我这里禁掉了一些功能,以为这些功能都需要好多依赖包,大家还不知道依赖包是怎么回事儿,所以我就暂时先删除了。--without就是去掉的意思。--prefix=/usr/local/nginx是指定软件的安装目录,目录不存在的话会自动创建。./是用相对路径来执行这个configure文件,用绝对路径也可以执行这个文件。这个指令执行之后,会自动检查各种依赖环境是否满足软件运行的要求,检查通过之后会生成一个叫做Makefile的文件。

[root@localhost nginx-1.20.1]# ls

auto CHANGES.ru configure html Makefile objs src

CHANGES conf contrib LICENSE man README

#多了两个文件Makefile和objs,刚才的指令主要是为了生成Makefile

# 2.编译

make

#make会找当前目录中的Makefile文件来进行编译,这个编译过程一般是比较长的。到底多长时间呢?1、看CPU性能 2、软件功能复杂度

[root@localhost nginx-1.20.1]# ls

auto CHANGES.ru configure html Makefile objs src

CHANGES conf contrib LICENSE man README

# 编译之后看上去目录结构和之前一样,但是objs目录里面其实多了好多东西。

[root@localhost nginx-1.20.1]# ls objs/

autoconf.err nginx ngx_auto_config.h ngx_modules.c src

Makefile nginx.8 ngx_auto_headers.h ngx_modules.o

# 其中nginx文件就是我们的二进制可执行的命令文件。它是可执行的程序了,比如我们查看一下它的版本

[root@localhost nginx-1.20.1]# ./objs/nginx -v

nginx version: nginx/1.20.1

# 到这里只是编译完了,还需要安装,其实安装就是将这个程序的某些文件放到对应的目录中去。其实我们在上面的编译参数中已经指定 好了--prefix=/usr/local/nginx,要安装到/usr/local/nginx目录中去。

# 3.安装

make install

# 查看安装目录,这就是它这个软件安装的所有文件

[root@localhost nginx-1.20.1]# ls /usr/local/nginx/

conf html logs sbin

# 这样看目录结构看着不太清晰,我们可以安装一下tree这个工具,来进行目录查看

[root@localhost nginx-1.20.1]# yum install tree -y

# 安装完tree之后,我们来看一下目录,看着就清晰多了,树状结构显示。

[root@localhost nginx-1.20.1]# tree /usr/local/nginx/

/usr/local/nginx/

├── conf # 该软件的配置文件所在目录

│ ├── fastcgi.conf

│ ├── fastcgi.conf.default

│ ├── fastcgi_params

│ ├── fastcgi_params.default

│ ├── koi-utf

│ ├── koi-win

│ ├── mime.types

│ ├── mime.types.default

│ ├── nginx.conf

│ ├── nginx.conf.default

│ ├── scgi_params

│ ├── scgi_params.default

│ ├── uwsgi_params

│ ├── uwsgi_params.default

│ └── win-utf

├── html # 网站源代码存放目录,这个nginx其实主要是用来部署网站的,网站的代码可以放到这个

目录中

│ ├── 50x.html

│ └── index.html

├── logs # 这个软件自带日志记录功能,记录的日志存放在这个目录中

└── sbin

└── nginx # 这个是软件的关键性的启动程序,类似于我们windows安装的qq目录中的QQ.exe

4 directories, 18 files

3.运行

## 指令:/usr/local/nginx/sbin/nginx,没有配置环境变量,所以要用完整路径来运行

[root@localhost nginx-1.20.1]# /usr/local/nginx/sbin/nginx

[root@localhost nginx-1.20.1]# #看上去没什么效果,但是已经运行了

# 可以通过浏览器访问这个nginx了,访问之前要关闭一下防火墙。

# 关闭防火墙

systemctl stop firewalld

# 取消防火墙的开机自启

systemctl disable firewalld

# 使用浏览器访问http://<虚拟机的ip地址>

## http://192.168.61.132/ 就可以看到网站了。

## 关于nginx这个软件如何使用,我们后面课程中会详细的讲解,这里先简单感受一下编译安装过程即可。

# 打包:就是将我们编译好的程序打包起来,给其他人用的时候,其他人就不用编译了,因为你已经编译好了,我们普通用户使用的软件就 是别人编译打包之后的软件。

## /usr/local/nginx 这个目录就是我们编译好之后的整个软件的所有运行文件目录,我们打包它即可

# 打包压缩

[root@localhost nginx-1.20.1]# cd /usr/local/

[root@localhost local]# ls

bin etc games include lib lib64 libexec nginx sbin share src

[root@localhost local]# tar -zcf /tmp/nginx_jaden.tar.gz nginx

[root@localhost local]# ls

bin etc games include lib lib64 libexec nginx sbin share src

[root@localhost local]# ls /tmp/

ks-script-ed2ODG

nginx_jaden.tar.gz

# 推送给另外一台主机

[root@localhost tmp]# scp nginx_jaden.tar.gz root@192.168.61.135:/tmp

# 另外一台主机的操作:解压到/usr/local目录下,然后运行

root@localhost tmp]# ls

nginx_jaden.tar.gz

[root@localhost tmp]# mv nginx_jaden.tar.gz /usr/local/

[root@localhost tmp]# cd /usr/local/

[root@localhost local]# ls

bin etc games include lib lib64 libexec nginx_jaden.tar.gz sbin share src

[root@localhost local]# tar -zxf nginx_jaden.tar.gz

[root@localhost local]# ls

bin etc games include lib lib64 libexec nginx nginx_jaden.tar.gz sbin

share src

[root@localhost local]# /usr/local/nginx/sbin/nginx

[root@localhost local]# systemctl stop firewalld2.15.2 rpm安装代码语言:javascript代码运行次数:0运行复制# 刚才我们提到过,编译还是比较繁琐的,为了方便使用者,一般都会编译之后发给使用者,用起来不需要编译,就方便多了。只要有人编译一次,将编译后的程序贡献出来,大家就可以用了。所以这些做系统的厂商也发现这样挺好,所以这些厂商干脆将自己的软件也打包一下,redhat、debian等都做了自己软件的打包工作,将自己的软件打包好之后,供用户下载使用。下载软件需要用到对应系统的包管理工具。

# redhat系打出来的包叫做:rpm包。用yum安装的程序包其实都是rmp包,比如刚才安装的tree。rpm的包我们也可以不使用yum而手动安装。

# debian系打出来的包叫做:deb包。

#rpm全称:redhat package manager包管理器

# 手动安装rpm包示例:不需要编译安装、也不用yum安装。

# 安装wget

yum install wget -y

# 使用wget下载rpm包

wget https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm

# 如果没有wget,可以先用curl下载:

curl -o wget.rpm https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/wget-1.14-18.el7_6.1.x86_64.rpm

# 安装rpm包 #rpm -i是安装,vh是显示安装进度条的意思。

rpm -ivh tree-1.6.0-10.el7.x86_64.rpm

# 卸载

rpm -e tree

# 升级

rpm -Uvh xxx.rpm

# 查看已安装的软件

rpm -qa|grep httpd

#以树状的显示指定目录下的目录和文件的名称

tree

例子1:

tree /usr/local

## rpm安装软件个小问题:

## 比如:安装vim,会提示安装失败,需要各种依赖包,需要先去安装依赖包。

wget http://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/vim-enhanced-7.4.629-7.el7.x86_64.rpm

rpm -ivh vim-enhanced-7.4.629-7.el7.x86_64.rpm

## 所以,用rpm安装软件不好解决依赖包的问题,所以出来了下面的yum安装方式,自动下载安装需要的依赖包。以后都用yum来安装。2.15.3 yum安装代码语言:javascript代码运行次数:0运行复制#自动解决rpm依赖

#yum安装扩展yum仓库

yum install epel-release -y

#yum安装nginx

yum install nginx -y

#yum移除nginx

yum remove nginx -y

#查看仓库rpm的数量

yum repolist

## 编译安装:优点: 自由定制 痛点:难度高,步骤繁琐

## rpm安装:优点:安装简单 痛点:需要自己解决依赖,不支持定制

## yum安装:优点:自动解决依赖,默认安装最新版 痛点:不支持定制2.15.4 yum仓库(镜像站)代码语言:javascript代码运行次数:0运行复制## 如下,安装工具时会提示:自动会从下面的仓库中来下载软件包,centos的官方库在国外http://mirror.centos.org/,image-20230708210524961代码语言:javascript代码运行次数:0运行复制## 这个仓库地址是在centos中配置的,在如下配置文件中

[root@localhost ~]# cd /etc/yum.repos.d/

[root@localhost yum.repos.d]# ls

CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo

CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo CentOS-x86_64-

kernel.repo

# 有几个repo文件,表示配置了几个仓库,其中大部分是禁用状态的,默认就一个启用的CentOSBase.repo。比如我们看一个文件CentOS-Vault.repoCentOS-Vault.repo如下,看不到enabled=0的表示启用状态

image-20230708210620722CentOS-Base.repo如下:

代码语言:javascript代码运行次数:0运行复制## 但是国外的地址下载软件太慢了,所以centos官方说我允许你们和我同步,比如华为,你和我同步一下,做一个你国内的镜像库,这就是华为的yum仓库了或者说镜像站了,很多企业和学校都有自己的镜像站。那么我们yum安装的时候有看到,明明使用的是国内的镜像站呀,这是怎么做到的,其实配置文件中做了一个镜像地址列表,如下image-20230708210654158代码语言:javascript代码运行次数:0运行复制## 我们拿出来这个地址改一改

http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra

# $releasever表示版本

# $basearch表示32还是64位

# repo=os表示我们要下载的是操作系统相关的东西

# infra这个参数没什么用,可删掉

# 那么我们改一改网址,如下

http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os

# 访问一下这个地址。

## 效果如下image-20230708210741716代码语言:javascript代码运行次数:0运行复制## 这就是为什么,我们用yum安装软件的时候,仓库地址都是国内的镜像站地址的原因了,它会自动选择离我们最近、网速最佳的几个地址来下载。总结 希望这篇文章能够为你在探索 Linux系统的道路上提供有力的帮助,让你在操作 Linux 系统时更加得心应手。 我是旺仔Sec,是一名热衷于系统技术的博主,对 Linux系统有着深入的研究和丰富的实践经验。我致力于分享各种系统相关的知识和技巧,帮助大家解决在使用过程中遇到的各种问题。如果你觉得这篇文章对你有所帮助,欢迎点赞、收藏和分享哦

同时,也希望你能关注我的博客,我会持续为大家带来更多优质的系统技术文章,包括但不限于 Linux> 系统的深入探索、系统优化、故障排除以及各种有趣的实战案例。 如果你在学习和使用 Linux

系统的过程中遇到任何问题,或者对某些内容有疑问,欢迎在评论区留言,我会尽力为大家解答。让我们一起在系统技术的海洋中遨游,不断提升自己的技能水平,共同探索系统世界的奥秘

再次感谢大家的阅读,期待我们下次再见!

相关推荐

老公喜欢玩游戏怎么办(掌握技巧)
365bet体育备用

老公喜欢玩游戏怎么办(掌握技巧)

📅 09-18 👁️ 755
帮助中心
365卫士杀毒清理大师

帮助中心

📅 10-31 👁️ 2432
王者荣耀苹果系统闪退怎么解决 苹果最新系统王者荣耀闪退