LAMP指的Linux(操作系统)、Apache(HTTP 服务器),MySQL(数据库软件)和PHP构建的web服务器。该网站架构是目前国际流行和通用的Web架构,LAMP跨平台、高性能等优势,是很多企业和公司搭建WEB服务的首选平台。
1)系统环境介绍
Centos 5.8 64位
Apache:httpd-2.4.4.tar.gz
PHP: php-5.4.17.tar.gz
Mysql: mysql-5.6.12.tar.gz
2)安装脚本
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
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
|
#!/bin/bash PATH= /usr/local/sbin : /usr/local/bin : /usr/sbin : /usr/bin : /sbin : /bin
export PATH
#INFO函数定义输出字体颜色,echo -e 表示保持字符串的特殊含义,$1表示字体颜色编号,$2表示等待程序执行时间,$3表示echo输出内容。 function INFO()
{ echo -e "\e[$1;49;1m: $3 \033[39;49;0m"
sleep "$2"
echo ""
} #非root用户不能执行该脚本 if [ "$UID" != 0 ];
then
echo " "
INFO 35 "0" "Must be root ro run this script."
exit 1
fi #USAGE函数定义脚本用法,可反复调用,basename其实就是脚本名,\n表示换行。 function USAGE()
{ INFO 35 "0.1" "Please see the script of the usage:"
basename =$( basename "$0" )
INFO \
36 "0" \
"$(echo -e " Usage: \n\n./$ basename (apache|mysql|php) install \n./$ basename apache (start|stop|restart) \n./$ basename mysql (start|stop|restart)\n ")"
} #YUM_INSTALL函数安装依赖包,可反复调用,$@表示所有参数都分别被双引号引住"$1","$2",而$*表示所有这些参数都被双引号引住"$1$2" function YUM_INSTALL()
{ for a in $@; do
INFO 32 1 "Install depend on the [ $a ]"
yum -y install $a || exit 1
if [ $a = "libXpm-devel" ]; then
ln -s /usr/lib/x86_64-linux-gnu/libXpm .so /usr/lib/libXpm .so
#elif [ $a = "libsasl2-dev" ]; then
# cp /usr/lib/x86_64-linux-gnu/libldap* /usr/lib/
fi
done
} #INSTALL函数定义安装程序,可一反复调用,安装apache程序的时候要先安装3个依赖包,在安装mysql的时候要用cmake编译。$1表示要安装的程序,$2表示yum安装对应的依赖包,$3表示程序解压后的目录,$4表示程序源码包。 function INSTALL()
{ YUM_INSTALL "$2" && cd $SOURCE_PATH
[ -d $3 ] && rm -r $3; INFO 31 4 "Unpack the $4 installation package......"
tar zxvf $4; cd $3 ; pwd ; INFO 32 4 "Configure the $1......"
if [ $1 = apache ];
then
cp -rf .. /apr-1 .4.8 srclib /apr
cp -rf .. /apr-util-1 .5.2 srclib /apr-util
. /configure $5 || exit 1
elif [ $1 = mysql ];
then
cmake $5 || exit 1
elif [ $1 = openssl ];
then
. /config $5 || exit 1
elif [ $1 = libpng ];
then
cp scripts /makefile .linux makefile
elif [ $1 = jpegsrc.v6b. tar .gz ];
then
cp /usr/share/libtool/config .guess ./
cp /usr/share/libtool/config .sub ./
. /configure $5 || exit 1
mkdir -p /usr/local/env/jpeg/bin
mkdir -p /usr/local/env/jpeg/lib
mkdir -p /usr/local/env/jpeg/include
mkdir -p /usr/local/env/jpeg/man/man1
else
. /configure $5 || exit 1
fi
INFO 36 3 "Compile $1......"
make || exit 1 && INFO 34 4 "Install $1......" ; make install && INFO 33 4 "$1 installation is successful......"
if [ $1 = mysql ];
then
echo $INSTALL_PATH /mysql/lib/mysql >> /etc/ld .so.conf
/sbin/ldconfig && INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if [ $1 = libiconv ];
then
echo "/usr/local/env/libiconv/lib" >> /etc/ld .so.conf
/sbin/ldconfig && INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if [ $1 = libxml2 ];
then
echo "/usr/local/env/libxml2/lib" >> /etc/ld .so.conf
/sbin/ldconfig && INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if [ $1 = libmcrypt ];
then
echo "/usr/local/env/libmcrypt/lib" >> /etc/ld .so.conf
/sbin/ldconfig && INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if [ $1 = mhash ];
then
echo "/usr/local/lib" >> /etc/ld .so.conf
echo "/usr/local/lib64" >> /etc/ld .so.conf
/sbin/ldconfig && INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if [ $1 = gettext ];
then
echo "/usr/local/env/gettext/lib" >> /etc/ld .so.conf
/sbin/ldconfig && INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if [ $1 = gd ];
then
sed -i '27 a void (*data);' /usr/local/env/gd/include/gd_io .h
echo "/usr/local/env/gd/lib" >> /etc/ld .so.conf
/sbin/ldconfig && INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if [ $1 = freetype ];
then
echo "/usr/local/env/freetype/lib" >> /etc/ld .so.conf
/sbin/ldconfig && INFO 33 4 "Add $1 library file to ld.so.conf......"
fi
if [ $1 = jpegsrc.v6b. tar .gz ];
then
echo "/usr/local/env/jpeg/lib" >> /etc/ld .so.conf
/sbin/ldconfig && INFO 33 4 "Add jpeg library file to ld.so.conf......"
fi
} #SERVICE函数定义程序启动,关闭,重启。 function SERVICE()
{ if [ $1 = apache -a $2 = start ]; then
$INSTALL_PATH/$1 /bin/apachectl -k start && \
INFO 33 "2.5" "Apache startup success......"
exit
elif [ $1 = apache -a $2 = stop ]; then
$INSTALL_PATH/$1 /bin/apachectl -k stop && \
INFO 31 "2.5" "Apache has stopped......"
exit
elif [ $1 = apache -a $2 = restart ]; then
$INSTALL_PATH/$1 /bin/apachectl -k stop ; sleep 2
INFO 31 "2.5" "Apache has stopped......"
$INSTALL_PATH/$1 /bin/apachectl -k start && \
INFO 34 "2.5" "Apache has restarted......"
exit
elif [ $1 = mysql -a $2 = start ]; then
/bin/bash $INSTALL_PATH/$1 /bin/mysqld_safe --defaults- file =$INSTALL_PATH/$1 /my .cnf 2>&1 > /dev/null &
INFO 33 "2.5" "Mysql startup success......"
echo -e "$(netstat -ntpl|grep " /:::3306 ")"
exit
elif [ $1 = mysql -a $2 = stop ]; then
kill $( netstat -ntpl| awk '/:::3306/{print $NF}' | awk -F '/' '{print $1}' ) && \
INFO 31 "2.5" "Mysql has stopped......"
exit
elif [ $1 = mysql -a $2 = restart ]; then
kill $( netstat -ntpl| awk '/:::3306/{print $NF}' | awk -F '/' '{print $1}' ) && \
INFO 31 "3" "Mysql has stopped......"
/bin/bash $INSTALL_PATH/$1 /bin/mysqld_safe --defaults- file =$INSTALL_PATH/$1 /my .cnf 2>&1 > /dev/null &
INFO 34 "2.5" "Mysql has restarted......"
exit
fi
} #CONFIG_MYSQL函数用来定义mysql的配置。 function CONFIG_MYSQL()
{ INFO 32 3 "Configure the mysql......"
groups mysql || groupadd mysql && id mysql || useradd -g mysql mysql
cd $INSTALL_PATH /mysql ; pwd
. /scripts/mysql_install_db \
--user=mysql \
--basedir=$INSTALL_PATH /mysql/ \
--datadir=$INSTALL_PATH /mysql/data/ \
--defaults- file =$INSTALL_PATH /mysql/my .cnf
echo "" ; sleep 3
cp $( dirname $SOURCE_PATH) /conf/my .cnf ./
INFO 35 2 "Mysql configuration is complete......"
} #CONFIG_HTTPD函数用来配置apache。 function CONFIG_HTTPD()
{ INFO 32 3 "Configure the apache......"
echo -e "<?php\nphpinfo();\n?>" > $INSTALL_PATH /apache/htdocs/phpinfo .php
sed -i 's/^\ \ \ \ AddType application\/x-gzip .gz .tgz$/&\n\ \ \ \ AddType application\/x-httpd-php .php/' \
$INSTALL_PATH /apache/conf/httpd .conf
sed -i 's/^#ServerName www.example.com:80$/&\nServerName 127.0.0.1:80/' $INSTALL_PATH /apache/conf/httpd .conf
INFO 35 2 "Apache configuration is complete......"
} #CONFIG_PHP函数用来配置php。 function CONFIG_PHP()
{ INFO 32 3 "Configure the php......"
cp $SOURCE_PATH/$1 /php .ini-development $INSTALL_PATH /php5/etc/php .ini
INFO 35 2 "Php configuration is complete......"
} #INSTALL_BRANCH函数定义程序安装,${TAR_NAME[@]}是shell脚本中数组写法,即取全部元素,即TAR_NAME里面的所有包,SERVER_NAME表示包的名称,COMPILE_DIR表示包名+版本后,即解压后的目录名。 function INSTALL_BRANCH()
{ for i in ${TAR_NAME[@]}; do
SERVER_NAME=$( echo $i| awk -F "-[0-9]" '{print $1}' )
COMPILE_DIR=$( echo $i| awk -F ".tar.gz" '{print $1}' )
if [ $1 = $SERVER_NAME -a $1 = apr ]; then
INSTALL apr " " "$COMPILE_DIR" "$i" "--prefix=/usr/local/env/apr"
elif [ $1 = $SERVER_NAME -a $1 = apr-util ]; then
INSTALL apr-util " " "$COMPILE_DIR" "$i" "--prefix=/usr/local/env/apr-util --with-apr=/usr/local/env/apr"
elif [ $1 = $SERVER_NAME -a $1 = pcre ]; then
INSTALL pcre " " "$COMPILE_DIR" "$i" "--prefix=/usr/local/env/pcre"
elif [ $1 = $SERVER_NAME -a $1 = httpd ]; then
INSTALL apache "$HTTP_YUM" "$COMPILE_DIR" "$i" "$HTTP_PARAMETERS"
CONFIG_HTTPD
elif [ $1 = $SERVER_NAME -a $1 = mysql ]; then
INSTALL mysql "$MYSQL_YUM" "$COMPILE_DIR" "$i" "$MYSQL_PARAMETERS"
CONFIG_MYSQL
elif [ $1 = $SERVER_NAME -a $1 = libiconv ]; then
INSTALL libiconv " " "$COMPILE_DIR" "$i" "--prefix=/usr/local/env/libiconv"
elif [ $1 = $SERVER_NAME -a $1 = libxml2 ]; then
INSTALL libxml2 " " "$COMPILE_DIR" "$i" "--prefix=/usr/local/env/libxml2 --with-iconv=/usr/local/env/libiconv"
elif [ $1 = $SERVER_NAME -a $1 = curl ]; then INSTALL curl " " "$COMPILE_DIR" "$i" "--prefix=/usr/local/env/curl --enable-utf8"
elif [ $1 = $SERVER_NAME -a $1 = libmcrypt ]; then INSTALL libmcrypt " " "$COMPILE_DIR" "$i" "--prefix=/usr/local/env/libmcrypt"
elif [ $1 = $SERVER_NAME -a $1 = mhash ]; then
INSTALL mhash " " "$COMPILE_DIR" "$i" " "
elif [ $1 = $SERVER_NAME -a $1 = mcrypt ]; then
INSTALL mcrypt " " "$COMPILE_DIR" "$i" "--prefix= /usr/local/env/mcrypt \
--with-libmcrypt-prefix= /usr/local/env/libmcrypt \
--with-libiconv-prefix= /usr/local/env/libiconv "
elif [ $1 = $SERVER_NAME -a $1 = gettext ]; then
INSTALL gettext " " "$COMPILE_DIR" "$i" "--prefix= /usr/local/env/gettext \
--with-libiconv-prefix= /usr/local/env/libiconv \
--with-libxml2-prefix= /usr/local/env/libxml2 "
elif [ $1 = $SERVER_NAME -a $1 = freetype ]; then
INSTALL freetype " " "$COMPILE_DIR" "$i" "--prefix=/usr/local/env/freetype"
elif [ $1 = $SERVER_NAME -a $1 = jpegsrc.v6b. tar .gz ]; then
COMPILE_DIR= "jpeg-6b"
INSTALL jpegsrc.v6b. tar .gz " " "$COMPILE_DIR" "$i" "--prefix=/usr/local/env/jpeg --enable-shared --enable-static"
elif [ $1 = $SERVER_NAME -a $1 = libpng ]; then
INSTALL libpng " " "$COMPILE_DIR" "$i" " "
elif [ $1 = $SERVER_NAME -a $1 = gd ]; then
INSTALL gd " " "$COMPILE_DIR" "$i" "--prefix= /usr/local/env/gd --with-png= /usr \
--with-freetype= /usr/local/env/freetype \
--with-jpeg= /usr/local/env/jpeg --with-fontconfig= /usr --with-xpm= /usr "
elif [ $1 = $SERVER_NAME -a $1 = openssl ]; then
INSTALL openssl " " "$COMPILE_DIR" "$i" "-fPIC --prefix=/usr/local/env/openssl shared"
elif [ $1 = $SERVER_NAME -a $1 = php ]; then
INSTALL php5 "$PHP5_YUM" "$COMPILE_DIR" "$i" "$PHP5_PARAMETERS"
CONFIG_PHP "$COMPILE_DIR"
break
else
continue
fi
done
} #MOD_CASE函数用KASE定义选择安装程序。 function MOD_CASE()
{ if [[ $1 =~ apache|mysql|php ]] && [[ $2 =~ install |start|stop|restart ]]; then
INFO 32 "1.5" "Input the correct,according to the option to perform related operations......"
echo ""
if [ $2 = install ]; then
case "$1 $2" in
"apache install" )
INFO 35 "2.5" "Start to $1 the $2......"
INSTALL_BRANCH apr
INSTALL_BRANCH apr-util
INSTALL_BRANCH pcre
INSTALL_BRANCH httpd
;;
"mysql install" )
INFO 35 "2.5" "Start to $1 the $2......"
INSTALL_BRANCH mysql
;;
"php install" )
INFO 35 "2.5" "Start to $1 the $2......"
export LD_LIBRARY_PATH= /lib/ : /usr/lib/ : /usr/local/lib : /usr/local/lamp/mysql/lib
INSTALL_BRANCH libiconv
INSTALL_BRANCH libxml2
INSTALL_BRANCH curl
INSTALL_BRANCH libmcrypt
INSTALL_BRANCH mhash
INSTALL_BRANCH mcrypt
INSTALL_BRANCH gettext
INSTALL_BRANCH freetype
INSTALL_BRANCH jpegsrc.v6b. tar .gz
INSTALL_BRANCH libpng
INSTALL_BRANCH gd
INSTALL_BRANCH openssl
#INSTALL_BRANCH httpd && INSTALL_BRANCH mysql && INSTALL_BRANCH php
INSTALL_BRANCH php
;;
esac
else
SERVICE $1 $2
fi
else
INFO 31 1 "Input error, please try again!"
INPUT
fi
} #LAMP程序安装的目录 INSTALL_PATH= "/usr/local/lamp"
#源码包存放目录 SOURCE_PATH= "$(cd $(dirname $0); pwd)/install_tar"
#源码包列表 TAR_NAME=(httpd-2.4.4. tar .gz mysql-5.6.12. tar .gz php-5.4.17. tar .gz apr-1.4.8. tar .gz apr-util-1.5.2. tar .gz pcre-8.10. tar .gz freetype-2.4.0. tar .gz jpegsrc.v6b. tar .gz libxml2-2.7.2. tar .gz mhash-0.9.9.9. tar .gz mcrypt-2.6.8. tar .gz gd-2.0.35. tar .gz libiconv-1.14. tar .gz gettext-0.18. tar .gz libmcrypt-2.5.8. tar .gz openssl-0.9.8p. tar .gz curl-7.32.0. tar .gz libpng-1.2.33. tar .gz)
#Apache,Mysql,PHP yum安装依赖包 HTTP_YUM= "build-essential libapr1 libapr1-dev libaprutil1 libaprutil1-dev gettext gettext-devel"
MYSQL_YUM= "cmake libncurses5 libncurses5-dev bison"
PHP5_YUM= "libxml2 libxml2-devel openssl libjpeg-devel bzip2 libXpm-devel libmcrypt-devel"
#Apache编译参数 HTTP_PARAMETERS="\ --prefix=$INSTALL_PATH /apache \
-- enable -module=so \
-- enable -module=rewrite \
-- enable -shard=rewrite \
-- enable -shared=max \
--with-apr= /usr/local/env/apr \
--with-apr-util= /usr/local/env/apr-util \
--with-pcre= /usr/local/env/pcre \
--with-included-apr \ " #mysql编译参数 MYSQL_PARAMETERS="\ -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH /mysql \
-DYSQL_TCP_PORT=3306 \ -DMYSQL_DATADIR=$INSTALL_PATH /mysql/data \
-DMYSQL_UNIX_ADDR=$INSTALL_PAHT /mysql/mysql .sock \
-DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DEXTRA_CHARSETS=all \ -DWITH_DEBUG=0 \ " #PHP编译参数 PHP5_PARAMETERS="\ --prefix=$INSTALL_PATH /php5 \
--with-config- file -path=$INSTALL_PATH /php5/etc \
--with-mysql=$INSTALL_PATH /mysql \
--with-apxs2=$INSTALL_PATH /apache/bin/apxs \
--with-mysqli=$INSTALL_PATH /mysql/bin/mysql_config \
--with-iconv= /usr/local/env/libiconv \
--with-jpeg- dir = /usr/local/env/jpeg \
--with-png- dir = /usr \
--with-libxml- dir = /usr/local/env/libxml2 \
--with-pdo-mysql \ --with-zlib \ --with-curl= /usr/local/env/curl \
--with-curlwrappers \ --with-mcrypt= /usr/local/env/libmcrypt \
--with-gd= /usr/local/env/gd \
--with-openssl= /usr/local/env/openssl \
--with-mhash= /usr \
--with-xmlrpc \ --with-xpm- dir \
--with-freetype- dir = /usr/local/env/freetype \
--with-zlib- dir \
--with-ldap \ --with-ldap-sasl \ --with-pcre-regex \ --with-gettext= /usr/local/env/gettext \
--with-ncurses \ -- enable -shared \
-- enable -xml \
-- enable -safe-mode \
-- enable -track-vars \
-- enable -magic-quotes \
-- enable -bcmath \
-- enable -sysvsem \
-- enable -sysshm \
-- enable -inline-optimization \
-- enable -mbregex \
-- enable -mbstring \
-- enable -gd-native-ttf \
-- enable -pcntl \
-- enable -sockets \
-- enable -zip \
-- enable -soap \
-- enable -discard-path \
-- enable -force-cgi-redirect \
-- enable -pdo \
-- enable -calendar \
-- enable -exif \
-- enable -zend-multibyte \
" #--disable-rpath #脚本调用帮助程序 if [ $ # = 2 ]
then
INFO 33 "1.5" "please wait......"
echo ""
MOD_CASE "$1" "$2"
else
USAGE
exit 1
fi |
3)脚本的用法
1
2
3
4
5
6
7
8
9
10
11
12
|
#下载安装脚本和源码包 wget https: //sourceforge .net /projects/opensourcefile/files/
Install_Centos_LAMP_v.0.1.zip /download --no-check-certificate
unzip Install_Centos_LAMP_v.0.1.zip chmod +x Install_Centos_LAMP_v.0.1.sh
#查看脚本的用法,可通过该脚本安装apache,mysql,php,启动,关闭和重启apache和mysql。 . /Install_Centos_LAMP_v .0.1.sh
: Please see the script of the usage: : Usage: . /Install_Centos_LAMP_v .0.1.sh (apache|mysql|php) install
. /Install_Centos_LAMP_v .0.1.sh apache (start|stop|restart)
. /Install_Centos_LAMP_v .0.1.sh mysql (start|stop|restart)
|
本脚本应用了Shell编程里面的函数,数组,流程控制,变量,字体的加亮等功能,希望对学习WEB和Shell编程的同学有所帮助,最后非常感谢我的同学宝宝的支持。
本文转自 sfzhang 51CTO博客,原文链接:http://blog.51cto.com/sfzhang88/1281640,如需转载请自行联系原作者