-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathenvironment
348 lines (285 loc) · 11 KB
/
environment
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
#!/usr/bin/env bash
AUTHOR="Artem Teleshev <artem.teleshev@gmail.com>"
VERSION="1.0"
SCRIPT_DIR_ETC=$SCRIPT_DIR/etc
VERSION_FILE=$SCRIPT_DIR_ETC/version
DOMAIN_FILE=$SCRIPT_DIR_ETC/domain
INSTALLATION_DIR=/usr/local/lib
PHP_NAME=php
PHP_VERSION=$(cat $VERSION_FILE)
PHP_FULL_NAME=$PHP_NAME-$PHP_VERSION
# If you wont to use PHP snaps:
# PHP_FULL_NAME=$PHP_NAME$PHP_VERSION
DIR=$INSTALLATION_DIR/$PHP_NAME$PHP_VERSION
DIR_SRC=$DIR/src
PHP_DIR=$DIR_SRC/$PHP_FULL_NAME
PHP_ARCHIVE_TYPE=tar.bz2
PHP_ARCHIVE_NAME=$PHP_FULL_NAME.$PHP_ARCHIVE_TYPE
DOWNLOAD_HOST=$(cat $DOMAIN_FILE)
DOWNLOAD_URL="http://$DOWNLOAD_HOST/distributions/$PHP_ARCHIVE_NAME"
# If you wont to use PHP snaps:
# DOWNLOAD_URL="http://snaps.php.net/php5.4-201312170830.tar.bz2"
PREFIX=$DIR
EPREFIX=$PREFIX
PHP=$EPREFIX/bin/php
PHPFPM=$EPREFIX/sbin/php-fpm
PECL=$EPREFIX/bin/pecl
PEAR=$EPREFIX/bin/pear
PHPIZE=$EPREFIX/bin/phpize
PHPCONFIG=$EPREFIX/bin/php-config
PHP_INI_DIR=$PREFIX/etc
EXTENSION_INI_DIR=$PHP_INI_DIR/php
if [ -x "$PHPCONFIG" ]; then
EXTENSION_DIR=$($PHPCONFIG --extension-dir)
fi
if [ -x "$PEAR" ]; then
PEAR_DOWNLOAD_DIR=$($PEAR config-get download_dir)
fi
PECL_DOWNLOAD_URL="https://pecl.php.net/get"
PECL_DOWNLOAD_ARCHIVE_TYPE="tgz"
function validate_version() { # {{{
if [[ ! "$1" =~ ^[0-9]+(\.[0-9]+){1,2}$ ]] ; then
echo "Incorrect PHP version: '$1' (correct example: 5.4.28)"
exit 1
fi
} # }}}
# Extensions {{{
declare -A EXTENSIONS
# 1***
EXTENSIONS["pcntl:url"]="http://php.net/manual/ru/book.pcntl.php"
EXTENSIONS["pcntl:name"]=pcntl
EXTENSIONS["pcntl:type"]=extension
EXTENSIONS["pcntl:source"]=$PHP_DIR/ext/pcntl
EXTENSIONS["pcntl:configure"]=" --enable-pcntl"
EXTENSIONS["pcntl:summary"]="Process control"
EXTENSIONS["pcntl:version"]=$PHP_VERSION
EXTENSIONS["pcntl:priority"]=1000
EXTENSIONS["opcache:url"]="http://pecl.php.net/package/opcache"
EXTENSIONS["opcache:name"]=opcache
EXTENSIONS["opcache:type"]=zend_extension
EXTENSIONS["opcache:summary"]="Zend OPcache"
EXTENSIONS["opcache:version"]=$PHP_VERSION
#EXTENSIONS["opcache:version"]="7.0.5" # <= PHP5.4
EXTENSIONS["opcache:priority"]=1010
# 2***
EXTENSIONS["raphf:url"]="http://pecl.php.net/package/raphf"
EXTENSIONS["raphf:name"]=raphf
EXTENSIONS["raphf:type"]=extension
EXTENSIONS["raphf:summary"]="Resource and persistent handles factory"
EXTENSIONS["raphf:version"]="1.1.2" # PHP5.6
#EXTENSIONS["raphf:version"]="2.0.0" # PHP7
EXTENSIONS["raphf:priority"]=2000
EXTENSIONS["propro:url"]="http://pecl.php.net/package/propro"
EXTENSIONS["propro:name"]=propro
EXTENSIONS["propro:type"]=extension
EXTENSIONS["propro:summary"]="Property proxy"
EXTENSIONS["propro:version"]="1.0.2" # PHP5.6
#EXTENSIONS["propro:version"]="2.0.1" # PHP7
EXTENSIONS["propro:priority"]=2010
# 3***
EXTENSIONS["http:url"]="http://pecl.php.net/package/pecl_http"
EXTENSIONS["http:name"]=pecl_http
EXTENSIONS["http:type"]=extension
EXTENSIONS["http:summary"]="Extended HTTP Support"
EXTENSIONS["http:version"]="2.5.6" # PHP5.6
#EXTENSIONS["http:version"]="3.0.1" # PHP7
#EXTENSIONS["http:version"]="1.7.6" # sf-1.4
EXTENSIONS["http:priority"]=3000
EXTENSIONS["pthreads:url"]="http://pecl.php.net/package/pthreads"
EXTENSIONS["pthreads:name"]=pthreads
EXTENSIONS["pthreads:type"]=extension
EXTENSIONS["pthreads:summary"]="Threading API"
EXTENSIONS["pthreads:version"]="2.0.10" # PHP5.6
#EXTENSIONS["pthreads:version"]="3.1.6" # PHP7
EXTENSIONS["pthreads:priority"]=3010
# 4***
EXTENSIONS["gearman:url"]="http://pecl.php.net/package/gearman"
EXTENSIONS["gearman:name"]=gearman
EXTENSIONS["gearman:type"]=extension
EXTENSIONS["gearman:summary"]="PHP wrapper to libgearman"
EXTENSIONS["gearman:version"]="1.1.2"
EXTENSIONS["gearman:priority"]=4000
EXTENSIONS["memcached:url"]="http://pecl.php.net/package/memcached"
EXTENSIONS["memcached:name"]=memcached
EXTENSIONS["memcached:type"]=extension
EXTENSIONS["memcached:configure"]=" --disable-memcached-sasl"
EXTENSIONS["memcached:summary"]="Interfacing with memcached via libmemcached library"
EXTENSIONS["memcached:version"]="2.2.0"
EXTENSIONS["memcached:priority"]=4010
EXTENSIONS["couchbase:url"]="http://pecl.php.net/package/couchbase"
EXTENSIONS["couchbase:name"]=couchbase
EXTENSIONS["couchbase:type"]=extension
EXTENSIONS["couchbase:summary"]="Couchbase Server PHP extension"
EXTENSIONS["couchbase:version"]="2.2.0"
EXTENSIONS["couchbase:priority"]=4020
EXTENSIONS["cassandra:url"]="http://pecl.php.net/package/cassandra"
EXTENSIONS["cassandra:name"]=cassandra
EXTENSIONS["cassandra:type"]=extension
EXTENSIONS["cassandra:summary"]="DataStax PHP Driver for Apache Cassandra"
EXTENSIONS["cassandra:version"]="1.1.0"
EXTENSIONS["cassandra:priority"]=4030
EXTENSIONS["imagick:url"]="http://pecl.php.net/package/imagick"
EXTENSIONS["imagick:name"]=imagick
EXTENSIONS["imagick:type"]=extension
EXTENSIONS["imagick:summary"]="Provides a wrapper to the ImageMagick library"
EXTENSIONS["imagick:version"]="3.4.1"
EXTENSIONS["imagick:priority"]=4030
EXTENSIONS["redis:url"]="http://pecl.php.net/package/redis"
EXTENSIONS["redis:name"]=redis
EXTENSIONS["redis:type"]=extension
EXTENSIONS["redis:summary"]="Provides a wrapper to the Redis driver"
EXTENSIONS["redis:version"]="2.2.7"
EXTENSIONS["redis:priority"]=4040
EXTENSIONS["amqp:url"]="http://pecl.php.net/package/amqp"
EXTENSIONS["amqp:name"]=amqp
EXTENSIONS["amqp:type"]=extension
EXTENSIONS["amqp:summary"]="implementation of amqp protocol"
EXTENSIONS["amqp:version"]="1.7.1"
EXTENSIONS["amqp:priority"]=4050
EXTENSIONS["ssh2:url"]="https://pecl.php.net/package/ssh2"
EXTENSIONS["ssh2:name"]=ssh2
EXTENSIONS["ssh2:type"]=extension
EXTENSIONS["ssh2:summary"]="Bindings for the libssh2 library"
EXTENSIONS["ssh2:version"]="0.13"
EXTENSIONS["ssh2:priority"]=4060
# 5***
EXTENSIONS["xdebug:url"]="http://pecl.php.net/package/xdebug"
EXTENSIONS["xdebug:name"]=xdebug
EXTENSIONS["xdebug:type"]=zend_extension
EXTENSIONS["xdebug:summary"]="Provides functions for function traces and profiling"
EXTENSIONS["xdebug:version"]="2.4.0"
EXTENSIONS["xdebug:priority"]=5000
# }}}
function prepare_php_extension() { # {{{
EXTENSION=$1
CUSTOM_VERSION=$2
EXTENSION_NAME=${EXTENSIONS["$EXTENSION:name"]}
EXTENSION_TYPE=${EXTENSIONS["$EXTENSION:type"]}
EXTENSION_SUMMARY=${EXTENSIONS["$EXTENSION:summary"]}
EXTENSION_VERSION=${CUSTOM_VERSION:-${EXTENSIONS["$EXTENSION:version"]}}
EXTENSION_PRIORITY=${EXTENSIONS["$EXTENSION:priority"]}
EXTENSION_FULL_NAME=$EXTENSION_NAME-$EXTENSION_VERSION
if [ ! ${EXTENSIONS["$EXTENSION:source"]} ] ; then
EXTENSION_SOURCE=$DIR_SRC/$EXTENSION_FULL_NAME
else
EXTENSION_SOURCE=${EXTENSIONS["$EXTENSION:source"]}
fi
EXTENSION_ARCHIVE="${EXTENSION_SOURCE}.${PECL_DOWNLOAD_ARCHIVE_TYPE}"
if [ ! ${EXTENSIONS["$EXTENSION:configure"]} ] ; then
EXTENSION_CONGIFURE=""
else
EXTENSION_CONGIFURE=${EXTENSIONS["$EXTENSION:configure"]}
fi
EXTENSION_SO=$EXTENSION.so
EXTENSION_PATH_TO_SO=$EXTENSION_DIR/$EXTENSION_SO
EXTENSION_INI=$EXTENSION_PRIORITY-$EXTENSION.ini
EXTENSION_PATH_TO_INI=$EXTENSION_INI_DIR/$EXTENSION_INI
} # }}}
function check_php_extension() { # {{{
if [ ! $EXTENSION ] ; then
echo "You need prepare php extension"
exit 1
fi
if [ -f $EXTENSION_PATH_TO_INI ] ; then
echo "The '$EXTENSION' PHP extension is already installed in PHP $PHP_VERSION"
echo -n "Reinstall '$EXTENSION' extension? (yes/[no]): "
while read INPUTTED_CONFIRMATION
do
if [ "$INPUTTED_CONFIRMATION" = "yes" ] ; then
echo -n "Started to delete '$EXTENSION' extension for PHP $PHP_VERSION ... "
rm $EXTENSION_PATH_TO_INI || echo "[ Error ]" && echo "[ OK ]"
if [ -f $EXTENSION_PATH_TO_SO ] ; then
rm $EXTENSION_PATH_TO_SO || exit 1
fi;
else
echo "Cancel installation '$EXTENSION' extension for PHP $PHP_VERSION ... [ OK ]"
exit 1
fi
break
done
fi;
if [ ! -d $EXTENSION_INI_DIR ] ; then
mkdir -p $EXTENSION_INI_DIR || exit 1
fi;
} # }}}
function install_php_extension() { # {{{
echo "Started installation: '$EXTENSION_NAME' ($EXTENSION_VERSION)"
cd $EXTENSION_SOURCE || exit 1 && echo "Change current directory to '$EXTENSION_SOURCE'"
$PHPIZE || exit 1
# configure
# echo "./configure --prefix=$PREFIX --exec-prefix=$EPREFIX --enable-shared=PKGS --with-php-config=$PHPCONFIG $EXTENSION_CONGIFURE"
./configure --prefix=$PREFIX --exec-prefix=$EPREFIX --enable-shared=PKGS --with-php-config=$PHPCONFIG $EXTENSION_CONGIFURE || exit 1
# install
make install || exit 1
} # }}}
function enable_php_extension() { # {{{
if [ ! -d ${EXTENSION_INI_DIR} ] ; then
mkdir -p ${EXTENSION_INI_DIR} || exit 1
fi;
if [ ! -f ${EXTENSION_PATH_TO_INI} ] ; then
touch ${EXTENSION_PATH_TO_INI} || exit 1
fi;
echo "${EXTENSION_TYPE}=${EXTENSION_PATH_TO_SO}" > ${EXTENSION_PATH_TO_INI} || exit 1 && echo "Save '${EXTENSION_TYPE}=${EXTENSION_PATH_TO_SO}' to '${EXTENSION_PATH_TO_INI}'"
} # }}}
# $1 - module name (mandatory); $2 - custom version (optional)
function install_php_pecl_extension() { # {{{
prepare_php_extension $1 $2
check_php_extension
cd $DIR_SRC && echo "Change current directory to '$DIR_SRC'" || exit 1
echo "Download ('${EXTENSION_FULL_NAME}'): ${PECL_DOWNLOAD_URL}/${EXTENSION_FULL_NAME}.${PECL_DOWNLOAD_ARCHIVE_TYPE} > ${EXTENSION_ARCHIVE}"
curl -sL "${PECL_DOWNLOAD_URL}/${EXTENSION_FULL_NAME}.${PECL_DOWNLOAD_ARCHIVE_TYPE}" > "${EXTENSION_SOURCE}.${PECL_DOWNLOAD_ARCHIVE_TYPE}" || exit 2
# $PECL download $EXTENSION_FULL_NAME || exit 2
if [ -f $DIR_SRC/channel.xml ] ; then
rm $DIR_SRC/channel.xml
fi;
echo "Start unzip: '${EXTENSION_ARCHIVE}'"
if [ -f ${EXTENSION_ARCHIVE} ]; then
gzip -d < ${EXTENSION_ARCHIVE} | tar -xvf - || exit 3
elif [ -f $EXTENSION_SOURCE.tar ]; then
tar -xvf $EXTENSION_SOURCE.tar || exit 4
else
echo "Incorrect ${EXTENSION_SOURCE} file extension, allowed: tgz, tar"
exit 5
fi
if [ -f $DIR_SRC/package.xml ] ; then
rm $DIR_SRC/package.xml
fi;
install_php_extension
enable_php_extension
} # }}}
function install_php_source_extension() { # {{{
prepare_php_extension $1
check_php_extension
install_php_extension
enable_php_extension
} # }}}
function create_symlink_to() { # {{{
SYMLINK_NAME=$1
SYMLINK_FROM=$2
SYMLINK_TO=$3
SYMLINK=$SYMLINK_FROM/$SYMLINK_NAME
echo " "
echo "Trying to create symlink '$SYMLINK' in $SYMLINK_TO";
echo "-----"
if [ -e $SYMLINK ] ; then
if [ -d $SYMLINK_TO ] ; then
echo -n " Trying to change current directory to: '$SYMLINK_TO' ... "
cd $SYMLINK_TO || echo "[ Error ]" && echo "[ OK ]"
if [ "$(pwd)" = "$SYMLINK_TO" ] ; then
if [ -L $SYMLINK_NAME ] || [ -e $SYMLINK_NAME ] ; then
echo -n " Trying to delete '$SYMLINK_NAME' ... "
$EXECUTE_FROM_ROOT rm $SYMLINK_NAME || echo "[ Error ]" && echo "[ OK ]"
fi
echo -n " Trying to create symlink to: '$SYMLINK' ... "
$EXECUTE_FROM_ROOT ln -s $SYMLINK || echo "[ Error ]" && echo "[ OK ]"
else
echo " [ Error ] Can't change current directory to: '$SYMLINK_TO'"
fi
else
echo " [ Error ] Can't find directory: '$SYMLINK_TO'"
fi
else
echo " [ Error ] '$SYMLINK' doesn't exist"
fi
echo " "
} # }}}