先查看先前的文章:Ubuntu 14 編譯安裝 PHP 5.4.45 + Nginx 1.4.7 + MySQL 5.6.26 筆記php
#安裝依賴庫 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
#!/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/
(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'
#!/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
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
看上面的輸出,貌似產生了錯誤日誌,趕忙看看去!!!