本文適用:rhel8系列,或同類系統(tǒng)(CentOS8,AlmaLinux8,RockyLinux8等)
文檔形成時(shí)期:2023年
因系統(tǒng)版本不同,構(gòu)建部署應(yīng)略有差異,但本文未做細(xì)分,對(duì)稍有經(jīng)驗(yàn)者應(yīng)不存在明顯障礙。
因軟件世界之復(fù)雜和個(gè)人能力之限,難免疏漏和錯(cuò)誤,歡迎指正。
背景
不同時(shí)期因各種原因經(jīng)常產(chǎn)生部署LNMP環(huán)境的需求,某些場景下需要自定義軟件,比如參數(shù)、模塊、安裝路徑,或多個(gè)版本共存,不能采用Docker等容器環(huán)境,采用自主構(gòu)建RPM包便成了比較快捷的方式之一。
環(huán)境準(zhǔn)備
yum install rpmdevtools
#創(chuàng)建目錄
rpmdev-setuptree
#或手動(dòng)創(chuàng)建目錄:
mkdir rpmbuild-php-8.1.20; cd rpmbuild-php-8.1.20
mkdir -p ./{BUILD,RPMS,SOURCES,SPECS,SRPMS}
依賴包和必要文件準(zhǔn)備
#安裝擴(kuò)展源并啟用PowerTools
dnf install epel-release
dnf config-manager --set-enabled PowerTools # 在CentOS8上,oniguruma-devel,aspell-devel位于PowerTools,
dnf config-manager --set-enabled powertools # 在Almalinux8上,oniguruma-devel,aspell-devel位于powertools,和CentOS8不同的是小寫的。
#如果不啟用,會(huì)提示:No match for argument: oniguruma-devel,No match for argument: aspell-devel
#通過dnf安裝依賴
dnf -y install wget libxml2 libxml2-devel sqlite-devel bzip2-devel libcurl-devel libffi-devel libpng-devel libwebp-devel libjpeg-devel freetype-devel oniguruma oniguruma-devel libzip libzip-devel unixODBC unixODBC-devel freetds freetds-devel libtool-ltdl libtool-ltdl-devel gmp-devel libicu-devel openldap openldap-devel libpq libpq-devel aspell aspell-devel libtidy libtidy-devel libxslt libxslt-devel readline readline-devel libsodium libsodium-devel libjpeg-turbo-utils libXpm-devel systemd-devel openssl openssl-devel
cp -frp /usr/lib64/libldap* /usr/lib/
目錄rpmbuild/SOURCES/下面的文件:
opcache.so php-8.1.20.tar.gz php-command.ini php-fpm.conf php.ini redis.so www.conf
說明:
- PHP配置建議參考生產(chǎn)環(huán)境的常用配置,準(zhǔn)備一個(gè)比較通用的;
- opcache.so和redis.so是同環(huán)境下編譯好的模塊文件,這樣可省略在RPM包構(gòu)建過程中執(zhí)行編譯;
php-8.1.20-el8.spec內(nèi)容
Name: php
Summary: PHP: Hypertext Preprocessor
Group: Development/Languages
Version: 8.1.20
Release: custom%{?dist}
Source: php-8.1.20.tar.gz
#Icon: php.gif
URL: http://www.php.net/
Packager: PHP Group <group@php.net>
License: GPL
%define _prefix /opt/php81
Prefix: %{_prefix}
%description
Copyright: The PHP license (see "LICENSE" file included in distribution)
PHP is an HTML-embedded scripting language. Much of its syntax is
borrowed from C, Java and Perl with a couple of unique PHP-specific
features thrown in. The goal of the language is to allow web
developers to write dynamically generated pages quickly.
%prep
%setup -q
%build
set -x
# ./buildconf
./configure --prefix=%{_prefix} --sysconfdir=%{_prefix}/etc --with-config-file-path=%{_prefix}/etc --with-openssl --with-zlib --with-bz2 --with-curl --enable-bcmath --enable-gd --with-webp --with-jpeg --with-xpm --with-freetype --with-mhash --enable-mbstring --with-imap-ssl --enable-exif --with-ffi --with-zip --enable-sockets --with-pcre-jit --enable-fpm --with-pdo-mysql --enable-pcntl --with-gettext --with-gmp --with-fpm-user=www --with-fpm-group=www --with-fpm-systemd --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-mysqli --enable-mysqlnd --with-pdo-dblib --with-unixODBC --with-pdo-odbc=unixODBC,/usr/ --with-pgsql --with-pdo-pgsql --enable-ftp --enable-dba --enable-calendar --enable-intl --with-ldap --with-pspell --enable-shmop --enable-soap --with-tidy --with-xsl --with-readline --with-sodium
sed -ri "/^EXTRA_LIBS/s/(.*)/\1 -llber/" Makefile
make %{?_smp_mflags}
#
# Installation section
#
%install
[ %{buildroot} != "/" ] && rm -rf %{buildroot}
# %__make install DESTDIR="%{buildroot}" # 經(jīng)實(shí)踐,該參數(shù)不行,要使用下面的INSTALL_ROOT。
make INSTALL_ROOT="%{buildroot}" install
%__install -c -d -m 755 "%{buildroot}/opt"
%__install -c -d -m 755 "%{buildroot}%{_prefix}/etc"
%__install -c -d -m 755 "%{buildroot}%{_prefix}/etc/php-fpm.d"
%__install -c -d -m 755 "%{buildroot}/usr/lib/systemd/system"
%__install -c -d -m 755 "%{buildroot}%{_prefix}/lib/php/extensions/no-debug-non-zts-20210902"
cp -f %_sourcedir/{php-command.ini,php.ini,php-fpm.conf} "%{buildroot}%{_prefix}/etc/"
cp -f %_sourcedir/www.conf "%{buildroot}%{_prefix}/etc/php-fpm.d/"
cp -f %_builddir/%{name}-%{version}/sapi/fpm/php-fpm.service "%{buildroot}/usr/lib/systemd/system/php-fpm.service"
cp -f %_sourcedir/redis.so "%{buildroot}%{_prefix}/lib/php/extensions/no-debug-non-zts-20210902/"
cp -f %_sourcedir/opcache.so "%{buildroot}%{_prefix}/lib/php/extensions/no-debug-non-zts-20210902/"
#
# Clean section
#
%clean
[ %{buildroot} != "/" ] && rm -rf "%{buildroot}"
%files
%defattr(-,root,root)
%{_prefix}
# 不在prefix路徑下的文件需要單獨(dú)指定
/usr/lib/systemd/system/php-fpm.service
%post
if [ $1 == 1 ];then
groupadd www -g 319 2> /dev/null
useradd -s /sbin/nologin -M www -u 319 -g 319 2> /dev/null
mkdir /home/www 2> /dev/null
chown www:www /home/www 2> /dev/null
systemctl daemon-reload
systemctl enable php-fpm
fi
%preun
if [ "$1" = 0 ]
then
systemctl disable php-fpm
systemctl stop php-fpm
# userdel www
cp %{_prefix}/etc/php.ini /opt/php.ini.rpmsave-`date +"%Y%m%d-%H%M%S"`
cp %{_prefix}/etc/php-command.ini /opt/php-command.ini.rpmsave-`date +"%Y%m%d-%H%M%S"`
cp %{_prefix}/etc/php-fpm.conf /opt/php-fpm.conf.rpmsave-`date +"%Y%m%d-%H%M%S"`
cp %{_prefix}/etc/php-fpm.d/www.conf /opt/www.conf.rpmsave-`date +"%Y%m%d-%H%M%S"`
fi
%postun
if [ "$1" = 0 ]
then
systemctl disable php-fpm
rm -f /usr/lib/systemd/system/php-fpm.service
rm -rf /opt/php81
echo "%{name}-%{version}-%{release}已經(jīng)卸載."
fi
%changelog
* Mon Dec 11 2023 N
- For the first time, Custom made PHP8.1.20 in AlmaLinux8.8.
查看make參數(shù):
rpm --eval %{?_smp_mflags}
可以看到是根據(jù)核線程數(shù)量來編譯的。
構(gòu)建
QA_RPATHS=$(( 0x0001|0x0002 )) rpmbuild -bb SPECS/php-8.1.20-el8.spec
構(gòu)建成功的包如下:
php-8.1.20-custom.el8.x86_64.rpm
php-debugsource-8.1.20-custom.el8.x86_64.rpm
php-debuginfo-8.1.20-custom.el8.x86_64.rpm
目標(biāo)服務(wù)器安裝
#仍要安裝依賴的擴(kuò)展源,需啟用PowerTools
dnf install epel-release
dnf config-manager --set-enabled PowerTools # CentOS8
dnf config-manager --set-enabled powertools # Almalinux8文章來源:http://www.zghlxwxcb.cn/news/detail-783519.html
dnf localinstall php-*.rpm
或
dnf localinstall php-8.1.20-custom.el8.x86_64.rpm php-debugsource-8.1.20-custom.el8.x86_64.rpm php-debuginfo-8.1.20-custom.el8.x86_64.rpm文章來源地址http://www.zghlxwxcb.cn/news/detail-783519.html
支持的模塊
/opt/php81/bin/php -m
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
exif
FFI
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
intl
json
ldap
libxml
mbstring
mysqli
mysqlnd
odbc
openssl
pcntl
pcre
PDO
pdo_dblib
pdo_mysql
PDO_ODBC
pdo_pgsql
pdo_sqlite
pgsql
Phar
posix
pspell
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tidy
tokenizer
xml
xmlreader
xmlwriter
xsl
zip
zlib
[Zend Modules]
到了這里,關(guān)于構(gòu)建基于RHEL8系列(CentOS8,AlmaLinux8,RockyLinux8等)的支持63個(gè)常見模塊的PHP8.1.20的RPM包的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!