LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 6679|回复: 15

Olive的包管理器(上)

[复制链接]
发表于 2006-7-12 22:16:56 | 显示全部楼层 |阅读模式
  这款包管理器,我取名叫“憨牛”,意思就是希望这个包管理起能够像孺子牛一样,默默的管理好整个系统,同时希望这个管理器如猛牛一样有力量和干劲,如憨牛一样踏踏实实的做好每一个细节
  整个包管理器是完全自主设计并实现的,并没有参考任何包管理器的代码,最初的动力希望能通过包管理器这个切入点来全面了解和实现一个灵活的发行版,同时希望能够有自己创新的地方。

目标:
  希望能成为一个优秀的包管理器。
  以下描述的内容都已经在内部评测版中实现。


主要设计思路:
  我所接触的两种包管理器:rpm和deb(本人确实只接触过这两个包管理器),好象是说明文件于实体文件合并在一个文件中,因此,在一开始的设计中就将说明文件于实体文件分离开,以达到同一个实体文件可以对应多个说明文件,同时也为了尝试不同的实现方式。
  (注:说明文件指的是描述包的相关信息的文件,实体文件则是具体的软件包集合)

源:
  源是包管理器的最重要部分,安装的包都将来自源中。源就是一个提供包说明文件和实体包的集合体。
  它在olive.conf中用source来定义,可以用多个source来定义多个源。
  目前仅支持本地源,将在后续的版本中逐渐完善源的类型。

说明文件的结构:
  以一个例子来说明
***********************************
说明包版本:1.0
名称:coreutils
版本:5.95
修正次数:0
发行版本:1.0-alpha
编译人:某某某
联系方式:xxx@xxxx.xxxx.xxx
简介:这是一个常用命令的集合。
包类型:二进制包
运行环境:glibc-{2.4.[0]}
风格:free
微型安装:bin
基本安装:bin/i18n-zh
文档:docs
国际化支持:i18n
资料:info
***********************************
以上用“*”隔出来的部分就是一个包说明文件,需要说明的是这个例子并不完整,还有一些部分没有写出来,有些项目是不需要的,如果说明文件中不写出来那么就按照默认的行为处理,这里只是为了说明一些主要部分。

说明文件是的命名规则为:
包名
-版本号.olive

以下对说明文件中的重要部分进行解释:

修正次数:递增整数
  说明文件中的修正次数一般用于同版本的包发生了变化时使用,每次加一,这样用户的安装或者升级行为中遇到了该包,如果系统内已经安装了该包,则会根据修正次数来决定是否需要升级该包。

发行版本:版本名称
  这部分的作用是如果系统内安装的包的发行版本在和需要安装的包的发行版本不匹配的时候,将自动更新系统内的包。

包类型:[二进制/虚拟包]
  目前只定义了这两种类型,其作用就是为了描述这个说明文件是否有对应的实体包的存在,如果是虚拟包,则安装实体文件,而如果是二进制包,则会根据后面的安装类型以及安装部件进行有选择的安装。

安装类型:
  目前这里一共定义了四种安装类型,分别是:微型安装、基本安装、标准安装和完整安装
  包说明文件中可以分别对这四种类型的安装进行定义,而在安装时按照哪种方式安装则根据olive.conf中的定义来确定,下面对这四种包进行解释:
  微型安装:这个级别适合用于想安装mini级别的系统而设置的,一般用来只安装必要的程序和库,以达到减少系统占用的空间。
  基本安装:通常包含微型安装的全部内容外增加一些不是运行时必须的部分,比如各种语言的支持。
  标准安装:支持所有基本安装中的内容,并加入一些不太常用的部分,比如静态库。
  完整安装:包的全部内容。
  这四种安装类型中的内容并没有严格的定义和区别,也就是说这是可以根据设计包的人自由组合,说明文件中也可以出现这四种定义中的一种到四种,甚至可以不定义(不定义的话将会有些区别),我们姑且认为这四中类型是有层次的,那么高层次的如果没有定义将自动应用它下一层次的定义,比如没定义标准安装而定义了基本安装,那么如果要求按照标准安装方式的时候则自动使用基本安装方式。

实体包:
  憨牛包管理器的实体包设计也和其它的包管理器有很大的不同,同一个包是由一个或多个实体包组成的。
这里分两种情况:
  如果没有定义任何安装类型的话,将使用
  包名-版本-体系-olive
  如果定义安装类型,那么一个实体包的命名规则应当是:
  包名-版本-体系-分包名-olive
  这二者的区别就在于这个分包名上,分包名的名字是任意的,由打包者自行取名,但应该是在说明包中对应,即说明文件中不能出现不存在的分包,存在的分包名也应当(但不必须)出现在说明文件中

  目前憨牛包管理器定义了五种特殊的分包定义,我称为附属包,它们是:手册(man)、文档(docs)、资料(info)、国际化支持(i18n)以及头文件(headers)
  通常他们在说明文件可以出现一个或多个,也可以一个不出现,这主要是视包的具体情况而定,有些包只有man而没有i18n或者头文件,那么我们在写说明文件的时候只需要根据实际情况就可以了,同时这也是一个灵活的命名方式,也就是手册后面写的可以不是man,可以是docs或者是其它,只要你想这么做,当然这就是一个分包名,所以你写在说明文件中的就必须有对应的实体分包存在。
  比如:
  手册:docs
  那么你的实体包中就必须有一个
  包名-版本-体系-docs-olive这样的一个文件。
  当然你可以把手册、文档以及资料都合并在docs这样的文件中,统称为docs也可以。

  我们为什么不把他们都合在一起?这样不是更容易做包吗?这么分这包有什么意义呢?
  这部分定义的作用就是为了能够让包管理器更加细粒度的控制安装的内容,以达到更好的可定制性,我们可以通过olive.conf来设置默认
需要安装的附属包,比如对于某个包我不想看任何文档,我只需要一个可以运行的程序就可以了,那么如果将man、docs、info设置成no,这样就不会安装这部分内容,从而减少了安装体积,当然如果你想要这些,那么把no换成yes就可以了,这样就可以更大程度上的满足不同要求的用户。

  除此之外,还有两个非常特殊的分包定义,它们是:配置(etc)和数据(data)。二者的处理方式上和上面提到的五种分包定义以及一般的分包有所不同,它们不受olive.conf控制,只按照默认规则安装,即:安装的时候将安装上,但如果是升级的时候将不会安装。
  一个潜规则:etc和data不要出现在安装类型中,应当只出现在附属包的描述中。

关于体系:
  实体包的定义中有体系这个部分,这部分的加入是为了能让包管理器自动根据不同的安装环境安装最适合的体系包,以达到性能上的最优化。
  体系由olive.conf中进行指定,并不是自动检测,这点需要注意。

体系规则:
  体系规则的定义由源中的march文件给出,我们来看一个例子,比如march中存在一条规则:
  i686:i686/i586/i486/i386
  那么如果在olive.conf中指定为i686的话,将在安装包的时候寻找i686对应的包,如果没有找到则自动寻找i586,依次类推,如果都没有找到则自动使用默认的体系包。
  默认的体系包的包名定义为:
  包名-版本[-分包名]-olive
  体系规则的建立,可以让系统能够保持在稳定的前提下使用最优化的二进制包,好象就如同专门为这台机器编译的系统一样。
  由于有体系规则包含到了包管理器中,则以憨牛包管理器安装的系统将自动处理体系问题,不再需要专门为某个体系发布的整个发行版。

未完待续……
发表于 2006-7-12 22:29:40 | 显示全部楼层
Many thanks for the instructions.

Btw, youbest, it seems the directory structure of Olive iso is quite strange, I do not quite understand why you organize it in such a way, can you spend some time to describe it in more details?

PS: I can't type Chinese words now, sorry!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-12 22:39:19 | 显示全部楼层
Post by d00m3d
Many thanks for the instructions.

Btw, youbest, it seems the directory structure of Olive iso is quite strange, I do not quite understand why you organize it in such a way, can you spend some time to describe it in more details?

PS: I can't type Chinese words now, sorry!


我现在不清楚你说的目录结构是安装CD上的还是最后生成的系统的目录结构。

最后生成的系统应当首先用install.sh脚本来建立基本的目录结构然后再进行安装,而install.sh中的脚本是按照LFS中的目录结构建立的。

如果你指的是CD中的目录结构,不知道是哪里比较奇怪?
回复 支持 反对

使用道具 举报

发表于 2006-7-13 07:39:31 | 显示全部楼层
不好意思,昨晚在用 LiveCD 干活,没有把情况说清楚

虽然还未安装,但我对安装後的目录结构毫不怀疑,我指的是 iso 本身的目录结构,看上去有点奇怪,不大明白为何要这样安排,希望你能解释一下:

1. 为何根目录下要建几个 tarball 如 etc、home、var、root 等再由 linuxrc 在启动时加载?
2. 软件目录下的结构也不理解,好像重覆了,但又貌似是刻意编排的

0.1-alpha 体积不大,因此还有很多扩充的空间,另有少许建议:

1. 启动後的 shell 宜保留(或加入)最少的基本操作,如挂载分区及编译环境,让有需要的用户去自行编译突然需要的软件,比如无线网卡的驱动,这样用户还有一线希望可以用无线上网或作其他用途,这方面 LFS 的 LiveCD 及 SourceMage 的安装 CD 都有这样的考量

2. 或许可以像 LFS 的 LiveCD,可以让用户自行订制 CD 内容

PS:新玩意有很多东西未被发掘,继续探索中。。。
回复 支持 反对

使用道具 举报

发表于 2006-7-13 13:12:13 | 显示全部楼层
请释出source
回复 支持 反对

使用道具 举报

发表于 2006-7-13 22:33:34 | 显示全部楼层
Post by demonlj
请释出source

我想等确定了源码的授权方式(license),再公开代码吧。。不急在这一天两天的,不知道兄弟测试有什么结果没。。或者有什么建议么?

谢谢你的支持。 :thank
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-13 22:35:28 | 显示全部楼层
Post by d00m3d


1. 为何根目录下要建几个 tarball 如 etc、home、var、root 等再由 linuxrc 在启动时加载?
这个LiveCD是从我以前制作的一款带KDE的LiveCD改进过来的,所以也就直接继承了原来的设计,这几个bz2文件确实是在启动时展开的.
Post by d00m3d

2. 软件目录下的结构也不理解,好像重覆了,但又貌似是刻意编排的
并没有重复的内容,只是有一些链接而已,目的是为了方便启动过程中的加载,但基本符合一般的结构(可能缺少部分目录,但都是LiveCD中未用上的)
Post by d00m3d

1. 启动後的 shell 宜保留(或加入)最少的基本操作,如挂载分区及编译环境,让有需要的用户去自行编译突然需要的软件,比如无线网卡的驱动,这样用户还有一线希望可以用无线上网或作其他用途,这方面 LFS 的 LiveCD 及 SourceMage 的安装 CD 都有这样的考量
你的想法跟我不谋而合,但是你也看到了,开始找不到空间,只有一些比较小的空间,所以目前LiveCD中只包含了在安装中必要的一些文件,如果你查看文件情况就可以看到Olive文件占用了200M的,剩下的60M是LiveCD系统的,另一个原因是目前的包管理器还只支持本地方式的安装,所以加入一些连网用的包对于这个以安装为目的的CD没什么大用处.
Post by d00m3d

2. 或许可以像 LFS 的 LiveCD,可以让用户自行订制 CD 内容
这点在我的设计中有特别的方法来实现.
不过如果想手工修改LiveCD也很方便,只需要在SYSTEM中加入自己的东西就可以.SYSTEM是一个用squashfs的压缩文件系统文件.
回复 支持 反对

使用道具 举报

发表于 2006-7-14 08:07:10 | 显示全部楼层
我習慣是先了解新系統的結構及運作模式才繼續下一步的,現在明解,努力探索中。。。
回复 支持 反对

使用道具 举报

发表于 2006-7-28 07:41:00 | 显示全部楼层
对了,憨牛管理器,最好有一个英文名字,不能用 hanniu 来命名吧?

这两天要重新杀回来olive。。最近都顾着学Perl,都没看Olive呢。(。。youbest兄辛苦了!
回复 支持 反对

使用道具 举报

发表于 2006-7-29 19:59:29 | 显示全部楼层
最近 CLFS 屢戰屢敗,屢敗屢戰,前前後後不下十次,雖然是自討苦吃,但每次變陣及改動都令我啟發到一點東西,忽然想起去考慮到底用戶真正需要什麼?

很明顯,大家知到單純最基本的 LFS 系統是不足的,必需繼續 BLFS 的步伐才行,那麼問題便出現了,Olive 現在的憨牛管理器能否延伸至 BLFS?很明白要延伸至 BLFS 並不容易,但是若果不能的話便多少有點質疑其實用性了,因為基本系統同樣可以由 ALFS 做出來,而 ALFS 出來的系統只是中文環境未加工好而矣

我還沒有很仔細研究憨牛管理器,貌似是要人去維護那些包之間的依賴關係的,我只擔心的是維護工作並非你我或這裡一眾 LFS 愛好者能完成的,youbest 能否說詳細一點憨牛的運作原理?

很抱歉,說得比較反面,在下只希望透明度能提高一點,讓大家多加參與,讓 Olive 做得更好
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表