QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8032|回复: 27

ylmf 自己的一套软件包方案 : ypk

[复制链接]
发表于 2011-5-31 16:07:04 | 显示全部楼层 |阅读模式
http://bbs.ylmf.net/forum.php?mo ... &extra=page%3D1
看起来好象是某一种软件包模式的派生
发表于 2011-5-31 17:03:42 | 显示全部楼层
和 Gentoo 的风格比较像。不过他现在这个包系统完全自己重头作一点都不难。

他这个没见到编译控制部分的东西,只有二进制封装部分。那么自己手工编译并且把一堆文件压缩起来问题不大。安装时数据库的工作量要看具体功能了。打包生成器提取包设置文件描述信息以及文件列表什么的输出一个描述就行了。他这个 shell 脚本用 bash 来 source 一下再分地方运行很常用的。
楼主要是有心情,你会 C 就可以写一个的。而且人工工作越多。这个包管理系统功能越少。尤其是没有编译过程控制部分(其实有也没什么)。
这最主要的是依赖关系控制如何实现的。如果纯用人肉编写依赖信息,基本没难度,依赖纯人肉编写设计出数据库也就设计出了查询管理方式。
  1. jiangtao@localhost ~ $ cat /usr/portage/net-misc/wget/wget-1.12-r3.ebuild
  2. # Copyright 1999-2011 Gentoo Foundation
  3. # Distributed under the terms of the GNU General Public License v2
  4. # $Header: /var/cvsroot/gentoo-x86/net-misc/wget/wget-1.12-r3.ebuild,v 1.9 2011/02/28 23:40:41 ranger Exp $

  5. EAPI="2"

  6. inherit eutils flag-o-matic

  7. DESCRIPTION="Network utility to retrieve files from the WWW"
  8. HOMEPAGE="http://www.gnu.org/software/wget/"
  9. SRC_URI="mirror://gnu/wget/${P}.tar.bz2"

  10. LICENSE="GPL-3"
  11. SLOT="0"
  12. KEYWORDS="alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~sparc-fbsd ~x86-fbsd"
  13. IUSE="debug idn ipv6 nls ntlm +ssl static"

  14. RDEPEND="idn? ( net-dns/libidn )
  15.         ssl? ( >=dev-libs/openssl-0.9.6b )"
  16. DEPEND="${RDEPEND}
  17.         nls? ( sys-devel/gettext )"

  18. pkg_setup() {
  19.         if ! use ssl && use ntlm ; then
  20.                 elog "USE=ntlm requires USE=ssl, so disabling ntlm support due to USE=-ssl"
  21.         fi
  22. }

  23. src_prepare() {
  24.         epatch "${FILESDIR}"/${PN}-1.12-linking.patch
  25.         epatch "${FILESDIR}"/${PN}-1.12-sni.patch #301312
  26.         epatch "${FILESDIR}"/${P}-debug-tests.patch #286173
  27.         epatch "${FILESDIR}"/${P}-CVE-2010-2252.patch #329941
  28.         epatch "${FILESDIR}"/${P}-sae.patch #344939
  29. }

  30. src_configure() {
  31.         # openssl-0.9.8 now builds with -pthread on the BSD's
  32.         use elibc_FreeBSD && use ssl && append-ldflags -pthread

  33.         use static && append-ldflags -static
  34.         econf \
  35.                 --disable-rpath \
  36.                 $(use_with ssl) $(use_enable ssl opie) $(use_enable ssl digest) \
  37.                 $(use_enable idn iri) \
  38.                 $(use_enable ipv6) \
  39.                 $(use_enable nls) \
  40.                 $(use ssl && use_enable ntlm) \
  41.                 $(use_enable debug)
  42. }

  43. src_install() {
  44.         emake DESTDIR="${D}" install || die
  45.         dodoc AUTHORS ChangeLog* MAILING-LIST NEWS README
  46.         dodoc doc/sample.wgetrc

  47.         use ipv6 && cat "${FILESDIR}"/wgetrc-ipv6 >> "${D}"/etc/wgetrc

  48.         sed -i \
  49.                 -e 's:/usr/local/etc:/etc:g' \
  50.                 "${D}"/etc/wgetrc \
  51.                 "${D}"/usr/share/man/man1/wget.1 \
  52.                 "${D}"/usr/share/info/wget.info
  53. }

  54. pkg_preinst() {
  55.         ewarn "The /etc/wget/wgetrc file has been relocated to /etc/wgetrc"
  56.         if [[ -e ${ROOT}/etc/wget/wgetrc ]] ; then
  57.                 if [[ -e ${ROOT}/etc/wgetrc ]] ; then
  58.                         ewarn "You have both /etc/wget/wgetrc and /etc/wgetrc ... you should delete the former"
  59.                 else
  60.                         einfo "Moving /etc/wget/wgetrc to /etc/wgetrc for you"
  61.                         mv "${ROOT}"/etc/wget/wgetrc "${ROOT}"/etc/wgetrc
  62.                         rmdir "${ROOT}"/etc/wget 2>/dev/null
  63.                 fi
  64.         fi
  65. }
  66. jiangtao@localhost ~ $
复制代码
回复

使用道具 举报

发表于 2011-5-31 17:15:33 | 显示全部楼层
Gentoo 的依赖数据完全可以脱离数据库就能实现。很多东西都扔进了 /var/db/pkg 里面。只要注意依赖关系内容的规范就行了。

Debian 听说也是这么弄的,依赖纯人肉。只要人肉够多,依赖就不是问题。RPM 有自己的依赖获取功能,会自动检索所有程序的函数库调用情况来确定依赖。所以 RPM 更适合懒人。RPM 的二进制包发布会相对容易。但 SRC 包还是需要编写依赖内容,这部分大家基本都要人肉。

其次就是分包,RPM 自动分包的配置文件也需要人肉编写的,只是一个配置文件可以实现从 src 到 bin 到分包的全套工作。
不知道 ylmf 的分包如何处理的。可能连分包也都要人肉一个一个的分开吧?这样软件包管理器的编写难度更低了。
回复

使用道具 举报

发表于 2011-5-31 19:03:07 | 显示全部楼层
其实要用XML给每个源码包规定统一的协议就好了..协议中是打包的命令,需要安装的文件..最后通过协议接口实现rpm deb 等等包的编译和安装文件的类型就能减少人工对每个包的spec描述。而且可以变得更加自动化。但是这套标准协议的实现和普及..很困难..
回复

使用道具 举报

发表于 2011-5-31 23:02:33 | 显示全部楼层
xml 做信息文件不如 shell 脚本定义变量的方式。xml 解析需要第三方库或者自己写很乱的解释器。shell 脚本直接 source 一下数据就有了。
回复

使用道具 举报

发表于 2011-5-31 23:41:34 | 显示全部楼层
感觉这套包管理方式没有什么特别的地方,不是太有必要啊,还不如原来olive那个包管理.
其实rpm/deb的包管理功能已经足够了,不明白为什么要另开一个包管理.而且还不是类似slax那种live方式的(其实我比较喜欢那种方式)
回复

使用道具 举报

发表于 2011-6-1 10:11:23 | 显示全部楼层
自己做的东西,如果考虑不全面,最后吃苦的是自己。所以..嘿嘿,你看不出他们的工作人员有多苦,其实他们自己知道..
回复

使用道具 举报

发表于 2011-6-1 10:12:31 | 显示全部楼层
原帖由 jiangtao9999 于 2011-5-31 23:02 发表
xml 做信息文件不如 shell 脚本定义变量的方式。xml 解析需要第三方库或者自己写很乱的解释器。shell 脚本直接 source 一下数据就有了。

对的,用shell来定义也是不错的选择,所以这东西要统一标准..
其实对源码最了解的人还是软件发布者..
回复

使用道具 举报

发表于 2011-6-1 11:11:41 | 显示全部楼层
原帖由 sejishikong 于 2011-5-31 23:41 发表
感觉这套包管理方式没有什么特别的地方,不是太有必要啊,还不如原来olive那个包管理.
其实rpm/deb的包管理功能已经足够了,不明白为什么要另开一个包管理.而且还不是类似slax那种live方式的(其实我比较喜欢那种方式) ...

人肉编写的依赖包制度,等你出错时找 Bug 的机会也会更人肉一些。
回复

使用道具 举报

发表于 2011-6-1 13:30:44 | 显示全部楼层
原帖由 haulm 于 2011-6-1 11:11 AM 发表

人肉编写的依赖包制度,等你出错时找 Bug 的机会也会更人肉一些。


现在很多发行版都是人肉的。
回复

使用道具 举报

发表于 2011-6-3 16:01:54 | 显示全部楼层
主要是没有多少公司能有¥到
开发工具来完成这些事情工
回复

使用道具 举报

发表于 2011-6-7 14:29:03 | 显示全部楼层
haulm看到这里,是不是有什么灵感了?
回复

使用道具 举报

发表于 2011-6-8 04:46:06 | 显示全部楼层
原帖由 fox_eagle2003 于 2011-6-3 16:01 发表
主要是没有多少公司能有¥到
开发工具来完成这些事情工

灵感没有,编译给我的感觉就是,人需要工具辅助工作,所以完全手工方式是不科学的。
回复

使用道具 举报

发表于 2011-6-8 14:30:26 | 显示全部楼层
貌似现在根本就没有完全可以自动处理的。程序永远是被动执行而已。
回复

使用道具 举报

发表于 2011-6-8 15:17:47 | 显示全部楼层
依赖不可能完全自动的.
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-4-24 12:06 , Processed in 0.165578 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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