yum的私有云和内核升级
1.1)我们已经能够把现有的互联网上的仓库为我们使用,我们配好以后,就可以用yum实现软件的安装、卸载等。但是,目前来讲,我们使用yum安装卸载以后,有一个缺陷,就是我们安装的数据包,现在都是在互联网上,一个企业内部如果有成百上千的机器,每次装软件,难不成真的跑到互联网上装软件,本身安装任何一个软件包都跑到网上去装,会占用比较大的网络带宽,而且动不动网络就不稳定,所以这个影响效率.
2)事实上,有些公司不让你联网,在局域网中,那怎么去安装包哪?难不成像我这样整张光盘吗?当然整张光盘是可以的,但是仿佛回到了原始社会。所以我们需要在局域网里自己搭建仓库,搭好仓库以后,我们企业内部的这些机器就可以从自己搭的仓库中来安装包,现在问题来了,你怎么在公司内部搭建一个自己私有的仓库服务器?
3)事实上,私有仓库服务器的搭建只需要把那些作为仓库必要的数据准备好,作为仓库来讲,至少提供两种资源:第一,安装包;第二,repodata源数据。事实上,如果我们想搭建一个比如光盘里面的仓库,那这个很简单,把光盘拷过来就行了,因为光盘里面就带嘛,把光盘文件拷到我们某一个服务器上,当然光拷到这儿还不行,我们还需要通过三种网络协议,把这个数据给共享出来。配httpd很简单,就两步:第一步;第二步,把服务启动,就完事了。
2.演示:利用httpd协议搭建企业内部私有仓库
1)将centOS光盘挂在centOS8上(加一个光驱)
2)安装httpd包:
yum -y install httpd
3)启动前先需要初始化
1.关闭防火墙
[root@centos8 yum.repos.d]# systemctl disable --now firewalld Removed /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
2.关闭SELinux
[root@centos8 yum.repos.d]# vim /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these three values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
启动:
[root@centos8 yum.repos.d]# systemctl enable --now httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
4)创建文件夹
[root@centos8 yum.repos.d]# cd /var/www/html [root@centos8 html]# ls [root@centos8 html]# mkdir centos/{7,8} -pv mkdir: created directory 'centos' mkdir: created directory 'centos/7' mkdir: created directory 'centos/8' [root@centos8 html]# tree centos/ centos/ ├── 7 └── 8 2 directories, 0 files
5)把光盘挂载:
[root@centos8 ~]# mount /dev/sr1 /var/www/html/centos/7 mount: /var/www/html/centos/7: WARNING: device write-protected, mounted read-only.
这个时候进到目录下看到的就是centos7的光盘
[root@centos8 ~]# ls /var/www/html/centos/7 CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7 EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
6)打开IP到浏览器,确认能不能访问
将路径复制下来回到7上,将自己的配置文件都注释掉。
[root@centos7 yum.repos.d]# yum repolist Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile repo id repo name status base CentOS 10,072 epel epel 13,720 extras extras 500 repolist: 24,292
3.搭建8的:
[root@centos8 ~]# mount /dev/sr0 /var/www/html/centos/8 mount: /var/www/html/centos/8: WARNING: device write-protected, mounted read-only.
4.但是这个中间实际上有一个潜在的问题,我们刚才搭的时候都是光盘的,是现成的,那事实上,我们有的时候可能手上只有rpm包,没有元数据,没有repodata怎么办?
实际上很简单,源数据是可以用命令创建的,比方说:
1)建立一个文件夹,这个文件夹来放仓库:
[root@centos8 /var/www/html/centos 765]#mkdir /data/testrepo
2)然后把仓库的包给它拷过去:
\cp /misc/cd/Packages/* /data/testrepo -v
3)现在我们已经把这些包拷过来了,但是里面没有源数据,怎么办,很简单,我们直接创建源数据:
createrepo .
如果没这个命令就安装一下:
yum -y install createrepo
那么这个文件夹就可以当仓库里了。
5.还有epel源,怎么把互联网上的epel源的仓库拿过来在公司内部来搭建?我们可以把互联网上的epel源把它上万个包下载下来,在你的本机创建,怎么下载呢?
1)先把epel源先配好
2)用yum repolist 确认一下是否有epel源:
3)刚才我们已经提前把httpd服务器装好了,我们希望在/var/www/html,创建一个epel源的公司内部用的仓库,怎么用?执行这条命令:
dnf reposync --repoid=epel --download-metadata -p /var/www/html
这条命令就是从我们epel源的仓库下载,连接到它内部指定的路径,从互联网上把那些包,包括源数据下载下来,下哪呢?下载在-p 后的/var/www/html这个路径下,这就是我们刚才说的,网站存放网页的路径,然后下完以后,这时候你会发现,它会在这个目录下生成一个子目录叫epel,然后将来我们指定路径,这就是仓库路径.
解析下载过程:这个时候他就会连接互联网,利用我系统自带的epel源的配置,从上面去下载包。
4)此时,已经出现一个epel目录
已经有源数据了,包括这包已经下载一部分了,这个仓库就可以用了。
5)打开浏览器,这个时候就可以配成centos8的epel源了,这就可以用了。
总结:这就是公司内部搭建一个企业内部的epel源,实际上就是把它下载下来。
6.1)yum不仅可以实现这个一个包一个包安装,他的卸载的话有可能会存在一个问题:
比如:
yum -y install httpd
你会发现因为依赖关系,它会装上9个包,其中8个有依赖关系。我卸载的时候会不会把8个依赖关系的包卸了呢?
yum remove httpd -y
发现并不会,它只卸掉自己,就是它所依赖关系的那个包,它不卸。
逻辑是这样的:httpd安装的时候依赖这个包,它是建立在这8个包基础上的,那么你安装的时候必须把这8个包装上,那你卸的时候,你卸它,你把8个包也卸了,万一是不是还有别的软件依赖这8个包哪,所以它就不给你卸。
2)如果你卸不干净,这有个方法:
yum history
history:是看你的历史的
[root@centos7 ~]# yum history info 16
看第16个编号干了啥。
yum history undo 16
undo:取消,这个就是取消第十步,第十步多装了五个包,取消第十步,就是卸载五个包。
再用yum history查看
发现第17步就是刚刚发生的。
3)当然说我这个卸错了,不应该卸:
yum history redo 16
redo:就是重复操作。
或者
yum history undo 15
4)centos8卸的时候会把所有包都给你卸了,而centOS7只卸一个
7.1)利用yum还有一个功能:它可以实现包组的管理。
包组是把若干个包组合在一起,形成一些包的分类,这叫包组。平常用的不多,如果你装包组的话,包组里的所有包就都装上了,这样的话,无形中装的东西会比较多。
2)列出所有包组的名称:
yum group list
3)安装包组:
yum group install "Minimal Install"
注意:因为这个包组名称有空格,所以需要我们用双引号引起来,这时候,它才认为这是一个包的名称。
8.还有一个问题就是缓存:
1)yum在安装的时候,它实际上会自动地把源数据缓存下来。
查看源数据缓存在哪:
centos8:
ll /var/lib/dnf/
centos7:
cat /etc/yum.conf
2)怎么消除缓存:
yum clean all
注意:yum同一时间只能使用一个
并没有清干净,之所以留下来了清不了,是因为它是根据你的配置文件来清的,你配置文件改了,那它有些东西删不了了,如果删不了,没关系,你用rm命令删了它:
再看看我们仓库有什么,
再/var/lib/yum中:
缓存嘛,大不了下次用再给你缓存下来了
9.查看当前格式:
[root@centos8 /var/www/html 830]#runlevel N 5
10.切换到图形模式:
init 5
11.1)关于yum:我们想知道某一个文件来自于那个包,rpm -qf可以查,但是这个命令有一个要求就是这个文件必须已经有了。那事实上,我们有的时候这个文件根本就没有,比如说:源码编译安装的时候,它有时候会报,说缺一个文件,那么你这个文件,就要装这个包才行,所以换句话说,你要通过没有装的这个文件知道它的名字,获取它的报是哪个包,把这个包装上才能解决问题,那么rpm就不行了,那怎么做,用:
yum provides
这个是很有意义的,这个命令可以通过获取一个没有装生成一个文件,然后获取它的所谓的包的名称。
2)例子:
3)不过需要注意的是:有的时候,他不一定能真的查到,因为这里没写路径:
发现不写路径查不出来,可是我们又不知道它的路径,怎么办?有一个方法:写通配符:
12.1)对于yum来讲,关键你要知道yum的配置文件挂载,包括怎么去建公司内部的yum仓库
2)总结一下,yum的要求掌握的子命令:
repolist、install、remove、info、list、clean all、provides
13.如何升级内核?(联网)
方法一:可以从内核官网下载,要求会编译安装
方法二:利用第三方的rpm包 网站:http://elrepo.org/tiki/HomePage
装完发现在/etc/yum.repo.d/中多了一个elrepo.repo的文件
加all显示禁用的仓库,发现里面里有一个kernel仓库被禁用了,所以要启用它:
vim elrepo.repo
现在我们想装内核,我们也不知道内核叫啥,就写通配符:
yum list *kernel*
我们看一看包括kernel名称的所有列表,ml是测试版,lt是长期技术支持版,就安装稳定的,我们装上:
yum install kernel-lt.x86_64
我们装上以后就意味着我们的内核是直接就升级成新版本了吗,并不是,它相当于我们有两个内核并存,你想用哪个就选哪个,所以在启动的时候就可以选了。
uname -r 看内核版本
2)卸载内核:
若在使用中,是不让卸的
我们换一个内核登录再卸载:
14.不联网升级内核:
拿一个能上网的机器,把这个包下载下来,当然一个一个下的话,当然我这个简单,就一个包,那实际上,你直接把这url路径找到直接把它点开就下载,但是问题是,它有可能依赖的包比较多,这时候,你要把依赖的包都给他下载,那这个怎么弄?有一个方法:
举个例子:
我先看一下nginx这个包
这个nginx包再centos7上来自epel源,epel源就是互联网上的。如果我装的话,看它的依赖关系有几个:
我们现在不装它,假设我们现在不能上网的机器想把nginx装上,那这时候,显而易见,用现在这种方法是不行的,,因为这是需要连外网的,那怎么办?刚才说了,先找一个能上网的机器,我们这儿有一个选项:
--downloadonly --downloaddir=/xxx
这个选项可以把你的这软件给他下载到一个指定的路径下。
我把它下到/data下:
#yum install nginx --downloadonly --downloaddir=/data
注意:这只是下载不安装。
下完以后,把这个软件先传给哪个不能上网的机器,一装就行了。
进入/data看一下:
最后直接在不能联网的机器上:
rpm -ivh /data/*.rpm