yum
yum命令
目录
[toc]
1、查询
案例:列出所有可用软件包 yum list
这会列出系统中所有可用的软件包,包括已安装和未安装的。
yumlist
说明:
#说明:通过yum list输出可以看出,某个软件包是否已安装在机器上:前面有@代表已安装,无此符号的话就代表没安装;
案例:列出所有可用的软件包及其版本信息 yum list available
这会列出系统中所有可用的软件包及其版本信息,包括已安装和未安装的。
yumlistavailable
- 案例:查看可用的rpm包
# 查看可用的rpm包yum--disablerepo="*"--enablerepo="elrepo-kernel"listavailable
案例:查询本地机器已安装的软件包 yum list installed
yumlistinstalled
案例:找出某个特定软件包的详细信息 yum list <package_name>
yumlist<package_name>
[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 <包名>
[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>*
yumlist*<keyword>*
这会列出包含特定关键字的所有可用软件包。替换 <keyword>
为你要搜索的关键字。
案例:查询包依赖和被依赖(已解决)
1、依赖哪些软件包
rpm-qRpostfix# 查postfix 依赖哪些包,R参数的意思就是requires就是依赖哪些软件包或者yumdeplistpostfix# 查postfix 依赖哪些包
2、被哪些包依赖
rpm-e--testrpcbind# 通过--test进行测试删除,查看是否有依赖关系,如果有会阻止删除
案例测试:查询包依赖和被依赖
1、我想知道libseccomp
软件包被哪些包依赖?
[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
依赖的包有哪些?
[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
如果系统出现了这个问题,先试试下面的命令:yumcleanall然后试着用yum命令的update选项。有时,只要清理了放错位置的文件就可以了。
2.yum deplist package_name 查看某个软件包依赖了哪些包
如果这还解决不了问题,试试下面的命令: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
如果这样仍未解决问题,还有最后一招:yumupdate--skip-broken#--skip-broken选项允许你忽略依赖关系损坏的那个包,继续去更新其他软件包。这可能救不了损坏的包,但至少可以更新系统上的其他包。
TS:yum安装软件包失败的案例,因需安装的服务的依赖包版本不一致导致安装服务失败问题
本地yum源没问题:
故障原因: 因为本身centos7.4带的httpd-tools版本是67的,而之前应该是源码安装了88版本的,导致httpd安装一直失败。。。。。
解决办法: 先卸载httpd,再安装httpd [root@ZXL~]# yum remove -y http
完美解决。
案例:查找仓库里某个软件包所有的版本 --showduplicates
- 查找yum源中最新版本号:
yum list --showduplicates kubeadm --disableexcludes=kubernetes
1、查找最新版本号yumlist--showduplicateskubeadm--disableexcludes=kubernetes#--disableexcludes=kubernetes,只使用kubernetes仓库;#--showduplicates在list/search命令下,显示源里重复的条目
案例:需要找出系统上的某个命令属于哪个软件包 yum provides 命令
最后,如果需要找出系统上的某个特定文件属于哪个软件包,万能的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 ~]#
🔰 扩展
ifconfig和netstat命令的软件包均是net-tools软件包;
2、安装
yum的优点之一就是它的命令富有逻辑性,而且对用户也友好。
案例:yum安装软件包 yum install -y <软件包>
下面这个简单的命令会从仓库中安装软件包、所有它需要的库以及依赖的其他包:yuminstallpackage_name-y
🔰 说明:
备注:-y选项在前在后(前后都可以);软件包是否标注.x86_64(不用标注);可并列写需要安装的软件包名。
# -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
案例:yum仅下载不安装软件包命令
通常是使用yum来安装解决依赖包关系,如果有一台服务器没法连接外网或yum源没有设置,希望通过另一台服务器将这些RPM包下载下来,然后再去安装。那么怎么使用yum工具来下载RPM包呢?--使用如下命令即可。
yuminstall-yansible--downloadonly--downloaddir=ansible
例子:yum groupinstalll “xxx”
命令
新安装完机器后,你可能需要安装一些必须的包,比如你要做开发,可能要安装gcc,cmake,glibc之类的;比如说你要做webserver,需要安装apache或者httpd,mysql,php之类的。有时候你可能忘了安装一些依赖的包,导致安装失败,不得不先去安装依赖包。yum提供了一个很强大的功能,groupinstall通过这个功能可以让你非常方便的一次过安装你所需要的包,比如你安装必要的开发工具包:yumgroupinstalll“DevelopmentTools”记得不要丢了双引号。如果是安装webserver必要的包:yumgroupinstall“WebServer”如果还想知道还有哪些group可以使用grouplistyumgrouplist
例子:--disableexcludes
选项
[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之外的别的仓库。
🔰 注意:
yuminstall-ykubeadm-1.25.4--disableexcludes=kubernetes等价于yuminstall-y--disablerepo=\*--enablerepo=kuberneteskubeadm-1.25.4
3、更新
案例:列出所有已安装包的可用更新 yum list updates ==yum check-update
yumlistupdates==yumcheck-update
案例:更新某个软件包 yum updates package_name
yumupdatespackage_name
(1)先查看某个软件包是否有新版本?
[root@GitLab ~]# yum list unzip或者[root@GitLab ~]# yum list updates|grepunzip#备注:带有@表示已安装软件包;
(2)再利用yum update package_name
进行升级安装包
[root@GitLab ~]# yum update unzip -y
(3)验证
案例:更新操作系统、内核、软件包
yumupdate-yyumupgrade-y
yum update和yum upgrade命令有什么区别?
在使用yum
这个包管理器时,yum update
和yum upgrade
命令在大多数情况下是等效的,它们都会更新所有已安装的软件包到最新的可用版本。但是,有一个细微的差别:
yum update
:这个命令会更新所有已安装的包,并且会处理依赖关系,以确保系统稳定。理论上,它不会删除任何包。yum upgrade
:这个命令除了执行yum update
的所有操作外,还会删除过时的包。过时的包指的是那些在仓库中已经被替换掉的包。这意味着某些包可能会被他们的新版本所替代,而旧版本则会被删除。
实际上,在早期的yum
版本中,yum upgrade
命令是用来表示更彻底的系统升级,它会考虑删除那些已经不再仓库中维护的包。但在后来的版本中,这两个命令的差异已经被最小化了。
为了确保系统稳定,一般推荐使用yum update
。如果你想进行一个彻底升级并且移除不再需要的包,可以使用yum upgrade
。在具体使用之前,查阅特定系统版本的yum
文档是一个好习惯,以确认两者之间是否有特殊的差异处理。
个人使用推荐:
一般保持centos mini版本就行,不需要执行
yum update
命令!
案例:生成yum缓存 yum makecache
yummakecache
案例:载入elrepo-kernel元数据
yum--disablerepo=\*--enablerepo=elrepo-kernelrepolist
案例:降级某个安装包 downgrade选项
yumdowngradekubectl-1.20.0-0.x86_64\kubeadm-1.20.0-0.x86_64 \kubelet-1.20.0-0.x86_64
4、卸载
注意:yum卸载命令是不需要yum源的;
注意:yum remove/erase 删除一个软件的时候也会删除对该软件具有依赖关系的包。
方法1:yumremovepackage_name-y#只删除软件包而保留配置文件和数据文件,就用如下命令:方法2:yumerasepackage_name#要删除软件和它所有的文件,就用erase选项:
🍀 案例测试:yum remove/erase 删除一个软件的时候也会删除对该软件具有依赖关系的包。(符合预期)
yum-yremoventp# 删除系统自带ntp#进行测试:——验证成功,说法正确。#当前虚机环境:centos74
这个ntpdate是ntp的依赖包:
如果删除了这个依赖包的话,用到这个包的软件均会被删除:
注意:
#注意1: rpm -e --nodeps PACKAGE_NAME #不考虑依赖包单独删除某个包
5、搭建yum仓库
1、Centos7配置本地yum源服务
1.挂载本地镜像
mount/dev/cdrom/mnt# 物理机或虚机通过cd-rom挂载的iso或者mount/iso路径/mnt# 这种情况是彻底把iso传到系统里去了
2.编写yum配置文件base.repo
cd/etc/yum.repos.d/mkdirbackupmv*backup/cat>/etc/yum.repos.d/base.repo<<EOF[base]name=local_yumbaseurl=file:enabled=1gpgcheck=0 EOF
🍀 说明:
[name] #括号中的名称为仓库源名称,通常为字母和数字,必须填写name=mynewrepo# 对yum的描述,可写可不写baseurl=file:enabled=1# enabled表示当前仓库是否开启,1为开启,0为关闭,此项不写默认为开启gpgcheck=0# gpgcheck表示安装rpm包时,是否基于公私钥对匹配包的安全信息,1表示开启,0表示关闭,此项不写默认为验证
🍀 注意:这里的gpgcheck=0选项
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.验证
yumcleanall# 清空缓存信息。 yummakecachefast# 生成缓存信息yumrepolistall# 验证或者:yumlist|wc-l统计列出所有包的数量,如果列出了,说明yum源配置完成。
🍀 vmwareworkstation虚机中的光盘图标
🍀 ISO 一次性/永久性挂载:/etc/fastab
一: 一次性挂载,重启完你系统后失效
mount/dev/sr0/mnt/cdrom
二: 永久挂载
我们的设备的挂载信息在 /etc/fstab 里面,所以我们要想永久挂载,需要修改 fstab 文件。用 vim 打开该文件,我们可以看到有三行信息,是其他分区的挂载信息,所以我们现在要把我们的光盘的挂载信息添加过去。
添加如下我们光盘的挂载信息过去
/dev/sr0/mnt/cdromiso9660defaults00
添加完后,保存退出;
然后执行 mount -a 。这个命令的意思是挂载fstab文件中的所有文件系统。可以看到,我们已经挂载好了;
备注:
在虚机系统中,我们的 iso 文件是 /dev/sr0 设备,系统会默认把我们的iso文件挂载到 /run/media/$username/ 目录下。
(也许可能出现在sr1上。物理机情况也相似)
代码汇总
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下面的本地光盘文件
#这个看起来还是很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查看其状态:
(3) 创建相应iso镜像文件
将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/
(4) 此时在宿主机上打开浏览器,就能够看到yum源文件了
ftp:Unitvsftpd.servicecouldnotbefound.[root@client yum.repos.d]#
客户端配置ftp yum文件:
cat>>/etc/yum.repos.d/ftp.repo<<EOF[centos-source]name=centos sourcebaseurl=ftp:enabled=1gpgcheck=0EOFyumcleanallyummakecacheyumrepolistall
测试是否可以正常安装软件:
可以正常安装软件,实验结束。
3、Centos7基于httpd服务的网络yum源的搭建
测试环境
2台vmworkstation Centos7.6虚机。
1.服务器端配置
(1)安装httpd服务
[root@http-yum-server ~]#yum install -y httpd # 可以利用本地源或者网络yum源进行httpd软件的安装
(2)配置基础服务环境,开启httpd服务并设置开机启动
# 关闭防火墙/NetwokManager/selinuxsystemctlstopfirewalldsystemctldisablefirewalldsystemctlstopNetworkManagersystemctldisableNetworkManagersetenforce0sed-is/SELINUX=enforcing/SELINUX=disabled//etc/selinux/config# 开启httpd服务并设置开机启动systemctlrestarthttpd# 重启httpd服务可能稍微需要点时间systemctlenablehttpd# httpd服务启动成功后,可以利用systemctl status httpd查看其状态:
(3)创建相应iso镜像文件
把相应iOS版本镜像内容copy到/var/www/html/centos7yum目录下相应目录(先mkdir出centos7yum目录及相应iso版本目录)。Httpd默认发布目录是/var/www/html/,相当于根目录,所有共享的文件都要放在这个目录里。在/etc/httpd/conf/httpd.conf文件可以查看到。
[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/
注意:httpd服务的配置文件/etc/httpd/conf/httpd.conf,这里默认不变。[root@http-yum-server ~]#vim /etc/httpd/conf/httpd.conf
注意这边如果要更改httpd服务的端口后的话,可以从这里设置:
vim/etc/httpd/conf/httpd.conf#修改如下80为8875
重启httpd服务:
(4)此时在宿主机上打开浏览器,就能够看到yum源文件了 http:[root@client yum.repos.d]#systemctl status httpdUnithttpd.servicecouldnotbefound.[root@client yum.repos.d]#
客户端配置httpd yum文件:
cat>>/etc/yum.repos.d/http.repo<<EOF[centos-source]name=centos sourcebaseurl=http:enabled=1gpgcheck=0EOFyumcleanallyummakecacheyumrepolistall
测试是否可以正常安装软件:
可以正常安装软件,实验结束。
🍀 总结
利用httpd服务搭建yum其实是很简单的,但httpd知识还需要更深层次去学习;
貌似httpd软件漏扫很多,因此如果利用httpd服务提供yum服务的话,可能后续要利用源码安装httpd软件。
4、实战:Centos7配置公网yum源服务(测试成功)-2022.8.4
CentOS默认的yum源不是国内镜像,导致yum在线安装及更新速度不是很理想。这时候需要将yum源设置为国内镜像站点。国内主要开源的开源镜像站点应该是网易和阿里云了。
1.备份
把/etc/yum.repos.d/下的所有文件备份起来:cd/etc/yum.repos.d/mkdirbackupmv*backup/
2.wegt下载网络repo文件
# 备注: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
FAQ
yum是依赖于python2的
案例:前端前台构建需要依赖python3环境-2024.8.16(已解决)
1、报错现象
[root@localhost kuailemao-blog]# pnpm installLockfileisuptodate,resolutionstepisskippedPackages:+742+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++╭─────────────────────────────────────────────────────────────────╮│││Updateavailable!8.12.0→9.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.js│Building:/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=-…│gypinfoitworkedifitendswithok│gypverbcli[│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.1│gypinfousingnode@16.20.2|linux|x64│gypverbcommandrebuild[]│gypverbcommandclean[]│gypverbcleanremoving"build"directory│gypverbcommandconfigure[]│gypverbfindPythonPythonisnotsetfromcommandlineornpmconfiguration│gypverbfindPythonPythonisnotsetfromenvironmentvariablePYTHON│gypverbfindPythoncheckingif"python3"canbeused│gypverbfindPython-executing"python3"togetexecutablepath│gypverbfindPython-"python3"isnotinPATHorproducedanerror│gypverbfindPythoncheckingif"python"canbeused│gypverbfindPython-executing"python"togetexecutablepath│gypverbfindPython-executablepathis"/usr/bin/python"│gypverbfindPython-executing"/usr/bin/python"togetversion│gypverbfindPython-versionis"2.7.5"│gypverbfindPython-versionis2.7.5-shouldbe>=3.6.0│gypverbfindPython-THISVERSIONOFPYTHONISNOTSUPPORTED│gypERR!findPython│gypERR!findPythonPythonisnotsetfromcommandlineornpmconfiguration│gypERR!findPythonPythonisnotsetfromenvironmentvariablePYTHON│gypERR!findPythoncheckingif"python3"canbeused│gypERR!findPython-"python3"isnotinPATHorproducedanerror│gypERR!findPythoncheckingif"python"canbeused│gypERR!findPython-executablepathis"/usr/bin/python"│gypERR!findPython-versionis"2.7.5"│gypERR!findPython-versionis2.7.5-shouldbe>=3.6.0│gypERR!findPython-THISVERSIONOFPYTHONISNOTSUPPORTED│gypERR!findPython│gypERR!findPython**********************************************************│gypERR!findPythonYouneedtoinstallthelatestversionofPython.│gypERR!findPythonNode-gypshouldbeabletofindandusePython.Ifnot,│gypERR!findPythonyoucantryoneofthefollowingoptions:│gypERR!findPython-Usetheswitch--python="/path/to/pythonexecutable"│gypERR!findPython(accepted bybothnode-gypandnpm)│gypERR!findPython-SettheenvironmentvariablePYTHON│gypERR!findPython-Setthenpmconfigurationvariablepython:│gypERR!findPythonnpmconfigsetpython"/path/to/pythonexecutable"│gypERR!findPythonFormoreinformationconsultthedocumentationat:│gypERR!findPythonhttps:│gypERR!findPython**********************************************************│gypERR!findPython│gypERR!configureerror│gypERR!stackError:CouldnotfindanyPythoninstallationtouse│gypERR!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_64│gypERR!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 或更高版本。以下是解决此问题的步骤:
- 安装 Python 3
首先,你需要在系统中安装 Python 3。如果你的系统已经安装了 Python 3,请确保它在 PATH
中。
在 CentOS 或 RHEL 系统上,你可以使用以下命令安装 Python 3:
sudoyum-yinstallpython3--disablerepo=epel
- 设置
PYTHON
环境变量
安装 Python 3 之后,设置 PYTHON
环境变量以指向 Python 3 可执行文件。
exportPYTHON=$(whichpython3)
- 配置 npm 使用 Python 3
你还可以配置 npm 以使用 Python 3:
npmconfigsetpython$(whichpython3)pnpmconfigsetpython$(whichpython3)
- 重试
pnpm install
现在重新运行 pnpm install
:
pnpminstall
- 验证安装
如果问题仍然存在,确保你的 python3
确实在 PATH
中并可以正确执行:
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方法
##安装python3sudoyum-yinstallpython3--disablerepo=epel
安装python3后现象:
[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环境时配置
pnpmconfigsetpython$(whichpython3)python3--version
扩展:给某个文件做软连接 -s -f -n选项
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 版本的情况下非常有用。**然而,需注意以下几点:
- 系统依赖:许多系统工具和脚本依赖于特定版本的 Python(经常是 Python 2.x),将
/usr/bin/python
修改为指向 Python 3.x 可能会导致这些工具和脚本无法正常工作。(例如yum) - 环境管理:使用
pyenv
或者虚拟环境(virtualenv
,venv
)工具来管理不同版本的 Python 和依赖项通常是更安全和优雅的方法。
如果你确定没有上述问题,或者你已经做好了相应的准备和测试,那么可以使用这条命令来更改默认的 python 版本。
这里我们来测试下:
配置前:
[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 ~]#
配置后:
ln-sfn/usr/bin/python3.6/usr/bin/python
ln
:创建链接命令。-s
:创建符号链接(软链接),而不是硬链接。-f
:强制删除已经存在的目标文件(如果/usr/bin/python
已经存在,会被删除)。-n
:如果目标是一个符号链接,直接覆盖它,而不是在其上创建新的链接。
如何恢复呢?(已恢复)
#原来内容ln-sfnpython2/usr/bin/python
3、验证效果
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码
x2675263825 (舍得), qq:2675263825。
🍀 微信公众号
《云原生架构师实战》
🍀 个人博客站点