Jun 4

[原]自己制作rpm软件包(2) 雷阵雨

linuxing , 14:56 , 基础知识 » RPM , 评论(2) , 引用(0) , 阅读(55138) , Via 本站原创 | |

五、其他
1、扩展
虽然上面的范例很简陋,而且缺少%build部分,但实际上只要记住两点:
a)就是%build和%install的过程中,都必须把编译和安装的文件定义到“虚拟根目录”中。
引用
%build
make -f admin/Makefile.common cvs
./configure --prefix=%{_prefix} --enable-final --disable-debug \
--with-extra-includes=%{_includedir}/freetype2 --includedir=%{_includedir}
make
%install
rm -fr $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install
cp -r $RPM_BUILD_ROOT%{_datadir}/apps/kolourpaint/icons/hicolor/* $RPM_BUILD_ROOT%{_datadir}/icons/crystalsvg/

b)就是%file中必须明白,用的是相对目录
引用
%files
%defattr(-,root,root)
%{_bindir}
%{_libdir}
%{_datadir}
%exclude %{_libdir}/debug

如果把
引用
%files
%defattr(-,root,root)
%{_bindir}

写成
引用
%files
%defattr(-,root,root)
/usr/bin

则打包的会是根目录下的/usr/bin中所有的文件。
2、一些rpm相关信息
rpm软件包系统的标准分组:/usr/share/doc/rpm-4.3.3/GROUPS
各种宏定义: /usr/lib/rpm/macros
已经安装的rpm包数据库: /var/lib/rpm
如果要避免生成debuginfo包:这个是默认会生成的rpm包。则可以使用下面的命令:
echo '%debug_package %{nil}' >> ~/.rpmmacros

如果rpm包已经做好,但在安装的时候想修改默认路径,则可以:
rpm -ivh --prefix=/opt/usr xxx.rpm

又或者同时修改多个路径:
rpm xxx.rpm --relocate=/usr=/opt/usr --relocate=/etc=/usr/etc

3、制作补丁
详细看参考:[原]使用diff同patch工具
4、如何编写%file段
由于必须在%file中包括所有套件中的文件,所以,我们需要清楚编译完的套件到底包括那些文件?
常见的做法是,人工模拟一次编译的过程:
./configrue --prefix=/usr/local/xxx
make
make DESTDIR=/usr/local/xxx install

make prefix=/usr/local/xxx install

这样,整个套件的内容就会被放到/usr/local/xxx中,可根据情况编写%file和%exclude段。
※当然,这个只能对源码按GNU方式编写,并使用GNU autotool创建的包有效,若自定义Makefile则不能一概而论。
5、关于rpm中的执行脚本
如果正在制作的rpm包是准备作为放到系统安装光盘中的话,则需要考虑rpm中定义的脚本是否有问题。由于系统在安装的时候只是依赖于一个小环境进行,而该环境与实际安装完的环境有很大的区别,所以,大部分的脚本在该安装环境中都是无法生效,甚至会带来麻烦的。
所以,对于这样的,需要放到安装光盘中的套件,不加入执行脚本是较佳的方法。
另外,为提供操作中可参考的信息,rpm还提供了一种信号机制:不同的操作会返回不同的信息,并放到默认变量$1中。
引用
0代表卸载、1代表安装、2代表升级

可这样使用:
引用
%postun
if [ "$1" = "0" ]; then
/sbin/ldconfig
fi

六、参考文献:
1. http://www-900.ibm.com/developerWorks/cn/linux/management/package/rpm/part1/index.shtml[/url]
2. http://www-900.ibm.com/developerWorks/cn/linux/management/package/rpm/part2/index.shtml
3. http://www-900.ibm.com/developerWorks/cn/linux/management/package/rpm/part3/index.shtml
4. /usr/share/doc/rpm-4.3.2/
5. http://www.rpm.org/RPM-HOWTO/build.html#SCRIPTS
6. http://www.linuxfans.org/nuke/modules.php?name=Forums&file=printview&t=86980&start=0

※2007-11-28 补充%setup和%patch可用参数的介绍
内文分页: [1] [2] [3]
Tags: ,
hover
2008/06/28 10:33
请教前辈:

     源包:pptpd-1.3.1.tar.gz
     补丁:proftpd-1.3.1.patch.gz
编译源码打补丁的方法:tar xzvf  pptpd-1.3.1.tar.gz  ;gzip -d proftpd-1.3.1.patch.gz;patch -p0  < proftpd-1.3.1.patch

proftpd.spec中该如何写上面打补丁的过程?谢谢!

ps:我用%patch -p0 却不行!
linuxing 回复于 2008/07/09 10:06
在上面定义Patch名称,然后下面使用%patch01 -p0 -b等指定即可。
虚心求教
2008/06/24 12:40
%setup -n %{name}-%{version} 把源码包解压并放好
通常是从/usr/src/asianux/SOURCES里的包解压到/usr/src/asianux/BUILD/%{name}-%{version}中。
一般用%setup -c就可以了,但有两种情况:一就是同时编译多个源码包,

怎么指定  谢谢
linuxing 回复于 2008/06/25 16:09
%setup -n newdir 将软件包解压在newdir目录。
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]