制作PHP的RPM包详解及实例

yizhihongxing

制作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技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • MySQL与Oracle 差异比较之四条件循环语句

    MySQL与Oracle差异比较之条件循环语句 在MySQL和Oracle中,条件循环语句主要由IF语句和CASE语句组成。这些语句经常被用来在查询中根据不同的条件执行不同的操作。 IF语句 MySQL和Oracle中的IF语句具有相同的语法形式: IF (condition, true_value, false_value) 其中,condition是IF…

    database 2023年5月21日
    00
  • MySQL MyISAM存储引擎详解

    MySQL的存储引擎是MySQL的一种优秀的技术,其中MyISAM是其最基本的存储引擎。MyISAM是MySQL支持的一种基于表的存储引擎,它支持高效的读取和快速的键值查找,并允许使用大型数据表。下面我们将详细解释MyISAM存储引擎的具体特点和使用方法。 索引类型 MyISAM支持B-tree索引,这种索引类型非常适合于一些快速的查找操作。B-tree索引…

    MySQL 2023年3月9日
    00
  • php在linux下检测mysql同步状态的方法

    以下是“php在linux下检测mysql同步状态的方法”的完整攻略: 1. 确认mysql主从同步状态 在开始检测mysql主从同步状态前,需要确认当前mysql主从同步是否已经正常运行。 可以通过以下命令查看mysql主从同步的状态: SHOW SLAVE STATUS\G 如果主从同步正常,那么Slave_IO_Running和Slave_SQL_Ru…

    database 2023年5月22日
    00
  • MySQ登录提示ERROR 1045 (28000)错误的解决方法

    当使用MySQL登录时,可能会遇到错误提示ERROR 1045 (28000),这通常是因为用户名或密码不正确而导致的,也有可能是权限问题所致。下面是解决方法的完整攻略。 1. 确认用户名和密码 首先,请确认你输入的用户名和密码是否正确。如果你不确定自己的用户名和密码是否正确,可以尝试使用以下命令测试登录: mysql -u username -p 其中,-…

    database 2023年5月18日
    00
  • redis主从切换

    转自:http://blog.csdn.net/zfl092005/article/details/17523945 环境描述:主redis:192.168.10.1 6379从redis:192.168.10.2 6380 一、主从配置 1、将主从redis配置文件redis.conf中的aemonize no 改为 yes 2、修改从redis配置文件r…

    Redis 2023年4月11日
    00
  • Windows系统中完全卸载MySQL数据库实现重装mysql

    下面是完整攻略: 1. 停止MySQL服务 首先,需要停止正在运行的MySQL服务。可以在命令行窗口中输入以下命令实现停止服务: net stop mysql 2. 卸载MySQL 在控制面板中找到“程序和功能”选项,找到MySQL进行卸载。如果没有通过安装程序安装MySQL,可以直接删除MySQL的安装目录。 3. 删除MySQL相关文件 在卸载MySQL…

    database 2023年5月22日
    00
  • spring boot整合mybatis利用Mysql实现主键UUID的方法

    当我们使用Spring Boot整合MyBatis时,常常需要使用数据库的主键来唯一标识数据行。而常见的主键使用自增ID,这样的主键虽然简单易用,但有时也会带来各种各样的问题。为了解决这些问题,我们可以使用UUID作为主键。 本文将介绍在Spring Boot整合MyBatis的情况下,如何利用MySQL实现UUID主键的方法,包括以下步骤: 创建MySQL…

    database 2023年5月22日
    00
  • SQL 创建层次视图

    创建层次视图是SQL语言的一项强大功能,可以以层次方式组织数据,方便我们查询和分析。 下面是创建层次视图的完整攻略,包含了两个实例: 什么是层次视图 层次视图是一种特殊的视图,其中包含了上下级关系的数据。例如,员工表中可以包含每个员工的上级经理,这些数据可以用于创建层次视图。 创建层次视图的步骤 首先,需要在数据库中创建一个包含上下级关系的数据表。假设我们有…

    database 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部