nihui 发表于 2007-11-26 18:53:05

原帖由 mandrakechina 于 2007-11-26 13:38 发表 http://www.linuxfans.org/bbs/images/common/back.gif
其实RPM应该是可以直接写目录的。比如%_datadir/apps/amarok这样就可以把/usr/share/apps/amarok/下的全部文件都带上。

对于数据文件,%_datadir这样的,我一般都不写文件清单,因为这是人家程序自己的目录, ...

没想到大家说到了打包的事情:
是这样子的:目前我做的 kde4 包,只有 kdelibs4, kdepimlibs4, kdebase4-runtime, kdebase4 和 kdebase4-workspace 是采用列出全部文件路径的,其它的包都是采用 fundawang 的方式~

比如 kdegraphics4 这个包:

%files -n %{name}-devel
%defattr(-,root,root)
%doc COPYING COPYING.LIB
/opt/kde4/include/*
/opt/kde4/lib/*.so
%exclude /opt/kde4/lib/libspectreOkular.so

%files
%defattr(-,root,root)
%doc COPYING COPYING.LIB
/opt/kde4/bin
/opt/kde4/lib/libspectreOkular.so
/opt/kde4/lib/*.so.*
/opt/kde4/lib/kde4/*.so
/opt/kde4/lib/strigi/*.so
/opt/kde4/share

jiangtao9999 发表于 2007-11-26 19:12:30

:shock:
放到 opt 里面?!

sejishikong 发表于 2007-11-26 19:47:09

现阶段可能放/opt比较好。

mandrakechina 发表于 2007-11-26 20:36:02

nihui的文件分配是对的。但有几点点可以改进:

一般认为%_bindir/*是比较好的写法,因为/usr/bin是一个系统级的目录,这个目录只能由filesystem这个包拥有。虽然kde4被放到/opt/kde4,还是用bin/*比较好。同样的道理适用于%_datadir,/usr/share也是一个系统级目录,它不应该由非basesystem的包所拥有。

另外,直接写/lib是一个非常不好的习惯,应该使用%_lib,这样方便移至到其它架构(比如x86_64)系统上。

mandrakechina 发表于 2007-11-26 20:38:39

原帖由 jiangtao9999 于 2007-11-26 18:25 发表 http://www.linuxfans.org/bbs/images/common/back.gif
*.so 还是应该代的吧?这样如果 *.so.* 进行了版本变动,程序还是可以用 *.so 找到的。
我只能说事情不是你想的那个样子的,看看ldd的结果你就知道了。如果foo.so.1变成了foo.so.2,依赖foo.so.1的程序是必须重新编译的。因为so的名字实际上是写在文件里边的,而不仅仅是文件名那么简单。

KDE 发表于 2007-11-26 21:32:17

这里牵扯的东西太多,不是一句话能说请的,这些简化的写法并非由我提出,但是我看到了这样做的的好处,所以才采纳。有些概念和情况,参与此话题的当事人并非很清楚,需要另立专题说明。

sejishikong 发表于 2007-11-27 08:20:09

原帖由 jiangtao9999 于 2007-11-26 18:25 发表 http://www.linuxfans.org/bbs/images/common/back.gif
*.so 还是应该代的吧?这样如果 *.so.* 进行了版本变动,程序还是可以用 *.so 找到的。
*.so不应该带的,要带也只能-devel包带。不过总有一些例外,这个具体的包得具体看。而且不同版本的包也不一定一样。mgc的原则是尽量简化。

jiangtao9999 发表于 2007-11-27 09:24:57

原帖由 sejishikong 于 2007-11-27 08:20 AM 发表 http://www.linuxfans.org/bbs/images/common/back.gif

*.so不应该带的,要带也只能-devel包带。不过总有一些例外,这个具体的包得具体看。而且不同版本的包也不一定一样。mgc的原则是尽量简化。
每次更新库程序的包,就会导致依赖程序无法启动,找不到 *.so.* 。这个问题我遇到的很多很多。

我的解决办法其实很简单,做一个 ln ,把新版本 ln 到旧版本的名字上就行了。
很多库都是兼容旧版本的。一个 .so 文件,可以保证程序能找到这个库。

至于说库跨版本会导致不兼容,那是因为这个库设计错误,只有垃圾库,才会不考虑旧版本程序兼容的问题。
这种不考虑兼容问题的设计,限制了 linux 的应用。
windows 的 DirectX 都出到 10 了,他还是很完美的兼容旧版本的 DX。难道不应该学习么?

mandrakechina 发表于 2007-11-27 12:17:45

如果你用的是自己安装的软件,出了问题自然是自己解决。但一个发行版,作为一个整体,应该保证所有的包都能毫无任何问题的安装。

关于是不是应该带so的问题,取决于ldd的结果,如果ldd指向libfoo.so.3,那么libfoo.so就是多余的。在这种情况下,debian的拆包方式是值得借鉴的,他会把versioned的so单独放在一个包里,那么libfoo.so.3和libfoo.so.4可以同时安装,互相不冲突,旧软件的使用就不会有问题。

[ 本帖最后由 mandrakechina 于 2007-11-27 12:21 编辑 ]

nihui 发表于 2007-12-1 22:18:52

突然想到的:

原来 mgc 的 KDE4 还真不错~
目前有二进制包的 linux 其实不太多的。
相对于其他发行版本而言,mgc 的 KDE4 更加接近于自行编译出来的样子。:P

nihui 发表于 2007-12-2 14:34:00

两个星期之后,终于有中文包了~ :lol:

KDE 发表于 2007-12-3 01:03:28

辛苦了

haulm 发表于 2007-12-3 06:44:04

nihui兄给KDE4打了50多个包,偑服。
页: 1 [2]
查看完整版本: test against test again