[原]关于rpm打包的一个补充

   正如前面日志中写到的,我们在编写.spec脚本的时候,应该尽量使用对应操作系统平台的标准宏命令。但有些时候,标准的宏中定义的写法未必可以满足我们的要求,此时就需要给标准的宏添加参数。下面以maildrop这个套件为例说明。
一、举例
  maildrop是一个邮件投递代理(MDA)软件,其可搭配postfix实现过滤和强大的功能。maildrop的邮箱大小限额是用off_t来表示,而off_t在32平台上是32位有符号整数。所以最大只能为2^31次方。也就是最大2GB。如果要突破这个限制,需要在编译的时候增加下述的环境变量:

引用
CPPFLAGS=”-D_FILE_OFFSET_BITS=64″

二、获取可用的参数
  这里,我们先假设不知道在编译的时候可以使用那些参数。那您可以这样获得:

# cd maildrop-2.0.1
# ./configure –help

最后可以看到:

引用
Some influential environment variables:
 CC          C compiler command
 CFLAGS      C compiler flags
 LDFLAGS     linker flags, e.g. -L if you have libraries in a
             nonstandard directory  CPPFLAGS    C/C++ preprocessor flags, e.g. -I if you have
             headers in a nonstandard directory
 CPP         C preprocessor
 CXX         C++ compiler command
 CXXFLAGS    C++ compiler flags
 CXXCPP      C++ preprocessor
 F77         Fortran 77 compiler command
 FFLAGS      Fortran 77 compiler flags

三、修改.spec文件
原来的maildrop.spec文件内容如下:

引用
%setup -q
%configure –with-devel –enable-userdb –enable-maildirquota \
          –enable-syslog=1 –with-trashquota \
          –enable-restrict-trusted=0 \
          –enable-sendmail=/usr/sbin/sendmail

可以看到,它使用的就是标准的%configure宏。
先看看标准宏的定义:

vi /usr/lib/rpm/macros

引用
%configure \
 CFLAGS=”${CFLAGS:-%optflags}” ; export CFLAGS ; \
 CXXFLAGS=”${CXXFLAGS:-%optflags}” ; export CXXFLAGS ; \
 FFLAGS=”${FFLAGS:-%optflags}” ; export FFLAGS ; \
 ./configure –host=%{_host} –build=%{_build} \\\
       –target=%{_target_platform} \\\
       –program-prefix=%{?_program_prefix} \\\
       –prefix=%{_prefix} \\\
       –exec-prefix=%{_exec_prefix} \\\
       –bindir=%{_bindir} \\\
       –sbindir=%{_sbindir} \\\
       –sysconfdir=%{_sysconfdir} \\\
       –datadir=%{_datadir} \\\
       –includedir=%{_includedir} \\\
       –libdir=%{_libdir} \\\
       –libexecdir=%{_libexecdir} \\\
       –localstatedir=%{_localstatedir} \\\
       –sharedstatedir=%{_sharedstatedir} \\\
       –mandir=%{_mandir} \\\
       –infodir=%{_infodir}

标准宏中,是没有考虑到CPPFLAGS变量的。所以,修改的方法有两种:一是修改上面的标准宏,但这样会对其他不需要使用到该变量的rpm有影响;二是在.spec文件中使用。
修改maildrop.spec内容如下:

引用
%setup -q
CPPFLAGS=”${CPPFLAGS} -D_FILE_OFFSET_BITS=64″;export CPPFLAGS;
%configure –with-devel –enable-userdb –enable-maildirquota \
          –enable-syslog=1 –with-trashquota \
          –enable-restrict-trusted=0 \
          –enable-sendmail=/usr/sbin/sendmail

也就是说,把CPPFLAGS的定义放在%configure前面,并用export输出到其他子程序中。
※注意:由于一些不明的原因,对变量的定义时,建议把export单独拿出来,这只是习惯而已。
四、编译
经过上面的修改,在编译的时候就可以自动引用CPPFLAGS环境变量了:

# rpmbuild -bb maildrop.spec

输出:

引用
……
+ CPPFLAGS=-D_FILE_OFFSET_BITS=64
+ export CPPFLAGS
+ CFLAGS=’-O2 -g -pipe -m32 -march=i386 -mtune=pentium4′
+ export CFLAGS
+ CXXFLAGS=’-O2 -g -pipe -m32 -march=i386 -mtune=pentium4′
……

编译的时候,使用Ctrl+S可以暂停屏幕输出,方便查看设置是否正确。Ctrl+Q继续。

※2007-11-24 修改一处错误
原写为:

引用
CPPFLAGS=”-D_FILE_OFFSET_BITS=64″;export CPPFLAGS;

改为:

引用
CPPFLAGS=”${CPPFLAGS} -D_FILE_OFFSET_BITS=64″;export CPPFLAGS;

意思是,在加入新变量定义的同时,把原默认定义也一同继承过来。否则,会丢失原来默认定义的设置,造成严重的问题。对于其他的环境变量,建议也使用相同的做法。(除非你要摒弃原默认的所有定义)

个性化Linux发行版光盘之补充——XZ(LZMA算法)
使用Mock 实现跨平台跨发行版编译RPM
[转]rpm命令选项中文说明
创建VPS OS模板
RDAC的spec生成rpm脚本

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/113022.html

(0)
上一篇 2021年8月27日
下一篇 2021年8月27日

相关推荐

发表回复

登录后才能评论