CentOS中怎么制作php的rpm包
CentOS中怎么制作php的rpm包
本文小编为大家详细介绍“CentOS中怎么制作php的rpm包”,内容详细,步骤清晰,细节处理妥当,希望这篇“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二进制包
读到这里,这篇“CentOS中怎么制作php的rpm包”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
php字符串增加1如何实现
php字符串增加1如何实现这篇“php字符串增加1如何实现”文章的...
-
php如何判断字符串是否有中文
-
php如何实现字符串去掉头尾
-
php字符串的组成是什么
php字符串的组成是什么这篇文章主要讲解了“php字符串的组成是什...
-
php如何让Swoole/Pool进程池实现Redis持久连接
php如何让Swoole/Pool进程池实现Redis持久连接本篇...
-
php字符串长度不一致如何解决
-
php时区不正确如何解决
-
php+fread()乱码如何解决
php+fread()乱码如何解决本篇内容介绍了“php+frea...
-
php explode报错如何解决
-
linux Centos如何安装PHP7
linuxCentos如何安装PHP7今天小编给大家分享一下li...