国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php教程 PHP開發(fā) 製作PHP的RPM包詳解及實例

製作PHP的RPM包詳解及實例

Jan 07, 2017 pm 02:08 PM

制作PHP的RPM包教程

有時候為了方便源碼包的安裝,我們需要自己訂制軟件包的需求,我們會把一些源碼包按照我們的需求來做成rpm包,當(dāng)有了源碼包就可以直接編譯得到二進(jìn)制安裝包和其他任意包。spec file是制作rpm包最核心的部分,rpm包的制作就是根據(jù)spec file來實現(xiàn)的。下面是我以制作php的rpm開始介紹其制作方法。以下操作在CentOS6.6 64位系統(tǒng)進(jìn)行。

下面我們以制作php的rpm開始介紹其制作方法。以下操作在CentOS6.6 64位系統(tǒng)進(jìn)行。

安裝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包的默認(rèn)制作路徑在/usr/src/redhat下,但CentOS并沒有該目錄,因此,我們不得不自定義工作目錄,這其中包含了6個目錄(要求全部大寫)

BUILD:源代碼解壓以后放的位置
RPMS:制作完成后的rpm包存放目錄,為特定平臺指定子目錄(x86_64)
SOURCES:收集的源文件,源材料,補丁文件等存放位置
SPECS:存放spec文件,作為制作rpm包的領(lǐng)崗文件,以rpm名.spec
SRPMS:src格式的rpm包位置 ,既然是src格式的包,就沒有平臺的概念了
BuiltRoot:假根,使用install臨時安裝到這個目錄,把這個目錄當(dāng)作根來用的,所以在這個目錄下的目錄文件,才是真正的目錄文件。當(dāng)打包完成后,在清理階段,這個目錄將被刪除

[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顯示所有的宏,以下劃線開頭,一個下劃線:定義環(huán)境的使用情況,二個下劃線:通常定義的是命令,為什么要定義宏,因為不同的系統(tǒng),命令的存放位置可能不同,所以通過宏的定義找到命令的真正存放位置

收集源碼文件腳本文件

[root@linuxeye.com SOURCES]# pwd
/root/rpmbuild/SOURCES
[root@linuxeye.com SOURCES]# ls
php-5.4.45.tar.gz

編寫SPEC文件

[root@linuxeye.com SPEC]# pwd
/root/rpmbuild/SOURCES
[root@linuxeye.com SPEC]# vim php.spec #內(nèi)容如下:
%define _user www
%define _group www
%define _prefix /usr/local/php
Name: php #軟件包名稱
Version: 5.4.45 #版本號(不能使用-)
Release: 1%{?dist}  #release號,對應(yīng)下面的changelog,如php-5.4.45-1.el6.x86_64.rpm
Summary: PHP is a server-side scripting language for creating dynamic Web pages #簡要描述信息,最好不要超過50個字符,如要詳述,使用下面的%description
Group: Development/Languages  #要全用這里面的一個組:less /usr/share/doc/rpm-version/GROUPS
License: GPLv2 #軟件授權(quán)方式
URL: http://www.php.net #源碼相關(guān)網(wǎng)站
Packager: yeho <lj2007331@gmail.com> #打包人的信息
Vendor: OneinStack #發(fā)行商或打包組織的信息
Source0: %{name}-%{version}.tar.gz #源代碼包,可以帶多個用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用
BuildRoot: %_topdir/BUILDROOT #安裝或編譯時使用的“虛擬目錄”
Requires: libmcrypt
Requires: mhash
Requires: 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-debug
make ZEND_EXTRA_LIBS=&#39;-liconv&#39; %{?_smp_mflags} #%{?_smp_mflags} 的意思是:如果就多處理器的話make時并行編譯
%install #開始安裝軟件,如make install
rm -rf %{buildroot}
make INSTALL_ROOT=%{buildroot} install
rm -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安裝前執(zhí)行的腳本
%pre
echo &#39;/usr/local/lib&#39; > /etc/ld.so.conf.d/local.conf
/sbin/ldconfig
if [ $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安裝后執(zhí)行的腳本
%post
if [ $1 == 1 ];then
  [ -z "`grep ^&#39;export PATH=&#39; /etc/profile`" ] && echo "export PATH=%{_prefix}/bin:\$PATH" >> /etc/profile
  [ -n "`grep ^&#39;export PATH=&#39; /etc/profile`" -a -z "`grep &#39;%{_prefix}&#39; /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 &#39;/Mem:/{print $2}&#39;` #下面主要是參數(shù)的優(yōu)化
  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 &#39;s@^output_buffering =@output_buffering = On\noutput_buffering =@&#39; %{_prefix}/etc/php.ini
  sed -i &#39;s@^;cgi.fix_pathinfo.*@cgi.fix_pathinfo=0@&#39; %{_prefix}/etc/php.ini
  sed -i &#39;s@^short_open_tag = Off@short_open_tag = On@&#39; %{_prefix}/etc/php.ini
  sed -i &#39;s@^expose_php = On@expose_php = Off@&#39; %{_prefix}/etc/php.ini
  sed -i &#39;s@^request_order.*@request_order = "CGP"@&#39; %{_prefix}/etc/php.ini
  sed -i &#39;s@^;date.timezone.*@date.timezone = Asia/Shanghai@&#39; %{_prefix}/etc/php.ini
  sed -i &#39;s@^post_max_size.*@post_max_size = 50M@&#39; %{_prefix}/etc/php.ini
  sed -i &#39;s@^upload_max_filesize.*@upload_max_filesize = 50M@&#39; %{_prefix}/etc/php.ini
  sed -i &#39;s@^;upload_tmp_dir.*@upload_tmp_dir = /tmp@&#39; %{_prefix}/etc/php.ini
  sed -i &#39;s@^max_execution_time.*@max_execution_time = 5@&#39; %{_prefix}/etc/php.ini
  sed -i &#39;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@&#39; %{_prefix}/etc/php.ini
  sed -i &#39;s@^session.cookie_httponly.*@session.cookie_httponly = 1@&#39; %{_prefix}/etc/php.ini
  sed -i &#39;s@^mysqlnd.collect_memory_statistics.*@mysqlnd.collect_memory_statistics = On@&#39; %{_prefix}/etc/php.ini
  cat > %{_prefix}/etc/php-fpm.conf <<EOF
;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;
[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = warning
emergency_restart_threshold = 30
emergency_restart_interval = 60s
process_control_timeout = 10s
daemonize = yes
;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;
[%{_user}]
;listen = /dev/shm/php-cgi.sock
listen = 127.0.0.1:9000
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = %{_user}
listen.group = %{_group}
listen.mode = 0666
user = %{_user}
group = %{_group}
pm = dynamic
pm.max_children = 12
pm.start_servers = 8
pm.min_spare_servers = 6
pm.max_spare_servers = 12
pm.max_requests = 2048
pm.process_idle_timeout = 10s
request_terminate_timeout = 120
request_slowlog_timeout = 0
slowlog = log/slow.log
rlimit_files = 51200
rlimit_core = 0
catch_workers_output = yes
;env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
EOF
  if [ $Mem -le 3000 ];then
    sed -i "s@^pm.max_children.*@pm.max_children = $(($Mem/2/20))@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.start_servers.*@pm.start_servers = $(($Mem/2/30))@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.min_spare_servers.*@pm.min_spare_servers = $(($Mem/2/40))@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.max_spare_servers.*@pm.max_spare_servers = $(($Mem/2/20))@" %{_prefix}/etc/php-fpm.conf
  elif [ $Mem -gt 3000 -a $Mem -le 4500 ];then
    sed -i "s@^pm.max_children.*@pm.max_children = 80@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.start_servers.*@pm.start_servers = 50@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.min_spare_servers.*@pm.min_spare_servers = 40@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.max_spare_servers.*@pm.max_spare_servers = 80@" %{_prefix}/etc/php-fpm.conf
  elif [ $Mem -gt 4500 -a $Mem -le 6500 ];then
    sed -i "s@^pm.max_children.*@pm.max_children = 90@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.start_servers.*@pm.start_servers = 60@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.min_spare_servers.*@pm.min_spare_servers = 50@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.max_spare_servers.*@pm.max_spare_servers = 90@" %{_prefix}/etc/php-fpm.conf
  elif [ $Mem -gt 6500 -a $Mem -le 8500 ];then
    sed -i "s@^pm.max_children.*@pm.max_children = 100@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.start_servers.*@pm.start_servers = 70@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.min_spare_servers.*@pm.min_spare_servers = 60@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.max_spare_servers.*@pm.max_spare_servers = 100@" %{_prefix}/etc/php-fpm.conf
  elif [ $Mem -gt 8500 ];then
    sed -i "s@^pm.max_children.*@pm.max_children = 120@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.start_servers.*@pm.start_servers = 80@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.min_spare_servers.*@pm.min_spare_servers = 70@" %{_prefix}/etc/php-fpm.conf
    sed -i "s@^pm.max_spare_servers.*@pm.max_spare_servers = 120@" %{_prefix}/etc/php-fpm.conf
  fi
fi
#rpm卸載前執(zhí)行的腳本
%preun
if [ $1 == 0 ];then
  /etc/init.d/php-fpm stop > /dev/null 2>&1
  /sbin/chkconfig --del php-fpm
  if [ -e &#39;/etc/profile.d/custom_profile_new.sh&#39; ];then
    sed -i &#39;s@%{_prefix}/bin:@@&#39; /etc/profile.d/custom_profile_new.sh
  else
    sed -i &#39;s@%{_prefix}/bin:@@&#39; /etc/profile
  fi
fi
#%postun rpm卸載后執(zhí)行的腳本
%clean  #clean的主要作用就是刪除BUILD
rm -rf %{buildroot}
%files #指定哪些文件需要被打包,如/usr/local/php
%defattr(-,root,root,-)
%{_prefix}
%attr(0755,root,root) /etc/init.d/php-fpm
%changelog #日志改變段, 這一段主要描述軟件的開發(fā)記錄
* Sat Oct 24 2015 yeho <lj2007331@gmail.com> 5.4.45-1
- Initial version

下面是php-redis.spec

[root@linuxeye.com SOURCES]# pwd
/root/rpmbuild/SOURCES
[root@linuxeye.com SOURCES]# ls
redis-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-redis
Version: 2.2.7
Release: 1%{?dist}
Summary: The phpredis extension provides an API for communicating with the Redis key-value store.
Group: Development/Languages
License: PHP
URL: http://pecl.php.net/package/redis
Source0: redis-%{version}.tgz
BuildRoot: %_topdir/BUILDROOT
Requires: php
BuildRequires: php >= 5.4.40
%description
The 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
%configure
make %{?_smp_mflags}
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}%{php_extdir}
make install INSTALL_ROOT=%{buildroot}
find %{buildroot} -name redis.so -exec /bin/mv {} %{buildroot}%{php_extdir} \;
#rpm安裝后執(zhí)行的腳本
%post
if [ $1 == 1 ];then
  [ -z "`grep &#39;^extension_dir&#39; /usr/local/php/etc/php.ini`" ] && echo "extension_dir = \"%{php_extdir}\"" >> /usr/local/php/etc/php.ini
  sed -i &#39;s@^extension_dir\(.*\)@extension_dir\1\nextension = "redis.so"@&#39; /usr/local/php/etc/php.ini
fi
#rpm卸載前執(zhí)行的腳本
%preun
if [ $1 == 0 ];then
  /etc/init.d/php-fpm stop > /dev/null 2>&1
  sed -i &#39;/redis.so/d&#39; /usr/local/php/etc/php.ini
fi
#%postun rpm卸載后執(zhí)行的腳本
if [ $1 == 0 ];then
  /etc/init.d/php-fpm start > /dev/null 2>&1
fi
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
%{php_extdir}/redis.so
%changelog
* Sat Oct 24 2015 yeho <lj2007331@gmail.com> 2.2.7-1
- Initial version

編譯rpm包

[root@linuxeye.com SPEC]# rpmbuild -bb php.spec 制作php rpm二進(jìn)制包
[root@linuxeye.com SPEC]# rpmbuild -bb php-redis.spec 制作php-redis rpm二進(jìn)制包

? ?

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

更多制作PHP的RPM包詳解及實例相關(guān)文章請關(guān)注PHP中文網(wǎng)!


本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)