On 06/22/2010 04:49 PM, Huang, Tao wrote:
> 2010/6/22 [email protected] <[email protected]>
>
>> >
>> > 以下图中,
>> > 绿色圆是为了满足依赖关系而apt-get或aptitude自动安装上的 包
>> > 蓝色圆是管理员使用apt-get install 或 aptitude install指定安装的包,简称为手动安装的 包
>>
> 其实你没必要搞这么复杂 而且邮件列表的指导原则是采用纯文本格式撰写
> 这些图片对后续的讨论和邮件的存档 (包括 usenet 和 google groups 中的阅读) 非常不友好
>
>
单单文字很难描诉清楚那些关系,所以迫不得已用图
>> > 例子 1:
>>
> [snip]
>
>
>> > 例子3:
>> > 1. 在例子2的基础上, 有个手动安装的包E推荐D(既E Recommends D,手动安装E时,也会把D装上)
>> >
>> > apt-get remove C : 将删除C, 同时提示你用apt-get autoremove去清除B,D
>> > apt-get autoremove C : 将删除B, C, D
>> > aptitude remove C : 将删除B, C, D
>>
> 我前面的疑惑就是针对你的最后一句话 也就是这个情况
>
> 从 /var/lib/apt/extended_states 可以看出 只有自动安装状态是被记录的 具体的依赖与推荐关系并不被记录
> (可以通过 aptitude why $pkg 来查找指定包的可能安装原因)
>
> 依照你此例中说明的情况 执行
>
> $ apt-get autoremove
>
> 会卸载所有只被某些包推荐而不被任何包依赖的包 而这明显与事实不符
>
> 我希望你给出具体的例子 也就是具体的 package names 而不是这些的并没有让问题变得更明了的示意图
> 这些图片中的依赖与推荐关系用文字也可以表述的很清楚
>
>
由于包依赖的复杂,我很难在短时间内找有这几个例子所提到的依赖关系的包
apt-get aptitude如何知道一个包的依赖关系?它们都调用了dpkg的数据
(/var/lib/dpkg/status),这里记录了安装的或者安装过的包的各种信息
我测试时, B 包 是rdesktop, C 是 lftp, D 是 w3m, E是nano, 它们之间
是没有任何依赖关系的
就是修改了/var/lib/dpkg/status来欺骗apt-get和aptitude ,让它们具有“依
赖”关系
你可以自己找两个简单的包,然后修改depends on, 让 A depends on B,然
后用aptitude remove B,你就能明白了
>> > 我的理解: 删除C, 那么B,D 这两个包既是自动安装的,且没有其他手动安装的包依赖于它们,
>> > 则可以判定B,D也是没必要的
>> > 虽然D被E Recommend, 但为啥是这么设计的, 我没猜出开发人员的想法
>>
> 因为本身并不成立
> 你说的这种卸载方式 以 apt 对包依赖的记录 是无法实现的
>
>
>> > 例子4:
>>
> [snip]
>
>
>> > 例子5:
>> > 1. 在例子4的基础上, D变成推荐B, E依然依赖于D
>> >
>> > apt-get remove C : 将删除C, 同时提示你用apt-get autoremove去清除B
>> > apt-get autoremove C : 将删除B, C
>> > aptitude remove C :将删除B, C
>> >
>> > 我的理解: 删除C, 而B没有被其他手动安装的包直接依赖或者间接依赖(我指那些一层层depend on的关系), D被E依赖
>> > 所以B不是必要的,可以删除, 而D不能删除
>>
> 这个例子里也有同样的问题
>
> 一个比较合理的判断一个包是否会被自动卸载的方法是用 aptitude why $pkg
>
> 只要 aptitude why $pkg 能够找到任何一条路径使得 $pkg 是被某些包依赖或推荐的 则 apt-get
> autoremove 和 aptitude remove 就不会卸载 $pkg
>
> 如果你不同意的话 希望能举出真实反例
>
>
aptitude why 也是根据 /var/lib/dpkg/status来判断的,一时间我很难到出
有这样关系的5个包
如果某天找到了,我会发出来
>
>> > Tao
>> > --
>> > http://huangtao.me/
>> > http://www.google.com/profiles/UniIsland
>> >
>>