Skip to content

yum

yum命令

目录

[toc]

1、查询

案例:列出所有可用软件包 yum list

这会列出系统中所有可用的软件包,包括已安装和未安装的。

bash
yumlist

说明:

bash
#说明:通过yum list输出可以看出,某个软件包是否已安装在机器上:前面有@代表已安装,无此符号的话就代表没安装;

案例:列出所有可用的软件包及其版本信息 yum list available

这会列出系统中所有可用的软件包及其版本信息,包括已安装和未安装的。

bash
yumlistavailable

  • 案例:查看可用的rpm包
bash
# 查看可用的rpm包yum--disablerepo="*"--enablerepo="elrepo-kernel"listavailable

案例:查询本地机器已安装的软件包 yum list installed

bash
yumlistinstalled

案例:找出某个特定软件包的详细信息 yum list <package_name>

bash
yumlist<package_name>
bash
[root@docker ~]#yum list lrzsz已加载插件:fastestmirror,langpacksLoadingmirrorspeedsfromcachedhostfile*base:mirrors.aliyun.com*elrepo:hkg.mirror.rackspace.com*epel:mirror.nju.edu.cn*extras:mirrors.aliyun.com*updates:mirrors.aliyun.com已安装的软件包lrzsz.x86_640.12.20-36.el7@base

案例:查看某个包的描述信息 yum info <包名>

bash
[root@docker ~]#yum info lrzsz已加载插件:fastestmirror,langpacksLoadingmirrorspeedsfromcachedhostfile*base:mirrors.aliyun.com*elrepo:hkg.mirror.rackspace.com*epel:mirror.nju.edu.cn*extras:mirrors.aliyun.com*updates:mirrors.aliyun.com已安装的软件包名称:lrzsz架构:x86_64版本:0.12.20发布:36.el7大小:181k:installed来自源:base简介Thelrzandlszmodemcommunicationsprograms网址:http:协议GPLv2+描述Lrzsz(consisting oflrzandlsz) is a cosmetically modified:zmodem/ymodem/xmodempackagebuiltfromthepublic-domainversionof:therzszpackage.LrzszwascreatedtoprovideaworkingGNU:copyleftedZmodemsolutionforLinuxsystems.[root@docker ~]#

案例:列出所有可用软件包中包含特定关键字的软件包 yum list *<keyword>*

bash
yumlist*<keyword>*

这会列出包含特定关键字的所有可用软件包。替换 <keyword>为你要搜索的关键字。

案例:查询包依赖和被依赖(已解决

1、依赖哪些软件包

bash
rpm-qRpostfix# 查postfix 依赖哪些包,R参数的意思就是requires就是依赖哪些软件包或者yumdeplistpostfix# 查postfix 依赖哪些包

2、被哪些包依赖

bash
rpm-e--testrpcbind# 通过--test进行测试删除,查看是否有依赖关系,如果有会阻止删除

案例测试:查询包依赖和被依赖

1、我想知道libseccomp软件包被哪些包依赖?

bash
[root@master1 ~]#rpm -qa |greplibseccomplibseccomp-2.3.1-4.el7.x86_64[root@master1 ~]#rpm -e --test libseccomperror:Faileddependencies:libseccomp.so.2()(64bit) is needed by (installed) chrony-3.4-1.el7.x86_64

可以看到,libseccomp只有被chrony对其有依赖。

2、我想知道chrony依赖的包有哪些?

bash
[root@master1 ~]#rpm -qa|grepchronychrony-3.4-1.el7.x86_64# 方法1:[root@master1 ~]#rpm -qR chrony/bin/bash/bin/sh/bin/sh/bin/sh/bin/sh/bin/shconfig(chrony) =3.4-1.el7libc.so.6()(64bit)libc.so.6(GLIBC_2.12)(64bit)libc.so.6(GLIBC_2.14)(64bit)libc.so.6(GLIBC_2.15)(64bit)libc.so.6(GLIBC_2.17)(64bit)libc.so.6(GLIBC_2.2.5)(64bit)libc.so.6(GLIBC_2.3)(64bit)libc.so.6(GLIBC_2.3.4)(64bit)libc.so.6(GLIBC_2.4)(64bit)libcap.so.2()(64bit)libedit.so.0()(64bit)libfreebl3.so()(64bit)libfreebl3.so(NSSRAWHASH_3.12.3)(64bit)libm.so.6()(64bit)libm.so.6(GLIBC_2.2.5)(64bit)libpthread.so.0()(64bit)libpthread.so.0(GLIBC_2.2.5)(64bit)libseccomp.so.2()(64bit)rpmlib(CompressedFileNames) <=3.0.4-1rpmlib(FileDigests) <=4.6.0-1rpmlib(PayloadFilesHavePrefix) <=4.0-1rtld(GNU_HASH)shadow-utilssystemdsystemdsystemdrpmlib(PayloadIsXz) <=5.2-1方法2:[root@master1 ~]#yum deplist chronyLoadedplugins:fastestmirrorLoadingmirrorspeedsfromcachedhostfile*base:mirrors.aliyun.com*extras:mirrors.aliyun.com*updates:mirrors.aliyun.compackage:chrony.x86_643.4-1.el7dependency:/bin/bashprovider:bash.x86_644.2.46-35.el7_9dependency:/bin/shprovider:bash.x86_644.2.46-35.el7_9dependency:libc.so.6(GLIBC_2.17)(64bit)provider:glibc.x86_642.17-326.el7_9dependency:libcap.so.2()(64bit)provider:libcap.x86_642.22-11.el7dependency:libedit.so.0()(64bit)provider:libedit.x86_643.0-12.20121213cvs.el7dependency:libfreebl3.so()(64bit)provider:nss-softokn-freebl.x86_643.79.0-4.el7_9dependency:libfreebl3.so(NSSRAWHASH_3.12.3)(64bit)provider:nss-softokn-freebl.x86_643.79.0-4.el7_9dependency:libm.so.6()(64bit)provider:glibc.x86_642.17-326.el7_9dependency:libm.so.6(GLIBC_2.2.5)(64bit)provider:glibc.x86_642.17-326.el7_9dependency:libpthread.so.0()(64bit)provider:glibc.x86_642.17-326.el7_9dependency:libpthread.so.0(GLIBC_2.2.5)(64bit)provider:glibc.x86_642.17-326.el7_9dependency:libseccomp.so.2()(64bit)provider:libseccomp.x86_642.3.1-4.el7dependency:rtld(GNU_HASH)provider:glibc.x86_642.17-326.el7_9provider:glibc.i6862.17-326.el7_9dependency:shadow-utilsprovider:shadow-utils.x86_642:4.6-5.el7dependency:systemdprovider:systemd.x86_64219-78.el7_9.7

案例:处理损坏的包依赖关系

有时在安装多个软件包时,某个包的软件依赖关系可能会被另一个包的安装覆盖掉。这叫作损坏的包依赖关系(broken dependency)

1.yum clean all

bash
如果系统出现了这个问题,先试试下面的命令:yumcleanall然后试着用yum命令的update选项。有时,只要清理了放错位置的文件就可以了。

2.yum deplist package_name 查看某个软件包依赖了哪些包

bash
如果这还解决不了问题,试试下面的命令:yumdeplistpackage_name这个命令显示了某个软件包的all库依赖关系以及什么软件可以提供这些库依赖关系。一旦知道某个包需要的库,你就能安装它们了。下面是确定xterm包依赖关系的例子。# yum deplist xterm Loadedplugins:fastestmirror,refresh-packagekit,securityLoadingmirrorspeedsfromcachedhostfile*base:mirrors.bluehost.com*extras:mirror.5ninesolutions.com*updates:mirror.san.fastserv.comFindingdependencies:package:xterm.i686253-1.el6dependency:libncurses.so.5provider:ncurses-libs.i6865.7-3.20090208.el6dependency:libfontconfig.so.1provider:fontconfig.i6862.8.0-3.el6dependency:libXft.so.2provider:libXft.i6862.3.1-2.el6dependency:libXt.so.6provider:libXt.i6861.1.3-1.el6dependency:libX11.so.6provider:libX11.i6861.5.0-4.el6dependency:rtld(GNU_HASH) provider:glibc.i6862.12-1.132.el6provider:glibc.i6862.12-1.132.el6_5.1provider:glibc.i6862.12-1.132.el6_5.2dependency:libICE.so.6provider:libICE.i6861.0.6-1.el6dependency:libXaw.so.7provider:libXaw.i6861.0.11-2.el6dependency:libtinfo.so.5provider:ncurses-libs.i6865.7-3.20090208.el6dependency:libutempter.so.0provider:libutempter.i6861.1.5-4.1.el6dependency:/bin/shprovider:bash.i6864.1.2-15.el6_4dependency:libc.so.6(GLIBC_2.4) provider:glibc.i6862.12-1.132.el6provider:glibc.i6862.12-1.132.el6_5.1provider:glibc.i6862.12-1.132.el6_5.2dependency:libXmu.so.6provider:libXmu.i6861.1.1-2.el6

3.yum update --skip-broken

bash
如果这样仍未解决问题,还有最后一招:yumupdate--skip-broken#--skip-broken选项允许你忽略依赖关系损坏的那个包,继续去更新其他软件包。这可能救不了损坏的包,但至少可以更新系统上的其他包。

TS:yum安装软件包失败的案例,因需安装的服务的依赖包版本不一致导致安装服务失败问题

本地yum源没问题:

img

故障原因: 因为本身centos7.4带的httpd-tools版本是67的,而之前应该是源码安装了88版本的,导致httpd安装一直失败。。。。。

img

img

解决办法: 先卸载httpd,再安装httpd [root@ZXL~]# yum remove -y http

img

完美解决。

案例:查找仓库里某个软件包所有的版本 --showduplicates

  • 查找yum源中最新版本号:yum list --showduplicates kubeadm --disableexcludes=kubernetes
bash
1、查找最新版本号yumlist--showduplicateskubeadm--disableexcludes=kubernetes#--disableexcludes=kubernetes,只使用kubernetes仓库;#--showduplicateslist/search命令下,显示源里重复的条目

img

案例:需要找出系统上的某个命令属于哪个软件包 yum provides 命令

bash
最后,如果需要找出系统上的某个特定文件属于哪个软件包,万能的yum可以做到!只要输入命令:[root@docker ~]#yum provides sz已加载插件:fastestmirror,langpacksLoadingmirrorspeedsfromcachedhostfile*base:mirrors.aliyun.com*elrepo:hkg.mirror.rackspace.com*epel:mirror.nju.edu.cn*extras:mirrors.aliyun.com*updates:mirrors.aliyun.comlrzsz-0.12.20-36.el7.x86_64:Thelrzandlszmodemcommunicationsprograms:base匹配来源:文件名:/usr/bin/szlrzsz-0.12.20-36.el7.x86_64:Thelrzandlszmodemcommunicationsprograms:@base匹配来源:文件名:/usr/bin/sz[root@docker ~]#

🔰 扩展

bash
ifconfig和netstat命令的软件包均是net-tools软件包;

2、安装

yum的优点之一就是它的命令富有逻辑性,而且对用户也友好。

案例:yum安装软件包 yum install -y <软件包>

bash
下面这个简单的命令会从仓库中安装软件包、所有它需要的库以及依赖的其他包:yuminstallpackage_name-y

🔰 说明:

备注:-y选项在前在后(前后都可以);软件包是否标注.x86_64(不用标注);可并列写需要安装的软件包名。

bash
# -y在前在后都行:[zxl@foryou ~]$ yum -y install httpd[zxl@foryou ~]$ yum install httpd -y# 可以不带.x86_64yuminstall-ygccpam.x86_64或者yuminstall-ygccpamdhcpntptelnet# yum安装时可以并行写着的:yuminstall-ygccpam.x86_64pam-devel.x86_64krb5-devel.x86_64yum-yinstallgccgcc-c++kernel-devel[root@localhost ansible]# yum localinstall *.rpm -y

img

img

img

案例:yum仅下载不安装软件包命令

通常是使用yum来安装解决依赖包关系,如果有一台服务器没法连接外网或yum源没有设置,希望通过另一台服务器将这些RPM包下载下来,然后再去安装。那么怎么使用yum工具来下载RPM包呢?--使用如下命令即可。

bash
yuminstall-yansible--downloadonly--downloaddir=ansible

例子:yum groupinstalll “xxx”命令

bash
新安装完机器后,你可能需要安装一些必须的包,比如你要做开发,可能要安装gcc,cmake,glibc之类的;比如说你要做webserver,需要安装apache或者httpd,mysql,php之类的。有时候你可能忘了安装一些依赖的包,导致安装失败,不得不先去安装依赖包。yum提供了一个很强大的功能,groupinstall通过这个功能可以让你非常方便的一次过安装你所需要的包,比如你安装必要的开发工具包:yumgroupinstalll“DevelopmentTools”记得不要丢了双引号。如果是安装webserver必要的包:yumgroupinstall“WebServer”如果还想知道还有哪些group可以使用grouplistyumgrouplist

例子:--disableexcludes选项

bash
[root@master1 ~]yum makecache fast[root@master1 ~]yum install -y kubelet-1.25.4 kubeadm-1.25.4 kubectl-1.25.4 --disableexcludes=kubernetes[root@master1 ~]#kubeadm versionkubeadmversion:&version.Info{Major:"1",Minor:"25",GitVersion:"v1.25.4",GitCommit:"872a965c6c6526caa949f0c6ac028ef7aff3fb78",GitTreeState:"clean",BuildDate:"2022-11-09T13:35:06Z",GoVersion:"go1.19.3",Compiler:"gc",Platform:"linux/amd64"}#可以看到我们这里安装的是 v1.25.4 版本,然后将 master 节点的 kubelet 设置成开机启动:[root@master1 ~]#systemctl enable --now kubelet

说明:--disableexcludes 禁掉除了kubernetes之外的别的仓库。

🔰 注意:

bash
yuminstall-ykubeadm-1.25.4--disableexcludes=kubernetes等价于yuminstall-y--disablerepo=\*--enablerepo=kuberneteskubeadm-1.25.4

3、更新

案例:列出所有已安装包的可用更新 yum list updates ==yum check-update

bash
yumlistupdates==yumcheck-update

img

案例:更新某个软件包 yum updates package_name

bash
yumupdatespackage_name

(1)先查看某个软件包是否有新版本?

bash
[root@GitLab ~]# yum list unzip或者[root@GitLab ~]# yum list updates|grepunzip#备注:带有@表示已安装软件包;

img

(2)再利用yum update package_name进行升级安装包

bash
[root@GitLab ~]# yum update unzip -y

img

(3)验证

img

案例:更新操作系统、内核、软件包

bash
yumupdate-yyumupgrade-y

yum update和yum upgrade命令有什么区别?

在使用yum这个包管理器时,yum updateyum upgrade命令在大多数情况下是等效的,它们都会更新所有已安装的软件包到最新的可用版本。但是,有一个细微的差别:

  • yum update:这个命令会更新所有已安装的包,并且会处理依赖关系,以确保系统稳定理论上,它不会删除任何包
  • yum upgrade:这个命令除了执行yum update的所有操作外,还会删除过时的包。过时的包指的是那些在仓库中已经被替换掉的包。这意味着某些包可能会被他们的新版本所替代,而旧版本则会被删除。

实际上,在早期的yum版本中,yum upgrade命令是用来表示更彻底的系统升级,它会考虑删除那些已经不再仓库中维护的包。但在后来的版本中,这两个命令的差异已经被最小化了。

为了确保系统稳定,一般推荐使用yum update如果你想进行一个彻底升级并且移除不再需要的包,可以使用yum upgrade。在具体使用之前,查阅特定系统版本的yum文档是一个好习惯,以确认两者之间是否有特殊的差异处理。

个人使用推荐:

一般保持centos mini版本就行,不需要执行yum update命令!

案例:生成yum缓存 yum makecache

bash
yummakecache

案例:载入elrepo-kernel元数据

bash
yum--disablerepo=\*--enablerepo=elrepo-kernelrepolist

案例:降级某个安装包 downgrade选项

bash
yumdowngradekubectl-1.20.0-0.x86_64\kubeadm-1.20.0-0.x86_64 \kubelet-1.20.0-0.x86_64

image-20230609063541014

image-20230609063709495

image-20230609063723947

4、卸载

注意:yum卸载命令是不需要yum源的;

注意:yum remove/erase 删除一个软件的时候也会删除对该软件具有依赖关系的包。

bash
方法1:yumremovepackage_name-y#只删除软件包而保留配置文件和数据文件,就用如下命令:方法2:yumerasepackage_name#要删除软件和它所有的文件,就用erase选项:

🍀 案例测试:yum remove/erase 删除一个软件的时候也会删除对该软件具有依赖关系的包。(符合预期)

bash
yum-yremoventp# 删除系统自带ntp#进行测试:——验证成功,说法正确。#当前虚机环境:centos74

img

这个ntpdate是ntp的依赖包:

img

如果删除了这个依赖包的话,用到这个包的软件均会被删除:

img

img

注意:

bash
#注意1: rpm -e --nodeps PACKAGE_NAME #不考虑依赖包单独删除某个包

img

5、搭建yum仓库

1、Centos7配置本地yum源服务

1.挂载本地镜像

bash
mount/dev/cdrom/mnt# 物理机或虚机通过cd-rom挂载的iso或者mount/iso路径/mnt# 这种情况是彻底把iso传到系统里去了

2.编写yum配置文件base.repo

bash
cd/etc/yum.repos.d/mkdirbackupmv*backup/cat>/etc/yum.repos.d/base.repo<<EOF[base]name=local_yumbaseurl=file:enabled=1gpgcheck=0 EOF

🍀 说明:

bash
[name] #括号中的名称为仓库源名称,通常为字母和数字,必须填写name=mynewrepo# 对yum的描述,可写可不写baseurl=file:enabled=1# enabled表示当前仓库是否开启,1为开启,0为关闭,此项不写默认为开启gpgcheck=0# gpgcheck表示安装rpm包时,是否基于公私钥对匹配包的安全信息,1表示开启,0表示关闭,此项不写默认为验证

🍀 注意:这里的gpgcheck=0选项

bash
cd/etc/yum.repos.d/vibase.repo内容如下:[base]name=localyumbaseurl=file:gpgcheck=1#其实没必要加这个gpgcheck=1的。。。,一般按自己的书写方式就行:gpgkey=file:[root@zxl_ecs ~]$ls /etc/pki/rpm-gpg/ #注意下这个校验方式:RPM-GPG-KEY-CentOS-7RPM-GPG-KEY-CentOS-Debug-7RPM-GPG-KEY-CentOS-Testing-7RPM-GPG-KEY-EPEL-7

3.验证

bash
yumcleanall# 清空缓存信息。 yummakecachefast# 生成缓存信息yumrepolistall# 验证或者:yumlist|wc-l统计列出所有包的数量,如果列出了,说明yum源配置完成。

🍀 vmwareworkstation虚机中的光盘图标

img

img

img

🍀 ISO 一次性/永久性挂载:/etc/fastab

一: 一次性挂载,重启完你系统后失效

bash
mount/dev/sr0/mnt/cdrom

img

二: 永久挂载

我们的设备的挂载信息在 /etc/fstab 里面,所以我们要想永久挂载,需要修改 fstab 文件。用 vim 打开该文件,我们可以看到有三行信息,是其他分区的挂载信息,所以我们现在要把我们的光盘的挂载信息添加过去。

img

添加如下我们光盘的挂载信息过去

bash
/dev/sr0/mnt/cdromiso9660defaults00

img

添加完后,保存退出;

然后执行 mount -a 。这个命令的意思是挂载fstab文件中的所有文件系统。可以看到,我们已经挂载好了;

img

备注:

在虚机系统中,我们的 iso 文件是 /dev/sr0 设备,系统会默认把我们的iso文件挂载到 /run/media/$username/ 目录下。

(也许可能出现在sr1上。物理机情况也相似)

img

代码汇总

bash
mount/dev/cdrom/mntcd/etc/yum.repos.d/mkdirbackupmv*backup/cat>/etc/yum.repos.d/base.repo<<EOF[base]name=local_yumbaseurl=file:enabled=1gpgcheck=0 EOFyumcleanall# 清空缓存信息。 yummakecachefast# 生成缓存信息yumrepolistall# 验证

案例:访问misc/cd下面的本地光盘文件

bash
#这个看起来还是很666的,新鲜的yum方式;[root@centos76 yum.repos.d]#yum install -y autofs[root@centos76 ~]#systemctl enable --now autofs然后yum直接配置file:systemctlstopfirewalldsystemctldisablefirewalldsystemctlstopNetworkManagersystemctldisableNetworkManagersetenforce0sed-is/SELINUX=enforcing/SELINUX=disabled//etc/selinux/config# 开启ftp服务并设置开机启动systemctlrestartvsftpdsystemctlenablevsftpd# ftp服务启动成功后,可以利用systemctl status vsftpd查看其状态:

img

(3) 创建相应iso镜像文件

bash
将ISO中的内容拷贝到/var/ftp/pub/目录下。注意:vsftpd服务的/是在/var/ftp/pub目录下的。[root@ftp-yum-server ~]#cd /var/ftp/pub/[root@ftp-yum-server pub]#ls[root@ftp-yum-server pub]#mkdir centos761810[root@ftp-yum-server pub]#cp -rp /mnt/*/var/ftp/pub/centos761810/

img

(4) 此时在宿主机上打开浏览器,就能够看到yum源文件了

ftp:Unitvsftpd.servicecouldnotbefound.[root@client yum.repos.d]#

客户端配置ftp yum文件:

img

测试是否可以正常安装软件:

img

可以正常安装软件,实验结束。

3、Centos7基于httpd服务的网络yum源的搭建

测试环境

2台vmworkstation Centos7.6虚机。

1.服务器端配置

(1)安装httpd服务

bash
[root@http-yum-server ~]#yum install -y httpd # 可以利用本地源或者网络yum源进行httpd软件的安装

(2)配置基础服务环境,开启httpd服务并设置开机启动

bash
# 关闭防火墙/NetwokManager/selinuxsystemctlstopfirewalldsystemctldisablefirewalldsystemctlstopNetworkManagersystemctldisableNetworkManagersetenforce0sed-is/SELINUX=enforcing/SELINUX=disabled//etc/selinux/config# 开启httpd服务并设置开机启动systemctlrestarthttpd# 重启httpd服务可能稍微需要点时间systemctlenablehttpd# httpd服务启动成功后,可以利用systemctl status httpd查看其状态:

img

(3)创建相应iso镜像文件

把相应iOS版本镜像内容copy到/var/www/html/centos7yum目录下相应目录(先mkdir出centos7yum目录及相应iso版本目录)。Httpd默认发布目录是/var/www/html/,相当于根目录,所有共享的文件都要放在这个目录里。在/etc/httpd/conf/httpd.conf文件可以查看到。

bash
[root@http-yum-server ~]#cd /var/www/html/[root@http-yum-server html]#ls[root@http-yum-server html]#mkdir -p centos7yum/centos761810[root@http-yum-server html]#cp -rp /mnt/*/var/www/html/centos7yum/centos761810/

img

bash
注意:httpd服务的配置文件/etc/httpd/conf/httpd.conf,这里默认不变。[root@http-yum-server ~]#vim /etc/httpd/conf/httpd.conf

img

img

注意这边如果要更改httpd服务的端口后的话,可以从这里设置:

bash
vim/etc/httpd/conf/httpd.conf#修改如下80为8875

img

重启httpd服务:

img

(4)此时在宿主机上打开浏览器,就能够看到yum源文件了 http:[root@client yum.repos.d]#systemctl status httpdUnithttpd.servicecouldnotbefound.[root@client yum.repos.d]#

客户端配置httpd yum文件:

img

测试是否可以正常安装软件:

img

可以正常安装软件,实验结束。

🍀 总结

利用httpd服务搭建yum其实是很简单的,但httpd知识还需要更深层次去学习;

貌似httpd软件漏扫很多,因此如果利用httpd服务提供yum服务的话,可能后续要利用源码安装httpd软件。

4、实战:Centos7配置公网yum源服务(测试成功)-2022.8.4

CentOS默认的yum源不是国内镜像,导致yum在线安装及更新速度不是很理想。这时候需要将yum源设置为国内镜像站点。国内主要开源的开源镜像站点应该是网易和阿里云了。

1.备份

bash
把/etc/yum.repos.d/下的所有文件备份起来:cd/etc/yum.repos.d/mkdirbackupmv*backup/

2.wegt下载网络repo文件

bash
# 备注:centos7 6 5版本的阿里云yum配置文件# 前提是系统有安装wget软件包CentOS7[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http:CentOS6[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http:CentOS5[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http:#或者利用curl命令:curl-o/etc/yum.repos.d/CentOS-Base.repohttp:curl-o/etc/yum.repos.d/epel.repohttp:#或者使用163源:wget-OCentOS-Base.repohttp:yumcleanall# 重建缓存yummakecache#-->建立一个缓存,以后用install安装服务的时候就在缓存中搜索,提高了速度#执行yum repolist all命令查看结果yumrepolistall

img

FAQ

yum是依赖于python2的

案例:前端前台构建需要依赖python3环境-2024.8.16(已解决)

1、报错现象

bash
[root@localhost kuailemao-blog]# pnpm installLockfileisuptodate,resolutionstepisskippedPackages:+742+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++╭─────────────────────────────────────────────────────────────────╮Updateavailable!8.12.09.7.1.Changelog:https:Run"pnpm add -g pnpm"toupdate.Follow@pnpmjsforupdates:https:╰─────────────────────────────────────────────────────────────────╯Downloadingmirrors.huaweicloud.com/element-plus/2.7.6:8.71MB/8.71MB,doneDownloadingmirrors.huaweicloud.com/echarts/5.5.1:10.36MB/10.36MB,doneProgress:resolved742,reused0,downloaded742,added742,donenode_modules/.pnpm/vue-demi@0.14.8_vue@3.4.31/node_modules/vue-demi:Runningpostinstallscript,donein220msnode_modules/.pnpm/esbuild@0.18.20/node_modules/esbuild:Runningpostinstallscript,donein101msnode_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass:Runninginstallscript,donein22snode_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass:Runningpostinstallscript,failedin301ms.../node_modules/node-sasspostinstall$ nodescripts/build.jsBuilding:/usr/local/nodejs/bin/node/root/ruyu-blog/blog-frontend/kuailemao-blog/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/bin/node-gyp.jsrebuild--verbose--libsass_ext=-…gypinfoitworkedifitendswithokgypverbcli[gypverbcli'/usr/local/nodejs/bin/node',gypverbcli'/root/ruyu-blog/blog-frontend/kuailemao-blog/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/bin/node-gyp.js',gypverbcli'rebuild',gypverbcli'--verbose',gypverbcli'--libsass_ext=',gypverbcli'--libsass_cflags=',gypverbcli'--libsass_ldflags=',gypverbcli'--libsass_library='gypverbcli]gypinfousingnode-gyp@8.4.1gypinfousingnode@16.20.2|linux|x64gypverbcommandrebuild[]gypverbcommandclean[]gypverbcleanremoving"build"directorygypverbcommandconfigure[]gypverbfindPythonPythonisnotsetfromcommandlineornpmconfigurationgypverbfindPythonPythonisnotsetfromenvironmentvariablePYTHONgypverbfindPythoncheckingif"python3"canbeusedgypverbfindPython-executing"python3"togetexecutablepathgypverbfindPython-"python3"isnotinPATHorproducedanerrorgypverbfindPythoncheckingif"python"canbeusedgypverbfindPython-executing"python"togetexecutablepathgypverbfindPython-executablepathis"/usr/bin/python"gypverbfindPython-executing"/usr/bin/python"togetversiongypverbfindPython-versionis"2.7.5"gypverbfindPython-versionis2.7.5-shouldbe>=3.6.0gypverbfindPython-THISVERSIONOFPYTHONISNOTSUPPORTEDgypERR!findPythongypERR!findPythonPythonisnotsetfromcommandlineornpmconfigurationgypERR!findPythonPythonisnotsetfromenvironmentvariablePYTHONgypERR!findPythoncheckingif"python3"canbeusedgypERR!findPython-"python3"isnotinPATHorproducedanerrorgypERR!findPythoncheckingif"python"canbeusedgypERR!findPython-executablepathis"/usr/bin/python"gypERR!findPython-versionis"2.7.5"gypERR!findPython-versionis2.7.5-shouldbe>=3.6.0gypERR!findPython-THISVERSIONOFPYTHONISNOTSUPPORTEDgypERR!findPythongypERR!findPython**********************************************************gypERR!findPythonYouneedtoinstallthelatestversionofPython.gypERR!findPythonNode-gypshouldbeabletofindandusePython.Ifnot,gypERR!findPythonyoucantryoneofthefollowingoptions:gypERR!findPython-Usetheswitch--python="/path/to/pythonexecutable"gypERR!findPython(accepted bybothnode-gypandnpm)gypERR!findPython-SettheenvironmentvariablePYTHONgypERR!findPython-Setthenpmconfigurationvariablepython:gypERR!findPythonnpmconfigsetpython"/path/to/pythonexecutable"gypERR!findPythonFormoreinformationconsultthedocumentationat:gypERR!findPythonhttps:gypERR!findPython**********************************************************gypERR!findPythongypERR!configureerrorgypERR!stackError:CouldnotfindanyPythoninstallationtousegypERR!stackatPythonFinder.fail(/root/ruyu-blog/blog-frontend/kuailemao-blog/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/lib/find-python.js:330:47)gypERR!stackatPythonFinder.runChecks(/root/ruyu-blog/blog-frontend/kuailemao-blog/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/lib/find-python.js:159:21)gypERR!stackatPythonFinder.<anonymous>(/root/ruyu-blog/blog-frontend/kuailemao-blog/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/lib/find-python.js:266:16)gypERR!stackatPythonFinder.execFileCallback(/root/ruyu-blog/blog-frontend/kuailemao-blog/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/lib/find-python.js:297:7)gypERR!stackatChildProcess.exithandler(node:child_process:394:7)gypERR!stackatChildProcess.emit(node:events:513:28)gypERR!stackatmaybeClose(node:internal/child_process:1100:16)gypERR!stackatProcess.ChildProcess._handle.onexit(node:internal/child_process:304:5)gypERR!SystemLinux3.10.0-957.el7.x86_64gypERR!command"/usr/local/nodejs/bin/node""/root/ruyu-blog/blog-frontend/kuailemao-blog/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/bin/node-gyp.js""rebuild""--verbose""…│ gyp ERR!cwd /root/ruyu-blog/blog-frontend/kuailemao-blog/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass│ gyp ERR!node -v v16.20.2│ gyp ERR!node-gyp -v v8.4.1│ gyp ERR!not ok │ Build failed with error code:1└─ Failed in 301ms at /root/ruyu-blog/blog-frontend/kuailemao-blog/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass ELIFECYCLE  Command failed with exit code 1.[root@localhost kuailemao-blog]# 这个如何解决呢?

2、解决办法

gpt回答

根据你提供的错误信息,node-gyp找不到合适的 Python 版本。它找到的 Python 版本是 2.7.5,而 node-gyp需要 Python 3.6 或更高版本。以下是解决此问题的步骤:

  1. 安装 Python 3

首先,你需要在系统中安装 Python 3。如果你的系统已经安装了 Python 3,请确保它在 PATH中。

在 CentOS 或 RHEL 系统上,你可以使用以下命令安装 Python 3:

bash
sudoyum-yinstallpython3--disablerepo=epel
  1. 设置 PYTHON环境变量

安装 Python 3 之后,设置 PYTHON环境变量以指向 Python 3 可执行文件。

bash
exportPYTHON=$(whichpython3)
  1. 配置 npm 使用 Python 3

你还可以配置 npm 以使用 Python 3:

bash
npmconfigsetpython$(whichpython3)pnpmconfigsetpython$(whichpython3)
  1. 重试 pnpm install

现在重新运行 pnpm install

bash
pnpminstall
  1. 验证安装

如果问题仍然存在,确保你的 python3确实在 PATH中并可以正确执行:

bash
python3--version

你应该看到类似于 Python 3.x.x的输出(确保版本是 3.6 或更高)。

总结

通过以上步骤,你应该能解决 node-gyp找不到合适 Python 版本的问题。确保 Python 3 安装并配置正确后,pnpm install应该能顺利完成。

如果还有问题,可以检查以下几点:

  • 确认 python3是否在 PATH中,可以通过 which python3来验证路径。
  • 确认 npm 配置正确,可以通过 npm config get python来查看配置。

希望这些步骤能帮助你解决问题!


本yum安装python3方法
bash
##安装python3sudoyum-yinstallpython3--disablerepo=epel

安装python3后现象:

image-20240818084942011

bash
[root@localhost ~]# pythonpythonpython2python2.7python3python3.6python3.6m[root@localhost ~]# pythonPython2.7.5(default,Oct302018,23:45:53) [GCC 4.8.520150623(Red Hat 4.8.5-36)] on linux2Type"help","copyright","credits"or"license"formoreinformation.>>>exit()[root@localhost ~]# ll `which python`lrwxrwxrwx.1rootroot7Aug1512:14/usr/bin/python->python2[root@localhost ~]# ll `which python2`lrwxrwxrwx.1rootroot9Aug1512:14/usr/bin/python2->python2.7[root@localhost ~]# ll `which python2.7`-rwxr-xr-x.1rootroot7216Oct312018/usr/bin/python2.7[root@localhost ~]# ll `which python3`lrwxrwxrwx.1rootroot9Aug1717:15/usr/bin/python3->python3.6[root@localhost ~]# ll `which python3.6`-rwxr-xr-x.2rootroot11336Nov152023/usr/bin/python3.6[root@localhost ~]#
ruyu-blog需要python3环境时配置
bash
pnpmconfigsetpython$(whichpython3)python3--version
扩展:给某个文件做软连接 -s -f -n选项
bash
sudoln-sfn/usr/bin/python3.6/usr/bin/python#注意,这个命令时有风险的哦!!!

sudo ln -sfn /usr/bin/python3.6 /usr/bin/python这条命令用于创建一个符号链接,使 /usr/bin/python指向 /usr/bin/python3.6。以下是每个参数的含义:

  • sudo:提权命令,意味着需要以超级用户权限执行该命令。
  • ln:创建链接命令。
  • -s:创建符号链接(软链接),而不是硬链接。
  • -f:强制删除已经存在的目标文件(如果 /usr/bin/python已经存在,会被删除)。
  • -n:如果目标是一个符号链接,直接覆盖它,而不是在其上创建新的链接。
  • /usr/local/bin/python3.8:链接的源文件,即要指向的实际文件路径。
  • /usr/bin/python:链接的目标文件,即符号链接的路径。

这个命令的最终效果是使系统在执行 python命令时,实际上运行的是 python3.8

警告

**这种做法在需要特定版本的 Python 并且不想直接更改系统默认 python 版本的情况下非常有用。**然而,需注意以下几点:

  1. 系统依赖:许多系统工具和脚本依赖于特定版本的 Python(经常是 Python 2.x),将 /usr/bin/python修改为指向 Python 3.x 可能会导致这些工具和脚本无法正常工作。(例如yum)
  2. 环境管理:使用 pyenv或者虚拟环境(virtualenvvenv)工具来管理不同版本的 Python 和依赖项通常是更安全和优雅的方法。

如果你确定没有上述问题,或者你已经做好了相应的准备和测试,那么可以使用这条命令来更改默认的 python 版本。


这里我们来测试下:

配置前:

bash
[root@localhost ~]# pythonpythonpython2python2.7python3python3.6python3.6m[root@localhost ~]# pythonPython2.7.5(default,Oct302018,23:45:53) [GCC 4.8.520150623(Red Hat 4.8.5-36)] on linux2Type"help","copyright","credits"or"license"formoreinformation.>>>exit()[root@localhost ~]# ll `which python`lrwxrwxrwx.1rootroot7Aug1512:14/usr/bin/python->python2[root@localhost ~]# ll `which python2`lrwxrwxrwx.1rootroot9Aug1512:14/usr/bin/python2->python2.7[root@localhost ~]# ll `which python2.7`-rwxr-xr-x.1rootroot7216Oct312018/usr/bin/python2.7[root@localhost ~]# ll `which python3`lrwxrwxrwx.1rootroot9Aug1717:15/usr/bin/python3->python3.6[root@localhost ~]# ll `which python3.6`-rwxr-xr-x.2rootroot11336Nov152023/usr/bin/python3.6[root@localhost ~]#

配置后:

bash
ln-sfn/usr/bin/python3.6/usr/bin/python
  • ln:创建链接命令。
  • -s:创建符号链接(软链接),而不是硬链接。
  • -f:强制删除已经存在的目标文件(如果 /usr/bin/python已经存在,会被删除)。
  • -n:如果目标是一个符号链接,直接覆盖它,而不是在其上创建新的链接。

image-20240818090830337

如何恢复呢?(已恢复)

bash
#原来内容ln-sfnpython2/usr/bin/python

image-20240818090724252

image-20240818090756082

3、验证效果

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码

x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号

《云原生架构师实战》

image-20230107215126971

🍀 个人博客站点

https:

版权:此文章版权归 One 所有,如有转载,请注明出处!

链接:可点击右上角分享此页面复制文章链接

上次更新时间:

最近更新