CentOS中怎么制作php的rpm包
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本文小编为大家详细介绍"CentOS中怎么制作php的rpm包",内容详细,步骤清晰,细节处理妥当,希望这篇"CentOS中怎么制作php的rpm包"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入
千家信息网最后更新 2025年02月01日CentOS中怎么制作php的rpm包
本文小编为大家详细介绍"CentOS中怎么制作php的rpm包",内容详细,步骤清晰,细节处理妥当,希望这篇"CentOS中怎么制作php的rpm包"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
安装rpm-build
[root@linuxprobe SOURCES]# yum -y install rpm-build
建立工作车间目录
[root@linuxprobe SOURCES]# vim ~/.rpmmacros%_topdir /root/rpmbuild[root@linuxprobe SOURCES]# 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@linuxprobe SOURCES]# rpmbuild --showrc | grep topdir #工作车间目录:_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@linuxprobe SOURCES]# pwd/root/rpmbuild/SOURCES[root@linuxprobe SOURCES]# lsphp-5.4.45.tar.gz
编写SPEC文件
[root@linuxprobe SPEC]# pwd /root/rpmbuild/SOURCES[root@linuxprobe SPEC]# vim php.spec %define _user www%define _group www%define _prefix /usr/local/phpName: php #软件包名称Version: 5.4.45 #版本号(不能使用-)Release: 1%{?dist} #release号,对应下面的changelog,如php-5.4.45-1.el6.x86_64.rpmSummary: PHP is a server-side scripting language for creating dynamic Web pages #简要描述信息,最好不要超过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 #软件包详述PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML.%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-debugmake ZEND_EXTRA_LIBS='-liconv' %{?_smp_mflags} #%{?_smp_mflags} 的意思是:如果就多处理器的话make时并行编译%install #开始安装软件,如make installrm -rf %{buildroot}make INSTALL_ROOT=%{buildroot} installrm -rf %{buildroot}/{.channels,.depdb,.depdblock,.filemap,.lock,.registry}%{__install} -p -D -m 0755 sapi/fpm/init.d.php-fpm %{buildroot}/etc/init.d/php-fpm%{__install} -p -D -m 0644 php.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} -g 10000 # 1:表示安装 useradd -u 10000 -g 10000 -m %{_user} # 2:表示升级fi # 0:表示卸载#rpm安装后执行的脚本%postif [ $1 == 1 ];then [ -z "`grep ^'export PATH=' /etc/profile`" ] && echo "export PATH=%{_prefix}/bin:\$PATH" >> /etc/profile [ -n "`grep ^'export PATH=' /etc/profile`" -a -z "`grep '%{_prefix}' /etc/profile`" ] && sed -i "s@^export PATH=\(.*\)@export PATH=%{_prefix}/bin:\1@" /etc/profile /sbin/chkconfig --add php-fpm /sbin/chkconfig php-fpm on Mem=`free -m | awk '/Mem:/{print $2}'` #下面主要是参数的优化 if [ $Mem -le 640 ];then Mem_level=512M Memory_limit=64 elif [ $Mem -gt 640 -a $Mem -le 1280 ];then Mem_level=1G Memory_limit=128 elif [ $Mem -gt 1280 -a $Mem -le 2500 ];then Mem_level=2G Memory_limit=192 elif [ $Mem -gt 2500 -a $Mem -le 3500 ];then Mem_level=3G Memory_limit=256 elif [ $Mem -gt 3500 -a $Mem -le 4500 ];then Mem_level=4G Memory_limit=320 elif [ $Mem -gt 4500 -a $Mem -le 8000 ];then Mem_level=6G Memory_limit=384 elif [ $Mem -gt 8000 ];then Mem_level=8G Memory_limit=448 fi sed -i "s@^memory_limit.*@memory_limit = ${Memory_limit}M@" %{_prefix}/etc/php.ini sed -i 's@^output_buffering =@output_buffering = On\noutput_buffering =@' %{_prefix}/etc/php.ini sed -i 's@^;cgi.fix_pathinfo.*@cgi.fix_pathinfo=0@' %{_prefix}/etc/php.ini sed -i 's@^short_open_tag = Off@short_open_tag = On@' %{_prefix}/etc/php.ini sed -i 's@^expose_php = On@expose_php = Off@' %{_prefix}/etc/php.ini sed -i 's@^request_order.*@request_order = "CGP"@' %{_prefix}/etc/php.ini sed -i 's@^;date.timezone.*@date.timezone = Asia/Shanghai@' %{_prefix}/etc/php.ini sed -i 's@^post_max_size.*@post_max_size = 50M@' %{_prefix}/etc/php.ini sed -i 's@^upload_max_filesize.*@upload_max_filesize = 50M@' %{_prefix}/etc/php.ini sed -i 's@^;upload_tmp_dir.*@upload_tmp_dir = /tmp@' %{_prefix}/etc/php.ini sed -i 's@^max_execution_time.*@max_execution_time = 5@' %{_prefix}/etc/php.ini sed -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.ini sed -i 's@^session.cookie_httponly.*@session.cookie_httponly = 1@' %{_prefix}/etc/php.ini sed -i 's@^mysqlnd.collect_memory_statistics.*@mysqlnd.collect_memory_statistics = On@' %{_prefix}/etc/php.ini cat > %{_prefix}/etc/php-fpm.conf &1 /sbin/chkconfig --del php-fpm if [ -e '/etc/profile.d/custom_profile_new.sh' ];then sed -i 's@%{_prefix}/bin:@@' /etc/profile.d/custom_profile_new.sh else sed -i 's@%{_prefix}/bin:@@' /etc/profile fifi#%postun rpm卸载后执行的脚本%clean #clean的主要作用就是删除BUILDrm -rf %{buildroot}%files #指定哪些文件需要被打包,如/usr/local/php%defattr(-,root,root,-)%{_prefix}%attr(0755,root,root) /etc/init.d/php-fpm%changelog #日志改变段, 这一段主要描述软件的开发记录* Sat Oct 24 2015 yeho 5.4.45-1- Initial version
php-redis.spec实例
[root@linuxprobe SOURCES]# pwd/root/rpmbuild/SOURCES[root@linuxprobe SOURCES]# lsredis-2.2.7.tgz[root@linuxprobe SOURCES]# cd ../SPEC[root@linuxprobe SPEC]# vim php-redis.spec%global php_extdir %(/usr/local/php/bin/php-config --extension-dir 2>/dev/null || echo "undefined")Name: php-redisVersion: 2.2.7Release: 1%{?dist}Summary: The phpredis extension provides an API for communicating with the Redis key-value store.Group: Development/LanguagesLicense: PHPURL: http://pecl.php.net/package/redisSource0: redis-%{version}.tgzBuildRoot: %_topdir/BUILDROOTRequires: phpBuildRequires: php >= 5.4.40%descriptionThe phpredis extension provides an API for communicating with the Redis key-value store.%prep%setup -q -n redis-%{version}%build/usr/local/php/bin/phpize%configuremake %{?_smp_mflags}%installrm -rf %{buildroot}mkdir -p %{buildroot}%{php_extdir}make install INSTALL_ROOT=%{buildroot}find %{buildroot} -name redis.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.ini sed -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-fpm stop > /dev/null 2>&1 sed -i '/redis.so/d' /usr/local/php/etc/php.inifi#%postun rpm卸载后执行的脚本if [ $1 == 0 ];then /etc/init.d/php-fpm start > /dev/null 2>&1fi%cleanrm -rf %{buildroot}%files%defattr(-,root,root,-)%{php_extdir}/redis.so%changelog* Sat Oct 24 2015 yeho 2.2.7-1- Initial version
编译rpm包
[root@linuxprobe SPEC]# rpmbuild -bb php.spec 制作php的rpm二进制包[root@linuxprobe SPEC]# rpmbuild -bb php-redis.spec 制作php-redis的rpm二进制包
读到这里,这篇"CentOS中怎么制作php的rpm包"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
目录
文件
制作
脚本
软件
位置
编译
处理
信息
命令
文章
面的
工作
不同
下划线
二进制
作用
内容
平台
格式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
不含电子图书的电子数据库
从数据库取null时返回空
黑夜调色软件开发
金融级数据库安全架构
sql数据库安装在固态硬盘上
牢固树立广电网络安全观
传统软件开发方法存在什么问题
软件开发项目组主管
在数据库中建立仓库关系
软件开发成本包括差旅费吗
软件开发 bd缩写
sql数据库语句试题大全
软件开发群发广告词
互联网服务器安全
软件开发使用笔记本电脑
国家安全教育网络安全法
卖房有数据库
数据库理论基础
网络安全之信息泄漏
pc端软件开发需要ssm
creo服务器管理 清除
军人网络安全保障
某一个字段删除重复的数据库
中南大学网络安全导师
享天网络技术
上海水果软件开发
材料硕士转行网络安全
华为 单板软件开发部
公众网络安全感调查
金蝶服务器坏了怎么办