帮助新手理解为什么有些包不会被更新

竟让使用 zypper 更新的新手用户可能发现有些包不被更新,例如

 将不会安装以下 51 个软件包的更新:
  easytag easytag-lang evolution-plugin-rss evolution-plugin-rss-lang 
  gconf2-branding-openSUSE gio-branding-openSUSE gnome-js-common 
  gnome-menus-branding-openSUSE gnome-nettool gnome-nettool-lang 
  gtk2-branding-openSUSE gtk2-engine-hcengine gtk3-branding-openSUSE 
  gtkspell3-lang hicolor-icon-theme-branding-openSUSE libatkmm-1_6-1 
  libcolord-gtk1 libcroco-0_6-3 libfolks25 libfolks-data libfolks-eds25 
  libfolks-libsocialweb25 libfolks-telepathy25 libgnomekbd 
  libgtksourceviewmm-3_0-0 libgtkspell3-3-0 libgtop-2_0-7 libgupnp-dlna-2_0-3 
  libgupnp-dlna-backend-gstreamer libgusb2 liblasem-0_4-4 libnotify4 
  libnotify-tools libpangomm-1_4-1 libpresage1 libseed-gtk3-0 
  libsocialweb-branding-openSUSE libtelepathy-logger3 libwnck-3-0 libwnck-lang 
  libzapojit-0_0-0 libzeitgeist-2_0-0 PackageKit-branding-openSUSE presage-data 
  telepathy-gabble telepathy-logger typelib-1_0-Notify-0_7 
  typelib-1_0-TelepathyLogger-0_2 typelib-1_0-Wnck-3_0 typelib-1_0-Zpj-0_0 
  zenity 

这样的信息,为什么呢??

举个例子
在 A 源里面 有 aa.rpm 这个包 版本为 1 为系统默认源
B 源里面也有 aa.rpm 这个包 版本为 2
由于 A 为主源 所以更新的时候只安装 A 中的,但显然 B 的包版本更高,所以提示这些信息。

如何解决:

你可以进入 Yast 修改一下源就可以了。(主要是解决依赖)
例如

amarok fdupes gstreamer gstreamer-0_10 gstreamer-0_10-devel gstreamer-0_10-plugin-esd gstreamer-0_10-plugin-gnomevfs
gstreamer-0_10-plugins-bad gstreamer-0_10-plugins-bad-lang gstreamer-0_10-plugins-base gstreamer-0_10-plugins-base-devel
gstreamer-0_10-plugins-good gstreamer-0_10-plugins-ugly gstreamer-0_10-utils gstreamer-devel gstreamer-plugins-bad
gstreamer-plugins-base gstreamer-plugins-base-devel gstreamer-plugins-good gstreamer-plugins-ugly gstreamer-utils libavutil52
libdirac_encoder0 libgstapp-0_10-0 libgstapp-1_0-0 libgstaudio-1_0-0 libgstbasecamerabinsrc-0_10-23 libgstbasecamerabinsrc-1_0-0
libgstbasevideo-0_10-23 libgstcodecparsers-0_10-23 libgstcodecparsers-1_0-0 libgstfft-1_0-0 libgstinterfaces-0_10-0
libgstpbutils-1_0-0 libgstphotography-0_10-23 libgstphotography-1_0-0 libgstreamer-0_10-0 libgstreamer-1_0-0 libgstriff-1_0-0
libgstrtp-1_0-0 libgstrtsp-1_0-0 libgstsdp-1_0-0 libgstsignalprocessor-0_10-23 libgsttag-1_0-0 libgstvdp-0_10-23 libgstvideo-1_0-0
libmediastreamer_base3 libmediastreamer_voip3 libmjpegutils-2_0-0 libopus0 libquicktime0 libserf-1-1 libsox2 libstrigi0 libvpx1
libxine2 libxine2-pulse libxine-devel mjpegtools sox strigi strigi-devel typelib-1_0-Gst-0_10 typelib-1_0-Gst-1_0
typelib-1_0-GstApp-0_10 typelib-1_0-GstApp-1_0 typelib-1_0-GstAudio-1_0 typelib-1_0-GstFft-1_0 typelib-1_0-GstInterfaces-0_10
typelib-1_0-GstPbutils-1_0 typelib-1_0-GstRiff-1_0 typelib-1_0-GstRtp-1_0 typelib-1_0-GstRtsp-1_0 typelib-1_0-GstSdp-1_0
typelib-1_0-GstTag-1_0 typelib-1_0-GstVideo-1_0 

显示的信息可以判断是因为没有将主源切换到 Packman。
图片放大看,可以看到“切换系统包到 XXXX”之类的提示,自己决定是否更换吧。(注意如果更换,需要调整大量的依赖关系)

!](http://image.suse.org.cn/image.php?di=X6W4)

** 更新需谨慎,且行且珍惜 **

注意:建议不要直接切换系统软件包到 xxx 源中的版本,这个选项是给真正明白他在更新什么软件包的人准备的,很可惜许多人都不明白他要更新什么软件包而又在连带更新着什么软件包(依赖关系),而且他们懒到不会去阅读软件包摘要(Summary)和描述(Description)。 这个选项会切换全部 oss 源中和这个源里都有提供的软件包到这个源中的版本,如果这个源里有个 glibc 呢?那你整个系统都不稳定了。

举个我偶然发现的例子:

有很多国外用户想要用 wps-office,于是添加了我的 home:MargueriteSu 源,然后使用了这个选项。
当时正好我的源里有一个 12.2 时期给大家提供方便的、后来太麻烦版权也有问题就不再更新的 NVIDIA 显卡,于是他们的显卡驱动被切换为非常旧的版本,开不了机。

另外不要因为文中的某些措辞“主源”等就认为这个选项等同于把这个源的优先级调到最高然后执行 dup。如果你想要你的系统稳定,主源永远都应该是 oss。

最好的方式还是建议通过“版本”选项卡手动切换相应软件包的版本。

感谢女王的提醒 自己还是有点不小心啊 :joy: