技术标签: Linux疑难杂症
相信和红帽系统或者centos打交道的朋友应该对rpm,repo和yum不会陌生,这三个都是和包管理相关的东西。但是虽然经常使用,有时候还是容易造成混淆。这里借着安装mysql的机会,对这些概念进行一下整理。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。
RPM(Red-hat Package Manager),是一个由红帽最早开发出来的包管理器,目前已经是大多数Linux发行的默认包管理器。RPM管理的包都是以.rpm
结尾,其中存储了该软件的安装压缩包,以及一些额外信息,例如所依赖的其余的包还有安装,升级,卸载时候执行的一些脚本。
看起来很美好,想要安装软件的时候下载一个官方的.rpm
文件,然后用RPM安装一下即可。但是事实往往没这么顺利。一个包在安装的时候往往依赖于很多的其它的包,如果这些被依赖的包没有被安装会造成很多意想不到的麻烦。RPM的一大缺点,就是它可以检测这些被依赖的包有没有被安装,但是假如有包没有安装它不会自动去进行安装。
于是需要一种新的工具来弥补这个缺点,这个新工具在Centos中就是Yum。
Yum(Yellowdog Updater Modified),也是包管理工具,只适用于红帽和Centos发行版本。比起RPM来,Yum的优势在于可以自动检测依赖,并且对于不存在的依赖会自动去进行安装。
所以通常是用Yum来进行包的操作,例如查看,安装,更新,删除等等。
但是又有了另一个问题,RPM包里面只是写了依赖包的名字,Yum怎么知道去哪下载这些包呢?如果能有一个仓库,里面放着成千上万的包给Yum去选择,这个问题也就迎刃而解了。
是的,很多的公司和团体都维护着这样的仓库,这些仓库就叫做repository,简称repo。
Repo就像是一个大仓库,每个repo里面包含着很多的.rpm
文件,但是一个repo不可能把这个世界所有的.rpm
包都包括进去,往往是某个特定目的的包集合放在一个repo里面,例如centos需要的基础包做一个repo,额外特性的包再放一个repo,mysql维护自己的repo,docker维护自己的repo,等等。所以我们往往一台机器上要配置好几个repo的地址供yum去查询和选择,而且安装新软件的时候可能还需要新安装他们自己维护的repo来使用。
下面我们就来详细看看怎么在本地配置repo。
centos中存放repo文件的路径在/etc/yum.repos.d/
,每个文件都以.repo
结尾,每个文件中可能包含一个或多个repo的信息。
下面以/etc/yum.repos.d/CentOS-Base.repo
为例来看看里面到底写了些啥,打开文件,内容如下:
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
就拿最上面的一部分来仔细看看
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS-Base.repo
文件中一共包含4个repo下面我们来验证下这四个repo是不是都被系统识别了,跑一下sudo yum repolist | grep CentOS
如下:
[fuhx@testmachine Desktop]$ sudo yum repolist | grep CentOS
https://copr-be.cloud.fedoraproject.org/results/mcepl/vim8/epel-7-x86_64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
Trying other mirror.
To address this issue please refer to the below wiki article
https://wiki.centos.org/yum-errors
If above article doesn't help to resolve this issue please use https://bugs.centos.org/.
base/7/x86_64 CentOS-7 - Base 10,097
extras/7/x86_64 CentOS-7 - Extras 323
updates/7/x86_64 CentOS-7 - Updates 1,478
上面有个报错,我们待会再来细说这个报错。我们发现上面的4个repo只有3个在使用,我们再去看看第四个repo的设置有啥不一样的
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
发现多了一个配置项
base/7/x86_64 CentOS-7 - Base 10,097
centosplus/7/x86_64 CentOS-7 - Plus 80
extras/7/x86_64 CentOS-7 - Extras 323
updates/7/x86_64 CentOS-7 - Updates 1,478
顺便说一下,最右边的数字表示该repo中rpm文件的个数。既然有这么多的包肯定不能一个个去比对,所以每个repo都会在/repodata/repomd.xml
中去存储所有包的索引,方便去检索。这也是上面报错的原因,索引文件不存在。
yum在安装包的时候会在本地的所有repo进行查找,所以首先要添加repo到本地。添加本地repo的方法有两种
通常在给了一个rpm包去安装repo的情况,例如最出名的epel源,官方给的安装方法如下
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
安装完以后会生成etc/yum.repos.d/epel.repo
文件,查看一下发现里面有13192个包
[fuhx@testmachine Desktop]$ sudo yum repolist | grep epel
* epel: epel.dionipe.id
epel/x86_64 Extra Packages for Enterprise Linux 7 - 13,192
适用于官方直接给了一个.repo
文件的情况下,例如docker官方给的安装方法如下
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
这个就比较好理解,相当于直接下载一个文件存放到/etc/yum.repos.d/
目录
理论知识铺垫的差不多了,下面就从零开始安装个mysql实际感受下用yum从mysql专属的repo安装的过程。
以下操作可能需要科学上网
访问mysql官方repo下载页面,下载官方提供的yum版本的repo安装包
选择符合自己系统版本的包去下载,我的系统是centos7
下载下来以后记得验证下md5,确保无误
[fuhx@testmachine Downloads]$ md5sum mysql80-community-release-el7-3.noarch.rpm
893b55d5d885df5c4d4cf7c4f2f6c153 mysql80-community-release-el7-3.noarch.rpm
因为下载的是rpm包,就用上面的第一种方法安装repo
[fuhx@testmachine Downloads]$ sudo yum install mysql80-community-release-el7-3.noarch.rpm
但是因为我的机器上事先安装了旧版本的mysql57的repo,报错了,需要先删除旧版本repo才可以。报错如下
Error: mysql80-community-release conflicts with mysql57-community-release-el7-11.noarch
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
先找到用yum安装的旧版本repo,然后直接删除
[root@testmachine yum.repos.d]# yum list installed | grep mysql
mysql57-community-release.noarch el7-11 installed
[root@testmachine yum.repos.d]# yum remove mysql57-community-release.noarch
删除完成后再尝试安装新的repo
[fuhx@testmachine Downloads]$ sudo yum install mysql80-community-release-el7-3.noarch.rpm
查看下刚才新创建的文件/etc/yum.repos.d/mysql-community.repo
# Enable to use MySQL 5.5
[mysql55-community]
name=MySQL 5.5 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.5-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
# Enable to use MySQL 5.7
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql-connectors-community]
name=MySQL Connectors Community
baseurl=http://repo.mysql.com/yum/mysql-connectors-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql-tools-community]
name=MySQL Tools Community
baseurl=http://repo.mysql.com/yum/mysql-tools-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql-tools-preview]
name=MySQL Tools Preview
baseurl=http://repo.mysql.com/yum/mysql-tools-preview/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql-cluster-7.5-community]
name=MySQL Cluster 7.5 Community
baseurl=http://repo.mysql.com/yum/mysql-cluster-7.5-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql-cluster-7.6-community]
name=MySQL Cluster 7.6 Community
baseurl=http://repo.mysql.com/yum/mysql-cluster-7.6-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql-cluster-8.0-community]
name=MySQL Cluster 8.0 Community
baseurl=http://repo.mysql.com/yum/mysql-cluster-8.0-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
可以看到这里配置了10个repo,但是配置enabled=1
的只有3个,也就是说只有3个repo被使用。我们来验证下
[root@testmachine yum.repos.d]# yum repolist | grep mysql
mysql-connectors-community/x86_64 MySQL Connectors Community 141
mysql-tools-community/x86_64 MySQL Tools Community 105
mysql80-community/x86_64 MySQL 8.0 Community Server 161
和上面使用的三个repo相吻合。
这里使用的是mysql 8.0版本的repo,但是假如想使用5.7版本的repo,就将上面的配置替换为
# Enable to use MySQL 5.7
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
注意,如果有多个版本enabled,会自动选最高版本来下载
我们这里也选择5.7版本来安装,比较稳定。
装好了repo,但是我们还不清楚要安装的软件全称是什么,只知道有个关键字叫mysql,那我们就搜索下和mysql以及和server有关的rpm包
[fuhx@testmachine Downloads]$ yum search mysql | grep mysql | grep server
dpm-copy-server-mysql.x86_64 : DPM copy server with MySQL database back-end
dpm-name-server-mysql.x86_64 : DPM name server with MySQL database back-end
dpm-server-mysql.x86_64 : Disk Pool Manager (DPM) server with MySQL database
dpm-srm-server-mysql.x86_64 : DPM SRM server with MySQL database back-end
lfc-server-mysql.x86_64 : LCG File Catalog (LFC) server with MySQL database
mysql-community-common.i686 : MySQL database common files for server and client
mysql-community-common.x86_64 : MySQL database common files for server and
mysql-community-test.x86_64 : Test suite for the MySQL database server
proftpd-mysql.x86_64 : Module to add MySQL support to the ProFTPD FTP server
voms-mysql-plugin.x86_64 : VOMS server plugin for MySQL
zabbix22-server-mysql.x86_64 : Zabbix server compiled to use MySQL
zabbix30-server-mysql.x86_64 : Zabbix server compiled to use MySQL
zabbix40-server-mysql.x86_64 : Zabbix server compiled to use MySQL
mysql-community-server.x86_64 : A very fast and reliable SQL database server
[fuhx@testmachine Downloads]$
发现有一个叫做mysql-community-server
的包,安装一下
[fuhx@testmachine Downloads]$ sudo yum -y install mysql-community-server
安装完启动mysqld服务
[root@testmachine mysql57-community]# systemctl start mysqld
简单验证下是否可用
[fuhx@testmachine Downloads]$ mysql -uroot
如果出现报错,可以查看我的另一篇博客《centos7安装完mysql5.7.29访问报错解决办法》
顺便补充下,yum的配置文件在/etc/yum.conf
,里面配置了yum包下载保存路径
cachedir=/var/cache/yum/$basearch/$releasever
正常情况下,每个软件都是在单个repo里面进行版本的叠加,有了新版本上传到跟旧版本一样的路径。这样有了新版本就可以直接用yum check-update xxx
检测出来。
但是mysql这个比较特殊,不同版本对应着不同的repo。所以如果要进行升级或者是修改版本,需要将原先的版本的repo禁用,然后启用新版本的repo。
例如想把mysql5.7版本升级到最新的8.0版本,首先在repo文件里面禁用5.7的repo,并且启用8.0的repo,如下
# Enable to use MySQL 5.7
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
检查下成功检测到了新版本
[root@testmachine yum.repos.d]# yum check-update mysql-community-server
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ap.stykers.moe
* centosplus: mirrors.ustc.edu.cn
* epel: hk.mirrors.thegigabit.com
* extras: ap.stykers.moe
* updates: mirrors.ustc.edu.cn
mysql-connectors-community | 2.5 kB 00:00:00
mysql-tools-community | 2.5 kB 00:00:00
mysql80-community | 2.5 kB 00:00:00
mysql-community-server.x86_64 8.0.19-1.el7 mysql80-community
更新到8.0版本
[root@testmachine yum.repos.d]# yum update mysql-community-server
如果是要安装指定版本的软件,首先用yum list | grep xxx
查看下这个软件可供安装的不同版本的rpm包名字,然后用带版本的包的名字来安装即可。
①、点对点链路:由链路一端的单个发送方和链路另一端的单个接收方组成。很多链路层协议都是为点对点链路涉及的,如点对点协议(PPP)和高级数据链路控制(HDLC)②、广播链路:能够让多个发送和接收结点都连接到相同的、单一的、共享的广播信道上。这里使用的“广播”是因为当任何一个结点传输一个帧时,信道广播该帧,每个其他结点都收到一个副本。以太网和无线局域网是广播链路层技术的例子。简单地讲,就是一个是两人交谈,一个是一人演讲,但这里是不同的物理链路,而不是不同的方式。多路访问问题:如何协调多个发送和接收结点_网络链路访问方案
其实网络营销推广真可谓是体力活,不管是网络营销方法中的博客营销,论坛营销,邮件营销还是其它的营销方式,都是持续性的工作,要有耐心和持久力,否则,建议你还是不要做网络营销的好。 给大家看一个简单的博客营销和博客营销策划的实例,基本上的东西都有点到,但不是很具体,因为这是一个客户的案例做了一点小修改,因大部份的东西涉及公司的机密,所以删除了很多。...
今天配置之前项目的时候,发现有些动态链接库变了,想看看现在应用在使用哪些动态链接库的时候,进一步查了点资料;下面针对linux动态链接库查找方法和动态链接库位置配置的过程进行记录:LIBRARY_PATH 和 LD_LIBRARY_PATH 的区别: (参考链接)LIBRARY_PATH is used by gcc before compilation to search directories containing static and shared libraries that ne..._ld_run_path
导读使用Keras实现图像分类中的激活热图的可视化,帮助更有针对性的改进模型。类别激活图(CAM)是一种用于计算机视觉分类任务的强大技术。它允许研究人员检查被分类的图像,并了解图像的哪些部分/像素对模型的最终输出有更大的贡献。基本上,假设我们构建一个CNN,目标是将人的照片分类为“男人”和“女人”,然后我们给它提供一个新照片,它返回标签“男人”。有了CAM工具,我们就能看到图片的哪一部分最能激活“Man”类。如果我们想提高模型的准确性,必须了解需要修改哪些层,或者我们是否想用不同的方式预处理训练_tensorflow2 图像分类
今天遇到一个问题:在Eclipse中用maven创建一个新的web项目,然后再用maven update一下,则JDK版本自动变为1.5。通过查找资料,终于发现maven编译器插件(Maven Compiler Plugin)的文档中有如下解释:The Compiler Plugin is used to compile the sources of your project. Since 3.0..._pom 设置java版本
python3.5版本特殊,以前版本的mysqldb不支持3.5了,所以这里使用pymysql下载地址1.解压之后,运行cmd,进入到PyMySQL3-0.5目录,输入python setup.py install,进行安装2.安装之后测试一下1 import pymysql如果没有报错的话就表示pymysql安装成功了,下面用数据库测试一下3....
所以特意写了这个配置文档,相信按照以下步骤你一定会成功的.错误的地方也希望各位指正.本例是在wiondws XP下php5.2.1(zip)apache2.2.4MySQL5.0.37phpmyadmin2.10.0.2ZendOptimizer-3.2.6的安装与配置Apache 的安装1 点击apahce安装包2 接受协议 3 下面3项随便填即可apache 监听80 端口.如果iis用了8...
2G了,然后刷了一会就出错,删掉以后恢复正常。。。。果然还是要设置大小_ca.out 日志文件越来越大是不是影响程序
Travis CI 是目前新兴的开源持续集成构建项目,越来越大的大公司也在使用Travis CI, Github每天构建量都在4000以上。我们为什么不试试呢。前言我们平常的发布流程大概如下: 使用Travis CI,可以简化如下: 想象这样的场景:马上要发布内测版本了,合并代码之后,开始用IDE打包,打包完成之后再发布到fir,这样整个流程下来估计要10几分钟,电脑被占用其他事情也做不
1. 我这使用的是mac book pro,安装的Android studio版本在此时此刻还算可以用, 可能不是最新的,但我不要求一定要最新的。为了防止今后看到这个文章跟自己的出现的问题无法对上,我先登记一下我使用的系统版本及as版本号。
Linux下VMware异常的问题问题初始解决方案问题初始前几天我打算全面使用linux作为自己的日常环境,但是考虑到装双系统的困难什么的所以打算在linux上面使用虚拟机,我用的linux版本为Ubuntu 18.04.3 LTS,下载的虚拟机是VMware Workstation 15.0.4但是很快在安装好之后出了问题。点击安装之后就是这个问题很麻烦,我找了很多的网站都没有找到合..._failed to build vmmon.
Win8.1无法识别USB设备原因分析及解决办法 同事孩子要上大学,购买了预装Win8.1系统的笔记本,想要使用读卡器传照片,插上USB读卡器后,任务栏右下角显示无法识别的USB设备,这怎么可能呢?Win8.1准备的驱动那么全,设备管理器里惊现Unknown Device设备,孩子使用驱动精灵软件,驱动也无法正常安装,因为硬件设备不同,我们这里对相关情况进行下汇总,并针对不同情况,谈下不同的解决办...