【求助】删除内核时需要的依赖有问题

我把内核升级到了 3.15.1,工作完美。想要删除之前的内核,但是删除之后需要安装一个 base 内核,百思不得其解。。具体情况如下:

目前正在使用的内核:

Linux opensuse 3.15.1-1.gee8dd2b-desktop #1 SMP PREEMPT Wed Jun 18 12:54:11 UTC 2014 (ee8dd2b) x86_64 x86_64 x86_64 GNU/Linux

【1】、使用 zypper 删除

zypper rm kernel-desktop-3.11.6-4.1.x86_64

结果是这样的:

The following NEW package is going to be installed:
  kernel-desktop-base 

The following package is going to be REMOVED:
  kernel-desktop-3.11.6-4.1 

1 new package to install, 1 to remove.

就算使用
zypper rm -u
效果也一样

【2】、使用 rpm 命令删除

rpm -e kernel-desktop-3.11.6-4.1.x86_64

结果如下:

error: Failed dependencies:
        kernel-uname-r = 3.11.6-4-desktop is needed by (installed) virtualbox-guest-kmp-desktop-4.2.18_k3.11.6_4-2.2.10.x86_64
        kernel-uname-r = 3.11.6-4-desktop is needed by (installed) ndiswrapper-kmp-desktop-1.58_k3.11.6_4-1.10.x86_64
        kernel-uname-r = 3.11.6-4-desktop is needed by (installed) bbswitch-kmp-desktop-0.8_k3.11.6_4-13.1.x86_64

进一步使用
rpm -e kernel-desktop-3.11.6-4.1.x86_64 virtualbox-guest-kmp-desktop-4.2.18_k3.11.6_4-2.2.10.x86_64 ndiswrapper-kmp-desktop-1.58_k3.11.6_4-1.10.x86_64 bbswitch-kmp-desktop-0.8_k3.11.6_4-13.1.x86_64
结果如下:

error: Failed dependencies:
        virtualbox-guest-kmp = 4.2.18 is needed by (installed) virtualbox-guest-x11-4.2.18-2.12.1.x86_64
        virtualbox-guest-kmp = 4.2.18 is needed by (installed) virtualbox-guest-tools-4.2.18-2.12.1.x86_64
        ndiswrapper-kmp is needed by (installed) ndiswrapper-1.58-7.1.x86_64
        bbswitch-kmp is needed by (installed) bbswitch-0.8-13.1.x86_64

到此我不敢往下走了,因为我安装了 bumblebee,这样就把 bumblebee 的组件卸载了。

我困惑的是,bumblebee 为什么会依赖 kernel-desktop-3.11.6-4.1.x86_64?没什么道理说啊。。。有没有什么办法不让 bumblebee 依赖这个老版本的内核?

可以参考一下上面帖子。有依赖问题是很正常的。可以用 rpm 强制删除。首先确认你现在在用的内核版本号。如果没有问题的话就内核直接删就好了。弄好了 zypper ve 检查一下。一般是没有问题。

如果你是闭源驱动的话可能要稍稍折腾一点,据说可能需要重新安装驱动。但是我是用开源的。。。。


最简单的方法貌似就是在 YaST 的多版本软件里把旧版内核直接删除。虽然我之前尝试了貌似不行,也会带出一大堆依赖。但是我刚刚又试了一下(重新安装旧内核然后再卸载)发现是没有问题的(也许因为我没有重新引导么?)。

:joy:

我真是服了,不知道 zypper 怎么计算的依赖。。

我是单显卡。没有用过 bumblebee,但也遇到过类似的情况,我稍微研究了一下,仅供参考:
你可以去看下 bumblebee 内包含的 nv 的安装包是不是类似像 nvidia-gfxG03-kmp-desktop-33x.xx_k3.11.6_4-26.1.x86_64.rpm 这种,因为 nv 官方 ftp 提供的 rpm 包是针对 opsnsuse 初始内核编译后打包的,因此它必然要依赖初始版本的内核,强制删除肯定会连驱动一起删除。
如果确实需要删除原始内核,可以试试试用 nv 的编译安装包,.run 的文件,装那个就可以不依赖旧内核

这个道理说得通,不知道你是怎么知道这些的?

PS:我忽然记起来 Bumblebee 里面的 nv 包就是.run 文件,然后依赖内核源码

那你就把驱动全部卸载了, 他就不依赖旧内核了,然后你就可以把旧内核删掉了 , 之后再安装 Bumblebee , 如果在这种情况下它依然要装旧内核,那就说明他在某个环节确实需要依赖旧内核文件, 然后你就可以想办法重点排查 Bumblebee 的问题了。。。

没错,情况就是这样,就算你删掉旧内核删掉驱动再安装 Bumblebee,依然要依赖安装旧内核。。所以真是估计打包有些什么问题

不是打包的问题,这种一般是某个组件使用了原始版本内核编译,因此才依赖了原始内核文件
如果你使用 yast 安装的,那我去源里看了下, 一下就找到了 ,核心组件 bbswitch 是以原始内核编译的

考虑到 LINUX 内核小版本升级的也快,基本不会有个小版本打一次包的 (也许 obs 上的编译狂人有?) 内核依赖这种为了尽可能多的照顾大众,都是选大家默认都有的那个版本为基础来编译。。。