制作PHP的RPM包详解及实例
简介
在Linux系统中,RPM(RedHat Package Manager)是一种常用的软件包管理器。在CentOS等常用的Linux发行版中,我们可以使用RPM来安装和管理软件包。对于Web开发来说,PHP是一个非常常用的开发语言,因此制作PHP的RPM包对于服务器管理员来说是非常有必要的。本文将对制作PHP的RPM包进行详细的讲解,并提供两个示例说明。
制作PHP的RPM包攻略
制作PHP的RPM包需要以下步骤:
1. 安装所需要的工具及依赖
2. 下载并编译PHP源码
3. 创建RPM工作目录
4. 将编译好的PHP源码复制到RPM工作目录中
5. 创建.spec文件
6. 打包RPM包
下面我们将一步一步进行讲解。
安装所需要的工具及依赖
在制作RPM包的过程中,需要使用rpm、rpmbuild、gcc等工具,以及一些编译PHP所需要的依赖库。我们可以使用yum或者apt-get等包管理器来安装这些工具及依赖。
以CentOS为例,安装以下工具:
yum install rpm-build rpm-devel rpmlint make gcc-c++ openssl-devel libxml2-devel ncurses-devel
下载并编译PHP源码
在制作RPM包之前,我们需要下载PHP的源码并编译。我们可以从PHP官网下载最新版的PHP源码,然后进行解压缩和编译。
wget http://cn2.php.net/get/php-7.4.14.tar.gz/from/this/mirror
tar -xvf php-7.4.14.tar.gz
cd php-7.4.14
./configure --prefix=/usr/local/php --with-config-file-path=/etc/php --with-mysql --with-mysqli --with-pdo-mysql --with-zlib --with-iconv --enable-gd --with-curl --with-openssl --with-xmlrpc --with-gettext --with-jpeg --with-freetype --enable-mbstring --enable-zip --enable-sockets
make
make install
在编译PHP源码时,需要根据自己的实际情况添加或删除不同的选项。
创建RPM工作目录
在进行RPM包的制作之前,我们需要先创建一个RPM工作目录,并设置相关权限。
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
chmod -R 755 ~/rpmbuild
将编译好的PHP源码复制到RPM工作目录中
编译PHP源码后,我们需要将编译好的PHP源码复制到RPM工作目录中。
cd /usr/local/src
cp -r php-7.4.14 ~/rpmbuild/SOURCES/
创建.spec文件
.spec文件是RPM包制作中十分重要的一个文件,其中定义了RPM包的各项属性和相关操作。我们可以在rpmdev-newspec命令的帮助下生成一个.template文件,然后再进一步进行修改。
cd ~/rpmbuild/SPECS
rpmdev-newspec php-7.4.14.spec
生成的php-7.4.14.spec文件中包含了一些默认的RPM包配置项,我们需要对其进行一定的修改,以满足实际需求。以下是该文件的一些重要字段:
Name: php
Version: 7.4.14
Release: 1%{?dist}
Summary: 描述
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%description
描述
%prep
%setup -q -n php-7.4.14
其中,Name、Version、Summary、%description等字段需要根据实际需求进行修改。在修改.spec文件之后,还需要为其添加各项操作,如%build、%install、%clean等。以下是一个示例:
%build
./configure \
--prefix=%{_prefix} \
--with-config-file-path=%{_sysconfdir} \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--enable-bcmath \
--enable-calendar \
--with-curl \
--enable-exif \
--enable-ftp \
--with-gd \
--with-jpeg \
--with-png \
--with-webp \
--with-xpm \
--with-freetype \
--enable-gd-jis-conv \
--with-gettext \
--with-gmp \
--with-mhash \
--enable-intl \
--enable-mbstring \
--with-openssl \
--enable-pcntl \
--with-readline \
--enable-shmop \
--enable-soap \
--enable-sockets \
--with-sodium \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--with-tidy \
--enable-wddx \
--with-xmlrpc \
--with-zip \
--with-zlib
make %{?_smp_mflags}
%install
rm -rf %{buildroot}
make install INSTALL_ROOT=%{buildroot}
%clean
rm -rf %{buildroot}
rm -rf %{_builddir}/%{name}-%{version}/*
打包RPM包
当.spec文件完成后,我们需要对其进行编译打包。
cd ~/rpmbuild/SPECS
rpmbuild -bb php-7.4.14.spec
编译好RPM包后,便可在~/rpmbuild/RPMS/x86_64/目录下找到PHP RPM包。
示例1:制作PHP-redis的RPM包
在本例中,我们将制作PHP-redis的RPM包。
安装所需要的工具及依赖
首先,我们需要先安装一些相关工具和依赖库:
yum install redis-devel
编译PHP-redis扩展
在编译PHP-redis扩展之前,需要先下载PHP-redis PECL扩展:
wget https://pecl.php.net/get/redis-5.3.2.tgz
tar -xvf redis-5.3.2.tgz
cd redis-5.3.2
然后进行编译:
cd /usr/local/src/php-7.4.14/ext/redis
phpize
./configure
make
创建RPM工作目录
同样,我们需要先创建RPM工作目录并设置相应权限:
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
chmod -R 755 ~/rpmbuild
将编译好的PHP-redis扩展复制到RPM工作目录中
编译好PHP-redis扩展后,我们需要将其复制到RPM工作目录中:
cd /usr/local/src/php-7.4.14/ext/redis/modules
cp redis.so ~/rpmbuild/SOURCES/
创建.spec文件
以下是一个制作PHP-redis RPM包的示例.spec文件:
Name: php-redis
Version: 5.3.2
Release: 1%{?dist}
Summary: PHP Redis extension
Group: System Environment/Libraries
License: PHP
URL: https://pecl.php.net/package/redis
Source0: %{name}.so
BuildRequires: php
Requires: php-common
Requires: redis
%description
PHP Redis extension.
%prep
%build
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}%{_libdir}/php/modules/
cp %{SOURCE0} %{buildroot}%{_libdir}/php/modules/
%clean
rm -rf %{buildroot}
rm -rf %{_builddir}/%{name}-%{version}/*
%files
%defattr(-,root,root)
%doc
%{_libdir}/php/modules/*.so
打包RPM包
打包RPM包的命令与示例1相同:
cd ~/rpmbuild/SPECS
rpmbuild -bb php-redis.spec
示例2:制作PHP-protobuf的RPM包
在本例中,我们将制作PHP-protobuf的RPM包。
安装所需要的工具及依赖
首先,我们先安装protobuf和protobuf-devel:
yum install protobuf protobuf-devel
并下载PHP-protobuf PECL扩展:
wget https://pecl.php.net/get/protobuf-3.17.0.tgz
tar -xvf protobuf-3.17.0.tgz
cd protobuf-3.17.0
编译PHP-protobuf扩展
在编译扩展之前,需要对protobuf进行配置:
./configure
make
make install
ldconfig
然后,我们进行PHP-protobuf的编译:
cd /usr/local/src/php-7.4.14/ext/protobuf
phpize
./configure
make
创建spec文件
以下是制作PHP-protobuf RPM包的一个示例.spec文件:
Name: php-protobuf
Version: 3.17.0
Release: 1%{?dist}
Summary: PHP Protobuf extension
Group: System Environment/Libraries
License: Apache
URL: https://pecl.php.net/package/protobuf
Source0: %{name}.so
BuildRequires: php-devel
BuildRequires: protobuf-devel
Requires: php-common
Requires: protobuf-compiler
%description
PHP Protobuf extension.
%prep
%build
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}%{_libdir}/php/modules/
cp %{SOURCE0} %{buildroot}%{_libdir}/php/modules/
%clean
rm -rf %{buildroot}
rm -rf %{_builddir}/%{name}-%{version}/*
%files
%defattr(-,root,root)
%doc
%{_libdir}/php/modules/*.so
打包RPM包
打包RPM包的命令与示例1相同:
cd ~/rpmbuild/SPECS
rpmbuild -bb php-protobuf.spec
结论
PHP是一种非常常用的开发语言,在服务器管理中应用也非常广泛。通过制作PHP的RPM包,可以方便服务器管理员进行安装、升级和卸载等操作。本文对制作PHP的RPM包进行了详细的讲解,并提供了两个实例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:制作PHP的RPM包详解及实例 - Python技术站