dgy18787 发表于 2011-5-31 16:07:04

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

http://bbs.ylmf.net/forum.php?mod=viewthread&tid=1884122&extra=page%3D1
看起来好象是某一种软件包模式的派生

jiangtao9999 发表于 2011-5-31 17:03:42

和 Gentoo 的风格比较像。不过他现在这个包系统完全自己重头作一点都不难。

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

EAPI="2"

inherit eutils flag-o-matic

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

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

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

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

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

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

      use static && append-ldflags -static
      econf \
                --disable-rpath \
                $(use_with ssl) $(use_enable ssl opie) $(use_enable ssl digest) \
                $(use_enable idn iri) \
                $(use_enable ipv6) \
                $(use_enable nls) \
                $(use ssl && use_enable ntlm) \
                $(use_enable debug)
}

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

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

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

pkg_preinst() {
      ewarn "The /etc/wget/wgetrc file has been relocated to /etc/wgetrc"
      if [[ -e ${ROOT}/etc/wget/wgetrc ]] ; then
                if [[ -e ${ROOT}/etc/wgetrc ]] ; then
                        ewarn "You have both /etc/wget/wgetrc and /etc/wgetrc ... you should delete the former"
                else
                        einfo "Moving /etc/wget/wgetrc to /etc/wgetrc for you"
                        mv "${ROOT}"/etc/wget/wgetrc "${ROOT}"/etc/wgetrc
                        rmdir "${ROOT}"/etc/wget 2>/dev/null
                fi
      fi
}
jiangtao@localhost ~ $

jiangtao9999 发表于 2011-5-31 17:15:33

Gentoo 的依赖数据完全可以脱离数据库就能实现。很多东西都扔进了 /var/db/pkg 里面。只要注意依赖关系内容的规范就行了。

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

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

zy_sunshine 发表于 2011-5-31 19:03:07

其实要用XML给每个源码包规定统一的协议就好了..协议中是打包的命令,需要安装的文件..最后通过协议接口实现rpm deb 等等包的编译和安装文件的类型就能减少人工对每个包的spec描述。而且可以变得更加自动化。但是这套标准协议的实现和普及..很困难..

jiangtao9999 发表于 2011-5-31 23:02:33

xml 做信息文件不如 shell 脚本定义变量的方式。xml 解析需要第三方库或者自己写很乱的解释器。shell 脚本直接 source 一下数据就有了。

sejishikong 发表于 2011-5-31 23:41:34

感觉这套包管理方式没有什么特别的地方,不是太有必要啊,还不如原来olive那个包管理.
其实rpm/deb的包管理功能已经足够了,不明白为什么要另开一个包管理.而且还不是类似slax那种live方式的(其实我比较喜欢那种方式)

zy_sunshine 发表于 2011-6-1 10:11:23

自己做的东西,如果考虑不全面,最后吃苦的是自己。所以..嘿嘿,你看不出他们的工作人员有多苦,其实他们自己知道..

zy_sunshine 发表于 2011-6-1 10:12:31

原帖由 jiangtao9999 于 2011-5-31 23:02 发表 http://www.linuxfans.org/bbs/images/common/back.gif
xml 做信息文件不如 shell 脚本定义变量的方式。xml 解析需要第三方库或者自己写很乱的解释器。shell 脚本直接 source 一下数据就有了。
对的,用shell来定义也是不错的选择,所以这东西要统一标准..
其实对源码最了解的人还是软件发布者..

haulm 发表于 2011-6-1 11:11:41

原帖由 sejishikong 于 2011-5-31 23:41 发表 http://www.linuxfans.org/bbs/images/common/back.gif
感觉这套包管理方式没有什么特别的地方,不是太有必要啊,还不如原来olive那个包管理.
其实rpm/deb的包管理功能已经足够了,不明白为什么要另开一个包管理.而且还不是类似slax那种live方式的(其实我比较喜欢那种方式) ...
人肉编写的依赖包制度,等你出错时找 Bug 的机会也会更人肉一些。

jiangtao9999 发表于 2011-6-1 13:30:44

原帖由 haulm 于 2011-6-1 11:11 AM 发表 http://www.linuxfans.org/bbs/images/common/back.gif

人肉编写的依赖包制度,等你出错时找 Bug 的机会也会更人肉一些。
:mrgreen:
现在很多发行版都是人肉的。

fox_eagle2003 发表于 2011-6-3 16:01:54

主要是没有多少公司能有¥到
开发工具来完成这些事情工

fox_eagle2003 发表于 2011-6-7 14:29:03

haulm看到这里,是不是有什么灵感了?

haulm 发表于 2011-6-8 04:46:06

原帖由 fox_eagle2003 于 2011-6-3 16:01 发表 http://forum.linuxfans.org/images/common/back.gif
主要是没有多少公司能有¥到
开发工具来完成这些事情工
灵感没有,编译给我的感觉就是,人需要工具辅助工作,所以完全手工方式是不科学的。

jiangtao9999 发表于 2011-6-8 14:30:26

貌似现在根本就没有完全可以自动处理的。程序永远是被动执行而已。

sejishikong 发表于 2011-6-8 15:17:47

依赖不可能完全自动的.
页: [1] 2
查看完整版本: ylmf 自己的一套软件包方案 : ypk