分类: LINUX
2008-04-25 11:02:04
来源:赛迪网技术社区 作者:jinguo |
同样的情况,在Gentoo中完全可以通过同一套源码,配置不同USE来实现。也就是说,在Gentoo中,由于个人USE的设置的不同,上面的Debian的两个包,在Gentoo看来就是一个包,只是配置时候的打了不同的补丁。因此,没有所谓的因为依赖而不能安装的问题。
举例:假设该软件包有两个不同USE,一个是common,一个是firefly,那么对于Gentoo,只要你设定了是采用USE="common"编译,还是采用USE="common, firefly"编译,系统在编译软件包的时候,就会自动决定究竟是否打上firefly的patch。也就是说,在Gentoo中,允许同时存在来自同一源码的,编译时配置不同的二进制文件的存在,而Gentoo在处理依赖时候,除非是的确找不到依赖的文件。否则,Gentoo不会提示出依赖错误(因为确实没有错误)。而Debian在这一点上是过于严格了。
Gentoo的包管理的主要缺点在于采用源码编译,不能够满足快速安装系统的需要。同时,一旦系统的基准USE发生了变化(这经常发生,尤其是你还是Gentoo新手的时候,你很可能因为不知道哪个软件包采用那种USE才好,而在基准中加入了过多的USE),虽然可以采用emerge --new-use world进行对新USE的编译,但是,这时的Gentoo的依赖的包的编译顺序有时会有问题,而导致编译失败。(这个其实是一个依赖的问题,明明正常是1、2、3的顺序可以编译成功的,但是--new-use之后,emerge可能会错误的安排成了2、1、3的顺序,而导致编译失败)。
综上,Debian的问题在于依赖的过于严格。对于依赖的问题,可以采用的方法主要有。
1 强制安装。这是最下策,也是最麻烦的方法。(因为下次遇到同类的问题,还得强制安装,尤其是升级的时候)。
2 修改依赖关系。虽然我不知道debian的依赖要在哪里改,但是这的确是一条路。不过,这个也不轻松,因为每次都需要手工修改依赖关系。
3 欺骗Debian,直接将修改过的软件包,以debian原名的形式发布,这样可以解决依赖问题。但是,如果采用了debian的source.list中,如果开启了安全站点检验,这一步就无法通过。
4 系统推倒重建,安装Debian的官方版本。OK,如果你对中文显示要求不高,可以采用这个办法。不过,这样的话,就没有中文的粗体和斜体,同时,我觉得看起来也不怎么舒服。
5 就用非官方的版本,不轻易升级。本着够用就好的原则,期待别人解决问题。我,无语。(Hiweed用户适用。向Hiweed致敬)。
6 构建一套大系统,包含了所有由于补丁的问题所造成的问题的补丁。也就是大量的非官方的补丁。例如构建一套超大的,可以解决所有依赖问题的中文Debian,不妨叫大Hiweed。费时,费力,难与官方发布同步。
7 为什么不直接将中文补丁提交到Debian官方,或者对应软件开发的官方,这样软件就是Native Chinese Support。岂不是很好?(强烈赞同这个观点,这个应该是最终的解决之道)。
8 当然,也可以建议Debian修改它的依赖的检测方式。提供一些的灵活的,tiny的版本号,认为也是同样兼容的。
Gentoo的解决之道:
Gentoo虽然依赖的问题解决得很好,但是,Gentoo编译时间太长。虽然,你可以采用某些方法(比如,设定最简单的系统,设定复杂的USE,去除编译多余的Locale)来确保系统不编译多余的东西。也可以采用打开ccache的方法,建立数据库来加速c程序的编译。但是,Gentoo的安装时间长(通常桌面是几天,采用kde或gnome的情况),频繁升级的话,更是费时费力。
虽然我们不能解决升级时的编译问题。但是,我们至少可以解决安装的时间过长的问题。我们的希望来自教主的homeking的ibox,ibox采用livecd的方式,提供给大家一套完整的Gentoo中文解决方案。新版本的ibox将采用kde做为默认,同时提供迅速的安装到硬盘功能。
Gentoo的未来,在于随着计算机系统性能的不断提高,从源码编译软件的时间成本将会原来越低。同时,如果你有多台电脑,gentoo支持多台电脑采用并行的方式为同一台电脑编译软件。这也可以大大加快编译的时间。
有人认为Gentoo编译的系统,要比Debian要快。我觉得这不是一个事实。因为大多数的Gentoo的用户不懂得如何去最优化自己的系统。因此,编译出来的系统,优化也是有限的。这就给了Debian很大的机会。另外,USE参数设置的过多,也使得自己的系统多了好多自己不需要的功能。这也是一个原因。
Debian还有一个缺点,就是虽然Debian安装之后很小。但是如果你需要编译程序的时候,你就会发现Debian还要安装各种各样的headers或source,这些,对于Gentoo则是不需要的,因为Gentoo本身就是从源码编译过来的。不缺少那些东西。 |