centos 7.5.1804, 把自带的 python2.7.5 删除了之后 yum 无法启动,该如何拯救 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
yuoboo
V2EX    Linux

centos 7.5.1804, 把自带的 python2.7.5 删除了之后 yum 法启动,该如何拯救

  •  1
     
  •   yuoboo 2018-11-12 15:58:02 +08:00 6166 次点击
    这是一个创建于 2529 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前都是直接备份成别的名称不会管它的,刚才看到有 3 个启动方式,如是就删了其中一个,没太注意其他 2 个都是链接删除的哪个的,结果就悲剧了呀!!

    重新安装了 python2.7.5, 将新装的 python2.7.5 软连接到 /usr/bin/yum文件里对应的 python 解释器路径,没能解决

    尝试到 centos 网站下载官方( python***-****.rpm )包(一共 6 个包), 在使用 rpm 安装过程中报错了

    warning: group mockbuild does not exist - using root warning: user mockbuild does not exist - using root 

    软件包并没有安装上,对 linux 不怎么熟, 有大佬指点一下吗?感谢!

    第 1 条附言    2018-11-13 23:32:18 +08:00

    今天在看rpm包管理的时候,突然把这个问题修复了,
    我之前可能没说清楚, 其实我删的是/usr/bin/python2.7 这个文件之后yum就无法启动了

    其实rpm包是可以单独提取这个文件出来的
    rpm -qf /usr/bin/python 查询出这个文件的安装包python-2.7.5-68.el7.x86_64并下载, 因为我删除的是/usr/bin/python2.7
    rpm2cpio ./python-2.7.5-68.el7.x86_64.rpm | cpio -idv ./usr/bin/python2.7 将这个源文件包中的python2.7提取出来放到当前目录中
    mv ./usr/bin/python2.7 /usr/bin/ 再将提取出来的文件移到删除的目录, 可以恢复yum的使用

    我刚才把文件又删除之后测试, 恢复后的yum是可以正常使用,其它场景没有测试!

    47 条回复    2018-11-13 11:57:26 +08:00
    alvin666
        1
    alvin666  
       2018-11-12 16:04:17 +08:00 via Android
    去 python 官网下 tar.gz 包,解压,make&&make install
    leavic
        2
    leavic  
       2018-11-12 16:07:03 +08:00
    @alvin666 然后楼主发现没装 build_essential...
    vissssa
        3
    vissssa  
       2018-11-12 16:07:18 +08:00
    找到 yum 修改第一行的 path 即可
    jiezhi
        4
    jiezhi  
       2018-11-12 16:09:37 +08:00 via iPhone
    楼主在 yum 里改过配置后报什么错?

    之前的一篇帖子不知道有没有帮助:

    http://jiezhi.github.io/2016/03/05/centos6-install-python2-7/
    yuoboo
        5
    yuoboo  
    OP
       2018-11-12 16:11:34 +08:00   1
    @alvin666
    @leavic
    @vissssa 我就是下载了 Python2.7.5.tar.gz ,解压 make&&make instal, 新装的 2.7.5 已经软连接到 /usr/bin/yum 的第一行 path 了, 无效啊, 第二段就是这个方法
    alvin666
        6
    alvin666  
       2018-11-12 16:11:44 +08:00 via Android
    @leavic 哈哈哈 lz 这水平是有可能
    likuku
        7
    likuku  
       2018-11-12 16:17:17 +08:00 via iPhone
    节哀顺变,重装 /用快照恢复了事。

    你不是需要拯救的手段,你更需要 pyenv 和 virtualenv
    yuoboo
        8
    yuoboo  
    OP
       2018-11-12 16:19:00 +08:00
    @jiezhi 之前我就是这样做的,今天脑残把自带的直接 python 删了,之后自己装的 python (和自带的版本号是一样) yum 还是报错
    yuoboo
        9
    yuoboo  
    OP
       2018-11-12 16:30:06 +08:00
    @alvin666 你水平很牛逼?
    araraloren
        10
    araraloren  
       2018-11-12 16:43:38 +08:00
    都 8102 年了,还有删除自带 python 的
    aaa5838769
        11
    aaa5838769  
       2018-11-12 16:46:00 +08:00
    安装 2.7.5 修改 yum 配置的路径
    ccl945
        12
    ccl945  
       2018-11-12 17:16:36 +08:00 via Android
    使劲拍拍,重启试试
    syahd
        13
    syahd  
       2018-11-12 17:17:33 +08:00 via Android
    同掉过这个坑的路过
    raysonx
        14
    raysonx  
       2018-11-12 17:42:20 +08:00   1
    YUM 是一个 Python 程序,你删除了系统内置的 Python 当然就不能运行了。更严重的问题是,你系统中还不知道有多少应用程序、第三方库依赖这个 Python 版本,现在它们都无法运行了。不清楚楼主删除系统内置 Python 的原因,猜测这是一个 X-Y 问题( https://coolshell.cn/articles/10804.html )。

    再说修复方法:
    1. 不要尝试 1 楼所讲的自己编译 Python。因为你的机器几乎肯定没有安装支持的编译工具和依赖,而且就算编译并安装成功了,你系统中已安装的 Python 第三方库可能因版本兼容或者安装位置不同而无法正常运作,而且以后官方源中的所有 python 第三方库及应用可能都无法与你自己安装的 Python 兼容。
    2. 如果可能,最简单的方法是备份数据后重装系统。
    3. 如果要针对现有版本进行修复,建议使用 rpm 工具重装 Python 解释器。首先你要了解之前系统中的 python 的 rpm 包是哪个,然后重装对应版本完全相同的 RPM 包。可以尝试运行 `rpm -qa | grep python-2`看一下之前系统中安装的 rpm 包名,然后尝试用`rpm -ivh --replacepkgs --replacefiles 文件路径`进行重新安装。`文件路径`可以是本地文件也可以是 URL。
    zxcvsh
        15
    zxcvsh  
       2018-11-12 17:46:11 +08:00 via iPhone
    从新装一个,你也是心大不知道 yum 基于 py2 吗,你要改好多依赖;如果是服务器最快的方式是恢复
    nicevar
        16
    nicevar  
       2018-11-12 17:49:48 +08:00
    为什么老有人喜欢删这个,有强迫症还是很危险,v 站上隔三差五就有人上来因为删 python 喊救命的
    raysonx
        17
    raysonx  
       2018-11-12 17:50:59 +08:00   2
    楼主惜字如金地连自己敲过的命令或者到底下载了哪些 rpm 包都不愿意讲,怎么让别人帮你?

    再谈下面这两句警告( warning 是警告的意思,不是错误!不是错误!不是错误!)
    warning: group mockbuild does not exist - using root
    warning: user mockbuild does not exist - using root

    解释:mockbuild 是默认用来编译 SRPM 包的用户和用户组。如果系统中不存在,则使用 root 用户或者组,没毛病。
    我猜测,楼主在尝试安装 SRPM 包(*.src.rpm 这种格式的文件名),也就是源码包。然而因为你不需要自己去 build Python 的 RPM,所以没有必要安装 SRPM 包。

    楼主又说`软件包并没有安装上`,我想知道楼主是怎么得出这个判断的。如果真的安装失败了,请贴错误信息。
    zoroojack
        18
    zoroojack  
       2018-11-12 17:51:58 +08:00
    跟我以前一样,不过我是学习的时候发现的,重装系统就完事了,你要是生产环境就麻烦了。不知道啥时候才能更新到 python3,2 看着难受。
    raysonx
        19
    raysonx  
       2018-11-12 17:54:19 +08:00
    @zoroojack RHEL 8/CentOS 8 默认安装的就会是 Python 3 了,而且系统中安装多个不同版本的 python 完全没有冲突,删系统 python 只能解释为强迫症。摊手~
    hei1000
        20
    hei1000  
       2018-11-12 17:55:12 +08:00
    自带的 python 也敢删除,好多软件包依赖它的
    yuoboo
        21
    yuoboo  
    OP
       2018-11-12 17:58:14 +08:00
    @raysonx 感谢, 回答这么详情,费心了,其实也没啥,昨天刚买的良心云的服务器,刚开始用,其实最简单的方式就是重装系统,我想尝试修复一下,放弃了, 刚刚重装系统,几分钟就好了!
    yuoboo
        22
    yuoboo  
    OP
       2018-11-12 18:00:14 +08:00
    @nicevar
    @raysonx 确实有点强迫症。。哈哈哈哈
    raysonx
        23
    raysonx  
       2018-11-12 18:03:19 +08:00
    @yuoboo 如果只是单纯想在 CentOS7 用新版本 Python 的话,建议:
    1. 配置 EPEL 源( yum install epel-release 就可以)。EPEL 提供 python3.6 的包,可以使用 `yum install python36` 安装。
    2. 或者使用 Docker。
    3. 或者自行编译新版本 Python,但请不要覆盖系统自带的版本。
    yuoboo
        24
    yuoboo  
    OP
       2018-11-12 18:05:14 +08:00
    @araraloren 删过之后就不敢了
    @whwq2012 你是怎么爬出来的
    @zoroojack 有点强迫症,用不上就想干掉它
    @hei1000 删过之后就知道了
    yuoboo
        25
    yuoboo  
    OP
       2018-11-12 18:07:54 +08:00
    @raysonx 尝试一下,感谢!以后就长记性了~_~
    v2dead
        26
    v2dead  
       2018-11-12 18:12:11 +08:00
    当年我一个朋友作死的手法还和楼主不一样,他是自己编译安装了另一个版本的 python 覆盖原来的,然后 yum 不能用,我帮他调试,手工下载各种 rpm 包,手工修复依赖,再多次编译 python 试图恢复。折腾了三四个小时。

    推荐最好的做法,直接快照 /重装,完全不要考虑修复的问题。
    lolizeppelin
        27
    lolizeppelin  
       2018-11-12 18:26:09 +08:00   1
    rpm 数据库是 c 写的

    这玩意是红帽的, 光装 python 没法和 rpm 数据库互交

    光这一个玩意就弄死 yum 了
    lolizeppelin
        28
    lolizeppelin  
       2018-11-12 18:28:47 +08:00
    网上那些一天教人 --force 和--nodeps 的就是坑

    依赖都搞不清楚也敢瞎--nodeps 系统不死才怪

    老老实实按规范卸载你就知道要卸多少东西才能卸掉系统的 python 了, 你当 rpm 的依赖随便写的?

    不按规矩来系统就被搞乱呗
    xxgirl2
        29
    xxgirl2  
       2018-11-12 18:43:50 +08:00
    我记得 ubuntu 的话如果误炸了什么东西,似乎可以用 live 启动盘切换 sysroot 再用 live 盘里的 apt 装回去,不知道 centos 有没有类似的操作。LZ 可以试着在这方向搜索一下。
    exkernel
        30
    exkernel  
       2018-11-12 18:45:46 +08:00
    activepython 2.7 可救
    likuku
        31
    likuku  
       2018-11-12 21:55:12 +08:00   1
    @xxgirl2 你想多了,chroot 之后,livecd 环境就已经切到硬盘系统环境了,apt 管理数据库都是硬盘系统的了,和你直接用硬盘系统没差。
    likuku
        32
    likuku  
       2018-11-12 21:56:50 +08:00
    作有风险的操作之前,一定先作快照,或者全系统 tar 备份。

    再次重复,看着系统自带的老旧 python,正确解法是用 pyenv 和 virtualenv
    omph
        33
    omph  
       2018-11-12 23:19:40 +08:00
    scukmh
        34
    scukmh  
       2018-11-12 23:39:17 +08:00
    我也干过这种事,没救回来,直接重装了。
    yubxpku
        35
    yubxpku  
       2018-11-13 00:57:22 +08:00 via Android
    直接重装吧,自带 python 的依赖关系解除了。重装很难修复,会牵连一堆软件。并不是简单的在 PATH 里加个 bin 就完事的。
    Osk
        36
    Osk  
       2018-11-13 01:37:42 +08:00
    虽然很不厚道, 笑出声, 哈哈, 不是第一次在 v 站上看到这样作死的了.


    来 Arch 邪教吧, pacman 可以静态链接, 再也不怕搞挂了. 就算搞挂了也可以在 live CD 里 pacman/pacstrap 救回来.
    cnnblike
        37
    cnnblike  
       2018-11-13 02:40:35 +08:00
    我之前也卸载过,我觉得这根本不可耻的,在学习 linux 怎么用的时候,谁没个洁癖发作把所有看不惯的包全删掉的冲动?
    最后楼主,恢复非常复杂,建议你直接重装吧
    msg7086
        38
    msg7086  
       2018-11-13 03:07:15 +08:00   1
    rpm 装的包和 make install 装的包是两回事。

    另外 Linux 发行版是很忌讳 make install 装包的。没有了包管理,你装的软件是什么版本,打过哪些补丁,影响了哪些系统文件,全都不知道。CentOS 就算要更新,也应该用 EPEL 等第三方软件源来更新。更不要去随便动系统包,什么 libc 之类的,论坛上全是血泪史。
    KasuganoSoras
        39
    KasuganoSoras  
       2018-11-13 04:52:55 +08:00 via Android
    你这操作和 yum remove iptables 一样危险。
    内置的 Python 动不得,万一搞坏了就很麻烦。
    当然我遇到过最恐怖的事情是 C 库坏了,那个才是真的惨
    yuoboo
        40
    yuoboo  
    OP
       2018-11-13 07:53:11 +08:00 via Android
    @msg7086 感谢!
    VisionTheta
        41
    VisionTheta  
       2018-11-13 08:27:53 +08:00 via iPhone
    因为没有大服务器(centos7)的 root 权限 一直都是手动装包 直到有一天 管理员看我太辛苦 给了我 root 权限 但是他说没啥用 rpm 早被别人玩坏了 现在他也是手动编译源码来装包 我说好呀 有时间鼓捣下 果然 我发现是有人删除了默认的 python2 然后弄了一下午 终于手动重装了 rpm python2 内心 OS: 费我这么大劲 下回一脚踢飞删了 python2 的小婊子 哈哈哈
    yuoboo
        42
    yuoboo  
    OP
       2018-11-13 09:14:36 +08:00
    @cnnblike 还好只是个刚用的服务器,已经重装了
    @VisionTheta 是不是现在整个世界都彩色了, 哈哈哈
    hasdream
        43
    hasdream  
       2018-11-13 09:37:50 +08:00
    vmware 装一台一样的机器 cd /; tar zcf py.tar.gz usr/lib64/python2.7 usr/bin/python* usr/lib/python2.6
    然后把 py.tar.gz 包上传带误删的机器 然后 tar xvf py.tar.gz -C /
    hasdream
        44
    hasdream  
       2018-11-13 09:38:14 +08:00
    vmware 装一台一样的机器 cd /; tar zcf py.tar.gz usr/lib64/python2.7 usr/bin/python* usr/lib/python2.7
    然后把 py.tar.gz 包上传带误删的机器 然后 tar xvf py.tar.gz -C /
    VisionTheta
        45
    VisionTheta  
       2018-11-13 11:31:42 +08:00 via iPhone
    看到当时的一个笔记 你搜一下 rpm2cpio 应该可以解决的
    zaneenaz
        46
    zaneenaz  
       2018-11-13 11:52:56 +08:00 via Android
    备份,重装,多踩几次坑就好了。
    yuoboo
        47
    yuoboo  
    OP
       2018-11-13 11:57:26 +08:00 via Android
    @VisionTheta 谢谢,已经重装系统了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1256 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 23:47 PVG 07:47 LAX 16:47 JFK 19:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86