有时候为了方便源码包的安装,我们需要自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包,当有了源码包就可以直接编译得到二 进制安装包和其他任意包。spec file是制作rpm包最核心的部分,rpm包的制作就是根据spec file来实现的。下面是我以制作php的rpm开始介绍其制作方法。以下操作在CentOS6.6 64位系统进行。

下面我们以制作php的rpm开始介绍其制作方法。以下操作在CentOS6.6 64位系统进行。

安装rpm-build [root@linuxeye.com SOURCES]# yum -y install rpm-build

建立工作车间目录 [root@linuxeye.com SOURCES]# vim ~/.rpmmacros %_topdir /root/rpmbuild

[root@linuxeye.com 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@linuxeye.com 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@linuxeye.com SOURCES]# pwd/root/rpmbuild/SOURCES[root@linuxeye.com SOURCES]# lsphp-5.4.45.tar.gz

编写SPEC文件 [root@linuxeye.com SPEC]# pwd/root/rpmbuild/SOURCES[root@linuxeye.com 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: mcrypt Requires: 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@linuxeye.com SOURCES]# pwd/root/rpmbuild/SOURCES[root@linuxeye.com SOURCES]# lsredis-2.2.7.tgz[root@linuxeye.com SOURCES]# cd ../SPEC[root@linuxeye.com 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@linuxeye.com SPEC]# rpmbuild -bb php.spec 制作php rpm二进制包[root@linuxeye.com SPEC]# rpmbuild -bb php-redis.spec 制作php-redis rpm二进制包 原文:https://blog.linuxeye.com/431.html

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php-rpm.conf,制作PHP的RPM包教程相关推荐

  1. HTC使用官方固件作为底包制作rom卡刷包教程

    文章目录 1. 前言 2. 制作过程 2.1 获取刷机固件 2.2 工具准备 2.3 制作ROM 2.4 刷入ROM 3. 总结 4. 刷机成功的效果 5. 附件 1. 前言 如果你想根据HTC的官方 ...

  2. tengine php fpm,FPM打包工具制作Tengine为RPM包详解

    目录 1.Tengine编译安装 2.FPM制作Tengine为RPM包 3.总结 1.Tengine编译安装[root@php ~]# cat /etc/issue CentOS release 6 ...

  3. linux制作openssl rpm,CentOS 7 定制 OpenSSL RPM 包

    一.环境准备 1.1 安装RPM打包.测试必备开发工具 $ yum install -y rpm-build rpmlint rpmdevtools 1.2 安装打包.编译所需的依赖软件 $ yum ...

  4. 精通RPM之--制作篇(上)

    制作篇(上) 要想制作一个RPM格式的软件包,需要编写软件包描述文件.其标准命名格式为:软件名-版本号-释出号.spec,这个文件,详细描述了有关该软件包的诸多信息,如软件名,版本,类别,说明摘要,创 ...

  5. 精通RPM之--制作篇(上) 原作:雨亦奇 赵建利

    要想制作一个RPM格式的软件包,需要编写软件包描述文件.其标准命名格式为:软件名-版本号-释出号.spec,这个文件,详细描述了有关该软件包的诸 多信息,如软件名,版本,类别,说明摘要,创建时要执行什 ...

  6. 制作 mysql的rpm文件_自制mysql.rpm安装包

    RPM安装比源码更快更方便,更利于统一版本,省去了繁琐的编译过程,下面以制作mysql的rpm安装包为例. 编译环境 1. 安装rpm-build: 检查是否配置rpm环境 1 # sudo yum ...

  7. openeuler 22.03 制作openssh9.3p1 rpm升级包和升级实战

    一.背景说明 openeuler 22.03 默认安装的openssh 版本为8.8p1,经绿盟扫描,存在高危漏洞,需要升级到最新. 官网只提供编译安装包,而openeuler 22.03 为rpm方 ...

  8. rpm安装mysql报错NOKEY_rpm包安装报错: Header V3 RSASHA256 Signature, key ID fd431d51 NOKEY

    报错信息:Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY 一.问题场景 RHEL 6.5 安装MySQL-5.5.44 首先,卸载rpm ...

  9. Linux 如何安装 SRPM 包(源代码 rpm 软件包,以 .src.rpm 为后缀名)/rpm 格式的源码软件包/源码包

    文章目录 一.SRPM 介绍 二.SRPM 命名格式 三.SRPM 的安装 (一)直接使用命令 rpmbuild (二)利用 *.spec 文件编译 (三)使用命令 make 编译和安装 四.写在最后 ...

最新文章

  1. linux系统目录结构介绍
  2. 部队文职计算机试题,2020军队文职人员考试:计算机基础模拟试题(1)
  3. 将list对象转换为QuerySet对象
  4. html播放七牛云视频,直传七牛云视频播放商业版【价值199元】
  5. oracle 源代码输出,oracle-如何将DBMS_OUTPUT.PUT_LINE的输出重定向到文件?
  6. 在51系列中data,idata,xdata,pdata的区别
  7. 小米10T系列新机曝光:后置64MP三摄 辨识度超高
  8. 超越Excel,这才是报表的正确打开方式,可惜90%的人都没用过
  9. 无线传感网2-传感器布局方法
  10. mount -o nolock
  11. 集成电路模拟版图入门-版图基础学习笔记(五)
  12. java机甲类回合制游戏,课内资源 - 基于java的RPG回合制游戏
  13. 2018人工智能发展盘点:国内各行业拥抱AI,总体呈现八大特点
  14. 解决ios的webview中上/下拉露出黑灰色背景问题
  15. Tomcate安装配置
  16. VPS防火墙是什么 操作步骤须知
  17. json解析格式化工具
  18. google中国android文档官网地址
  19. 电容式触摸屏调试常见问题汇总(连载贴)
  20. 调整数组顺序使奇数位于偶数前面——《剑指offer》

热门文章

  1. 手机里刷屏海报文案怎么写?(下)
  2. pytorch添加迁移学习
  3. [转]从程序员到产品经理
  4. html语言怎么打出红色心形,使用HTML-CSS画爱心的过程详解
  5. DS007-队列的原理-操作受限的线性表-queue的使用
  6. 下载网上的多行json并将其转换为字典的解决方案
  7. win10能装文件服务器吗,win2003图文详解文件服务器的安装步骤
  8. 燕山大学计算机辅助设计三级项目报告,计算机辅助设计(燕山大学)
  9. 2022年最新吉林水利水电施工安全员模拟试题题库及答案
  10. WeUI 为微信 Web打造权限UI框架