|
发表于 2009-12-9 10:58:59
|
显示全部楼层
你好像之前用 arch 的?我也是,呵呵。
其次,我有一个理解——gentoo之特色在于Portage——Portage之精华在于USE。不知是否得当,望熟手指教!
用 use 可以定制自己的系统。gentoo 的 overylay 和 ebuild 的简单其实也算是特色。我想 arch 的 pkgbuild 应该是学了一些这个。
portage 支持的 mask, unmask 也是一个特色,这样你可以很容易控制自己装的包的版本。
又来,关于e……系列的工具包。初略了看了下为什么不自己congfigue的文档,没完全看懂,这里提问。gentoo提供了econf到emake、dodoc……一套工具。为什么不把原汁原味的check install给用户展现出来呢?有什么理由必须这么做么?还是又什么充足的理由认为这样会好的多?
如果你一定要用那个 make install,也是可以用的,没说你不可以用。那些 econf 什么的是给你简化工作的。
比如我要写一个 kde4 的包的 ebuild, 里面可能只需要简单的 inhert kde4-base 设置几个变量就可以了,都不用写别的了。
继续,USE这个精华我理解的很肤浅。大致认为首先系统级别的USE就相当于在自定义通用的编译参数。然后各个软件包IUSE会根据软件的情况,每个IUSE对应一个可选编译项。系统编译的时候,拿着IUSE去查USE,如果不在USE之列或者USE之列取消(-USE_WORD)了,就不编译相应选项,否则包含改项。 简单的举例子说,加入一堆软件都有可选GTK支持,不用USE就每个软件都要加上--enable-gtk之类,用USE就只需要USE="gtk",然后每个软件包维护者分别加上conf=USE gtk? --enable-gtk。 不知这样理解是否正确,望指正!
我觉得好像差不多是这样。这个 use 可以用来激活这些编译选项,也可以干别的的,比如复制文件,提示什么信息,依赖什么其它包等。
仍然。诚然gentoo宣言(算是吧)里说到:为什么gentoo这样做,是因为我们实在没必要为了一个可能基本不用的QT环境,而让所有的编译的包都加上QT支持和依赖。
你可以让所有包都用 qt,也可以只让某个包用。 use 可以只让某个包用,也可以让所有包用。
诚然,这很有道理。但是一个优秀的基础软件对于可选特性的支持,应该都是可以编译进去,但是不使用的吧。比如QT支持,编译时加入--with-qt,但是运行时没有QT也是可以正常使用的吧! 既然这样,用一小部分磁盘空间容纳多出来的-with-option总是好过用大部分时间来等待编译看gentoo文档的吧? 或者有别的说法?同样热烈的欢迎指正!
...........
如果你 with-qt 而没装 qt,这个包你能编译的过去?如果你编译进去了,运行时没有找到,你以为一定能用么?而 gentoo 其实也有 DEPEND 和 RDEPEND 的,一般来说 RDEPEND <= DEPEND。对这种包如果你非要干掉 qt 也不是不可以的。不过升级的时候你还是同样要用到 qt 的。
当然,如果你觉得把 qt 装上也是无所谓的事情,那你就直接去用 arch debian ubuntu 去好了,干什么非要用 gentoo 呢? gentoo 就是给想更多的控制自己系统的人用的。如果一个用 gentoo 的人从来没有兴趣去选择那些 use,那这个人还不如不用 gentoo。
最后,gentoo有Portage,用于保存ebuild这类。有distfile用来保存软件包源代码。那么distfile会保存所有portage中的包的源代码么(应该不会,那么他的选择标准是什么呢)?
gentoo 有 sync 服务器,里面放了所有的 ebuild,还有一个 gentoo_mirror 服务器,里面访了所有的 sync 服务器里面的 ebuild 指定的包。这里面可能也不是有所有的,gentoo 的 ebuild 里面是可以指定从哪里找源码的,如果 mirror 里面找不到,会去这些地方找的,比如 sf。
你说的 distfile 应该是你本机里面存的。装包的时候,会从 mirror 下来需要的源码包,存到 distfile 里面,然后安装。当然,其实安装完了就没用了,你就可以把他们删掉的。下次如果再用到这个包,他还是会去下的,你如果空间足够,那就别删,下次就不用下了。distfile 里面的东西可以随意删除。
你本机还有一个从 sync 服务器 sync 下来的所有 ebuild。这个是全量的。因为都是文本,也没多大。这个里面的东西是你自己控制来更新的。就是类似你执行 pacman -S , apt-get update 的时候一样。
而且gentoo有一大特性就是多版本共存。第一个问题就是Portage和distfile中,会把gentoo成立至今所有的软件版本都囊括(也应该不会,那又是什么标准呢)?
多版本对 gentoo 来说也就是这些版本的 ebuild 存在。这些 ebuild 里面指定了包的位置。mirror 里面没有,会去这些地方找。
另外对于文档中关于多版本共存的介绍让我很疑惑,他以freetype和freetype2举了例子,但是我还是不明白。我的理解多版本共存意味着比如fcitx3.6.1和fcitx3.6.2共存,我以为是不可能的,因为他们二进制文件很多都相互覆盖的。而对于类似gtk和gtk2这类本身就不相互覆盖的,我想哪个distro都可以做到共存。
我理解 fcitx 如果想要共存可能是装到了不同的位置。例如之前 kde3 和 kde4 就是共存的。文件覆盖肯定是没法共存吧。
结局,我对gentoo现在很着迷。就算花了几乎8个小时来编译了OOo(感谢上苍,除了没有中文支持,万事俱备)。
对这种包是没必要去编译的,对几个大的包,OOo, firefox, thunderbird 都提供了 bin 版本,你直接装这个就好了。性能也不差。
目前唯一不满的就是init脚本的方式(当然gentoo采用的SysV为大多Linux所用,这是我自己的问题)。其他方面都是上列这类“疑惑”。尽管这些疑惑都还无法让我对gentoo“不着迷”。也许是编译时间(累积起来)很长的原因,gentoo对CLI的界面很投入。emerge出来的提示感觉很人性化(后来才发现是maintainer人性化)。虽然ebuild看上去有些复杂。
我用了 linux 这么多年,还没有去想过修改什么 init 方式,我觉得那些事情不是一个用户干的,就和你去研究 windows 启动的时候那个条动来动去的后面在干什么一样,没什么意义。如果一个方式对大多数用户来说真的很好,那就会有人去弄一个方法出来的。你找找总能找到的。要不你就去做第一个吃螃蟹的吧。
ebuild 其实很简单的。看这个吧 http://devmanual.gentoo.org/
最后一句,我不是踢场子的,也不是找抽的,只是着迷这东西,来请教各位!
我建议你还是真正去使用一段时间再说吧,至少让自己有质疑的资本。 |
|