LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 719|回复: 7

再问zypper选择源的机制,谢谢!

[复制链接]
发表于 2011-12-21 09:12:12 | 显示全部楼层 |阅读模式
各位,有一事不明还望大家指点迷津,感谢了!

比如我加了官方和sohu的update源,都是默认的优先级。

当我更新的时候有一个软件包在两个源都存在,且版本一样,zypper会优先选取哪个源的?

除了调整源优先级,有什么方法可以介入源的选取,比如通过ping值会选取从sohu下载?

感谢!
发表于 2011-12-27 23:32:52 | 显示全部楼层
你想多了。

/etc/zypp/zypp.conf zypper.conf都没有你要的内容。

它只说了一个vendor问题,就是如果版本一样是不换vendor的,你现在这个包是哪个repo就从哪个repo装。

你要默认就实现不太可能了。但是脚本实现还是可以做到的

比如:

1. ping某个源, 输出 ping 值到/tmp的一个文件
2. 用cat读两个文件里的ping值,比大小
3. bash脚本去sudo zypper mr -d和sudo zypper mr -a
至于zypper输密码的问题可以改policykit配置来实现不问密码, 不过你这个脚本因为要做系统升级怎么都得是sudo去执行的也就无所谓了。

上面三个过程写到一个shell里。如果用python写的话,还可以批量ping,排大小,加豁免源比如oss等。

我不是码农, 但我觉得你可以写一下。应该不比sunpinyin大词库脚本难。
回复 支持 反对

使用道具 举报

发表于 2011-12-28 00:25:10 | 显示全部楼层
http://swyear.blogspot.com/2009/12/blog-post_17.html
摘要:
7. 調整或禁用 vendor(不建議使用)
11.2 的 zypper 新增了檢查 Vendor (供應商)的功能
您可以用

rpm -qi [已安裝套件名稱] | grep Vendor


rpm -pqi [rpm 檔] | grep Vendor


來檢查 Vendor
預設 zypper up 是不會去變更 Vendor
所以以前(11.1 或更早版本)先加入 Packman 套件庫,然後 zypper up 會將套件升級為 Packman 的套件
現在則不會
現在有 zypper dup 這個命令
這個命令會儘量升級到最新版而不管 Vendor
而且將不屬於任何套件庫的套件都移除
通常用在整個系統升級(例如 11.1 -> 11.2,或升級 KDE)
我會儘量避免使用
但,相反的也是有些好處,例如要升級到 KDE 4 的最新版本若失敗了
只要移除該套件庫,再進行 zypper dup
又會'升級'回原來的版本
檢查 Vendor 可以增進系統的穩定,尤其當您的套件庫眾多,裏面又有重複套件時
這功能是很重要的
若您真的要更改
設定檔在 /etc/zypp/zypp.conf

solver.allowVendorChange = true


或新增一個 /etc/zypp/vendors.d 目錄
裏面放置文字檔(自行取名?)

[main]

vendors = nvidia,suse,opensuse


這會將裏面的 vendor 都視為同一個,那自然不會有變更 vendor 的問題
聲明:本人皆未測試(也不想試)

注意:這是兩年前的文章,可能和現狀不儘相同
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-28 08:55:52 | 显示全部楼层
感谢楼上二位的权威回答,我感觉还是有些疑问:

1.按照doublechou的方法,即使脚本编写了,也会干预到升级的正确性。比如sohu的源更新的稍微慢一些,但速度快,直接把vendor换成了sohu,岂不是不会更新到最新?是否应该把这个脚本更改为:
      while(软件列表.havenext())
{
      先检查软件是否有更新,如果有,看最新版本是多少
      检查这个最新版本存在于哪几个源,产生可用源列表
      对可用源列表进行批量ping,得到最快的源,用此源升级这个软件
}
      这样每个软件都要做一次对比最快的repo的工作,升级的效率应该会大打折扣,特别像packman这种从大陆访问大老难的repo。

2.如果通过software manager来检查更新的软件,也是可以选择来源的,且不会出现chen242所说的相关软体一并改为新选定的repo的问题。为什么用zypper就会出现牵一发动全身的情况?

谢谢啦!
回复 支持 反对

使用道具 举报

发表于 2011-12-28 22:59:36 | 显示全部楼层
Post by 十六薙夜血;2157752
感谢楼上二位的权威回答,我感觉还是有些疑问:

1.按照doublechou的方法,即使脚本编写了,也会干预到升级的正确性。比如sohu的源更新的稍微慢一些,但速度快,直接把vendor换成了sohu,岂不是不会更新到最新?是否应该把这个脚本更改为:
      while(软件列表.havenext())
{
      先检查软件是否有更新,如果有,看最新版本是多少
      检查这个最新版本存在于哪几个源,产生可用源列表
      对可用源列表进行批量ping,得到最快的源,用此源升级这个软件
}
      这样每个软件都要做一次对比最快的repo的工作,升级的效率应该会大打折扣,特别像packman这种从大陆访问大老难的repo。

2.如果通过software manager来检查更新的软件,也是可以选择来源的,且不会出现chen242所说的相关软体一并改为新选定的repo的问题。为什么用zypper就会出现牵一发动全身的情况?

谢谢啦!


1. 你看你,又想多了,sohu更新的慢,所以版本比官方舊啊,你只要讓12.1/oss加入到豁免就行了嘛,不然我幹嘛提豁免兩個字呢。你安裝前會zypper ref一次,這還請求下載所有enable的源的xml描述呢,你要是先用ping的方法disable了一些,總體來說會快上好多的呀。而且你不一定非要ping出結果啊,你可以加1秒break設置嘛,規定時間ping不到就不等了。還是不是序員啦你。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-29 17:09:30 | 显示全部楼层
感谢答复哈~太深了,我得消化消化才跟得上。

btw……锅还真不是程序员……
回复 支持 反对

使用道具 举报

发表于 2011-12-30 10:22:58 | 显示全部楼层
我安装qtCreater的时候把本地的iso添加为源,优先级设置为98,默认就从iso文件下载了
回复 支持 反对

使用道具 举报

发表于 2011-12-30 10:26:15 | 显示全部楼层
同一版本的软件有优先级,很久没用suse了,记得应该是数字小的优先,可以手动调整。

yast2图形界面有调整的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表