DC's blog DC's blog
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)

DC

愿我一生欢喜,不为世俗所及.
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)
  • 计算机基础

  • linux基础

    • 准备工作
    • 初识shell与基础常用命令
    • 文件管理之基础命令
    • 文件管理之四大模式
    • 文件管理之命令补充
    • 文件管理之文件系统
    • 权限管理之用户与组
    • 权限管理之文件权限
    • 权限管理之ACL
    • 权限管理之su与sudo
    • 软件包管理之rpm
    • 软件包管理之yum
      • yum命令
        • 选项
        • 实验验证
      • yum源分类
      • 镜像文件作为本地源
        • step1: 准备工作
        • step2: 挂载镜像
        • step3: 编辑repo文件
        • step4: 查询可用仓库
      • 开源的yum源/网络源
        • Base基础源
        • epel扩展源
        • 配置nginx官网源
      • 制作yum本地源
      • 本地源共享
        • 服务端上的操作
        • 客户端上的操作
      • 源码包
    • 查看进程
    • 管理进程
    • 存储管理之传统磁盘管理
    • 存储管理之LVM
    • 网络管理
    • shell基础
    • crond计划任务
    • 系统优化
  • mysql

  • git

  • 数据结构与算法

  • axure

  • english

  • docker

  • IT_Need
  • linux基础
DC
2022-10-08
目录

软件包管理之yum

# yum命令

基于RPM包管理, 能够从指定的服务器自动下载RPM包并且安装, 可以自动处理依赖性关系, 并且一次安装所有依赖的软件包, 无须繁琐地一次次下载、安装.

yum命令相较于rpm命令,yum可以自动解决依赖性的问题.
其原理在于:
     使用yum安装软件包时,会去某个仓库找软件包,此仓库已经事先将该软件包以及相关依赖全都准备好了..
仓库: 本质上就是存放所有相关软件包的一个文件夹.. 
               该文件夹下必定有个名为repodata的文件夹记录了文件夹所包含软件包之间的依赖关系..

## yum命令来自于哪个软件包
[root@localhost ~]# rpm -qf /usr/bin/yum
yum-3.4.3-168.el7.centos.noarch
## 安装yum软件包后生成的配置文件
[root@localhost ~]# rpm -qc yum
/etc/logrotate.d/yum
/etc/yum.conf
/etc/yum/version-groups.conf
1
2
3
4
5
6
7
8

# 选项

查询仓库:
yum repolist -- 查看可用仓库
yum repolist all -- 查看所有仓库(包含启用的与禁用的)

yum-config-manager --disable 仓库名 -- 关闭指定仓库
yum-config-manager --enable 仓库名 -- 开启指定仓库
​            去掉.repo后缀就是仓库名 ls /etc/yum.repos.d/
​             本质是将 /etc/yum.repos.d/CentOS-Base.repo文件中对应仓库的enabled值进行更改
​             enabled默认值为1  0关闭) 1(开启)
查询软件包:
​        yum list -- 列出所有可用仓库里的所有软件包( 包括 已经安装的 和 可以安装的 )
​                可结合管道与查看文件的一些命令一起使用 eg: yum list|less ; yum list|more
yum grouplist -- 列出所有可用仓库中的软件包组
​                eg: 软件包组之一的 安全性工具 里就包含了一堆相关的软件包 
​        yum provides 文件路径 -- 查看某个文件由哪个软件包产生的
​                可用于查看命令来自哪个软件包  等同于 rpm -qf

提一嘴,加 -y 选项 (表明yes) 可以非交互式的进行安装、卸载、重装、更新..
安装:
yum install 软件包名 -y -- 安装软件包
若已经安装啦,会在现有的仓库里面看看有无更高的版本,有的话会进行升级处理.. 最好卸载后装新的!!
eg: yum remove nginx-* -y
yum groupinstall "软件包组名字" -y or yum groups install "软件包组名字" -y -- 安装软件组
注意: 软件组名字需要加双引号 
卸载:
yum remove 软件包名 -y -- 卸载软件包
yum groupremove "软件组名字" -y or yum groups remove "软件组名字" -y -- 卸载软件组
重装:
yum reinstall 软件包名 -y -- 不小心删除了配置文件的时,可以reinstall一下,会补充没有的部分
Ps: 晓得预期的结果的前提下,不打印结果 yum reinstall httpd -y &>/dev/null
注意: reinstall仅限于在测试环境中搞,生产环境别轻易这样做!!!容易出问题. 
更新: 不要作死,不要作死,不要轻易更新..
yum update -y -- 会更新所有软件包,包括OS内核,通常只在刚装完系统时执行
yum update 软件包名 -y -- 更新某个软件包
yum check-update -- 检查有哪些可以更新的软件包
通常要更新时,测试环境、与线上1比1的环境都要实验下,没问题后, 再更新线上几台机器试试,观察几周时间,再将集群慢慢的更新...保证业务能正常运行的情况下,缓慢的从局部到全体更新...

缓存:
yum makecache -- 制作元数据缓存
yum clean all -- 清除元数据缓存

历史记录:
yum history -- 查看执行过的yum命令历史记录
yum history info ID号 -- 查看具体某一条yum命令的详细信息,干了什么事
yum history undo ID号 -- 撤销执行过的某条yum命令,即相当于没有执行这条yum命令..
eg: 某条yum命令是卸载某个软件包,那么执行undo后,会重新下载这个软件包..

注意: 无论yum安装的软件来自何方 yum install rpm包网络地址 , 遇到依赖问题, yum都会以自己仓库中的repodata存储的依赖关系为准.. 多个仓库的话, 会依次检索..

文件 = 文件元数据 + 实际内容
安装软件包就是在安装一堆文件,`yum makecache`缓存的是文件的元数据(权限、大小、时间、此文件与其它文件的关联等).. 执行`yum makecache`后,可以提速,提的是yum命令的查询速度`yum list`,并没有提升软件包的下载速度..

Q:能否缓存软件包呢??
A:若yum的仓库在网上的话,yum发请求将软件包下载到本地,安装完成后,默认情况yum会自动将软件包删除..
  下次还想安装同一软件包,就得重复这个请求下载的过程..
	
默认软件包下载安装后会自动删除这一操作是跟`/etc/yum.conf`文件有关的..
可以看到keepcache默认等于0,若`keepcache=1`就代表yum会将rpm包安装后丢到cachedir属性指定的文件夹下..

[root@localhost yum.repos.d]# vim /etc/yum.conf   
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
... ... ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 实验验证

Ps: shell远程连接开了两个窗口,第一个窗口的yum命令正在执行,第二个窗口使用yum时会提示yum对应的进程正在运行,即同一时间在一台机器上只能有一个yum命令运行...
当我们确定后台运行的yum没用时,那么运行命令 pkill -9 yum 可干掉后台正在运行的那个yum..

## 观察结果,可以看到当前可以的仓库有三个 Base、Extras、Updates
[root@localhost ~]# yum repolist
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.nju.edu.cn
 * extras: mirrors.163.com
 * updates: mirrors.nju.edu.cn
源标识                       源名称                                     状态
!base/7/x86_64           CentOS-7 - Base                            10,072
!extras/7/x86_64         CentOS-7 - Extras                             512
!updates/7/x86_64        CentOS-7 - Updates                          4,101
repolist: 14,685
## 关闭与启动仓库 Base
yum-config-manager --disable Base
yum-config-manager --enable Base

[root@localhost yum.repos.d]# which ifconfig
/usr/sbin/ifconfig
[root@localhost yum.repos.d]# yum provides /usr/sbin/ifconfig
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.nju.edu.cn
 * extras: mirrors.nju.edu.cn
 * updates: mirrors.nju.edu.cn
net-tools-2.0-0.25.20131004git.el7.x86_64 : Basic networking tools
源    :@anaconda
匹配来源:
文件名    :/usr/sbin/ifconfig

## 安装软件包 以及 软件组
yum install httpd -y
yum groupinstall "开发工具" -y

## 卸载
yum remove httpd -y
yum groupremove "开发工具" -y

## 更新
yum update httpd -y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

# yum源分类

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

1> 本地源: 把本地的文件夹做成了yum源
        方式一:              step1: 采集一系列相关的软件包放在本地某一个目录下;              step2: yum install createrepo -y createrepo 目录路径                      -- 创建仓库,会在该目录下生成一个名为repodata的文件夹..用于存放依赖关系.              step3: 修改配置                   vim /etc/yum.repo.d/仓库名.repo --- 必须以.repo结尾         方式二: 将镜像文件作为本地源 2> 网络源:
        base基础源 -- 放置的是一些常用的软件包;
        epel扩展源 -- 放置的是一些扩展/额外的软件包;
        与服务相关的源(官网) -- 某一个软件包所在官网提供的源.. eg: nginx官网的软件包源

注意,能作为yum仓库必须具备两个前提:
    该目录下存放了所有相关的软件包;
    该目录下必须有一个文件夹repodata记录该目录所包含软件包之间的依赖关系..便于yum解决依赖性问题.
1
2
3

# 镜像文件作为本地源

# step1: 准备工作

干掉系统默认的yum源

"""
`/etc/yum.repos.d/`目录下全是以`.repo`结尾的yum仓库配置文件..
yum命令在运行时会去检索这些配置文件..
"""
[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

"""
我们通常不会使用系统默认的这些yum仓库
但删除不是好习惯.. 我们选择使用mv命令移动下.让yum命令找不到就可以啦.

Ps: mv后,`yum list`还有结果,列出的只是已经安装了的软件包.. 若安装未安装的软件包肯定是安装不了的!!
"""
[root@localhost yum.repos.d]# mkdir bak
## 在yum.repos.d目录下执行命令 `mv bak/* .` 就可以还原回来啦
[root@localhost yum.repos.d]# mv *.repo bak/
[root@localhost yum.repos.d]# ls
bak
[root@localhost yum.repos.d]# pwd
/etc/yum.repos.d
[root@localhost yum.repos.d]# yum repolist
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repolist: 0   ## 验证结果不为0的话 yum clean all 清除下元数据缓存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# step2: 挂载镜像

详见 10_软件包管理之rpm.md 中挂载镜像这一部分内容..

[root@localhost opt]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
devtmpfs                  480924       0   480924    0% /dev
tmpfs                     497820       0   497820    0% /dev/shm
tmpfs                     497820   27432   470388    6% /run
tmpfs                     497820       0   497820    0% /sys/fs/cgroup
/dev/mapper/centos-root 17811456 5243408 12568048   30% /
/dev/sda1                1038336  258412   779924   25% /boot
tmpfs                      99564      36    99528    1% /run/user/0
tmpfs                      99564       0    99564    0% /run/user/1001
/dev/sr0                 4600876 4600876        0  100% /opt
[root@localhost opt]# ls
CentOS_BuildTag  EULA  images   LiveOS   repodata    RPM-GPG-KEY-CentOS-Testing-7
EFI    GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# step3: 编辑repo文件

仓库配置文件叫啥名并不重要,但后缀必须得是.repo
仓库配置文件里的baseurl属性值 指定到repodata文件夹的父亲目录即可 ..跟rpm包在哪无关..
因为yum命令在执行时,会通过repodata里面的数据来找到软件包的位置及相关依赖..

[root@localhost yum.repos.d]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
bak
[root@localhost yum.repos.d]# vim local.repo
"""
[local]                     # 仓库的实际名字,任意
name="this is local repo"   # 仓库的描述,任意
baseurl=file:///opt         # 仓库位置,一般会出现四种前缀 http:// https:// ftp:// file://
enabled=1                   # 启用仓库, 默认enabled=1 不写也可以 
gpgcheck=0                  # 检查安装的rpm是否是合法的,通常设置为0,0表示不检验

Ps: 配置本地源,`file://`是固定开头,代表是从本地找.往后再跟repodata的父级目录路径 `file:///opt`
"""
[root@localhost yum.repos.d]# cat local.repo 
[local]
name="this is local repo"
baseurl=file:///opt
enabled=1
gpgcheck=0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# step4: 查询可用仓库

## 进行验证
[root@localhost ~]# yum repolist
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
local                                 | 3.6 kB  00:00:00     
(1/2): local/group_gz                 | 153 kB  00:00:00     
(2/2): local/primary_db               | 3.3 MB  00:00:00     
源标识            源名称                状态
local        "this is local repo"     4,070
repolist: 4,070
1
2
3
4
5
6
7
8
9
10

# 开源的yum源/网络源

# Base基础源

"""▲ Base基础源
阿里云的Base基础源:
  `wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo`
163的Base基础源:
  `wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo`
"""
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
... ... ...
2022-08-11 06:42:38 (54.8 KB/s) - 已保存 “/etc/yum.repos.d/CentOS-Base.repo” [2523/2523])
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
bak  CentOS-Base.repo  local.repo
1
2
3
4
5
6
7
8
9
10
11
12

# epel扩展源

EPEL是由 Fedora 社区打造, 为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目. 装上了 EPEL之后,就相当于添加了一个第三方源. 但提供的版本往往是很滞后的,因为安全稳定是重点..

"""▲ epel扩展源
阿里云的epel扩展源如下:(用wget命令也可以)
  `curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo`
也可以通过安装epel-release软件包来自动生成扩展源:
  `yum install epel-release -y`
"""
[root@localhost yum.repos.d]# yum install epel-release -y 
... ... ...
[root@localhost yum.repos.d]# ls
bak  CentOS-Base.repo  epel.repo  epel-testing.repo  local.repo
1
2
3
4
5
6
7
8
9
10

# 配置nginx官网源

# 可以看到epel扩展源里也提供了nginx的软件包 
# 但版本1.20.1也不是nginx稳定版最新的(epel源提供的版本往往会比较滞后 当前官网最新的稳定版本是1.22.0)..
[root@localhost yum.repos.d]# yum list | grep nginx.x86_64
collectd-nginx.x86_64                    5.8.1-1.el7                   epel     
nginx.x86_64                             1:1.20.1-9.el7                epel     
pcp-pmda-nginx.x86_64                    4.3.2-13.el7_9                updates  
sympa-nginx.x86_64                       6.2.68-1.el7                  epel 
1
2
3
4
5
6
7

从官网配置nginx的rpm源的步骤解析如下:
1> 输入网址https://nginx.org/,点击右边栏中的download
2> Mainline version 官方维护版本; Stable version 稳定版本; Legacy versions历史版本;
     Source Code 源代码; Pre-Built Packages 预构建包.. 点击 Pre-Built Packages
Mainline、Stable、Legacy下载的都是源码包!! 
3> 往下滑, 直到 RHEL/CentOS 小节.. 按照官方提示进行操作..

"""
[nginx-stable] 稳定版本; [nginx-mainline] 维护版本
我们通常会使用稳定版本!所以前者enabled的值为1,后者为0.

http://nginx.org/packages/centos/$releasever/$basearch/
$releasever 系统的发行版本(当前环境是7)
$basearch 	架构(当前环境是x86_64)
两个变量都根据所在平台不同动态获取值!!!

Ps:输入网址`http://nginx.org/packages/centos/7/x86_64/`可以发现当前路径下有repodata文件夹!!!
   佐证了 baseurl属性值指定到repodata文件夹的父亲目录即可 这一结论!!!
"""
[root@localhost yum.repos.d]# ls
bak  CentOS-Base.repo  epel.repo  epel-testing.repo  local.repo
[root@localhost yum.repos.d]# vim nginx.repo
[root@localhost 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_signinz.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

[root@localhost yum.repos.d]#
[root@localhost yum.repos.d]# yum repolist | grep nginx
nginx-stable/7/x86_64   nginx stable repo     280

"""
若安装nginx过程中,出错提示 获取 GPG 密钥失败
执行命令`rpm --import https://nginx.org/keys/nginx_signing.key`后再安装..
"""
yum remove nginx-* -y  ## 保持环境的干净
yum install nginx -y   ## 安装的是nginx官网源里的(因为nginx官网源里的版本比epel源里的高)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

补充: 执行yum install nginx-* -y, 试图下载nginx官方源里相关安装包, 在此过程中报错的解决...

简单来说,epel源与官方源冲突,干掉epel源再安装; 官方源安装过程中缺少的依赖通过epel源下载安装..Hhhh.

"""
当前有阿里云的Base基础源、阿里云的epel源、镜像文件的本地源、nginx的官方源
"""
[root@localhost yum.repos.d]# ls
bak  bak1  CentOS-Base.repo  epel.repo  epel.repo.rpmsave local.repo  nginx.repo

"""▲ 做了个实验,只留下nginx的官方源
(1)执行`yum install nginx -y`命令
   只下载了安装nginx-1.22.0-1.el7.ngx.x86_64.rpm包.. 
   不是废话嘛,指定下载的软件包名就是nginx,只不过该软件包没有依赖罢了..
(2))执行`yum install nginx* -y`命令
   理论上会下载nginx的官方源中所有的最新版本的rpm包
   (举个抽象的例子 有四个rpm包 A-1.0.1 A.1.0.2 B-1.1.2 B-1.1.3 最终只会下载A.1.0.2和B-1.1.3)
   试着执行命令,但中途报错啦!!报错如下:
   `nginx-nr-agent-2.0.0-12.el7.ngx.noarch (nginx-stable)软件包需要依赖 python-daemon`
   python-daemon包nginx的官方源没有..
   (可以访问http://nginx.org/packages/centos/7/x86_64/RPMS/,下面全是nginx开头的rpm包,没有其他的)
解决的话就需要epel扩展源的帮忙..
"""

"""▲ 不动yum源 包含epel源和nginx官方源
"""
执行`yum install nginx* -y`命令,依旧会下载nginx官方源那个软件包,报那个错误,所以先解决下..
`yum install python-daemon`通过epel扩展源解决了依赖包的下载安装

继续满怀期望的执行`yum install nginx* -y`发现,冲突啦!!
epel源里的软件包版本跟nginx官方源里软件包版本依赖相关冲突导致的..阿巴阿巴,反正就是冲突啦.

解决:
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
bak  bak1  CentOS-Base.repo  epel.repo  epel.repo.rpmsave  local.repo  nginx.repo
## 其实也可以使用命令 `yum-config-manager --disable 仓库名` 关闭指定仓库..
[root@localhost yum.repos.d]# mv epel* bak1
[root@localhost yum.repos.d]# ls
bak  bak1  CentOS-Base.repo  local.repo  nginx.repo

再执行`yum install nginx* -y`将nginx官方源里的软件包全部下载下来.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

# 制作yum本地源

前面我们实现了将镜像文件作为本地源,因为镜像文件里有repodata文件夹,所以省去了一些步骤..
因为制作个yum本地源这是个重点,所以这里单独进行阐述!

在生产环境中,通常会自己做一个yum源!! 保证集群中每台机器的软件包版本的高度一致!
集群的每台机子的网络源一样也不好使.. 因为网络源在别个手中,一改动.. 添加新机子的时候, 就容易出问题.

前文在yum命令那里提到了元数据缓存跟软件包内容的缓存..
将/etc/yum.conf的keepcache属性值改为1后, 软件包安装完成yum不再自动删除软件包,会缓存到指定路径..

[root@localhost yum.repos.d]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever 	## -- 默认的软件包缓存路径 可改
keepcache=1
... ... ...

"""
本地源的好处:将软件包的版本牢牢的控制到了自己的手里;速度也会快一些.
"""
1
2
3
4
5
6
7
8
9

假设要在一套测试环境中要部署k8s docker集群架构..具体操作如下:
     1.给测试环境中每台机子用同一个镜像安装OS系统.保证os的一致.
     2.刚安装完os系统时,每台机子都统一执行 yum update -y 操作..
     3.将测试环境中的每台机子/每个节点的keepcache属性值都设置为1,即开启软件包缓存.
rm -rf /var/cache/yum/* -- 保持环境的干净
vim /etc/yum.conf 设置 keepcache=1
     4.配置网络源(bash+epel+官方),部署过程中安装的软件包会全部缓存到本地..
             等整套测试环境都调试ok啦..
     5.将测试环境中每台机子上缓存好的软件包全都采集到一起.
             假设放到名为/soft的文件夹下,有重复的就覆盖. 以一台机子为例..
find /var/cache/yum -type f -name "*.rpm" | xargs -I {} mv {} /soft/
     6.最后针对这个文件夹做createrepo /soft建立依赖性关系. 在/soft下会生成repodata文件夹..

后续在完成yum本地源共享后,在线上的机子`/etc/yum.repos.d/`下配置 .repo结尾的本地源..
(配置时注意repodata目录的位置以便于设置正确的baseurl属性值)

/soft文件夹作为线上环境的一个yum源!!!不要轻易升级,不要滥用yum源,这样可以严格控制好各个服务的版本
1
2
3
4

# 本地源共享

有两种方式 http:// 和 ftp:// 完成文件的上传和下载, 这里以ftp为例..
Ps: http超文本传输协议; ftp文件传输协议

# 服务端上的操作

"""环境准备
"""
[root@localhost ~]# systemctl stop firewalld      ## -- 关闭防火墙
[root@localhost ~]# systemctl disable firewalld   ## -- 开机不启动防火墙
[root@localhost ~]# setenforce 0		## -- 临时关闭SElinux 配置文件里是没有修改的!
setenforce: SELinux is disabled     ## -- 这里提示selinux目前是禁用状态,不必关闭
## 当然可以用 vim /etc/sysconfig/selinux 在文件中修改 SELINUX=disabled
[root@localhost ~]# sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config   


"""安装ftp服务
"""
## 在挂载的镜像文件里就有vsftpd
## 当然可通过命令 yum install vsftpd -y 下载安装
[root@localhost ~]# rpm -ivh /opt/Packages/vsftpd-3.0.2-28.el7.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...
   1:vsftpd-3.0.2-28.el7              ################################# [100%]
[root@localhost ~]# systemctl start vsftpd		## -- 开启ftp服务
[root@localhost ~]# systemctl status vsftpd		## -- 查看ftp服务状态
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled;...
   Active: active (running) since 四 2022-08-11 15:13:49 CST; 8s ago
... ... ...
[root@localhost ~]# systemctl enable vsftpd		## -- 设置开机自启动
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.


"""制作yum源
"""
在前面我们成功执行`yum install nginx* -y`将nginx官方源里的软件包全部下载下来.
并成功缓存到了路径`/var/cache/yum`下. 在根目录下建立 `mkdir /soft` 文件夹
执行`find /var/cache/yum -type f -name "*.rpm" | xargs -I {} mv {} /soft/`命令
成功将缓存的软件包采集到了 /soft目录下
执行`createrepo /soft`命令建立依赖性关系.在`/soft`下会生成了`repodata`文件夹.

"""ftp服务共享文件夹
!!! ftp://172.16.150.131 指向的就是 /var/ftp
"""
## 将/soft文件夹移动到ftp服务自带的共享文件夹里  本质就是通过套接字程序共享
## 实际上严谨点,缓存的软件包通过find命令找到后应该xargs到/var/ftp/pub目录下
[root@localhost ~]# mv /soft/ /var/ftp
[root@localhost ~]# ls /var/ftp
pub  soft

[root@localhost ~]# ifconfig ens33 | grep inet
        inet 172.16.150.131  netmask 255.255.255.0  broadcast 172.16.150.255
        inet6 fe80::20c:29ff:fe90:303e  prefixlen 64  scopeid 0x20<link>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

# 客户端上的操作

主要两点, 客户端要跟服务端的OS版本以及架构一致;ftp服务要ping通!!!

"""
同理,关防火墙关selinux
ping一下服务端的ip地址,保证网络畅通!!!这很重要.
(实际上因为vm虚拟机与主机桥接模式的缘故,能ping通 在同一个网段应该能互ping 在此不深究啦)
"""
One_Piece@DCdeMacBook-Air ~ % ping 172.16.150.131
PING 172.16.150.131 (172.16.150.131): 56 data bytes
64 bytes from 172.16.150.131: icmp_seq=0 ttl=64 time=0.650 ms
64 bytes from 172.16.150.131: icmp_seq=1 ttl=64 time=0.604 ms
64 bytes from 172.16.150.131: icmp_seq=2 ttl=64 time=0.648 ms
^C
--- 172.16.150.131 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.604/0.634/0.650/0.021 ms

`cd /etc/yum.repos.d/`
`vim ftp.repo` 写入以下内容..  就可以使用yum命令使用该源里面的包啦
[ftp_repo]
name = This is Ftp Share Repo
baseurl = ftp://172.16.150.131/soft  ## 该路径下有个repodata文件夹
enabled = 1
gpgcheck = 0

此时这台机器就可以使用共享的源安装nginx..
但要注意,若集群中的这台机器跟共享本地源的那台机器的os版本、架构不一样的话..会安装失败!!!
因为共享源的那台机器是根据它自身的情况缓存的软件包..$releasever OS版本 $basearch 架构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 源码包

以nginx源码包的安装为例, 依次进行以下步骤:

▲ 1> 安装源码包对应的编译器以及相关依赖库
`yum grouplist` 看一下是否支持中文
`yum groupinstall "Development tools" -y`	; yum groupinstall "开发工具" -y
保险起见,怕"开发工具"里没包含这些依赖包,再执行下下面两条命令
yum -y install gcc gcc-c++ autoconf automake make
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel

▲ 2> 下载源码包
cd ~
wget https://nginx.org/download/nginx-1.22.0.tar.gz

▲ 3> 解压
tar xvf nginx-1.22.0.tar.gz -C /tmp/

▲ 4> 进行编译 -- 生成makefile文件
cd /tmp/nginx-1.22.0/  # 该目录下有个configure程序可以进行配置
"""./configure 
参考地址: https://nginx.org/en/docs/configure.html
--prefix 指定安装的目录
				 这里指定的路径是 /usr/local/nginx-1.22.0,最终会在此目录下包含一堆可执行的二进制命令
...
这儿笼统的将所以的配置都放到/usr/local/nginx-1.22.0下,不分那么的细了..
"""
## 若此命令报错,只可能是因为缺少依赖库
## 报错后,一定要先执行命令 make clean all,再解决依赖包的问题 于此往复,直至不报错
[root@localhost nginx-1.22.0]#./configure  --prefix=/usr/local/nginx-1.22.0
... ... ...
Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + using system zlib library
  nginx path prefix: "/usr/local/nginx-1.22.0"	## -- 安装路径
  nginx binary file: "/usr/local/nginx-1.22.0/sbin/nginx"	## -- nginx程序
  nginx modules path: "/usr/local/nginx-1.22.0/modules"	## -- 模块路径
  nginx configuration prefix: "/usr/local/nginx-1.22.0/conf"	## -- 配置文件
  nginx configuration file: "/usr/local/nginx-1.22.0/conf/nginx.conf"	## -- 主配置文件
  nginx pid file: "/usr/local/nginx-1.22.0/logs/nginx.pid"	## -- pid
  nginx error log file: "/usr/local/nginx-1.22.0/logs/error.log"	## -- 错误日志
  nginx http access log file: "/usr/local/nginx-1.22.0/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"
## 生成了Makefile编译文件
[root@localhost nginx-1.22.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src

▲ 安装
make && make install
rm -rf /tmp/nginx-1.22.0/  # 清理安装包

▲ 运行
cd /usr/local/nginx-1.22.0
[root@localhost nginx-1.22.0]# ps aux | grep nginx
root      75065  0.0  0.0  20576   616 ?        Ss   18:33   0:00 nginx: master process /usr/local/nginx-1.22.0/sbin/nginx
nobody    75066  0.0  0.1  23104  1372 ?        S    18:33   0:00 nginx: worker process
root      75153  0.0  0.0 112824   988 pts/0    R+   18:35   0:00 grep --color=auto nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

源码安装后,做一点点优化!

[root@localhost ~]# mkdir /soft/
[root@localhost ~]# ln -s /usr/local/nginx-1.22.0/ /soft/nginx
[root@localhost ~]# ll -d /soft/nginx/
drwxr-xr-x 11 root root 151 8月  11 18:33 /soft/nginx/
[root@localhost ~]# ll -d /soft/nginx
lrwxrwxrwx 1 root root 24 8月  22 17:43 /soft/nginx -> /usr/local/nginx-1.22.0/
[root@localhost ~]# ls /soft/nginx/
client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp

用软链接一通操作,便于以后的升级!!!具体操作如下:
1> 原来安装的是nginx1.22的版本,并软链接到了 /soft/nginx目录下..
2> 现在要升级nginx,先安装nginx1.3的版本到默认路径/usr/local下
3> 删除软链接/soft/nginx/下的内容
4> 将新安装的nginx与/soft/nginx建立软链接
这样的话,系统中关于nginx的配置文件,要用nginx的地方路径依旧是 /soft/nginx/... 没必要更改!!!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

软件包管理之rpm
查看进程

← 软件包管理之rpm 查看进程→

最近更新
01
deepseek本地部署+知识库
02-17
02
实操-微信小程序
02-14
03
教学-cursor深度探讨
02-13
更多文章>
Theme by Vdoing | Copyright © 2023-2025 DC | One Piece
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式