-
Notifications
You must be signed in to change notification settings - Fork 0
/
build-qycli-php74
132 lines (107 loc) · 4.48 KB
/
build-qycli-php74
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/bin/bash
sed -re 's/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' -i /etc/apt/sources.list
mkdir /etc/apt/disabled.apt.conf.d/
dpkg-divert --divert /etc/apt/disabled.apt.conf.d/99needrestart --rename /etc/apt/apt.conf.d/99needrestart
# Install dependencies
apt update && apt upgrade -y
apt -y install build-essential software-properties-common patchelf rsync curl wget tar php-pear libxml2-dev pkg-config libcurl4-openssl-dev libssl-dev libpng-dev libjpeg-dev libwebp-dev libmagickwand-dev libzip-dev libargon2-dev libonig-dev libsodium-dev libgmp-dev libbz2-dev libmcrypt-dev libldap-dev libfreetype-dev
# Download PHP
php_major_version=7.4
php_version=$(curl -s https://www.php.net/downloads.php | tac | tac | grep "<h3 id=\"v$php_major_version.*" | grep -o -P '(?<="v).*(?=" class)')
php_version_short=$(echo "$php_major_version" | tr -d ".")
compile_prefix=/usr/src/qycli/php-"$php_version_short"
install_prefix=/var/qyc/bin/php"$php_version_short"
lib_path=/lib/lib/
lib_path_full="$install_prefix""$lib_path"
result_volume_dir=/php"$php_version_short"-result
#export PHP_RPATHS='/lib/qycli/21.10'
[[ -d /usr/src/qycli/php-${php_version_short} ]] && rm -rf "$compile_prefix"
mkdir -p "$compile_prefix"
cd "$compile_prefix" || exit
# Downloading supported PHP versions
wget -O php-"$php_version".tar.xz https://www.php.net/distributions/php-"$php_version".tar.xz
tar -xf php-"$php_version".tar.xz --strip-components=1
# Downloading external extensions
declare -a extensions=("imagick" "redis")
for ext in "${extensions[@]}"; do
wget -O "$ext".tgz https://pecl.php.net/get/"$ext"
mkdir -p ext/"$ext"
tar -zxf "$ext".tgz --strip-components=1 -C ext/"$ext"/
done
# Deleting configure script for extensions to be compiled also
rm configure
./buildconf --force
./configure \
--prefix="$install_prefix" \
--with-openssl \
--enable-fpm \
--disable-cgi \
--disable-phpdbg \
--enable-sockets \
--without-sqlite3 \
--without-pdo-sqlite \
--with-mysqli \
--with-pdo-mysql \
--enable-ctype \
--with-curl \
--enable-exif \
--enable-mbstring \
--with-zip \
--with-bz2 \
--enable-bcmath \
--with-jpeg \
--with-webp \
--enable-intl \
--enable-pcntl \
--with-ldap \
--with-gmp \
--with-password-argon2 \
--with-sodium \
--with-zlib \
--with-freetype \
--enable-soap \
--enable-gd \
--with-imagick \
--enable-redis=shared
# Compile
make -j4
make install
rsync -a --mkpath "$install_prefix"/ "$result_volume_dir""$install_prefix"
# Getting dynamic libraries
ldd "$install_prefix"/sbin/php-fpm | grep -o "/.* " | cut -d ' ' -f 1 >>"$compile_prefix"/alllibs
for lib in $(ldd "$install_prefix"/sbin/php-fpm | grep -o "/.* "); do
ldd "$lib" | grep -o "/.* " | cut -d ' ' -f 1 >>"$compile_prefix"/alllibs
for lib2 in $(ldd "$lib" | grep -o "/.* "); do
ldd "$lib2" | grep -o "/.* " | cut -d ' ' -f 1 >>"$compile_prefix"/alllibs
for lib3 in $(ldd "$lib2" | grep -o "/.* "); do
ldd "$lib3" | grep -o "/.* " | cut -d ' ' -f 1 >>"$compile_prefix"/alllibs
done
done
done
cd "$install_prefix"/lib/php/extensions/ || exit
cd "$(ls)" || exit
for ext in *; do
ldd "$ext" | grep -o "/.* " | cut -d ' ' -f 1 >>"$compile_prefix"/alllibs
for lib in $(ldd "$ext" | grep -o "/.* "); do
ldd "$lib" | grep -o "/.* " | cut -d ' ' -f 1 >>"$compile_prefix"/alllibs
for lib2 in $(ldd "$lib" | grep -o "/.* "); do
ldd "$lib2" | grep -o "/.* " | cut -d ' ' -f 1 >>"$compile_prefix"/alllibs
done
done
done
sort -u "$compile_prefix"/alllibs >"$compile_prefix"/libssorted
mkdir -p "$result_volume_dir""$lib_path_full"
while IFS= read -r lib; do
libtarget="$result_volume_dir""$lib_path_full""$(basename "$lib")"
rsync -aL "$lib" "$libtarget"
# shellcheck disable=SC2016
patchelf --set-rpath '$ORIGIN' "$libtarget"
done <"$compile_prefix"/libssorted
# Fix interpreter
interpreter_old="$(patchelf --print-interpreter "$install_prefix"/sbin/php-fpm)"
# shellcheck disable=SC2016
origin_lib_path='$ORIGIN/..'"$lib_path"
interpreter_new="$lib_path_full""$(basename "$interpreter_old")"
cp "$interpreter_old" "$result_volume_dir""$lib_path_full""$(basename "$interpreter_old")"
patchelf --set-interpreter "$interpreter_new" --set-rpath "$origin_lib_path" "$result_volume_dir""$install_prefix"/sbin/php-fpm
patchelf --set-interpreter "$interpreter_new" --set-rpath "$origin_lib_path" "$result_volume_dir""$install_prefix"/bin/php