起因:最近比较上瘾Linux系统,虽然很久之前租了个服务器,借用PHPSTORM的Deployment实时上传代码,xshell连接使用命令调试,也挺方便的,但是总觉得不得劲,毕竟用的多,就意味着会使用的深入,掌握一些平时不了解的特性。
无意间发现有Bash On Ubuntu On Windows这么个东西,可以内置安装一个Linux系统,立马装好后,开始准备lamp环境建设。由于WSL是ubuntu系统,一些库平时能直接yum install安装现在不能用,不仅仅更换apt-get就能安装,总出现各种意外。
引起思考的是,要编译PHP等软件时,需要预先安装各类的库,以往都是出现什么问题,将问题描述一搜,该yum install就装,该下载源码就编译,对一些库,为什么要装,用处是啥不太了解。
这次特意将服务器初始化,开始新的一轮LNMP的搭建。
执行:wget http://nginx.org/download/nginx-1.9.9.tar.gz
下载1.9.9版本的nginx源码,解压后,进入目录后预备执行:
./configure --prefix=/usr/local/Software/nginx --with-http_ssl_module
configure命令是为了配置安装选项,会生成Makefile,里面包含了操作人员手动设置的配置项,会检查相关的依赖库是否存在、可用等,会比较依赖库的版本信息。
解释下携带配置参数的作用
nginx源码目录结构
执行./configure
截取部分输出
会检查操作系统、编译器、依赖文件等。
报错:
提示HTTP的rewrite模块需要PCRE库,那么PCRE是什么呢?
查阅可知,PCRE全写(Perl Compatible Regular Expressions),是一个用C语言编写的正则表达式函数库,确实在nginx.conf里的location、rewrite等处,都使用了正则。
执行命令安装
yum -y install pcre pcre-devel
现在发现只安装pcre-devel库就行,devel和非devel的区别在于,devel包含了普通包,但比普通包多了头文件,编译的时候如果需要这个库,那么安装devel包即可,会用到头文件。
configure成功后会提示
提示使用了PCRE库、crypto库、zlib库
crypto库是加密库,md5和sha1是两种加密方式,基于该系统默认库
zlib 是通用的压缩库,提供了一套 in-memory 压缩和解压函数,并能检测解压出来的数据的完整性。
软件默认安装在/usr/local/nginx内
将当前目录与处理前比较,发现多了一个Makefile文件,前面提到包含操作人员手动设置的配置项。
携带了两个参数,prefix和with-http_ssl_module
prefix是常用选项,指定安装路径。如果我们不设置这个参数,系统会将软件安装了默认位置处,比如nginx是/usr/local/nginx,其他软件不同类型的文件可能位置还不一样,会比较分散,这样要执行或删除并不方便。若设置了参数,软件相关文件都会在一个目录,维护十分便捷。
重新执行:./configure –prefix=/usr/local/Software/nginx
软件已经指定安装到我们设置的目录,同时想说下,prefix携带路径最后一个加了/不会错,但是存储的路径都会存在两个/,很惊讶。
--with-http_ssl_module是为了支持https
执行完整命令:./configure --prefix=/usr/local/Software/nginx --with-http_ssl_module
报错:
openssl是加密相关的库
执行命令安装
yum -y install openssl openssl-devel
这下configure操作正常
使用了openssl库,md5和sha1也更换了依赖库。
分别执行编译、安装命令
make
make install
make实际含义是编译(compile),能够生成可执行文件,依赖于Makefile文件的内容。
make install执行安装操作
安装完成启动nginx后,访问主页显示欢迎界面如下
不得不说,会了点nginx后,发现负载均衡,以及各种情况下的请求控制,比如指定类型文件限制访问、请求在不同网络内转发等都变得非常方便。
在当前LNMP环境越来越流行的情况下,PHPer深入学习nginx是理所当然的事情。
因为本地已经有了mysql5.6版本的源码包,所以就不重新wget了,
解压后进入根目录,执行命令
cmake \
> -DCMAKE_INSTALL_PREFIX=/usr/local/Software/mysql \
> -DMYSQL_DATADIR=/usr/local/Software/mysql/data \
> -DDEFAULT_CHARSET=utf8 \
> -DDEFAULT_COLLATION=utf8_general_ci \
> -DEXTRA_CHARSETS=all \
> -DENABLED_LOCAL_INFILE=1
执行报错:
command not found: cmake
执行安装命令:yum install -y cmake
cmake也是为了Makefile文件交由下一步的make使用的,那么和configure有什么区别呢?暂时还没学习过,目前只知道是cmake是个和make级别相似的库,跨平台生成对应平台能用的Makefile;configure一个shell的脚本文件,只能被sh执行。
DCMAKE_INSTALL_PREFIX:mysql的安装目录,类似于configure的—prefix
DMYSQL_DATADIR:mysql数据库文件目录
DDEFAULT_CHARSET:服务器的字符集,如果不设置,使用默认的latin1,会导致中文不支持
DDEFAULT_COLLATION:服务器的排序规则
DEXTRA_CHARSETS:安装所有扩展字符集
DENABLED_LOCAL_INFILE:允许从本地导入数据
报错:
Curses library not found. Please install appropriate package
yum -y install ncurses-devel
ncurses是一个允许用户编写基于文本的用户界面(TUI)的编程库,用来定制界面。
rm -f CMakeCache.txt
cmake继续操作
执行安装命令:yum -y install gcc-c++
安装C++库
继续重复,执行make && make install提示安装成功
./scripts/mysql_install_db --user=mysql
进行初始化数据库时,报错:FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:
执行安装命令:yum install -y perl perl-devel
Perl是个脚本语言,而mysql_install_db是基于Perl的脚本程序,vim mysql_install_db可以看下头部。
提示相同错误
yum-y install autoconf
autoconf是制作编译、安装、打包软件的配置脚本
重新初始化后,启动mysql成功
./configure --prefix=/usr/local/Software/php7
--with-curl:打开CURL库的支持,能够通过URL与其他服务器通信
--with-freetype-dir:打开freetype字体库的支持
--with-gd:打开gd库的支持,处理图形使用
--with-gettext:打开gnu 的gettext 支持
--with-iconv-dir:使PHP支持iconv函数
--with-mysqli:打开mysqli支持
--with-openssl:打开openssl执行
--with-pdo-mysql:启动pdo
--with-pear:打开pear命令的支持,PHP扩展用的
--with-png-dir:打开对png图片的支持
--with-zlib:打开zlib库的支持
--enable-fpm:PHP-FPM
--enable-bcmath:bcmatch(公元前风格精度数学)
--enable-mbstring:打开多字节字符串的支持
--enable-opcache:打开opcache缓存
--enable-soap:打开SOAP支持
--enable-sockets:打开sockets支持
--enable-zip:打开对zip支持
在网上找到的配置项,其实我感觉吧,经验丰富的人在安装的时候,会预先尽可能的把拓展加上,因为我不太喜欢背是什么用的,自己搭建的环境有些暂时用不到,所以一般都是用到什么加什么。
configure: error: libxml2 not found. Please check your libxml2 installation.
yum -y install libxml2-devel
libxml2是个XML库,能对XML文件进行各种操作
configure: error: cURL version 7.10.5 or later is required to compile php with cURL support
yum -y install curl-devel
进行服务器通信的库
configure: error: png.h not found.
yum -y install libpng-devel
操作PNG文件的库
configure: error: freetype-config not found.
yum -y install freetype-devel
字体引擎库
configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
yum -y install libxslt-devel
libxml2的扩展
mak && make install
安装成功
流水式的记录此次的过程,很多点深入研究还要花很多时间,后续进行吧。
话说xshell设置透明度,找个好看的背景图片,弄上zsh好看的主题,敲着命令感觉杠杠的。