QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: nihui

test against test again

[复制链接]
 楼主| 发表于 2007-11-26 18:53:05 | 显示全部楼层
原帖由 mandrakechina 于 2007-11-26 13:38 发表
其实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
回复

使用道具 举报

发表于 2007-11-26 19:12:30 | 显示全部楼层

放到 opt 里面?!
回复

使用道具 举报

发表于 2007-11-26 19:47:09 | 显示全部楼层
现阶段可能放/opt比较好。
回复

使用道具 举报

发表于 2007-11-26 20:36:02 | 显示全部楼层
nihui的文件分配是对的。但有几点点可以改进:

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

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

使用道具 举报

发表于 2007-11-26 20:38:39 | 显示全部楼层
原帖由 jiangtao9999 于 2007-11-26 18:25 发表
*.so 还是应该代的吧?这样如果 *.so.* 进行了版本变动,程序还是可以用 *.so 找到的。

我只能说事情不是你想的那个样子的,看看ldd的结果你就知道了。如果foo.so.1变成了foo.so.2,依赖foo.so.1的程序是必须重新编译的。因为so的名字实际上是写在文件里边的,而不仅仅是文件名那么简单。
回复

使用道具 举报

发表于 2007-11-26 21:32:17 | 显示全部楼层
这里牵扯的东西太多,不是一句话能说请的,这些简化的写法并非由我提出,但是我看到了这样做的的好处,所以才采纳。有些概念和情况,参与此话题的当事人并非很清楚,需要另立专题说明。
回复

使用道具 举报

发表于 2007-11-27 08:20:09 | 显示全部楼层
原帖由 jiangtao9999 于 2007-11-26 18:25 发表
*.so 还是应该代的吧?这样如果 *.so.* 进行了版本变动,程序还是可以用 *.so 找到的。

*.so不应该带的,要带也只能-devel包带。不过总有一些例外,这个具体的包得具体看。而且不同版本的包也不一定一样。mgc的原则是尽量简化。
回复

使用道具 举报

发表于 2007-11-27 09:24:57 | 显示全部楼层
原帖由 sejishikong 于 2007-11-27 08:20 AM 发表

*.so不应该带的,要带也只能-devel包带。不过总有一些例外,这个具体的包得具体看。而且不同版本的包也不一定一样。mgc的原则是尽量简化。

每次更新库程序的包,就会导致依赖程序无法启动,找不到 *.so.* 。这个问题我遇到的很多很多。

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

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

使用道具 举报

发表于 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 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2007-12-1 22:18:52 | 显示全部楼层
突然想到的:

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

使用道具 举报

 楼主| 发表于 2007-12-2 14:34:00 | 显示全部楼层
两个星期之后,终于有中文包了~
回复

使用道具 举报

发表于 2007-12-3 01:03:28 | 显示全部楼层
辛苦了
回复

使用道具 举报

发表于 2007-12-3 06:44:04 | 显示全部楼层
nihui兄给KDE4打了50多个包,偑服。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-24 00:39 , Processed in 0.048827 second(s), 12 queries .

© 2021 Powered by Discuz! X3.5.

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