Deepin 15.4 編譯安裝 LNMP(PHP 5.6.31 + Nginx 1.12.1 + MySQL 5.6.36)

先查看先前的文章:Ubuntu 14 編譯安裝 PHP 5.4.45 + Nginx 1.4.7 + MySQL 5.6.26 筆記php

編譯 Nginx

#安裝依賴庫
sudo apt-get -y install libpcre3 libpcre3-dev
sudo apt-get -y install libssl-dev openssl libcurl4-openssl-dev
sudo apt-get -y install build-essential libtool
 
#安裝pcre庫
cd /alidata/tmp/deepin-sdk/source2/nginx
sudo tar -xzvf ./pcre-8.36.tar.gz
cd ./pcre-8.36
sudo ./configure
sudo make && sudo make install
 
#安裝zlib庫
cd /alidata/tmp/deepin-sdk/source2/nginx
sudo tar -xzvf ./zlib-1.2.8.tar.gz
cd ./zlib-1.2.8
sudo ./configure
sudo make && sudo make install
 
#安裝ssl
cd /alidata/tmp/deepin-sdk/source2/nginx
sudo tar -xzvf ./openssl-1.0.1e.tar.gz
cd openssl-1.0.1e
 
#添加nginx用戶組及用戶
#sudo groupadd www
#sudo useradd -g www -s /usr/sbin/nologin www #不讓www用戶直接登陸
 
#安裝nginx
cd /alidata/tmp/deepin-sdk/source2/nginx
sudo tar -xzvf ./nginx-1.12.1.tar.gz
cd ./nginx-1.12.1
sudo mkdir /alidata/server/nginx/nginx-1.12
 
sudo ./configure \
--prefix=/alidata/server/nginx/nginx-1.12 \
--user=wenjianbao \
--group=wenjianbao \
--sbin-path=/alidata/server/nginx/nginx-1.12/nginx \
--conf-path=/alidata/server/nginx/nginx-1.12/conf/nginx.conf \
--pid-path=/alidata/server/nginx/nginx-1.12/logs/nginx.pid \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-pcre=/alidata/tmp/deepin-sdk/source2/nginx/pcre-8.36 \
--with-zlib=/alidata/tmp/deepin-sdk/source2/nginx/zlib-1.2.8 \
--with-openssl=/alidata/tmp/deepin-sdk/source2/nginx/openssl-1.0.1e
 
sudo make && sudo make install
 
#複製配置文件
sudo cp -rf /alidata/tmp/deepin-sdk/config/nginx-1.12/nginx.conf  /alidata/server/nginx/nginx-1.12/conf/nginx.conf
  
#建立虛擬主機配置文件目錄
sudo mkdir /alidata/server/nginx/nginx-1.12/conf/vhost
  
#設置權限
sudo chmod -R +x /alidata/server/nginx/nginx-1.12
sudo chown -R wenjianbao:wenjianbao /alidata/server/nginx/nginx-1.12
  
#設置開機自動啓動
sudo cp -rf /alidata/tmp/deepin-sdk/config/nginx-1.12/nginx.init /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx #添加執行權限
sudo update-rc.d nginx defaults

#sudo service nginx start #啓動nginx
sudo /etc/init.d/nginx start

文件 /etc/init.d/nginx 的內容:html

#!/bin/bash  
# nginx Startup script for the Nginx HTTP Server  
# it is v.0.0.2 version.  
# chkconfig: - 85 15  
# description: Nginx is a high-performance web and proxy server.  
#              It has a lot of features, but it's not for everyone.  
# processname: nginx  
# pidfile: /var/run/nginx.pid  
# config: /usr/local/nginx/conf/nginx.conf  
  
#注意:這裏的三個變量須要根據具體的環境而作修改。  
nginxd=/alidata/server/nginx/nginx-1.12/nginx
nginx_config=/alidata/server/nginx/nginx-1.12/conf/nginx.conf  
nginx_pid=/alidata/server/nginx/nginx-1.12/logs/nginx.pid  

RETVAL=0  
prog="nginx"  
  
# Check that networking is up.  
[ -x $nginxd ] || exit 0  
# Start nginx daemons functions.  
start() {  
if [ -e $nginx_pid ];then  
   echo "nginx already running...."  
   exit 1  
fi  
   echo -n $"Starting $prog: "  
   $nginxd -c ${nginx_config}  
   RETVAL=$?  
   echo  
   [ $RETVAL = 0 ]    
   return $RETVAL  
}  
# Stop nginx daemons functions.  
stop() {  
  echo -n $"Stopping $prog: "  
  $nginxd -s stop  
  RETVAL=$?  
  echo  
  [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx $nginx_pid  
}  
# reload nginx service functions.  
reload() {  
  echo -n $"Reloading $prog: "  
  kill -HUP `cat ${nginx_pid}`  
  RETVAL=$?  
  echo  
}  
# See how we were called.  
case "$1" in  
  start)  
          start  
          ;;  
  stop)  
          stop  
          ;;  
  reload)  
          reload  
          ;;  
  restart)  
          stop  
          start  
          ;;  
  status)  
          status $prog  
          RETVAL=$?  
          ;;  
  *)  
          echo $"Usage: $prog {start|stop|restart|reload|status|help}"  
          exit 1  
esac  
exit $RETVAL

編譯 PHP

#!/bin/bash

##################################################
### 一、安裝 依賴庫
##################################################
# 安裝 C/C++編譯器
sudo apt-get -y install gcc build-essential make

# 安裝依賴庫
sudo apt-get -y install libxml2-dev libjpeg-dev libpng-dev libfreetype6-dev libcurl4-gnutls-dev pkg-config libfreetype6-dev 

#安裝 libmcryp
cd /alidata/tmp/deepin-sdk/source2/php/
sudo tar -xzvf ./libmcrypt-2.5.8.tar.gz
cd ./libmcrypt-2.5.8
sudo ./configure --prefix=/usr
sudo make && sudo make install
  
#安裝 mhash
cd /alidata/tmp/deepin-sdk/source2/php/
sudo tar -xzvf ./mhash-0.9.9.9.tar.gz
cd ./mhash-0.9.9.9
sudo ./configure --prefix=/usr
sudo make && sudo make install
  
#安裝 mcrypt
sudo /sbin/ldconfig  #搜索出可共享的動態連接庫
cd /alidata/tmp/deepin-sdk/source2/php/
sudo tar -xzvf ./mcrypt-2.6.8.tar.gz
cd ./mcrypt-2.6.8
sudo ./configure
sudo make && sudo make install
  
#安裝 libiconv
#報錯:http://www.cnblogs.com/52php/p/7619696.html

cd /alidata/tmp/deepin-sdk/source2/php/
sudo tar -xzvf ./libiconv-1.14.tar.gz
cd ./libiconv-1.14
sudo ./configure --prefix=/usr
sudo make && sudo make install 

#安裝bzip2
cd /alidata/tmp/deepin-sdk/source2/php/
sudo tar -xzvf ./bzip2-1.0.6.tar.gz
cd ./bzip2-1.0.6
sudo make && sudo make install


##################################################
### 二、安裝 PHP php-5.6.31
##################################################
cd /alidata/tmp/deepin-sdk/source2/php/
sudo tar -xzvf ./php-5.6.31.tar.gz
cd ./php-5.6.31
  
#生成配置
sudo ./configure \
--prefix=/alidata/server/php/php-5.6 \
--with-config-file-path=/alidata/server/php/php-5.6/etc \
--with-openssl \
--with-zlib \
--with-bz2 \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-gettext \
--with-mhash \
--with-freetype-dir \
--with-mcrypt \
--with-iconv \
--with-curl \
--with-xmlrpc \
--with-pdo-mysql \
--with-mysqli \
--enable-zip \
--enable-mbstring \
--enable-mbregex \
--enable-bcmath \
--enable-soap \
--enable-sockets \
--enable-ftp \
--enable-gd-native-ttf \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-fpm \
--with-fpm-user=wenjianbao \
--with-fpm-group=wenjianbao \
--without-pear

  
#編譯安裝
sudo make && make install
  
##################################################
### 三、配置 php.ini
##################################################
#cp ./php.ini-production /alidata/server/php/php-5.6/etc/php.ini
sudo mv /etc/php.ini /etc/php.ini.old
sudo cp -rf /alidata/tmp/deepin-sdk/config/php-5.6/php.ini  /alidata/server/php/php-5.6/etc/
sudo ln -s /alidata/server/php/php-5.6/etc/php.ini /etc/php.ini
  
##################################################
### 四、配置 php 命令行
##################################################
sudo rm /usr/local/bin/php
sudo rm /usr/local/bin/phpize
sudo rm /usr/local/bin/php-config

sudo ln -s /alidata/server/php/php-5.6/bin/php /usr/local/bin/php
sudo ln -s /alidata/server/php/php-5.6/bin/phpize /usr/local/bin/phpize
sudo ln -s /alidata/server/php/php-5.6/bin/php-config /usr/local/bin/php-config

##################################################
### 五、配置 php-fpm
##################################################
#拷貝模板文件爲php-fpm配置文件
#sudo cp /alidata/server/php/php-5.6/etc/php-fpm.conf.default /alidata/server/php/php-5.6/etc/php-fpm.conf 
sudo cp -rf /alidata/tmp/deepin-sdk/config/php-5.6/php-fpm.conf /alidata/server/php/php-5.6/etc/

  
#設置 php-fpm 開機啓動,拷貝php-fpm到啓動目錄
#sudo cp -rf /alidata/tmp/deepin-sdk/config/php-5.6/php-fpm.init  /etc/init.d/php-fpm 
sudo cp -rf /alidata/tmp/deepin-sdk/source2/php/php-5.6.31/sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm
sudo chmod +x /etc/init.d/php-fpm #添加執行權限
sudo update-rc.d php-fpm defaults #設置開機啓動
  
#sudo service php-fpm start  #啓動php-fpm
#sudo service nginx restart  #重啓nginx
sudo killall php-fpm  # 關閉 php-fpm
sudo /etc/init.d/php-fpm start
sudo /etc/init.d/nginx restart 
 
  
sudo cp -rf /alidata/tmp/deepin-sdk/source2/index.php  /alidata/server/nginx/nginx-1.12/html/
sudo chmod -R +x /alidata/server/nginx/nginx-1.12/html/
sudo chown -R wenjianbao:wenjianbao /alidata/server/nginx/nginx-1.12/html/

編譯PHP遇到的問題:

(1) 編譯 libiconv 時報錯:./stdio.h:1010:1: error: 'gets' undeclared here (not in a function)mysql

解決方案:linux

先找到stdio.in.hnginx

vim  ./libiconv-1.14/srclib/stdio.in.h

而後跳到 698 行,把web

_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");

替換成sql

#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
#endif

 (2) 編譯 PHP,configure時報錯:configure: error: Cannot find OpenSSLs evp.h數據庫

解決方案:ubuntu

sudo apt-get -y install libssl-dev
sudo ln -s /usr/lib/x86_64-linux-gnu/libssl.so  /usr/lib

參考:http://blog.windigniter.com/2016/05/php-openssl-evp/vim

(3) 編譯 PHP,configure時報錯:configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/

解決方案:

sudo apt-get -y install libcurl4-gnutls-dev
ln -s /usr/include/x86_64-linux-gnu/curl /usr/include/curl

參考:Compiling php with curl, where is curl installed ?

for 64 bit ubuntu 17.** and after, curl is moved to /usr/include/x86_64-linux-gnu/curl, so just make a symlink cd /usr/include sudo ln -s x86_64-linux-gnu/curl

(4) 編譯 PHP,configure時報錯:configure: error: freetype-config not found

解決方案:

apt-get -y install libfreetype6-dev

(5) 編譯PHP,make時報錯:

Makefile:594: recipe for target 'ext/openssl/openssl.lo' failed
make: *** [ext/openssl/openssl.lo] Error 1

解決方案:

(a) 懷疑 openssl 的版本太高,當前版本爲 

wenjianbao@wjb-pc:~$ openssl version
OpenSSL 1.1.0e  16 Feb 2017

(b) 從新安裝低版本  OpenSSL 1.0.1e

sudo ./config --prefix=/usr/local --openssldir=/usr/local/openssl
sudo make
rm -f /usr/bin/pod2man # 不然會報錯:POD document had syntax errors at /usr/bin/pod2man line 69. make: *** [install_docs]
sudo make install

(6) 編譯PHP,make時報錯:

Makefile:271: recipe for target 'sapi/cli/php' failed
make: *** [sapi/cli/php] Error 1

(a) 方法一:vim Makefile

在安裝 PHP 到系統中時要是發生「undefined reference to libiconv_open'」之類的錯誤信息,那表示在「./configure 」沒抓好一些環境變數值。錯誤發生點在創建「-o sapi/cli/php」是出錯,沒給到要 link 的 iconv 函式庫參數。 解決方法:編輯Makefile 大約77 行左右的地方: EXTRA_LIBS = ..... -lcrypt 在最後加上 -liconv,例如: EXTRA_LIBS = ..... -lcrypt -liconv 而後從新再次 make 便可。

(b) 【推薦】方法二:make 命令後,追加 liconv,即

sudo make ZEND_EXTRA_LIBS='-liconv'

編譯 MySQL

#!/bin/bash
 
# 安裝 依賴庫
sudo apt-get -y install make cmake gcc g++ bison openssl libssl-dev  libncurses5-dev
 
# 建立 數據 文件夾
sudo mkdir -pv /alidata/data/mysql
 
# 建立 mysql 用戶及用戶組(直接用當前登陸帳號:wenjianbao:wenjianbao)
#groupadd mysql
#useradd -g mysql -s /usr/sbin/nologin mysql # 不讓 mysql 用戶直接登陸
 h
# 解壓 mysql-5.6.36
cd /alidata/tmp/deepin-sdk/source2/mysql
sudo rm -rf ./mysql-5.6.36
sudo tar -xzvf ./mysql-5.6.36.tar.gz
cd ./mysql-5.6.36
sudo mkdir -pv /alidata/server/mysql/mysql-5.6
 
# 設置 權限
sudo chown -R wenjianbao:wenjianbao  ../mysql-5.6.36
sudo chown -R wenjianbao:wenjianbao /alidata/server/mysql/
 
# 生成 配置
sudo cmake \
-DCMAKE_INSTALL_PREFIX=/alidata/server/mysql/mysql-5.6 \
-DMYSQL_DATADIR=/alidata/data/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_unicode_ci \
-DWITH_READLINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0
 
# 安裝
sudo chown -R wenjianbao:wenjianbao /alidata/server/mysql/  #否則會報錯,提示 沒權限
sudo make && make install
 
# 複製 配置文件
#cp ./support-files/my-medium.cnf /etc/my.cnf
#sudo mv /etc/my.cnf /etc/my.cnf.$(date "+%Y-%m-%d.%s")

sudo \cp -rf /alidata/tmp/deepin-sdk/config/mysql-5.6/my.cnf /alidata/server/mysql/mysql-5.6/conf/
sudo ln -s /alidata/server/mysql/mysql-5.6/conf/my.cnf /etc/my.cnf
 
# 設置 權限
sudo chmod -R 755 /alidata/server/mysql/mysql-5.6
sudo chown -R wenjianbao:wenjianbao /alidata/server/mysql/mysql-5.6
sudo chown -R wenjianbao:wenjianbao /alidata/data/mysql
 
# 設置 開機自動啓動
# cp ./support-files/mysql.server /etc/init.d/mysqld
sudo \cp -rf /alidata/tmp/deepin-sdk/config/mysql-5.6/mysqld.init /etc/init.d/mysqld

sudo chmod +x /etc/init.d/mysqld #添加執行權限
sudo update-rc.d mysqld defaults
#sudo service mysqld start #啓動mysql
sudo /etc/init.d/mysqld start
 
# 添加 mysql 的軟連接以適應 init 腳本
sudo ln -sv /alidata/server/mysql/mysql-5.6/bin/mysql  /usr/sbin/mysql
sudo ln -sv /alidata/server/mysql/mysql-5.6/bin/mysqladmin  /usr/sbin/mysqladmin
sudo ln -sv /alidata/server/mysql/mysql-5.6/bin/mysqldump  /usr/sbin/mysqldump
 
# 初始化 數據庫
sudo /alidata/server/mysql/mysql-5.6/scripts/mysql_install_db \
--user=wenjianbao \
--basedir=/alidata/server/mysql/mysql-5.6 \
--datadir=/alidata/data/mysql
 
# 啓動 mysql
sudo killall mysqld
#sudo service mysqld start
sudo /etc/init.d/mysqld start
 
# 修改 root 密碼
# 注意:先輸入舊密碼(默認爲空密碼),而後讓你輸入新密碼(123456)
# /alidata/server/mysql/mysql-5.6/bin/mysqladmin -u root -p password

運行 MySQL 報錯

wenjianbao@wjb-pc:/alidata/server/mysql/mysql-5.6/bin$ sudo /etc/init.d/mysqld start
[....] Starting mysqld (via systemctl): mysqld.serviceJob for mysqld.service failed because the control process exited with error code.
See "systemctl  status mysqld.service" and "journalctl  -xe" for details.
 failed!

爲了更清晰地看最近出錯日誌,我把原已有的日誌文件 ./log/mysql.err 給刪除了,結果由於上面報錯,一直不生成錯誤日誌文件(mysql.err)

解決方案:

不走服務啓動,直接經過原有的命令行啓動:

wenjianbao@wjb-pc:/alidata/server/mysql/mysql-5.6/bin$ ./mysqld_safe --defaults-file=/etc/my.cnf --user=wenjianbao
171005 23:00:38 mysqld_safe Logging to '/alidata/server/mysql/mysql-5.6/log/mysql.err'.
171005 23:00:38 mysqld_safe Starting mysqld daemon with databases from /alidata/data/mysql
171005 23:00:40 mysqld_safe mysqld from pid file /alidata/server/mysql/mysql-5.6/log/mysql.pid ended

看上面的輸出,貌似產生了錯誤日誌,趕忙看看去!!!

相關文章
相關標籤/搜索