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 · 5698 次点击
    这是一个创建于 2201 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前都是直接备份成别的名称不会管它的,刚才看到有 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 install, 新装的 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
    使劲拍拍,重启试试
    whwq2012
        13
    whwq2012  
       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   ·   实用小工具   ·   4640 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 05:37 · PVG 13:37 · LAX 21:37 · JFK 00:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.