缓解新版deepin系统软件版本太旧的问题:混合lion和panda源
Tofloor
poster avatar
duanyao
deepin
2019-06-12 22:43
Author
本帖最后由 duanyao 于 2019-6-13 22:45 编辑

免责声明:本文与 deepin 官方无关,也未经全面测试,请酌情食用。尽量先 --dry-run;遇到问题可在这里回帖,大家一起讨论。


一、背景知识

深度操作系统从15.9.2开始迁移至Debian stable仓库:https://www.deepin.org/2019/03/1 ... %e4%bb%93%e5%ba%93/

不过,由于Debian stable仓库的软件版本很多都比较老旧,对于一些专业用户(比如程序员)就不太友好了。有没有解决的办法呢?有的。先讲一些背景知识:

过去,deepin 的主要软件仓库代号 panda,基于 debian unstable 仓库,版本比较新;现在,deepin 的主要软件仓库代号 lion,基于 debian stable 仓库,版本比较老。现在,panda 仓库仍在运作。也就是:

15.9.2 以前:deepin panda <- debian unstable (版本新)

15.9.2 以后:deepin lion <- debian stable (版本老)


但要注意,以上仅限于全新安装的 15.9.2 以后的版本。如果你是从 15.9.2 以前的版本一路升级上来的,那么你暂时还是用的 panda 源,系统不会给你自动切换的。也就是说,15.9.2 以后的版本,虽然看起来都差不多,但升级上来的与全新安装的系统,实际上差别不小。

如果你是一路升级上来的,那么不用做什么修改,看到本文这里就可以结束了;如果你是新装的 15.9.2 以后的版本,可以继续。

二、修改软件源

下面讲我的解决方案:混合 lion 和 panda 源,但是前者的优先级要更高。

第一步,修改apt源,添加 panda 源。命令行执行 sudo dedit /etc/apt/sources.list ,可看到里面有这样一行:

deb [by-hash=force] http://packages.deepin.com/deepin lion main contrib non-free

在其下面增加一行,保存退出:

deb [by-hash=force] http://packages.deepin.com/deepin panda main contrib non-free

这样就能同时使用  lion 和 panda 源了。

第二步,设定优先级。命令行执行 sudo dedit /etc/apt/preferences ,这个文件应该还是空白,在里面添加以下内容,保存退出:

Package: *
Pin: release panda
Pin-Priority: 100

Package: *
Pin: release lion
Pin-Priority: 500


这样 lion 的优先级为 500 而 panda 为 100,会优先使用前者。

第三步,运行 sudo apt update 。

到这里就完成了修改。

三、使用软件源
做了以上修改后,因为 lion 源优先级较高,所以正常的 apt 命令、自动升级、软件商店等都与原来无异。这里主要讲高级的用法:升级和降级。

升级就是从 panda 源安装软件。只需要加上 -t panda 参数即可(不带此参数则从优先级更高的 lion 源安装,与过去一样),例如升级 gnome-keyring 包:

sudo apt install -t panda --dry-run gnome-keyring


注意这里加上了 --dry-run 参数,意思是模拟操作,不真正改变系统。建议总是先 --dry-run 一下,看着没有什么不正常的操作(例如意外地卸载一些不该卸载的东西),然后去掉 --dry-run 重跑一遍:

sudo apt install -t panda gnome-keyring

降级则是回归 lion 源。这需要先知道具体的版本,用 apt policy  命令:

$ apt policy gnome-keyring
gnome-keyring:
  已安装:3.28.2-1
  候选: 3.28.2-1
  版本列表:
*** 3.28.2-1 100
        100 http://packages.deepin.com/deepin panda/main amd64 Packages
        100 /var/lib/dpkg/status
     3.20.0-3 500
        500 http://packages.deepin.com/deepin lion/main amd64 Packages


这说明我们已安装的版本是 panda 源里的 3.28.2-1 ,可以降级到的版本是 lion 源里的 3.20.0-3 ,那么指明具体版本即可:

sudo apt install -t lion --dry-run gnome-keyring=3.20.0-3

检查无误后去掉 --dry-run 再执行即可。

注意,如果降级的包有多个依赖的包,则可能报错,这时需要把依赖的包也一一指定要降级的版本,详见: https://www.linuxuprising.com/20 ... es-to-specific.html

四、如果运行 apt --dry-run 遇到了异常情况

比如不能满足的依赖关系、企图删除你没有指示删除的包等,建议换 aptitude 试试,似乎它更加智能。我用 apt 升级 nautilus 文件管理器时报告依赖错误,而 aptitude 就可以正常完成。语法差不多:

aptitude install  -t panda -s nautilus

这里 -s 与 apt 的 --dry-run 同义,都是模拟运行。正式操作时要去掉 -s 。



Reply Favorite View the author
All Replies
jianguo922
deepin
2019-06-13 02:46
#1
谢谢分享
Reply View the author
superendermansm
deepin
2019-06-13 05:02
#2
dry run  干跑
Reply View the author
59******[email protected]
deepin
2019-06-13 22:57
#3
看了你的帖子,我深受启发。。
我于是卸载了满是bug的dde,用上了基于panda的gnome3
Reply View the author
59******[email protected]
deepin
2019-06-14 06:31
#4
好吧,我现在已经把lion当备用源了。。
Reply View the author
Amadeus
deepin
2019-06-14 18:36
#5
顶一个
Reply View the author
tmzqcn
deepin
2019-06-16 05:02
#6
修改源以后在应用市场理安装了几个软件,但是想卸载的时候提示卸载失败。。。
Reply View the author
duanyao
deepin
2019-06-16 05:17
#7
https://bbs.deepin.org/post/179163
修改源以后在应用市场理安装了几个软件,但是想卸载的时候提示卸载失败。。。 ...

从命令行卸载, 看下报什么错误?
Reply View the author
tmzqcn
deepin
2019-06-17 06:11
#8
https://bbs.deepin.org/post/179163
从命令行卸载, 看下报什么错误?

正常了。。。可能是后台在系统更新的缘故
Reply View the author
爪巴戈
deepin
2019-07-03 23:58
#9
感谢作者,  解决了我软件依赖问题!
Reply View the author
thiswind
deepin
2019-07-04 04:20
#10
谢谢,解决了我的依赖问题,我从下午折腾到现在,试了各种方法,最后还是这个办法解决了问题。我尝试在deepin里编译redox,也不知道能不能成功,估计还要跑一个多小时吧,至少这一个砍过去了。
Reply View the author
wliang0521
deepin
2019-07-04 06:58
#11
感谢大神分享
Reply View the author
random0901
deepin
2019-07-04 08:30
#12
赞楼主~
Reply View the author
xiebingtang
deepin
2019-07-04 17:43
#13
安装不了python3.6 python3.7, 即使源码安装后也不能使用pip3,好多依赖问题
Reply View the author
duanyao
deepin
2019-07-04 18:46
#14
https://bbs.deepin.org/post/179163
安装不了python3.6 python3.7, 即使源码安装后也不能使用pip3,好多依赖问题

lion 源的 python3.5 的确是很多系统组件的硬依赖,无法升级。用虚拟环境吧:

https://bbs.deepin.org/post/180102
Reply View the author
random0901
deepin
2019-07-14 08:03
#15
优先级那里最好不要这么做,还是要设置稳定版的源为最高优先级,再通过:aptitude install  -t panda 包名的形式安装指定的依赖。
这是目前风险最小但又能解决问题的方式
Reply View the author
duanyao
deepin
2019-07-14 08:08
#16
https://bbs.deepin.org/post/179163
优先级那里最好不要这么做,还是要设置稳定版的源为最高优先级,再通过:aptitude install  -t panda 包名 ...

我的确是设置稳定版的源为最高优先级的啊,你再看看?
Reply View the author
random0901
deepin
2019-07-14 08:22
#17
https://bbs.deepin.org/post/179163
我的确是设置稳定版的源为最高优先级的啊,你再看看?

我看错了,抱歉~
Reply View the author
happiness
deepin
2019-12-21 09:24
#18
你好,错误:10 http://packages.deepin.com/deepin camel InRelease                                                
  无法连接上 packages.deepin.com:80 (111.178.3.46),连接超时
错误:11 http://packages.deepin.com/deepin panda InRelease                                                
  不能连接到 packages.deepin.com:http:
获取:12 http://repository.spotify.com stable InRelease [3,316 B]                                          
错误:12 http://repository.spotify.com stable InRelease
  由于没有公钥,无法验证下列签名: NO_PUBKEY 4773BD5E130D1D45
正在读取软件包列表... 完成   
W: GPG 错误:http://repository.spotify.com stable InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY 4773BD5E130D1D45
E: 仓库 “http://repository.spotify.com stable InRelease” 没有数字签名。
N: 无法安全地用该源进行更新,所以默认禁用该源。
N: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。
Reply View the author