CentOS中怎么制作php的rpm包(centos,php,rpm,开发技术)

时间:2024-04-29 10:25:15 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :
CentOS中怎么制作php的rpm包

安装rpm-build

[root@linuxprobeSOURCES]#yum-yinstallrpm-build

建立工作车间目录

[root@linuxprobeSOURCES]#vim~/.rpmmacros%_topdir/root/rpmbuild[root@linuxprobeSOURCES]#mkdir-pv~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

在redhat下,rpm包的默认制作路径在/usr/src/redhat下,但CentOS并没有该目录,因此,我们不得不自定义工作目录,这其中包含了6个目录(要求全部大写):

BUILD:源代码解压以后放的位置RPMS:制作完成后的rpm包存放目录,为特定平台指定子目录(x86_64)SOURCES:收集的源文件,源材料,补丁文件等存放位置SPECS:存放spec文件,作为制作rpm包的领岗文件,以rpm名.specSRPMS:src格式的rpm包位置,既然是src格式的包,就没有平台的概念了BuiltRoot:假根,使用install临时安装到这个目录,把这个目录当作根来用的,所以在这个目录下的目录文件,才是真正的目录文件。当打包完成后,在清理阶段,这个目录将被删除[root@linuxprobeSOURCES]#rpmbuild--showrc|greptopdir#工作车间目录:_topdir/root/rpmbuild-14:_builddir%{_topdir}/BUILD-14:_buildrootdir%{_topdir}/BUILDROOT-14:_rpmdir%{_topdir}/RPMS-14:_sourcedir%{_topdir}/SOURCES-14:_specdir%{_topdir}/SPECS-14:_srcrpmdir%{_topdir}/SRPMS-14:_topdir/root/rpmbuild

rpmbuild –showrc显示所有的宏,以下划线开头,一个下划线:定义环境的使用情况,二个下划线:通常定义的是命令,为什么要定义宏,因为不同的系统,命令的存放位置可能不同,所以通过宏的定义找到命令的真正存放位置

收集源码文件脚本文件

[root@linuxprobeSOURCES]#pwd/root/rpmbuild/SOURCES[root@linuxprobeSOURCES]#lsphp-5.4.45.tar.gz

编写SPEC文件

[root@linuxprobeSPEC]#pwd/root/rpmbuild/SOURCES[root@linuxprobeSPEC]#vimphp.spec%define_userwww%define_groupwww%define_prefix/usr/local/phpName:php#软件包名称Version:5.4.45#版本号(不能使用-)Release:1%{?dist}#release号,对应下面的changelog,如php-5.4.45-1.el6.x86_64.rpmSummary:PHPisaserver-sidescriptinglanguageforcreatingdynamicWebpages#简要描述信息,最好不要超过50个字符,如要详述,使用下面的%descriptionGroup:Development/Languages#要全用这里面的一个组:less/usr/share/doc/rpm-version/GROUPSLicense:GPLv2#软件授权方式URL:http://www.php.net#源码相关网站Packager:yeho#打包人的信息Vendor:OneinStack#发行商或打包组织的信息Source0:%{name}-%{version}.tar.gz#源代码包,可以带多个用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用BuildRoot:%_topdir/BUILDROOT#安装或编译时使用的“虚拟目录”Requires:libmcryptRequires:mhashRequires:mcryptRequires:libiconv#定义php依赖的包,需要yum安装(此处使用epel源)%description#软件包详述PHPisawidely-usedgeneral-purposescriptinglanguagethatisespeciallysuitedforWebdevelopmentandcanbeembeddedintoHTML.%prep#软件编译之前的处理,如解压%setup-q#这个宏的作用静默模式解压并cd%build#开始编译软件%configure--prefix=%{_prefix}--with-config-file-path=%{_prefix}/etc\--with-fpm-user=%{_user}--with-fpm-group=%{_group}--enable-fpm--enable-fileinfo\--with-mysql=mysqlnd--with-mysqli=mysqlnd--with-pdo-mysql=mysqlnd\--with-iconv-dir=/usr/local--with-freetype-dir--with-jpeg-dir--with-png-dir--with-zlib\--with-libxml-dir=/usr--enable-xml--disable-rpath--enable-bcmath--enable-shmop--enable-exif\--enable-sysvsem--enable-inline-optimization--with-curl--enable-mbregex--enable-inline-optimization\--enable-mbstring--with-mcrypt--with-gd--enable-gd-native-ttf--with-openssl\--with-mhash--enable-pcntl--enable-sockets--with-xmlrpc--enable-ftp--enable-calendar\--with-gettext--enable-zip--enable-soap--disable-ipv6--disable-debugmakeZEND_EXTRA_LIBS='-liconv'%{?_smp_mflags}#%{?_smp_mflags}的意思是:如果就多处理器的话make时并行编译%install#开始安装软件,如makeinstallrm-rf%{buildroot}makeINSTALL_ROOT=%{buildroot}installrm-rf%{buildroot}/{.channels,.depdb,.depdblock,.filemap,.lock,.registry}%{__install}-p-D-m0755sapi/fpm/init.d.php-fpm%{buildroot}/etc/init.d/php-fpm%{__install}-p-D-m0644php.ini-production%{buildroot}/%{_prefix}/etc/php.ini#rpm安装前执行的脚本%preecho'/usr/local/lib'>/etc/ld.so.conf.d/local.conf/sbin/ldconfigif[$1==1-a-z"`grep^%{_user}/etc/passwd`"];then#$1有3个值,代表动作,安装类型,处理类型groupadd%{_group}-g10000#1:表示安装useradd-u10000-g10000-m%{_user}#2:表示升级fi#0:表示卸载#rpm安装后执行的脚本%postif[$1==1];then[-z"`grep^'exportPATH='/etc/profile`"]&&echo"exportPATH=%{_prefix}/bin:\$PATH">>/etc/profile[-n"`grep^'exportPATH='/etc/profile`"-a-z"`grep'%{_prefix}'/etc/profile`"]&&sed-i"s@^exportPATH=\(.*\)@exportPATH=%{_prefix}/bin:\1@"/etc/profile/sbin/chkconfig--addphp-fpm/sbin/chkconfigphp-fpmonMem=`free-m|awk'/Mem:/{print$2}'`#下面主要是参数的优化if[$Mem-le640];thenMem_level=512MMemory_limit=64elif[$Mem-gt640-a$Mem-le1280];thenMem_level=1GMemory_limit=128elif[$Mem-gt1280-a$Mem-le2500];thenMem_level=2GMemory_limit=192elif[$Mem-gt2500-a$Mem-le3500];thenMem_level=3GMemory_limit=256elif[$Mem-gt3500-a$Mem-le4500];thenMem_level=4GMemory_limit=320elif[$Mem-gt4500-a$Mem-le8000];thenMem_level=6GMemory_limit=384elif[$Mem-gt8000];thenMem_level=8GMemory_limit=448fised-i"s@^memory_limit.*@memory_limit=${Memory_limit}M@"%{_prefix}/etc/php.inised-i's@^output_buffering=@output_buffering=On\noutput_buffering=@'%{_prefix}/etc/php.inised-i's@^;cgi.fix_pathinfo.*@cgi.fix_pathinfo=0@'%{_prefix}/etc/php.inised-i's@^short_open_tag=Off@short_open_tag=On@'%{_prefix}/etc/php.inised-i's@^expose_php=On@expose_php=Off@'%{_prefix}/etc/php.inised-i's@^request_order.*@request_order="CGP"@'%{_prefix}/etc/php.inised-i's@^;date.timezone.*@date.timezone=Asia/Shanghai@'%{_prefix}/etc/php.inised-i's@^post_max_size.*@post_max_size=50M@'%{_prefix}/etc/php.inised-i's@^upload_max_filesize.*@upload_max_filesize=50M@'%{_prefix}/etc/php.inised-i's@^;upload_tmp_dir.*@upload_tmp_dir=/tmp@'%{_prefix}/etc/php.inised-i's@^max_execution_time.*@max_execution_time=5@'%{_prefix}/etc/php.inised-i's@^disable_functions.*@disable_functions=passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,popen@'%{_prefix}/etc/php.inised-i's@^session.cookie_httponly.*@session.cookie_httponly=1@'%{_prefix}/etc/php.inised-i's@^mysqlnd.collect_memory_statistics.*@mysqlnd.collect_memory_statistics=On@'%{_prefix}/etc/php.inicat>%{_prefix}/etc/php-fpm.conf&1/sbin/chkconfig--delphp-fpmif[-e'/etc/profile.d/custom_profile_new.sh'];thensed-i's@%{_prefix}/bin:@@'/etc/profile.d/custom_profile_new.shelsesed-i's@%{_prefix}/bin:@@'/etc/profilefifi#%postunrpm卸载后执行的脚本%clean#clean的主要作用就是删除BUILDrm-rf%{buildroot}%files#指定哪些文件需要被打包,如/usr/local/php%defattr(-,root,root,-)%{_prefix}%attr(0755,root,root)/etc/init.d/php-fpm%changelog#日志改变段,这一段主要描述软件的开发记录*SatOct242015yeho5.4.45-1-Initialversion

php-redis.spec实例

[root@linuxprobeSOURCES]#pwd/root/rpmbuild/SOURCES[root@linuxprobeSOURCES]#lsredis-2.2.7.tgz[root@linuxprobeSOURCES]#cd../SPEC[root@linuxprobeSPEC]#vimphp-redis.spec%globalphp_extdir%(/usr/local/php/bin/php-config--extension-dir2>/dev/null||echo"undefined")Name:php-redisVersion:2.2.7Release:1%{?dist}Summary:ThephpredisextensionprovidesanAPIforcommunicatingwiththeRediskey-valuestore.Group:Development/LanguagesLicense:PHPURL:http://pecl.php.net/package/redisSource0:redis-%{version}.tgzBuildRoot:%_topdir/BUILDROOTRequires:phpBuildRequires:php>=5.4.40%descriptionThephpredisextensionprovidesanAPIforcommunicatingwiththeRediskey-valuestore.%prep%setup-q-nredis-%{version}%build/usr/local/php/bin/phpize%configuremake%{?_smp_mflags}%installrm-rf%{buildroot}mkdir-p%{buildroot}%{php_extdir}makeinstallINSTALL_ROOT=%{buildroot}find%{buildroot}-nameredis.so-exec/bin/mv{}%{buildroot}%{php_extdir}\;#rpm安装后执行的脚本%postif[$1==1];then[-z"`grep'^extension_dir'/usr/local/php/etc/php.ini`"]&&echo"extension_dir=\"%{php_extdir}\"">>/usr/local/php/etc/php.inised-i's@^extension_dir\(.*\)@extension_dir\1\nextension="redis.so"@'/usr/local/php/etc/php.inifi#rpm卸载前执行的脚本%preunif[$1==0];then/etc/init.d/php-fpmstop>/dev/null2>&1sed-i'/redis.so/d'/usr/local/php/etc/php.inifi#%postunrpm卸载后执行的脚本if[$1==0];then/etc/init.d/php-fpmstart>/dev/null2>&1fi%cleanrm-rf%{buildroot}%files%defattr(-,root,root,-)%{php_extdir}/redis.so%changelog*SatOct242015yeho2.2.7-1-Initialversion

编译rpm包

[root@linuxprobeSPEC]#rpmbuild-bbphp.spec制作php的rpm二进制包[root@linuxprobeSPEC]#rpmbuild-bbphp-redis.spec制作php-redis的rpm二进制包
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:CentOS中怎么制作php的rpm包的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Linux中swapoff命令有什么用下一篇:

8 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18