这是我的情况,我有两个 .deb 安装程序A
和B
。软件包B
是软件包A
的后继者。对于已经安装了软件包A
并将安装软件包 的用户B
,我希望完全替换软件包A
并保留其中的数据~/.A
(并移动到~/.B
以供将来使用)。
首先,要用新包替换A
旧包B
,我使用冲突和替换DEBIAN/control
包文件中的选项B
。
其次,为了保留 中的数据,我在包的脚本~/.A
中编写了一个函数来检查包是否已安装。如果找到包,我将移动到。然后,新包可以使用 包的旧数据来执行迁移过程。步骤如下:preinst
B
A
A
~/.A
~/.B
B
A
- 的
A
- preinst of
B
(检查包A
并在此处移动数据) - 卸载
A
- 后
A
- 安装
B
- 后安装
B
dpkg
如果我安装这些软件包,一切都会顺利:
sudo dpkg -i package-a.deb
sudo dpkg -i package-b.deb
但是,如果我在 Ubuntu 18.04 上使用软件中心(gnome-software)安装软件包,就会出现问题。在执行脚本之前旧包A
已被卸载。preinst
安装步骤改为:
- 的
A
- 卸载
A
- 后
A
- preinst of
B
(检查包A
并在此处移动数据,但所有内容~/.A
已被删除) - 安装
B
- 后安装
B
经过一番调查,我发现 Ubuntu 18.04 上的 gnome-sofware 使用 packagekit 作为后端(似乎用作apt
后端)来安装 .deb 文件。我使用以下apt
命令安装包,但出现了同样的问题!
注意:此apt
方法可以在 Ubuntu 16.04 和 18.04 上重现该问题
sudo apt install ./package-a.deb
sudo apt install ./package-b.deb
这个问题困扰了我几个星期了,一直没有好的解决办法。仍然无法同时替换旧包和移动旧数据。欢迎提出任何建议。