http://netkiller.sourceforge.net/architect/operations/lamp.html
?
?
#!/bin/bash #================================================================================ # LAMP Installing script by Neo <openunix@163.com> # http://netkiller.sourceforge.net/ # $Id$ #================================================================================ SRC_DIR=$(pwd) PREFIX_DIR=/srv EMAIL=webmaster@example.com #================================================================================ HTTPD_SRC='httpd-2.2.21.tar.gz' PHP_SRC='php-5.3.8.tar.gz' MYSQL_SRC='mysql-5.5.9.tar.gz' MYSQL_LIBS_SRC='mysql-5.1.50.tar.gz' MYSQL_BIN='mysql-5.1.50-linux-x86_64-glibc23.tar.gz' JAVA_BIN='jdk-6u20-linux-x64.bin' #================================================================================ HTTPD_DIR=${HTTPD_SRC%%.tar.gz} PHP_DIR=${PHP_SRC%%.tar.*} MYSQL_DIR=${MYSQL_SRC%%.tar.*} MYSQL_LIBS_DIR=${MYSQL_LIBS_SRC%%.tar.*} #================================================================================ if [ -z "$( egrep "CentOS|Redhat" /etc/issue)" ]; then echo 'Only for Redhat or CentOS' exit fi function clean(){ rm -rf $HTTPD_DIR rm -rf $PHP_DIR rm -rf $MYSQL_DIR rm -rf $MYSQL_LIBS_DIR } function depend(){ yum install gcc gcc-c++ make autoconf -y yum install curl-devel libmcrypt-devel gd-devel libjpeg-devel libpng-devel libXpm-devel libxml2-devel libxslt-devel mhash-devel openldap-devel -y yum install ncurses-devel -y # yum install mysql-devel -y yum install libevent-devel -y yum install e4fsprogs -y yum install net-snmp-devel -y yum install setuptool ntsysv system-config-network-tui -y #rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm } function httpd(){ rm -rf $HTTPD_DIR tar zxf $HTTPD_SRC cd $HTTPD_DIR RETVAL=$? [[ $RETVAL != 0 ]] && echo "Static: "$RETVAL && exit $? vim server/mpm/worker/worker.c <<end > /dev/null 2>&1 :%s/#define DEFAULT_SERVER_LIMIT 16/#define DEFAULT_SERVER_LIMIT 256/ :%s/#define DEFAULT_THREAD_LIMIT 64/#define DEFAULT_THREAD_LIMIT 1024/ :wq end #define MAX_SERVER_LIMIT 20000 #define MAX_THREAD_LIMIT 20000 [[ $? -ne 0 ]] && echo "Step: server/mpm/worker/worker.c" && exit $? ./configure --prefix=$PREFIX_DIR/$HTTPD_DIR \ --with-mpm=worker \ --enable-modules="so dir mime rewrite deflate vhost_alias include" \ --enable-mods-shared="alias filter expires headers setenvif status info ssl usertrack cache mem-cache file-cache disk-cache version mod_unique_id " \ --disable-authn_file \ --disable-authn_default \ --disable-authz_groupfile \ --disable-authz_user \ --disable-authz_default \ --disable-auth_basic \ --disable-version \ --disable-env \ --disable-autoindex \ --disable-asis \ --disable-cgid \ --disable-cgi \ --disable-negotiation \ --disable-actions \ --disable-userdir \ --enable-so \ --enable-file-cache \ --enable-cache \ --enable-disk-cache \ --enable-mem-cache \ --enable-expires \ --enable-headers \ --enable-ssl \ --enable-info \ --enable-rewrite #--with-mpm=worker \ #--enable-so \ #--enable-mods-shared=all \ #--disable-alias #--disable-include \ #--disable-status \ [[ $? -ne 0 ]] && echo "Step: configure" && exit $? make clean make [[ $? -ne 0 ]] && echo "Step: make" && exit $? make install [[ $? -ne 0 ]] && echo "Step: make install" && exit $? cd .. ln -s $PREFIX_DIR/$HTTPD_DIR $PREFIX_DIR/httpd ln -s $PREFIX_DIR/httpd $PREFIX_DIR/apache cp $PREFIX_DIR/httpd/conf/httpd.conf $PREFIX_DIR/httpd/conf/httpd.conf.original mkdir -p /www/logs/error vim $PREFIX_DIR/httpd/conf/httpd.conf <<end > /dev/null 2>&1 :%s/User daemon/User nobody/ :%s/Group daemon/Group nobody/ :%s/ServerAdmin you@example.com/ServerAdmin $EMAIL/ :%s!#ServerName www.example.com:80!#ServerName www.example.com:80\rServerName 127.0.0.1! :%s#$PREFIX_DIR/$HTTPD_DIR/htdocs#/www#g :%s/#\n AllowOverride None/#\r AllowOverride All/ :%s# DirectoryIndex index.html# DirectoryIndex index.html index.php# :%s= #AddType text/html .shtml= AddType text/html .shtml= :%s= #AddOutputFilter INCLUDES .shtml= AddOutputFilter INCLUDES .shtml= :%s=AddOutputFilter INCLUDES .shtml=AddOutputFilter INCLUDES .shtml\r\r AddType application/x-httpd-php .php .phtml\r AddType application/x-httpd-php-source .phps\r= :%s#ErrorLog "logs/error_log"#ErrorLog "| $PREFIX_DIR/httpd/bin/rotatelogs /www/logs/error/error.%Y-%m-%d.log 86400 480"# :%s=#Include conf/extra/httpd-info.conf=Include conf/extra/httpd-info.conf= :%s=#Include conf/extra/httpd-mpm.conf=Include conf/extra/httpd-mpm.conf= :%s=#Include conf/extra/httpd-languages.conf=Include conf/extra/httpd-languages.conf= :%s=#Include conf/extra/httpd-vhosts.conf=Include conf/extra/httpd-vhosts.conf= :%s=#Include conf/extra/httpd-default.conf=Include conf/extra/httpd-default.conf= :wq end #:%s!Listen 80!Listen 0.0.0.0:80! #:%s!#ServerName www.example.com:80!#ServerName www.example.com:80\rServerName *! #vim $PREFIX_DIR/httpd/conf/extra/httpd-mpm.conf <<end > /dev/null 2>&1 #:%s/<IfModule mpm_worker_module>/<IfModule mpm_worker_module>\r ServerLimit 16\r ThreadLimit 128/ #:%s/StartServers 2/StartServers 8/ #:%s/MaxClients 150/MaxClients 2048/ #:%s/MinSpareThreads 25/MinSpareThreads 64/ #:%s/MaxSpareThreads 75/MaxSpareThreads 128/ #:%s/ThreadsPerChild 25/ThreadsPerChild 128/ #:%s/MaxRequestsPerChild 0/MaxRequestsPerChild 10000/ #:wq #end vim $PREFIX_DIR/httpd/conf/extra/httpd-mpm.conf <<end > /dev/null 2>&1 :%s/<IfModule mpm_worker_module>/<IfModule mpm_worker_module>\r ServerLimit 16\r ThreadLimit 256/ :%s/StartServers 2/StartServers 8/ :%s/MaxClients 150/MaxClients 4096/ :%s/MinSpareThreads 25/MinSpareThreads 64/ :%s/MaxSpareThreads 75/MaxSpareThreads 256/ :%s/ThreadsPerChild 25/ThreadsPerChild 256/ :%s/MaxRequestsPerChild 0/MaxRequestsPerChild 10000/ :wq end vim $PREFIX_DIR/httpd/conf/extra/httpd-languages.conf <<end > /dev/null 2>&1 :%s/LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW/#LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW/ :%s/ForceLanguagePriority Prefer Fallback/#ForceLanguagePriority Prefer Fallback/ :wq end echo -ne " AddDefaultCharset UTF-8 " >> $PREFIX_DIR/httpd/conf/extra/httpd-languages.conf vim $PREFIX_DIR/httpd/conf/extra/httpd-info.conf <<end > /dev/null 2>&1 :%s/Allow from .example.com/Allow from 127.0.0.1 172.16.1 113.106.63.1/g :wq end vim $PREFIX_DIR/httpd/conf/extra/httpd-default.conf <<end > /dev/null 2>&1 :%s/ServerTokens Full/ServerTokens Prod/ :wq end echo -ne " $PREFIX_DIR/httpd/bin/apachectl start " >> /etc/rc.local } function php(){ #ln -s /usr/lib64/mysql/* /usr/lib64/ #ln -s /srv/mysql/bin/mysql_config /usr/local/bin/ rm -rf $PHP_DIR tar zxf $PHP_SRC cd $PHP_DIR ./configure --prefix=$PREFIX_DIR/$PHP_DIR \ --with-config-file-path=$PREFIX_DIR/$PHP_DIR/etc \ --with-config-file-scan-dir=$PREFIX_DIR/$PHP_DIR/etc/conf.d \ --with-apxs2=$PREFIX_DIR/$HTTPD_DIR/bin/apxs \ --with-curl \ --with-gd \ --with-jpeg-dir \ --with-png-dir \ --with-freetype-dir \ --with-xpm-dir \ --with-iconv \ --with-zlib-dir \ --with-xmlrpc \ --with-openssl \ --with-mcrypt \ --with-mhash=shared \ --with-mysql=/srv/mysql-5.1.50-linux-x86_64-glibc23 \ --with-pdo-mysql=/srv/mysql-5.1.50-linux-x86_64-glibc23 \ --with-sqlite=shared \ --with-pdo-sqlite=shared \ --with-ldap=shared \ --with-snmp=shared \ --with-xsl=shared \ --with-pear \ --enable-sockets \ --enable-soap \ --enable-mbstring \ --enable-magic-quotes \ --enable-inline-optimization \ --enable-gd-native-ttf \ --enable-zip \ --enable-xml \ --enable-ftp #--with-mysqli=/srv/mysql-5.1.50-linux-x86_64-glibc23/bin/mysql_config \ #--enable-embedded-mysqli \ #--enable-fpm \ #--with-fpm-user=nobody \ #--with-fpm-group=nobody \ #--with-mysql=/srv/mysql-5.5.9-linux2.6-x86_64 \ #--with-pdo-mysql=/srv/mysql-5.5.9-linux2.6-x86_64 \ [[ $? -ne 0 ]] && echo "Step: configure" && exit $? #make && make test && make install #make && make install make [[ $? -ne 0 ]] && echo "Step: make" && exit $? make install [[ $? -ne 0 ]] && echo "Step: make install" && exit $? mkdir -p $PREFIX_DIR/$PHP_DIR/etc/conf.d cp $PREFIX_DIR/src/$PHP_DIR/php.ini-production $PREFIX_DIR/$PHP_DIR/etc/php.ini ln -s $PREFIX_DIR/$PHP_DIR $PREFIX_DIR/php cp $PREFIX_DIR/$PHP_DIR/etc/php.ini $PREFIX_DIR/$PHP_DIR/etc/php.ini.original vim $PREFIX_DIR/php/etc/php.ini <<EOF > /dev/null 2>&1 :%s!;include_path = ".:/php/includes"!;include_path = ".:/php/includes"\rinclude_path = ".:$PREFIX_DIR/$PHP_DIR/lib/php"! :%s:;extension_dir = "./":extension_dir = "$PREFIX_DIR/$PHP_DIR/lib/php/extensions": :%s/memory_limit = 128M/memory_limit = 64M/ :%s/log_errors = Off/log_errors = On/ :%s#;error_log = php_errors.log#error_log = php_errors.log# :%s#;open_basedir =#open_basedir = /www/:/tmp/# :%s/upload_max_filesize = 2M/upload_max_filesize = 8M/ :wq EOF #:%s/mysql.allow_persistent = On/mysql.allow_persistent = Off/ #:%s/register_long_arrays = On/register_long_arrays = Off/ #:%s/display_errors = On/display_errors = Off/ #:%s/output_buffering = Off/output_buffering = On/ #:%s/allow_call_time_pass_reference = On/allow_call_time_pass_reference = Off/ #:%s#;error_log = php_errors.log#error_log = /www/logs/php_errors.log# read -p "php memcache module? [y/n]" -n 1 key echo if [ $key = 'y' ]; then $PREFIX_DIR/php/bin/pecl install memcache cp $PREFIX_DIR/$PHP_DIR/lib/php/extensions/no-debug-zts-*/memcache.so $PREFIX_DIR/$PHP_DIR/lib/php/extensions/ cat > $PREFIX_DIR/php/etc/conf.d/memcache.ini <<EOF extension=memcache.so EOF #> /dev/null 2>&1 #memcache.default_timeout_ms=30 fi read -p "php APC module? [y/n]" -n 1 key echo if [ $key = 'y' ]; then $PREFIX_DIR/php/bin/pecl install apc cp $PREFIX_DIR/$PHP_DIR/lib/php/extensions/no-debug-zts-*/apc.so $PREFIX_DIR/$PHP_DIR/lib/php/extensions/ cat > $PREFIX_DIR/php/etc/conf.d/apc.ini <<EOF extension=apc.so EOF # > /dev/null 2>&1 fi } function mysql(){ rm -rf $MYSQL_DIR tar zxf $MYSQL_SRC cd $MYSQL_DIR ./configure \ --prefix=$PREFIX_DIR/$MYSQL_DIR \ --with-mysqld-user=mysql \ --with-unix-socket-path=/tmp/mysql.sock \ --with-charset=utf8 \ --with-collation=utf8_general_ci --with-extra-charsets=complex \ --with-big-tables \ --with-readline \ --with-ssl \ --with-embedded-server \ --with-plugins=innobase \ --with-mysqld-user=mysql \ --without-ndb-debug \ --without-debug \ --without-bench --without-docs \ --localstatedir=/data/mysql/data \ --enable-assembler \ --enable-thread-safe-client \ --enable-local-infile \ make clean make && make install cd .. ln -s $PREFIX_DIR/$MYSQL_DIR $PREFIX_DIR/mysql $PREFIX_DIR/$MYSQL_DIR/bin/mysql_install_db --user=mysql chown mysql.mysql -R $PREFIX_DIR/$MYSQL_DIR cp $PREFIX_DIR/src/$MYSQL_DIR/support-files/mysql.server /etc/init.d/mysql /etc/init.d/mysql start $PREFIX_DIR/$MYSQL_DIR/bin/mysqladmin -u root password '9S5wxCVPMY' } function java(){ JAVA_DIR=${JAVA_BIN%%.bin} #yum install java-1.6.0-openjdk -y chmod +x $JAVA_BIN ./$JAVA_BIN mv $JAVA_DIR .. ln -s $PREFIX_DIR/$JAVA_DIR $PREFIX_DIR/java echo -ne ' export JAVA_HOME=$PREFIX_DIR/java export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HOMR/bin:$PATH export PATH=$PATH:$PREFIX_DIR/httpd/bin:$PREFIX_DIR/php/bin:$PREFIX_DIR/mysql/bin:$PREFIX_DIR/resin/bin:$PREFIX_DIR/python/bin ' >> /etc/profile } function resin(){ tar zxf resin-4.0.6.tar.gz mv resin-4.0.6 $PREFIX_DIR/ echo 'export RESIN_HOME=$PREFIX_DIR/resin' >> /etc/profile } function memcache(){ MEMCACHED_PKG=memcached-1.4.5.tar.gz MEMCACHED_SRC=memcached-1.4.5 rm -rf $MEMCACHED_SRC tar zxf $MEMCACHED_PKG cd $MEMCACHED_SRC ./configure --prefix=$PREFIX_DIR/memcached-1.4.5 make && make install } function vsftpd(){ yum install -y vsftpd adduser --home-dir /www/target/logs/ --shell /sbin/nologin --password logs.xiu.com logs echo logs >> /etc/vsftpd/chroot_list vim /etc/vsftpd/vsftpd.conf <<VIM > /dev/null 2>&1 :%s/#chroot_list_enable=YES/chroot_list_enable=YES/ :%s/#chroot_list_file/chroot_list_file/ VIM chkconfig vsftpd on service vsftpd start } # See how we were called. case "$1" in clean) clean ;; httpd) httpd ;; php) php ;; mysql) if [ -f $0 ] ; then mysql fi ;; depend) depend ;; java) java ;; resin) resin ;; profile) profile ;; memcache) memcache ;; lamp) clean echo ################################################## echo # $MYSQL_DIR Installing... echo ################################################## mysql echo ################################################## echo # $HTTPD_DIR Installing... echo ################################################## httpd echo ################################################## echo # $PHP_DIR Installing... echo ################################################## php clean ;; vsftpd) vsftpd ;; optimization) optimization ;; *) echo $"Usage: $0 {depend|clean}" echo " {httpd|php|mysql|vsftpd}" echo " {java|resin}" echo " {memcache}" echo " {optimization}" echo " {ntp|snmp|nagios|nrpe}" RETVAL=2 ;; esac exit $RETVAL?