Linux中的yum源仓库和NFS文件共享服务

一.yum简介

1.1 yum简介

yum,全称"Yellow dog Updater, Modified",是一个专门为了解决包的依赖关系而存在的软件包管理器。类似于windows系统的中电脑软件关键,可以一键下载,一键安装和卸载。yum 是改进型的 RPM 软件管理器,它很好的解决了 RPM 所面临的软件包依赖问题。yum 在服务器端存有所有的 RPM 包,并将各个包之间的依赖关系记录在文件中,当管理员使用 yum 安装 RPM 包时,yum 会先从服务器端下载包的依赖性文件,通过分析此文件从服务器端一次性下载所有相关的 RPM 包并进行安装。

1.2 yum实现过程

1.光驱里自带 挂载提供软件包

先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装时包时,会自动下载repodata中的元数据,查询远数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安装。

2. yum需要依赖于环境,依赖于服务端和客户端,允许跨网络

服务器:

  • RPM包 (Packages文件夹中)

  • 元数据(repodata文件夹:目录(软件的目录),软件的依赖关系,软件的位置)

客户端的配置文件

baseurl=地址 一定要写到到 这两个文件夹 repodata packages 的上级目录

最终形成两个文件夹Packages (包文件夹一般取名packages)和 repodata(元数据文件夹)

仓库类型

  • 光盘的仓库基本仓库 比较常用的

  • epel扩展仓库 比较新

1.3 如何实现安装服务

元信息是一个文件 里面记录了安装包的路径 安装包的依赖关系

  1. 客户端根据配置文件找到服务端
  2. 客户端将元信息下载到本地仓库(元信息:安装包的位置,以及安装的依赖关系)
  3. 根据元信息去下载对应的安装包到本地后,然后安装
  4. 安装完成后再删除安装包

二.yum配置文件及命令

1. yum 配置文件

1.1 主配置文件

主配置文件 :/etc/yum.conf

[root@localhost]#vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever 
//yum下载的RPM包的缓存目录 $basearch代表硬件架构 $releasever系统版本比如7
keepcache=0                        //是否保存缓存  0代表不保存,1代表保存
debuglevel=2                       //调试级别
logfile=/var/log/yum.log		   //日志文件位置
exactarch=1						   //是否允许不同版本的rpm安装
obsoletes=1						   //update 的一个参数是否可以允许旧版本的运行	
gpgcheck=1                         //验证秘钥
plugins=1                          //是否允许插件1代表可以
installonly_limit=5                //保存几个内核 5代表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

yum的repo配置文件中可用的变量:
$basearch:系统基础平台;i386, x86_64
$releasever: 当前OS的发行版的主版本号,如:8,7,6
$arch: CPU架构,如:aarch64, i586, i686,x86_64等
$contentdir:表示目录,比如:centos-8,centos-7
$YUM0-$YUM9:自定义变量

1.2 仓库设置位置

yum仓库文件位置:/etc/yum.repos.d/*.repo

1.3 日志文件

日志文件位置:/var/log/yum.log

2. yum命令解释

命令 不加关键字 加入关键词、软件包、软件包组
yum list 显示所有可用包 单个的可安装包
yum info 显示所有可用包的信息 单个具体的信息
yum search \ 模糊查找所有的相关信息
yum provides \ 精确查找
yum grouplist 显示所有可用包组 显示具体的包组
yum groupinfo 显示所有的包组具体信息 显示具体的包组的具体信息
yum install \ 安装具体软件包
yum groupinstall \ 安装具体软件包组
yum update 所有软件升级 具体软件升级
yum group update 所有包组升级 所有包组升级
yum remove \ 卸载具体软件
yum groupremove \ 卸载具体包组软件
yum history 查看当前yum操作历史 \
yum history undo 加入序号卸载序号里安装的软件 \
yum history redo 加入序号重新执行序号里的操作 \

① 软件查询

2.1 yum list [软件名]

显示可用的安装包

2.2 yum info [软件名]

显示安装包的详细信息

根据关键字查找软件安装包

2.4 yum provides <关键字>

想知道某个命令却不知道具体的包用此命令查找

必须要写路径

2.5 yum grouplist [包组名]

安装包组的查询 不加包组名就是显示所有(此处例子由于安装了中文环境,无法显示英文包组名称无法直接复制中文使用,建议直接安装英文操作系统)

2.6 yum groupinfo <包组名>

显示具体的包组的具体信息

② 安装升级

2.7 yum install [软件名]

安装软件包

2.8 yum groupinstall <包组名>

安装具体软件包组

2.9 yum update

更新包组,可以单个也可以全部 后面加具体包组名称就是单个更新,不加就是全部更新。

2.10 yum groupupdate

组包更新和单个安装包更新

③ 软件卸载

2.11 yum remove <软件名>

卸载已安装的软件必须加软件名

2.12 yum groupremove <包组名>

2.13 yum history

查看历史的使用记录

2.14 yum history undo

加入序号卸载序号里安装的软件

可以使用yum history undo 4 进行卸载,这样对比remove好处是可以将所有的依赖都删除

2.15 yum history redo

加入序号重新执行序号里的操作

如果后悔卸载可以使用两种方式

yum history redo 4 (重新安装一遍)

yum history undo 4 (反悔卸载等于重新安装一遍)

3. 搭建仓库的方式

软件仓库的提供方式

FTP服务:ftp://ip地址/站点里路径

HTTP服务:http://域名或者ip地址/站点里的路径

本地目录:file://绝对路径 (file:///mnt 此处第三个/为根目录)

3.1 搭建本地yum仓库

① 首先将光驱中的镜像文件进行挂载

② 切换到yum.repo.d 目录下,将自带的仓库移走,因为多个开启仓库文件可能会造成冲突

③ 新建yum仓库文件

④ 测试

3.2 搭建阿里云仓库

(http方式外网环境)

不想搭了,放个牛

娱乐:

3.3 ftp方式搭建云仓库

服务端:

客户端:

客户端测试:

3.4 http 方式搭建

服务端:

客户端:

测试:

4.一些操作

4.1 误将rpm软件删除

进入急救模式

1 继续

切根

重启就可以重新安装回来

4.2 自行打包后建立元数据

实验目的:如果想将自己研发的软件上线可以本地安装,需要配置一个本地元,需要打包安装包和配置元信息

这里使用tree作为案例

① 将tree的安装包打包到一个文件夹

② 生成元信息

createrepo -v /data/test/ ##在/data/test/ 生成元信息

③ 在/data/test/ 查看 有安装软件不可缺少的两项 安装包和元数据

④ 移走之前网络元,搭建本地元,自建yum 仓库

⑤ 清理缓存,重新下载元数据

4.3 将 epl 源下载到本地使用

① 下载额外元

[root@localhost ~]#yum install epel-release -y

#安装epel源 生成epel仓库文件

② 同步 epl 元到指定文件夹

[root@localhost ~]# reposync -r epel -p /root/

#下载同步epel源 根据epel仓库文件去找目录

③ 现在只有安装包,还需要建立元数据,先安装建立元数据的命令

[root@localhost ~]# yum -y install createrepo

#安装建立元数据命令

④ 建立元数据

[root@localhost ~]# createrepo -v /root/epel

#建立元数据 软件目录 依赖关系

4.4 离线安装软件

实验目的:客户机没有任何网 ,服务机只下载不安装,再把安装包一个一个拷给客户机

[root@localhost yum.repos.d]# yum install tree --downloadonly --downloaddir=/opt/

--downloadonly #只下载相关包默认至某一目录

--downloaddir=绝对目录路径 #下载到某一目录

4.5 升级内核

① 安装 https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

② 找到元位置,并修改元配置文件

③ 找到内核软件包

④ 查看版本内核

⑤ 升级内核

⑥ 升级内核后,并不会覆盖原来的内核

三.网络文件服务------NFS

1.NFS简介

NFS(Network File System 网络文件服务)

  • NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。

  • 通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源

  • 特点:

    • 采用TCP/IP传输网络文件

    • 安全性低

    • 简单易操作

    • 适合局域网环境

2.NFS原理

NFS优势:节省本地存储空间,将常用的数据如:/home 目录,存放在NFS服务器上且可以通过网络访问,将减少本地磁盘的使用率。

3.NFS软件介绍

软件包:nfs-utils(包括服务器端和客户端)

相关软件包:rpcbind(必须)

nfs端口号不固定 RPC端口号111

rpc UDP协议 远程过程调用

NFS服务主要进程

  • rpc.nfsd 最主要的NFS进程,管理客户端是否可登录

  • rpc.mountd 挂载和卸载NFS文件系统,包括权限管理

  • rpc.lockd 非必要,管理文件锁,避免同时写出错

  • rpc.statd 非必要,检查文件一致性,可修复文件

日志位置: /var/lib/nfs/

NFS配置文件:

/etc/exports

/etc/exports.d/*.exports

4. NFS共享配置文件

文件格式:

共享目录 可以访问的主机地址(权限)

/share *()

服务器端:

#关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
​
#安装软件包
[root@localhost ~]# yum install nfs-utils.x86_64 rpcbind -y
​
#新建共享目录
[root@localhost ~]# mkdir /share
​
[root@localhost ~]# cd /share/
​
#修改权限
[root@localhost share]# chmod -R 777 /share/
​
#编辑配置文件
[root@localhost share]# vim /etc/exports
/share *
/share 192.168.91.0/24(rw,sync,no_root_squash)
#共享目录  网段           读写,同步,无root权限
[root@localhost ~]# systemctl start rpcbind 
[root@localhost ~]# systemctl start nfs 
​
#查看详细的nfs信息
[root@localhost share]#exportfs -v
​
#重读配置文件
[root@localhost share]#exportfs -r
​
#查看本机发布的 NFS 共享目录
[root@localhost ~]# showmount -e 

客户端:

#挂载服务器至本地文件夹
[root@localhost ~]# mount 192.168.44.20:/share /mnt
​
#查看是否挂载成功
[root@localhost ~]# df -Th

测试:

#服务器端在共享文件夹下创建目录
[root@localhost share]# cd /share/
[root@localhost share]# touch xyl.txt
​
#在客户端的挂载目录下查看是否成功看到文件
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
xyl.txt

操作:

服务端:

客户端:

测试:

权限问题:

客户端

服务端增加读写权限

服务端查看

因为客户端使用root用户访问时,映射为服务端的匿名用户

如何创建文件属主为root用户?

添加权限

此时想修改后的配置文件生效,又不想让正在操作的用户断开连接,就需要使用exprotfs -r 命令来刷新配置文件

|-----------------------|----------------------------------------------------|
| rw | 表示允许读写,ro 表示为只读 |
| sync | 表示同步写入到内存与硬盘中 |
| no_root_squash | 表示当客户机以root身份访问时赋予本地root权限(默认是root_squash) |
| root_squash | 表示客户机用root用户访问该共享目录时,将root用户映射成匿名用户 |
| all_squash | 所有访问用户都映射为匿名用户或用户组 |
| async | 将数据先保存在内存缓冲区中,必要时才写入磁盘 |
| subtree_check(默认) | 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限 |
| no_subtree_check | 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率 |
| anonuid和anongid | 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用 |

如何将客户端新建文件都指定一个用户,需要设置anonuid 和 anongid

指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用

现在服务端上新建一个用户并指定uid号

修改服务端的配置文件,并刷新使其生效

此时去客户端创建文件

但是服务端查看发现,文件属主就是指定用户

5. exportfs 用于管理NFS导出的文件系统

选项:

|-----|--------------|
| 选项 | 说明 |
| -v | 查看本机所有NFS共享 |
| -r | 重读配置文件,并共享目录 |
| -a | 输出本机所有的共享 |
| -au | 停止本机所有共享 |

6. showmount 显示NFS服务器加载的信息

|----|---------------|
| -e | 显示服务器上所有的共享目录 |

7.mount.nfs

NFS 相关的挂载选项

fg #(默认)前台挂载

bg #后台挂载

hard #(默认)持续请求

soft #非持续请求

intr #和hard配合,请求可中断

rsize #和wsize 一次读和写数据最大字节数,rsize=32768

_netdev #无网络连接不挂载

vers #指定版本,客户端centos8默认4.2 ,centos7默认4.1 centos6默认4.0

mount -o 临时挂载

在 /etc/fstab 里面开机挂载

8 . 搭建一台NFS共享服务器

实验准备

|--------|---------------|
| NFS服务端 | 192.168.44.20 |
| NFS客户端 | 192.168.44.10 |
| NFS客户端 | 192.168.44.30 |

步骤:

① 关闭防火墙和防护

② 服务端配置

先开启NFS服务

创建共享文件

写一点东西供客户端读取

给文件夹拉满权限,方便后续操作,配置完刷新配置文件

③ 客户端

在客户端下载并开启httpd服务,然后挂载使用

去浏览器访问这两个网址会得到相同的NFS服务器上的信息

相关推荐
PcVue China2 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle
舞动CPU4 小时前
linux c/c++最高效的计时方法
linux·运维·服务器
皮锤打乌龟5 小时前
(干货)Jenkins使用kubernetes插件连接k8s的认证方式
运维·kubernetes·jenkins
钰@5 小时前
小程序开发者工具的network选项卡中有某域名的接口请求,但是在charles中抓不到该接口
运维·服务器·小程序
wanhengwangluo5 小时前
云服务器和物理服务器的区别有哪些?
运维·服务器
秦jh_6 小时前
【Linux】多线程(概念,控制)
linux·运维·前端
yaosheng_VALVE6 小时前
稀硫酸介质中 V 型球阀的材质选择与选型要点-耀圣
运维·spring cloud·自动化·intellij-idea·材质·1024程序员节
看山还是山,看水还是。7 小时前
Redis 配置
运维·数据库·redis·安全·缓存·测试覆盖率
扣得君7 小时前
C++20 Coroutine Echo Server
运维·服务器·c++20
keep__go7 小时前
Linux 批量配置互信
linux·运维·服务器·数据库·shell