[Share Experiences] 关于一个DEB包如何差点干翻Deepin 23这档事
Tofloor
poster avatar
fengshuo
Deepin Wiki Editor
2024-09-21 18:37
Author

事发

事情是这样的,昨天我突发奇想:Linux 下能不能把微软 OneDrive 的内容挂载到文件系统下,这样编辑里面的文档就不用浏览器下载到本地 — 编辑 — 再重新上传了。结果发现一款开源软件 onedriver 可以做到:https://github.com/jstaf/onedriver

不过这个 onedriver 在应用商店和星火都没有上架,看看有没有其他方式安装:作者用 OpenSUSE Build Service(OBS)构建 deb 包,但是构建目标是 Debian 和 Ubuntu,没有 Deepin。嗯......Deepin 以前不是基于 Debian 的嘛,这个给 Debian 12 构建的 deb 包也许能直接用?

于是我把这个 deb 包下载来,没多想直接双击安装(我记得软件包安装器遇到依赖冲突会直接安装失败,感觉没啥风险)还是看一眼详细输出吧,这一看不得了:好几行输出都是 Removing... 开头,这是把什么东西卸载了?!

scream

过了几秒安装器显示安装成功,但是这堆 Removing... 太诡异了,必须翻翻 apt 的日志看它到底干了啥:sudo tail -n 100 /var/log/apt/term.log 输出

Log started: 2024-09-20  17:37:50
(Reading database ... 328425 files and directories currently installed.)
Removing deepin-desktop-environment-cli (2024.09.03) ...
Removing flatpak (1.14.10-1) ...
Removing open-vm-tools-desktop (2:12.4.0-1deepin1) ...
Removing ntfs-3g (1:2022.10.3-1) ...
dpkg: fuse3: dependency problems, but removing anyway as you requested:
gvfs-fuse depends on fuse3.
xdg-desktop-portal depends on fuse; however:
Package fuse is not installed.
Package fuse3 which provides fuse is to be removed.
exfat-fuse depends on fuse; however:
Package fuse is not installed.
Package fuse3 which provides fuse is to be removed.
cryfs depends on fuse; however:
Package fuse is not installed.
Package fuse3 which provides fuse is to be removed.
avfs depends on fuse; however:
Package fuse is not installed.
Package fuse3 which provides fuse is to be removed.Removing fuse3 (3.14.0-5) ...
update-initramfs: deferring update (trigger activated)
Selecting previously unselected package fuse.
(Reading database ... 328202 files and directories currently installed.)
Preparing to unpack .../fuse_2.9.9.1-1_amd64.deb ...
Unpacking fuse (2.9.9.1-1) ...
(Reading database ... 328213 files and directories currently installed.)
Removing gvfs-fuse (1.48.1.4-deepin5) ...
Setting up fuse (2.9.9.1-1) ...
Installing new version of config file /etc/fuse.conf ...
update-initramfs: deferring update (trigger activated)
Processing triggers for man-db (2.12.0-1) ...
Processing triggers for dbus (1.14.10-3) ...
Processing triggers for initramfs-tools (0.142-0deepin2) ...
update-initramfs: Generating /boot/initrd.img-6.9.6-amd64-desktop-rolling
setupcon is missing. Please install the 'console-setup' package.
live-boot: core filesystems devices utils udev blockdev dns.
Log ended: 2024-09-20  17:38:16

直接证实了最坏的猜想:apt 因为依赖问题把好几个软件包卸载掉了,其中甚至有装系统时就在的包。

抢救

之前的经验告诉我,如果现在注销、关机或者重启那系统可能就完蛋了。我也没啥好办法,先把日志里被卸载的那几个软件包装回来再说吧。还好不是很多,手动粘进命令行里:sudo apt install deepin-desktop-environment-cli flatpak open-vm-tools-desktop ntfs-3g fuse3 gvfs-fuse 装回来以后再把 onedriver 卸掉,这次仔细确认不会删掉别的东西。至此抢救完成,配置文件应该都还在,毕竟是被 remove 不是被 purge。楼主发帖后要重启系统,如果我不回复大家那说明没救活,系统还是寄了。

joy

后记

后来发现作者给 Ubuntu 22.04 打的 deb 包恰好能装到 Deepin 上,也能正常使用。给大伙看看俺学校给的 5TB 超大网盘:(关于 onedriver,有兴趣的话我开个新帖)
图片.png

总结:100%我的锅,但还是要吐槽一句**软件包安装器要卸载软件包竟然不要求确认?**这也太危险了吧?安装器过于简陋了,早该重构一下了。打开 deb 包后应该多显示一些信息,类似于:

安装此软件会进行以下操作

一并安装依赖:

  • abc (1.0.0)

升级软件包:

  • def (0.5.1 -> 0.5.5)

卸载冲突项:

  • ghi

继续安装吗?

【取消】【继续】

还有一点就是部分软件包的 priority 设置有误。看下图,apt竟然想自动移除 syslinux 及其他系统级软件???就问为啥 syslinux 没被标记为手动安装?再者为啥软件源里 syslinux 的 priority 是 optional?
图片.png

就这样。抢在更多小白不小心用 sudo apt autoremove把系统干废之前快点修好吧......

pride

Reply Favorite View the author
All Replies
2 / 2
To page
BLumia
deepin
2024-09-23 16:01
#21

装为非deepin的发行版构建的包其实相当于混源。即便附带的 binary 确实能用,但它包里声明的依赖关系和 deepin 的实际情况不一定对的上(当然那些特地自身最小化系统依赖声明并主动减小系统依赖的包就没太大问题了,比如向日葵 WPS 什么的,这些包里的 binary 一般也会丢到 opt 下面)。其实或许可以考虑给 deepin 打包一下对应的软件。deepin 软件包的构建也是发生在(deepin 自己的)OBS 实例上的,说不定一些配置也可以复用。

顺便其它楼层提到的一些和系统本体弱相关的需求(比如使用版本相对 deepin 所提供的更新的 wine),还是建议考虑 玲珑、Flatpak、Distrobox 之类的方案更合适一些。

Reply View the author
Tent
deepin
2024-09-23 17:38
#22

这时候我得祭出我的老帖子了sad

https://bbs.deepin.org/post/145949

Reply View the author
155******19
deepin
2024-09-24 02:01
#23

之前因为密码验证pam用了一个perl包,心心念要换成bin包.并默认删除所有perl依赖,闪崩.好象是/开了0555,busybox挂载,chroot没apt执行权限,格盘重装.

Reply View the author
fengshuo
Deepin Wiki Editor
2024-09-24 16:31
#24
zeno

syslinux priority 是 optional 这本身没有什么问题,这本就不是强制的必选依赖项 你可以看看其他发行版也是一样的,另外你这个操作相当于在混源使用

还真是。看了一下 Ubuntu 那边也是 priority: optional。即使这样 syslinux 也不应该出现在可被 autoremove 的列表里,它应该被系统安装器标为手动安装。跟混源没关系,我装 onedriver 之前就这样了。

Reply View the author
月夜残云
deepin
2024-09-24 23:20
#25

sudo apt autoremove

问下已经跑过了,现在deepinV23正常,不知道什么鬼。强迫症看到直接autoremove运行了。

Reply View the author
neko
deepin
Ecological co-builder
2024-09-25 10:24
#26
xclimbing

谢谢,已经搞定。其实我太懒了,顶楼给出的线索足够找到安装包。在我这里,直接就可以打开浏览器登录微软账号。

我有一个疑问,deepin在安装包上到底跟哪个发行版是兼容的,按理说,它应该跟debian 12是兼容的吧?为什么却变成了Ubuntu 22.04?

ubuntu本身就是基于debian的,都是Debian系,所以deepin也可以使用。

Reply View the author
xclimbing
deepin
2024-09-25 11:18
#27

实话说,linux的包依赖真是一个发展的毒瘤。

Reply View the author
2 / 2
To page