中国Linux公社论坛's Archiver

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

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

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

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

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

他这个没见到编译控制部分的东西,只有二进制封装部分。那么自己手工编译并且把一堆文件压缩起来问题不大。安装时数据库的工作量要看具体功能了。打包生成器提取包设置文件描述信息以及文件列表什么的输出一个描述就行了。他这个 shell 脚本用 bash 来 source 一下再分地方运行很常用的。
楼主要是有心情,你会 C 就可以写一个的。而且人工工作越多。这个包管理系统功能越少。尤其是没有编译过程控制部分(其实有也没什么)。
这最主要的是依赖关系控制如何实现的。如果纯用人肉编写依赖信息,基本没难度,依赖纯人肉编写设计出数据库也就设计出了查询管理方式。[code]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 ~ $
[/code]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[quote]原帖由 [i]haulm[/i] 于 2011-6-1 11:11 AM 发表 [url=http://www.linuxfans.org/bbs/redirect.php?goto=findpost&pid=4946540&ptid=195460][img]http://www.linuxfans.org/bbs/images/common/back.gif[/img][/url]

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

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

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

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

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

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

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

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

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

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

依赖不可能完全自动的.

jiangtao9999 发表于 2011-6-8 17:41

sejishikong ,ML 自己设计一个包管理系统如何?哪怕拿 rpm 来改也行啊……
:?

dgy18787 发表于 2011-6-8 18:30

其实我感觉rpm也挺好的。现在如果故意把自己分离出去反而不好生存了。

jiangtao9999 发表于 2011-6-8 20:54

:?
RPM 的 spec 看着有点乱……

dgy18787 发表于 2011-6-8 23:01

自己出套自解压安装程序……安装的时候自动检测对应目录里面存不存在依赖的相关文件……我感觉这样的安装包模式好像还不错

sejishikong 发表于 2011-6-9 10:00

[quote]原帖由 [i]jiangtao9999[/i] 于 2011-6-8 17:41 发表 [url=http://forum.linuxfans.org/redirect.php?goto=findpost&pid=4946815&ptid=195460][img]http://forum.linuxfans.org/images/common/back.gif[/img][/url]
sejishikong ,ML 自己设计一个包管理系统如何?哪怕拿 rpm 来改也行啊……
:? [/quote]
其实到不用自己设计一个,现在 rpm 应该是够用的。rpm 在fc/suse/mandriva上其实已经不同了。
要是 spec 能遵守标准来写,很多其它发行版(比如gentoo)能实现的,rpm都能实现。

自解压的好像有这样的打包程序,不过少了行,多了会不方便的。

zy_sunshine 发表于 2011-6-9 10:06

[quote]原帖由 [i]sejishikong[/i] 于 2011-6-9 10:00 发表 [url=http://forum.linuxfans.org/redirect.php?goto=findpost&pid=4946846&ptid=195460][img]http://forum.linuxfans.org/images/common/back.gif[/img][/url]

其实到不用自己设计一个,现在 rpm 应该是够用的。rpm 在fc/suse/mandriva上其实已经不同了。
要是 spec 能遵守标准来写,很多其它发行版(比如gentoo)能实现的,rpm都能实现。

自解压的好像有这样的打包程序,不过少了行,多了 ... [/quote]
se 我有这么个想法,咱们可以搞一套标准规则,然后做一个中间 spec 的格式转换,这样就可以转换成各种打包的 spec 规范了。
去掉某些晦涩的,针对于某一个包管理器的spec技巧,全部都统一成规范格式..(规范格式即为每个包管理系统所共有的规则)
这样的好处在于,我们可以轻松的把当前包管理系统转换成任意的例如 rpm deb ebuild..还可以作为之后我们构建自己的包管理系统的基础。

sejishikong 发表于 2011-6-9 10:30

我对deb/ebuild/aur都不熟悉啊。
现在也没整理出spec到底那些地方需要规范。
大家提提建议。rpm和其它包管理相比,那些地方需要改的。

jiangtao9999 发表于 2011-6-9 19:59

[quote]原帖由 [i]zy_sunshine[/i] 于 2011-6-9 10:06 AM 发表 [url=http://forum.linuxfans.org/redirect.php?goto=findpost&pid=4946847&ptid=195460][img]http://forum.linuxfans.org/images/common/back.gif[/img][/url]

se 我有这么个想法,咱们可以搞一套标准规则,然后做一个中间 spec 的格式转换,这样就可以转换成各种打包的 spec 规范了。
去掉某些晦涩的,针对于某一个包管理器的spec技巧,全部都统一成规范格式..(规范格式即为每个包管理 ... [/quote]
恩,我的想法差不多。如果自己不能完全做一个包系统,那就把 rpm 在封装一次,提供一个外壳环境,哪怕完全人肉提供一个标准也好很多。

不过我觉得最有用的是类似 gentoo 的 world 文件,里面储存所有手动安装的内容。卸载某个程序后,可以通过这个 world 整理出一来手动安装和依赖安装的系统包数据。
也就是说,安装 A 包时,B 包被依赖后同时安装。rpm 卸载 A 时不会卸载 B 的。但通过这个 world 文件,就可以重新通过依赖关系整理出 B 包已经没有被依赖,可以卸载了。

之后还有就是全部 rpm 进行统一整理,分类出来,比如 KDE ,每一个版本都会总,设置一个 kde-meta 的空包进行依赖,之后把这个 kde-meta 放进 world 文件。以此类推,整个系统分成几个独立的 meta 包被依赖后一起扔进 world 里面来进行版本控制。

我做 rpm 包管理的网站也就是为了这个目的而设计的,但 php 的功能实现太难了。
我在考虑重写了,以前的都放弃。这东西最好是写成本地程序,直接能操作 yum 的数据库文件是最好的。

sejishikong 发表于 2011-6-9 22:42

[quote]原帖由 [i]jiangtao9999[/i] 于 2011-6-9 19:59 发表 [url=http://forum.linuxfans.org/redirect.php?goto=findpost&pid=4946863&ptid=195460][img]http://forum.linuxfans.org/images/common/back.gif[/img][/url]

恩,我的想法差不多。如果自己不能完全做一个包系统,那就把 rpm 在封装一次,提供一个外壳环境,哪怕完全人肉提供一个标准也好很多。

不过我觉得最有用的是类似 gentoo 的 world 文件,里面储存所有手动安装的内容。卸载某 ... [/quote]
yum好像能实现你说的这个,或者通过调用rpm本身的查询也可以.

jiangtao9999 发表于 2011-6-10 08:48

[quote]原帖由 [i]sejishikong[/i] 于 2011-6-9 10:42 PM 发表 [url=http://forum.linuxfans.org/redirect.php?goto=findpost&pid=4946867&ptid=195460][img]http://forum.linuxfans.org/images/common/back.gif[/img][/url]

yum好像能实现你说的这个,或者通过调用rpm本身的查询也可以. [/quote]
yum 调用我要的是调用 yum 服务器端提供的完整数据库。rpm 只有本地已经安装的数据库。yum 调用起来貌似比较麻烦啊……

sejishikong 发表于 2011-6-10 10:34

yum可以分组安装,好像就和你说的这个有点儿类似。

zy_sunshine 发表于 2011-6-10 13:13

[quote]原帖由 [i]sejishikong[/i] 于 2011-6-9 10:30 发表 [url=http://forum.linuxfans.org/redirect.php?goto=findpost&pid=4946848&ptid=195460][img]http://forum.linuxfans.org/images/common/back.gif[/img][/url]
我对deb/ebuild/aur都不熟悉啊。
现在也没整理出spec到底那些地方需要规范。
大家提提建议。rpm和其它包管理相比,那些地方需要改的。 [/quote]
1、2、我经常用其他版本的包管理器,但是对其他包管理器的spec文件也是不太熟悉,所以这需要大家来一起规范。
3、不是说rpm需要更改,而是我们需要描述一个不依赖任何一个包管理器的协议式的文件。这个协议式文件暂且代号MGCspec吧,具体的实现需要某一个包管理器去实现。
我们不写包管理器,但是要规范包管理器的spec书写. 因为spec的精华就在于包的管理策略

4、比如我们的包管理器需要 name source patch,包之间的常用依赖有依赖和被依赖,有安装前的操作(pre script),有安装后的操作(post script),有卸载时相关的操作(trigger)等等,取所有包管理器的长处,做一个通用的规定。

haulm 发表于 2011-6-10 21:09

其实我们创造的系统不是一个商业系统,所以它的组成是哪种格式并不是非常重要,我们并不是需要用格式来把自己和其它发行版本很严格地区分开来,更何况很多的工具软件使用 rpm 包方式进行安装。YLMF 可以开发系统开放自己的安装标准,并且指望别人为他们标准买单,可是 MGC 不行,我们没有可能去唯护自己的标准,更多时候我们做的都是在别人的标准下进行修正、平衡。
MGC 不是没有自己的特色,肯定是有的,当系统稳定并被大多数人所尊重和应用时,再来提标准吧,我们不是山寨,没有那么多的山寨首领的气质。

页: [1]

Powered by Discuz! Archiver 6.1.0F  © 2001-2007 Comsenz Inc.