V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
darrh00
V2EX  ›  Linux

升级 Debian trixie 差点把系统搞挂了

  •  
  •   darrh00 · 24 天前 · 4400 次点击

    提示 base-files 无法升级

    apt-listchanges: Reading changelogs...
    Extracting templates from packages: 100%                                                                                                                                                                                  O Preconfiguring packages ...                                         
    (Reading database ... 117496 files and directories currently installed.)
    Preparing to unpack .../base-files_13.8_amd64.deb ...
    
    
    ******************************************************************************
    *
    * The base-files package cannot be installed because
    * /lib64 is a symbolic link and not pointing at usr/lib64 exactly.
    *
    * This is an unexpected situation. Cannot proceed with the upgrade.
    *
    * For more information please read https://wiki.debian.org/UsrMerge.
    *
    ******************************************************************************
    
    
    dpkg: error processing archive /var/cache/apt/archives/base-files_13.8_amd64.deb (--unpack):
     new base-files package pre-installation script subprocess returned error exit status 1
    Errors were encountered while processing:
     /var/cache/apt/archives/base-files_13.8_amd64.deb
    E: Sub-process /usr/bin/dpkg returned an error code (1)
    

    找了一下相关帖子,有人提示可以把/lib64 软链接删除,这一删任何命令都执行不了:

    ls
    
    

    这大热天的,实在不想把放在弱电箱里的机器拿出来接键盘接电视,于是又研究了一番,可以如此恢复:

    cd /
    /usr/lib64/ld-linux-x86-64.so.2 /usr/bin/ln -s usr/lib64 lib64
    

    再次执行 apt dist-upgrade --autoremove -y 居然莫名其妙又可以升级的,真奇怪,不知道哪里出的问题。

    33 条回复    2025-08-12 13:18:23 +08:00
    aresyang
        1
    aresyang  
       24 天前
    sudo apt install usrmerge
    sudo /usr/lib/usrmerge/convert-usrmerge
    HenryHe613
        2
    HenryHe613  
       24 天前
    吓得我都不敢把 debian12.11 升级的 debian13
    moefishtang
        3
    moefishtang  
       24 天前
    我昨天晚上也升级挂了,升级完有几个包没给我更新.
    然后我用 apt full-upgrade 强制更新,结果重启一下系统起不来了
    还好我有快照,回滚了
    昨晚更新了四台,就那一台出了问题
    ~~不是说 Debian 稳如老狗嘛~~
    1217950746
        4
    1217950746  
       24 天前 via iPhone
    我升级了,没问题,有可能是我主机上没东西都在 Docker 里
    zed1018
        5
    zed1018  
       24 天前
    @moefishtang 起不来是不是卡 grub ,如果是的话是不是升级过程中 grub 让选分区选错了。要不还有一种,如果和你以为的起不来是 ssh 连不上也可能是网卡名字变了导致没有网。
    SayHelloHi
        6
    SayHelloHi  
       24 天前
    借楼问下老铁们

    Debian 系统

    如何只升级补丁包和安全更新包 不升级系统 😁
    ihipop
        7
    ihipop  
       24 天前
    你原来的 /lib64 没有指向 usr/lib64 , 新建的是
    hefish
        8
    hefish  
       24 天前
    @SayHelloHi 不执行 apt dist-upgrade 即可。 只执行 apt update && apt upgrade
    darrh00
        9
    darrh00  
    OP
       24 天前
    @ihipop #7 反复确认过这个软链接,会有这种可能?这是关键链接,如果是错误的,没有正确的 ld-linux-x86-64.so.2 系统根本无法运行。

    还有 @aresyang #1 提到 usrmerge , 我的系统本来就是 Debian bookworm, 应该已经早已经转换了,/几个主要的目录都是链接。
    cnt2ex
        10
    cnt2ex  
       24 天前
    刚刚升级完,没有遇到任何问题。
    mikewang
        11
    mikewang  
       24 天前   ❤️ 3
    #3 @moefishtang
    Debian 稳就稳在不怎么升级 ;)
    升级大概就是会经历的最不稳的时候了。

    ---
    #9 @darrh00

    直接删除软连接会出大问题,因为默认的 ELF 解释器是绝对路径 /lib64/ld-linux-x86-64.so.2 ,删了就找不到了,所有基于 libc 的软件都将无法运行。

    正确的修复方法是一步到位:
    sudo ln -Tfs usr/lib64 /lib64

    解释:-T 是将 /lib64 看作普通文件而不是目录,-f 是强制覆盖,-s 是软连接。

    造成软连接不符合预期的情况可能是安装了 debian 官方源之外的包导致冲突了,或者可能是 systemd 干了坏事。

    可以看一下之前是不是指向 usr/lib 或者绝对路径 /usr/lib64 了,他们都与 usr/lib64 不匹配,虽然最终目标都是同一个目录。
    idssc
        12
    idssc  
       24 天前 via Android
    已经用了半个月
    w568w
        13
    w568w  
       24 天前
    不能 usrmerge 多半是因为自己手动装了非官方源的软件,覆盖了一些 usr/lib64/ 下的目录
    msg7086
        14
    msg7086  
       24 天前
    谁出的馊主意删/lib64 的(笑
    moefishtang
        15
    moefishtang  
       24 天前
    @zed1018 没看,我直接回滚快照了
    开机进到 BIOS 里了,应该是 grub 引导出了问题
    moefishtang
        16
    moefishtang  
       24 天前
    @mikewang 确实,那台机器都快 6 个月没关机了,而且还配置了自动更新,没崩过
    不升级确实稳如老狗
    darrh00
        17
    darrh00  
    OP
       24 天前
    @mikewang #11 学习了

    因为之前我的系统一直可以运行运行的,刚才终端历史没保留,已经没法确认之前到底是什么状态了,从错误信息看估计九成应该是链接成绝对路径导致的,

    debian 安装的检查脚本 https://salsa.debian.org/sanvila/base-files/-/blob/master/debian/preinst?ref_type=heads

    ```bash
    target=$(readlink "$DPKG_ROOT/$d")
    if [ "$target" != "usr/$d" ]; then
    if [ "$d" = lib64 ] && [ "$target" = "usr/lib/#DEB_HOST_MULTIARCH#" ]; then
    # Work around https://github.com/systemd/systemd/issues/33919
    echo "Fixing bad /$d symbolic link created by systemd-nspawn."
    if [ -d "$DPKG_ROOT/usr/$d" ]; then
    ln -sf "usr/$d" "$DPKG_ROOT/$d"
    else
    rm "$DPKG_ROOT/$d"
    fi
    else
    msg="/$d is a symbolic link and not pointing at usr/$d exactly"
    fi
    elif [ ! -d "$DPKG_ROOT/usr/$d" ]; then
    msg="/$d is a dangling symbolic link"
    fi
    ```
    BZGOGO
        18
    BZGOGO  
       24 天前
    13?
    debian12 有些脚本都跑不起来,一直在用 debian11
    HarveyLiu
        19
    HarveyLiu  
       24 天前
    amd cpu 不管家用系列,还是服务器系列,都提升 13%
    Cu635
        20
    Cu635  
       24 天前
    原因还是在这里:“/lib64 is a symbolic link and not pointing at usr/lib64 exactly.”
    这个是 op 你自己配置过么? debian 12 里面应该是默认的了,作为符号链接指向 usr/lib64 这种。
    jocover
        21
    jocover  
       24 天前
    我 debian 升级后 php 变 8.4 了,要自己开启 a2enmod php8.4
    DefoliationM
        22
    DefoliationM  
       24 天前
    一直 testing ,随便升
    ranaanna
        23
    ranaanna  
       24 天前
    @jocover 我的 apache 用的是 mpm-event ,所以是 a2enconf php8.4-fpm 。另外我有用 vnc ,升级后 kde plasma 6 默认用 wayland ,因此导致黑屏,切换回 x11 恢复
    cat55
        24
    cat55  
       24 天前
    升 pve9 我都用备用机演练了好几遍,现在主力机都还没升,等多两个小版本再升
    SayHelloHi
        25
    SayHelloHi  
       24 天前
    @hefish

    多谢老铁回复
    Home Lab 已成功更新
    darrh00
        26
    darrh00  
    OP
       24 天前
    @msg7086 #14 病急乱投医...

    @Cu635 #20 细想应该是自己惹的锅,没有安装过非官方源的软件,应该也不是 systemd 的锅。想起来有一回手欠执行了类似的 mv * . / 脑抽操作,导致根目录混乱,系统没重装也是通过类似/usr/lib64/ld-linux-x86-64.so.2 + 命令恢复的,所以可能当时建立了错的链接埋的祸根
    freaks
        27
    freaks  
       23 天前 via iPhone
    自己环境随便升,生产可不敢这样升
    Radiation
        28
    Radiation  
       23 天前
    @moefishtang #15 我 pve 的 debian 从 12 升到 13 时也是这问题,直接进 bios ,最后直接重装了。
    laminux29
        29
    laminux29  
       23 天前
    生产服务器,应该使用上一个大版本的最后一个小版本。另外如果系统长期稳定运行,除非遇到致命 Bug 或安全漏洞,否则不应该冒进升级。

    自己玩的话,才会选择最新版本,因为吃螃蟹可能会翻车。
    cnbatch
        30
    cnbatch  
       23 天前
    @HarveyLiu 好奇问问,Debian 运行在虚拟机内,CPU 是 AMD ,那么也会有性能提升吗?
    HarveyLiu
        31
    HarveyLiu  
       23 天前
    @cnbatch #30 直通 host 就是提升 13%
    bthulu
        32
    bthulu  
       22 天前
    不升级, 我那 18 年的 windows server 也稳如老狗, 至今连一件事故都没出现过
    Cu635
        33
    Cu635  
       22 天前
    @darrh00 #26
    九成就是了。

    这种情况,不如趁着这次“升级”就干脆重装,配置文件备份一下,apt 安装的包列表有备份恢复的办法: https://unix.stackexchange.com/questions/190853/backup-and-restore-list-of-installed-packages-and-apt-sources (这个是可以用的当作保底,不过还是要注意一下回答时间,现在的新版本 debian 可能有更好的方法)。

    这样得到一个保证没有问题的系统。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1277 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 23:37 · PVG 07:37 · LAX 16:37 · JFK 19:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.