Skip to content

Instantly share code, notes, and snippets.

@krakjoe
Last active August 20, 2019 21:05
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save krakjoe/5044339 to your computer and use it in GitHub Desktop.
Save krakjoe/5044339 to your computer and use it in GitHub Desktop.
pthreads-helper to download/install php+pthreads isolated
#!/bin/bash
# This should be a path that the user executing the script can read and write
PHP_PATH=/opt/php-ts
# This should be a sensible version of PHP
PHP_VERSION=7.0.0
# This should be a sensible mirror for your location
PHP_MIRROR=uk1.php.net
# This should be a released version of pthreads
PHP_PTHREADS=3.1.5
# This should be set to 0 if you do not want to remove build directories
PHP_CLEAN=1
# This should be adjusted when you have worked out how to replicate your setup
PHP_EXTRACONF=--disable-all
# This should be adjusted for the number of cores on your system
PHP_CORES=16
# This should be set to 0 should you need to see build output
PHP_SILENT=1
#########################################################
# STOP EDITING UNLESS YOU KNOW WHAT YOU ARE DOING
#########################################################
# Set root location
PHP_CONF_ROOT=$(realpath .)
# Clean previous build directory, if required
if [ $PHP_CLEAN -eq 1 ];
then
rm -rf $PHP_CONF_ROOT/php-$PHP_VERSION
rm -rf $PHP_CONF_ROOT/php-$PHP_VERSION.tar.bz2
rm -rf $PHP_CONF_ROOT/pthreads-$PHP_PTHREADS.tgz
fi
# Download PHP sources
echo "Downloading PHP $PHP_VERSION from $PHP_MIRROR ..."
[ -f $PHP_CONF_ROOT/php-$PHP_VERSION.tar.bz2 ] ||
wget -q http://www.php.net/get/php-$PHP_VERSION.tar.bz2/from/$PHP_MIRROR/mirror -O $PHP_CONF_ROOT/php-$PHP_VERSION.tar.bz2
if [ -f $PHP_CONF_ROOT/php-$PHP_VERSION.tar.bz2 ];
then
# Unpack PHP
echo "Unpacking PHP $PHP_VERSION ..."
tar -xf $PHP_CONF_ROOT/php-$PHP_VERSION.tar.bz2
if [ -d $PHP_CONF_ROOT/php-$PHP_VERSION ];
then
# Download pthreads
echo "Downloading pthreads $PHP_PTHREADS ..."
wget -q http://pecl.php.net/get/pthreads-$PHP_PTHREADS.tgz -O $PHP_CONF_ROOT/pthreads-$PHP_PTHREADS.tgz
if [ -f $PHP_CONF_ROOT/pthreads-$PHP_PTHREADS.tgz ];
then
# Unpack pthreads
echo "Unpacking pthreads $PHP_PTHREADS ..."
cd $PHP_CONF_ROOT/php-$PHP_VERSION/ext/
tar -xf $PHP_CONF_ROOT/pthreads-$PHP_PTHREADS.tgz
mv $PHP_CONF_ROOT/php-$PHP_VERSION/ext/pthreads-$PHP_PTHREADS $PHP_CONF_ROOT/php-$PHP_VERSION/ext/pthreads
# Reconfigure sources
cd $PHP_CONF_ROOT/php-$PHP_VERSION
./buildconf --force && \
./configure --prefix=$PHP_PATH \
--enable-maintainer-zts \
--with-config-file-path=$PHP_PATH \
--with-config-file-scan-dir=$PHP_PATH/modules.d \
--enable-pthreads $PHP_EXTRACONF
if [ $? -eq 0 ];
then
if [ $PHP_SILENT -eq 1 ];
then
echo "Building PHP $PHP_VERSION @ $PHP_PATH ..."
make -j$PHP_CORES -C $PHP_CONF_ROOT/php-$PHP_VERSION 2>&1 >/dev/null
else
make -j$PHP_CORES -C $PHP_CONF_ROOT/php-$PHP_VERSION
fi
if [ $? -eq 0 ];
then
echo "Installing PHP $PHP_VERSION ..."
make -C $PHP_CONF_ROOT/php-$PHP_VERSION install
if [ $? -eq 0 ];
then
echo "Success: PHP $PHP_VERSION installed with pthreads support @ $PHP_PATH/bin/php"
$PHP_PATH/bin/php -m
exit 0
fi
else
echo "Error: failed to build PHP"
exit 4
fi
else
echo "Error: failed to configure PHP"
exit 3
fi
else
echo "Error: failed to download pthreads sources"
exit 2
fi
else
echo "Error: failed to unpack PHP sources"
exit 1
fi
fi
@mlshvdv
Copy link

mlshvdv commented Sep 22, 2018

Due the changes of PHP downloads page it makes a sense to replace this:

wget -q http://www.php.net/get/php-$PHP_VERSION.tar.bz2/from/$PHP_MIRROR/mirror -O $PHP_CONF_ROOT/php-$PHP_VERSION.tar.bz2

by this:

wget -q http://$PHP_MIRROR/get/php-$PHP_VERSION.tar.bz2/from/this/mirror -O $PHP_CONF_ROOT/php-$PHP_VERSION.tar.bz2

@NabiKAZ
Copy link

NabiKAZ commented Aug 12, 2019

I get this warning message:

/root/pthreads/pthreads/php-7.0.0/ext/curl/interface.c:74:5: warning: #warning "libcurl was compiled with SSL support, but configure could not determine which" "library was used; thus no SSL crypto locking callbacks will be set, which may " "cause random crashes on SSL requests" [-Wcpp]
# warning
   ^

@NabiKAZ
Copy link

NabiKAZ commented Aug 20, 2019

I get this warning message:

/root/pthreads/pthreads/php-7.0.0/ext/curl/interface.c:74:5: warning: #warning "libcurl was compiled with SSL support, but configure could not determine which" "library was used; thus no SSL crypto locking callbacks will be set, which may " "cause random crashes on SSL requests" [-Wcpp]
# warning
   ^

For resolve this warning, I was found a solution.

Generally, when I install curl with yum install -y curl-devel, See the curl installed without openssl:

# curl -V
curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.36 zlib/1.2.7 libidn/1.28 libssh2/1.4.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz unix-sockets

So I was try install it from source:

yum install -y openssl-devel
wget https://curl.haxx.se/download/curl-7.65.3.tar.gz
tar xvfz curl-7.65.3.tar.gz
cd curl-7.65.3
./configure --with-ssl
make
make install

Now you can see, curl installed with openssl: (maybe needed restart your console)

# curl -V
curl 7.65.3 (x86_64-pc-linux-gnu) libcurl/7.65.3 OpenSSL/1.0.2k-fips zlib/1.2.7
Release-Date: 2019-07-19
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS HTTPS-proxy IPv6 Largefile libz NTLM NTLM_WB SSL UnixSockets

So current pthreads-helper script works well without any warning 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment