源码安装
Linux下要进行源码安装,通常经过三部曲:
configure
make
make install
configure的作用主要是检测一下你的系统环境,看一下是否满足编译本软件的条件
make就是一系列编译、连接的过程
make install就是将make出来的二进制文件安装到你的系统中。
下面就以nginx(nginx是这些年兴起的http服务器)的源码安装过程为例:
命令行:wget
这是用wget从互联网上获取nginx的源码包,是不是很方便?如果你在windows下工作,那你常常需要打开浏览器,将nginx源码包的url输入到地址栏里,然后浏览器将之下载下来,而linux下,只需一条wget命令即可!
nginx的源码包名字为nginx-1.1.14,tar.gz,这里有必要说明一下,此名字的组成,这里体现了一些开源软件界约定俗成的命名规则。
首先是nginx,也就是软件名称,中间的一段是软件版本号,二者之间用横线连接,注意,用横线连接是通常的做法,虽然你可以随意取名,但是,这是大家都在默认使用的命名方式,所以,你如果也开放源码的话,最好也这样命名。最后的tar.gz说明这是一个用gz压缩方式压缩的tar文件。tar文件使用tar命令生成,总之,tar+gz等于windows下的rar。
下面用tar命令解压缩nginx源码包。
命令行:tar -xvf nginx-1.1.14.tar.gz > /dev/null
ls
nginx-1.1.14 nginx-1.1.14.tar.gz
cd nginx-1.1.14
-xvf是tar命令的选项,nginx-1.1.14.tar.gz是tar命令的参数,后面的右尖括号是shell的重定向符,它会将tar命令的输出重定向到/dev/null这个东西上。如果不加> /dev/null,tar将会输出很多信息。
这里额外提一句,linux下的命令通常有选项,不同的选项完成不同的功能。通常来说,单字符的选项前面用一个短横线来标识,而且多个单字符选项可以连在一起,就像这里的-xvf,也可以写成-x -v -f二多个字符选项则通常用两个短横线来标识,比如tar--help。help是多字符选项,它前面接两个短横线。
解压完后,我们进入解压出来的nginx源码目录,开始“通常的”三部曲操作。为什么说通常呢?因为不是所有的源码包都是通过这种方式安装,但是绝大多数都是如此。
命令行:
./configure --prefix=/opt/nginx/ > /dev/null
make > /dev/null
make install > /dev/null
ls /opt/nginx/
注意,configure命令前的./,上一节讲,./代表当前目录,如果不加./,shell可能会找不到configure命令。为什么configure要加./,而make和make install不用?因为configure不是系统中固有的命令,而是configure的作者自己编写的一个脚本,它来探测你的系统,并生成一个Makefile文件,后面的make和make install两个命令,都是在Makefile文件的指引下完成的。
总结:nginx的作者很懒,他懒得给你提供二进制包,所以他只释放出了源码包,但是源码耶,源码不能运行,源码是需要编译的,幸好这哥们还算负责,他随附源码,提供了一个configure脚本给你,而这个脚本就是一切编译操作的入口!
这里给了configure一个--prefix参数,prefix参数指定nginx要安装在哪个目录里,configure脚本是nginx作者提供的,它可以给参数随意命名,但是prefix也是一个约定俗成的名称。第三方软件在/opt/目录下,而这也是“约定俗成”。
configure会产生一个Makefile文件,make调用编译器,在此文件指引下完成编译,make install则把编译出来的nginx安装在了/opt/nginx/路径下。(所谓安装,就是将文件拷贝过去了)
如果make install命令失败,尝试sudo make install。
注意,例子中configure和make之后,都加上了重定向符,如果不使用的话,会产生大量输出。因为我确定它们不会失败,而又不想看无用的信息,索性全部丢带。
不熟悉源码编译的,建议不要加重定向符,这样如果configure过程出错,可以自己排查。
linux每个软件管理自己的位置,没有集中存放配置信息的地方。此例子中可以打开/opt/nginx/conf/nginx.conf看一下,这就是nginx的配置文件,nginx每次启动,都会读取它。