编译安装
安装方式的选择
1、yum安装
yum安装,就是别人编译好的二进制包给你,同时为你解决依赖关系,简单方便,便于升级维护。
缺点是对于少见的、古老的linux发行版,很难找到合适的yum-rpm包。
2、编译安装
编译安装,就是使用源代码,根据机器自身的硬件、内核、环境进行编译,生成二进制文件,优点是不管什么机器,只要有完整的编译环境(基本上所有的Linux发行版都有自己的一套完整的编译环境),就可以生成适合自己机器的二进制包,同时因为是针对本机软硬件环境编译的,生成的二进制程序运行起来理论上性能更好,更节省资源。
缺点:是对新手来说编译过程比较麻烦(当然如果你熟悉了其实也很快),同时升级比较麻烦(当然有些程序编译安装过程会自己解决升级冲突和覆盖)
3、总结
yum安装后程序运行的性能可能会比编译安装差一点点,或者它自带的nginx的模块会比较少,但是没有太大的缺点。编译安装可能将来你要升级版本会比较麻烦,但是如果你熟悉了Linux安装环境,将来自己添加模块会比较方便。
结论:对新手来说,能yum安装就yum安装,不必考虑编译安装,除非你的系统是少见的、古老的Linux发行版。
编译安装的流程
1. 确定标准库和头文件的位置
源码肯定会用到标准库函数(standard library)和头文件(header)。它们可以存放在系统的任意目录中,编译器实际上没办法自动检测它们的位置,只有通过配置文件才能知道。
编译的第二步,就是从配置文件中知道标准库和头文件的位置。一般来说,配置文件会给出一个清单,列出几个具体的目录。等到编译时,编译器就按顺序到这几个目录中,寻找目标。
2. 确定依赖关系
对于大型项目来说,源码文件之间往往存在依赖关系,编译器需要确定编译的先后顺序。假定A文件依赖于B文件,编译器应该保证做到下面两点。
(1)只有在B文件编译完成后,才开始编译A文件。
(2)当B文件发生变化时,A文件会被重新编译。
编译顺序保存在一个叫做makefile的文件中,里面列出哪个文件先编译,哪个文件后编译。而makefile文件由configure脚本运行生成,这就是为什么编译时configure必须首先运行的原因。
在确定依赖关系的同时,编译器也确定了,编译时会用到哪些头文件。
3. 配置(configure)
编译器在开始工作之前,需要知道当前的系统环境,比如标准库在哪里、软件的安装位置在哪里、需要安装哪些组件等等。这是因为不同计算机的系统环境不一样,通过指定编译参数,编译器就可以灵活适应环境,编译出各种环境都能运行的机器码。这个确定编译参数的步骤,就叫做"配置"(configure)。
这些配置信息保存在一个配置文件之中,约定俗成是一个叫做configure的脚本文件。通常它是由autoconf工具生成的。编译器通过运行这个脚本,获知编译参数。
configure脚本已经尽量考虑到不同系统的差异,并且对各种编译参数给出了默认值。如果用户的系统环境比较特别,或者有一些特定的需求,就需要手动向configure脚本提供编译参数。
安装示例: ./configure --prefix=/usr/local/apache
4. 编译(Compilation)
编译器就是开始生成机器码。对于某些编译器来说,还存在一个中间步骤,会先把源码转为汇编码(assembly),然后再把汇编码转为机器码。这种转码后的文件称为对象文件(object file)。
**注:**make (gcc), 其调用 gcc 执行编译的过程依赖于配置文件makefile
5. 安装(Installation)
上一步的连接是在内存中进行的,即编译器在内存中生成了可执行文件。下一步,必须将可执行文件保存到用户事先指定的安装目录。
表面上,这一步很简单,就是将可执行文件(连带相关的数据文件)拷贝过去就行了。但是实际上,这一步还必须完成创建目录、保存文件、设置权限等步骤。这整个的保存过程就称为"安装"(Installation)。
编译安装实例(httpd安装)
1、下载编译安装包文件
2、利用md5sum命令验证文件完整性
[root@localhost ~]# md5sum httpd-2.4.25
d41d8cd98f00b204e9800998ecf8427e httpd-2.4.25
3、然后挂载cdrom
[root@localhost mnt]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
4、安装依赖性文件包
[root@localhost ~]# rpm -ivh /mnt/Packages/pcre-devel-8.32-17.el7.x86_64.rpm
Preparing… ################################# [100%]
Updating / installing…
1:pcre-devel-8.32-17.el7 ################################# [100%]
[root@localhost ~]# rpm -ivh /mnt/Packages/apr-devel-1.4.8-3.el7.x86_64.rpm
Preparing… ################################# [100%]
Updating / installing…
1:apr-devel-1.4.8-3.el7 ################################# [100%]
[root@localhost ~]# rpm -ivh /mnt/Packages/expat-devel-2.1.0-10.el7_3.x86_64.rpm
Preparing… ################################# [100%]
Updating / installing…
1:expat-devel-2.1.0-10.el7_3 ################################# [100%]
[root@localhost ~]# rpm -ivh /mnt/Packages/libdb-devel-5.3.21-20.el7.x86_64.rpm
Preparing… ################################# [100%]
Updating / installing…
1:libdb-devel-5.3.21-20.el7 ################################# [100%]
[root@localhost ~]# rpm -ivh /mnt/Packages/cyrus-sasl-devel-2.1.26-21.el7.x86_64.rpm
Preparing… ################################# [100%]
Updating / installing…
1:cyrus-sasl-devel-2.1.26-21.el7 ################################# [100%]
[root@localhost ~]# rpm -ivh /mnt/Packages/openldap-devel-2.4.44-5.el7.x86_64.rpm
Preparing… ################################# [100%]
Updating / installing…
1:openldap-devel-2.4.44-5.el7 ################################# [100%]
[root@localhost ~]# rpm -ivh /mnt/Packages/apr-util-devel-1.5.2-6.el7.x86_64.rpm
Preparing… ################################# [100%]
Updating / installing…
1:apr-util-devel-1.5.2-6.el7 ################################# [100%]
[root@localhost Packages]#
5、解压编辑安装软件包
[root@localhost ~]# tar zxvf httpd-2.4.25 -C /opt
6、将编辑安装的软件安装到/usr/local/apache/目录里
[root@localhost httpd-2.4.25]# ./configure --prefix=/usr/local/apache
7、进行翻译
[root@localhost httpd-2.4.25]# make
8、翻译后安装
[root@localhost httpd-2.4.25]# make install
9、用vi编辑器对配置文件进行修改
[root@localhost ~]# vi /usr/local/apache/conf/httpd.conf
将194行首的#号删去,启用80端口
10、启动Apache
[root@localhost ~]# cd /usr/local/apache/bin
[root@localhost bin]# ./apachectl start
httpd (pid 70743) already running