为什么要源码编译

一般来说,我们软件的安装方式有yum(rpm),和源码编译两种方式,那么为什么我们需要源码编译安装一部分软件?选择源码编译安装软件有以下几个原因:

 1:满足不同的运行平台,我们Linux发型版本众多,但是每个版本采用的软件或者内核版本都不一样,而我们的二进制包所依赖的环境不一定能够正常运行,所以大部分软件直接提供源码。2:方便定制,满足不同的需求,很多时候我们所需要的软件都是可以定制的,我需要什么就安装什么,大多数二进制代码都是一键装全,所以自由度并不高。3:方便运维、开发人员维护,我们的源码是可以打包二进制的,但是对于这个软件的打包都会有一份代价不小的额外工作,包括维护,所以如果是源码的话,软件产商会直接维护,但是如果是二进制的话,一般都是Linux发行商提供。

什么是LAMP

LAMP=Linux Apache Mysql/MariaDB PHP/Perl/Python
这些软件都是开源免费的软件,几个程序各自是独立的,经常为了达到我们需要的效果而协同工作,组成了我们常见的LAMP架构平台!LAMP是世界上最流行的组合,当然同时也有Nginx,也就是LNMP: LAMP 相对于 NGINX 来说较为安全,但是Nginx处理高并发比Apache要强,NGINX 相对于 LAMP 来说安全较为差一点,同样的配制环境负载远远高于 LAMP 向国内的一些大公司,淘宝、新浪都在用这一些 NGINX,向那么大的公司网站需要用到服务器群用LAMP搭建环境成本远远大于NGINX。打个比方本来1000000W访问量需要 10台LAMP环境服务器才能完成,但是使用NGINX也许只需要5、6台这样一来对于这样的公司来说就大大的节约了成本。

从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案,在以前这句话没有错,但是在现在,这句话有待证实!!!因为在以后的过程中,会发现我们会使用的架构是Nginx和Apache结合使用:使用Nginx可以做集群等相关配置,可以和apache一起使用,有的会用apache去跑php,然后用nginx做反向代理,比如apache运行在8080端口,nginx在80端口,访问php文件时,反向代理到apache,静态页通过nginx处理。nginx支持高并发,apache对php的运行比较稳定。

常见的网页类型:htm,html,shtml,stm.php,asp,aspx,shtm,jsp等等

Apache本事只处理静态页面,`处理动态页面需要使用libphp5.so这个模块去工作,
编译php也其实是将一个至关重要的模块打入到apache内部,然后apache收到php请求,将请求交给这个模块来处理!

Apache工作原理:
Apache本身只处理html静态语言页面,当客户端需要访问php页面的时候,Apache会调用libphp5.so这个模块去工作,这个模块会把php页面转换成html静态页面,让Apache处理,Apache处理过,会返回给客户端

LAMP相关网站:

Apache=http://httpd.apache.org/                                                      httpd主程序包
MySQL=http://dev.mysql.com/downloads/mysql/                          mysql主程序包
PHP=http://php.net/downloads.php                                                 php主程序包
apr=http://apr.apache.org/                                               apr是httpd的依赖包
apr-util=http://apr.apache.org/                               apr-util是httpd的第二个依赖包
apr和apr-util这个两个软件是对后端服务软件进行优化的,
apr-util只是在apr的基础上提供了更多的数据结构和操作系统封装接口而已。
pcre 是httpd的第三个依赖包 http://pcre.org/

PCRE(Perl Compatible Regular Expressions中文含义:(perl语言兼容正则表达式)
是一个用C语言编写的正则表达式函数库,PCRE被广泛使用在许多开源软件之中,最著名的莫过于Apache HTTP服务器和PHP脚本语言、R脚本语言,此外,正如从其名字所能看到的,PCRE也是perl语言的缺省正则库。

编译安装LAMP所需要及其所使用的源码版本:

httpd version:httpd-2.4.16
apr version:apr-1.5.2
apr-util version:apr-util-1.5.4
pcre version:pcre-8.37
mysql version:mysql-5.6.26
php version:php-5.6.13

安装之前需要注意:
1、LAMP源码编译的基础环境

[root@XueGod63 ~]# lsb_release -a
……
Description:        Red Hat Enterprise Linux Server release 6.5(Santiago)
……
[root@XueGod63 ~]# uname -a
Linux XueGod63.cn 2.6.32-431.el6.x86_64 …

2、确保系统的干净的系统,不要和现在源码编译安装的软件冲突

不要在一个系统上同时存在 RPM-Apache+源码-Apache

建议在编译之前,把开发包组安装:

"Development Tools"和 "Development Libraries"
yum groupinstall "Development Tools" "Development Libraries" -y[root@XueGod63 ~]# yum install gcc gcc-c++ openssl-devel -y

所有软件:

[root@XueGod63 ~]# ls
apr-1.5.2.tar.gz            httpd-2.4.16.tar.bz2    pcre-8.37.tar.bz2
apr-util-1.5.4.tar.bz2      mysql-5.6.26.tar.gz     php-5.6.13.tar.bz2   注: apr和apr-util依赖;   apr和apr-util独立编译[root@XueGod63 ~]# tar xf apr-1.5.2.tar.gz -C /usr/local/src/ &&tar xf apr-util-1.5.4.tar.bz2 -C /usr/local/src/
[root@XueGod63 ~]# cd /usr/local/src/apr-1.5.2/ && ./configure --prefix=/usr/local/apr && make -j 2 && make install
[root@XueGod63 apr-1.5.2]# cd ../apr-util-1.5.4/ && ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make -j 2 && make install
[root@XueGod63 apr-util-1.5.4]# cd && tar xf pcre-8.37.tar.bz2 -C /usr/local/src/
[root@XueGod63 ~]# cd /usr/local/src/pcre-8.37/ && ./configure --prefix=/usr/local/pcre && make -j 2 && make install && cd

Apache源码编译

依赖环境安装完成,开始编译安装apache:

[root@XueGod63 ~]# tar xvf httpd-2.4.16.tar.bz2 -C /usr/local/src/ && cd /usr/local/src/httpd-2.4.16
[root@XueGod63 httpd-2.4.16]# ./configure --prefix=/usr/local/apache2.4 --enable-so --enable-rewrite --enable-ssl --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event && make -j 2 && make install --prefix=/usr/local/apache2.4                       #安装路径
--enable-so                                         #支持动态加载模块
--enable-rewrite                                    #支持网站地址重写
--enable-ssl                                        #支持SSL加密
--with-pcre=/usr/local/pcre                         #pcre路径
--with-apr=/usr/local/apr                           #apr路径
--with-apr-util=/usr/local/apr-util                 #apr-util路径

一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式。它们分别是prefork,worker和event,它们同时也代表这Apache的演变和发展。

配置Apache的启动脚本:

[root@XueGod63 ~]# cp /usr/local/apache2.4/bin/apachectl  /etc/init.d/apache2.4
# 若是你按照我们实验环境安装了桌面,那么需要停掉httpd服务,若不是,则不需要
[root@XueGod63 ~]# /etc/init.d/httpd stop
[root@XueGod63 ~]# chkconfig httpd off # 设置为开机启动

编辑启动脚本文件:

[root@XueGod63 ~]# vim /etc/init.d/apache2.4
#!/bin/sh
# chkconfig: 2345 64 36
#这个是启动级别的服务,2345是指那些级别启动,64是开启顺序,应该在network服务的后面,36是关闭顺序,应该在network的前面,这里并不是注释
#默认network的是:2345 10 90
# description: Apache2.4.16 start script            #描述字段,有了这两个字段,就可以用chkconfig命令控制
[root@XueGod63 ~]# service apache2.4 start
[root@XueGod63 ~]# chkconfig apache2.4 on

Apache安装完成需要注意的地方:

[root@XueGod63 ~]# ps -aux | grep apache     //源码编译apache,运行用户为deamon
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root        43191  0.0  0.0  70632  2184?  Ss   16:54   0:00/usr/local/apache2.4/bin/httpd -k start
daemon      43192  0.0  0.1663500  4820?  Sl   16:54   0:00/usr/local/apache2.4/bin/httpd -k start
daemon      43193  0.0  0.1414892  4184?  Sl   16:54   0:00/usr/local/apache2.4/bin/httpd -k start
daemon      43194  0.0  0.1414892  4188?  Sl   16:54   0:00/usr/local/apache2.4/bin/httpd -k start
root        43344  0.0  0.0103244  864 pts/0 S+ 17:12   0:00 grep apache[root@XueGod63 ~]# id daemon                                   //编译安装运行用户身份是daemon
uid=2(daemon) gid=2(daemon) groups=2(daemon),1(bin),4(adm),7(lp)[root@XueGod63 ~]# useradd -M -s /sbin/nologin apache                           //创建一个用户用来运行apache
[root@XueGod63 ~]# vim /usr/local/apache2.4/conf/httpd.conf           //修改配置文件改变apache运行身份
User apache                     #运行用户
Group apache                    #运行组,创建apache的时候已经即时创建了apache这个组[root@XueGod63 ~]# id apache
uid=500(apache) gid=500(apache) groups=500(apache)[root@XueGod63 ~]# chown -R apache:apache /usr/local/apache2.4/       // 更改文件拥有者权限,默认是root,改为apache

MYSQL源码编译

Mysql 5.5.15 以后,使用了新的 cmake 编译方式,所以先安装 cmake。 以前的版本直接 configure然后make ,make install ,对于5.5.16的后续版本,将需要先使用cmake之后再make,然后make install

CMake 是一个跨平台的安装(编译)工具:
可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的 makefile 或者 project 文件,能测试编译器所支持的 C++特性,类似 UNIX 下的automake。 只是 CMake 的建构档取名为 CmakeLists.txt。
Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。

解决依赖:

[root@XueGod63 ~]# yum install -y cmake     ncurses-devel              //gcc等相关在编译apache已安装

编译安装MySql:
安装之前使用 yum remove mysql 确保没有安装MySQL

[root@XueGod63 ~]# tar xf mysql-5.6.26.tar.gz -C /usr/local/src/ ; cd /usr/local/src/mysql-5.6.26
[root@XueGod63 mysql-5.6.26]# useradd -M -s /sbin/nologin mysql                            //创建mysql运行用户[root@XueGod63 mysql-5.6.26]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_MEMORY_STORAGE_ENGINE=1\
-DWITH_READLINE=1\
-DENABLED_LOCAL_INFILE=1\
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL-USER=mysql***********************************参数解释******************************************************************************
DCMAKE_INSTALL_PREFIX                                      #制定mysql的安装根目录,目录在安装的时候会自动创建,这个值也可以在服务器启动时,用--basedir来设置
DMYSQL_UNIX_ADDR                                           #服务器与本地客户端进行通信的Unix套接字文件,必须是绝对路径,默认位置/tmp/mysql.sock,可以在服务器启动时,用--socket改变
DDEFAULT_CHARSET                        #mysql默认使用的字符集,不指定将默认使用Latin1西欧字符集
DDEFAULT_COLLATION                           #默认字符校对
DWITH_EXTRA_CHARSETS                  #制定mysql拓展字符集,默认值也是all支持所有的字符集
DWITH_MYISAM_STORAGE_ENGINE
DWITH_INNOBASE_STORAGE_ENGINE
DWITH_MEMORY_STORAGE_ENGINE
#静态编译MYISAM,INNOBASE,MEMORY存储引擎到MYSQL服务 器,这样MYSQL就支持这三种存储引擎
DWITH_READLINE                    #支持readline库
DENABLED_LOCAL_INFILE                    #允许本地倒入数据,启用加载本地数据
DMYSQL_DATADIR                                #mysql数据库存放路径
DMYSQL-USER                                    #运行mysql的用户[root@xuegod63 mysql-5.6.26]# make -j 4 && make install

这些编译参数的帮助寻找方法:

http://www.mysql.com→→Documentation→→选择对应的版本(5.6)
→→HTML Online→→View→→Installation & Upgrades
→→Installing MySQL from Source →→MySQL Source-Configuration Options
→→ http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html

配置mysql:

[root@XueGod63 mysql-5.6.26]# cd && chown -R mysql:mysql /usr/local/mysql/                //属主属组更改[root@XueGod63 ~]# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf       //覆盖原配置文件
[root@XueGod63 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld    //启动脚本[root@XueGod63 ~]# vim /etc/init.d/mysqld
//更改启动脚本中指定mysql位置
basedir=
datadir=
#修改为
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data[root@XueGod63 ~]# chkconfig mysqld  on                                         //开机启动

初始化数据库:

[root@XueGod63 ~]# /usr/local/mysql/scripts/mysql_install_db \
--defaults-file=/etc/my.cnf  \
--basedir=/usr/local/mysql/\
--datadir=/usr/local/mysql/data/\
--user=mysql
#类似于在rpm安装的时候启动数据库弹出的初始化消息[root@XueGod63 ~]# ls /usr/local/mysql/data/                     //初始化看这个下面有无mysql和test等数据库
ibdata1  ib_logfile0  ib_logfile1  mysql  performance_schema  test[root@XueGod63 ~]# ln -s /usr/local/mysql/bin/* /bin/                  //这个里面是部分命令,让系统直接调用
# 此处也可以设置mysql的环境变量,通过systemctl start mysqld 来启动[root@XueGod63 ~]# servie mysqld  start                                 //启动数据库
[root@XueGod63 ~]# mysql_secure_installation                        //初始安全设置(设置root密码,123456)
[root@XueGod63 ~]# mysql -uroot -p123456                              //测试登录(OK)

编译安装配置PHP:

PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。

Apache对于php的解析,就是通过众多Module中的php Module来完成的,把php最终集成到Apache系统中,还需要对Apache进行一些必要的设置!

解决依赖:

[root@XueGod63 php-5.6.13]# yum install -y libxml2-devel
[root@XueGod63 ~]# tar xf php-5.6.13.tar.bz2 -C  /usr/local/src/ ; cd /usr/local/src/php-5.6.13

正式安装:

[root@XueGod63 php-5.6.13]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql/ --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php
--prefix                        #指定安装路径
--with-apxs2                    #用apache的apxs工具将php编译成apache的一个模块
--with-mysql                    #与mysql结合,如果不跟路径,编译出来的版本将是低版本
--with-config-file-path         #php的主配置文件php.ini路径

看到下面一段内容,表示configure成功:

Thank you for using PHP.
config.status: creating php5.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands[root@XueGod63 php-5.6.13]# make –j 3 ; make install ; cd /usr/local/src/php-5.6.13
[root@XueGod63 php-5.6.13]# cp php.ini-production /usr/local/php/php.ini ; cd        //php配置文件

检测编译安装结果:
只有有下面这两个文件(模块),代表我们的apache就可以支持php了

[root@XueGod63 ~]# ls  /usr/local/apache2.4/modules/httpd.exp
/usr/local/apache2.4/modules/httpd.exp[root@XueGod63 ~]# ls /usr/local/apache2.4/modules/libphp5.so
/usr/local/apache2.4/modules/libphp5.so

配置Apache支持PHP:

[root@XueGod63 ~]# vim /usr/local/apache2.4/conf/httpd.conf
……
248    <IfModule dir_module>
249       DirectoryIndex index.html index.php           #添加index.php
250    </IfModule>
……
376     AddType application/x-compress .Z
377     AddType application/x-gzip .gz .tgz       #上面两行是以前有的378     AddType application/x-httpd-php .php      #下面两行是添加的,需要添加以支持PHP
379     AddType application/x-httpd-php-source .phps

修改完,重启下Apache服务。

测试:

[root@XueGod63 ~]# vim /usr/local/apache2.4/htdocs/index.php
<?phpphpinfo();
?>

然后使用客户端浏览此页面

【Linux云计算架构:第二阶段-Linux必会的20多种服务】第22章——-源码编译安装LAMP相关推荐

  1. Web服务 源码编译安装LAMP架构

    Web服务 源码编译安装LAMP架构 一.LAMP架构 1.LAMP架构是什么 2.各组件的主要作用 二.编译安装Apache httpd服务 1.关闭防火墙,将安装Apache所需软件包传到/opt ...

  2. linux源码编译安装lamp环境搭建,linux下源码包编译安装LAMP环境

    1.下载所需的源码包 Httpd-2.4.10  apr-1.5.1  apr-util-1.5.3  pcre-8.33(这些均可在Apache官网进行下载) Mysql-5.5.39    php ...

  3. 源码编译安装LAMP(Linux, Apache ,Mysql ,PHP)-------------- (连载篇(三)----PHP)

    编译安装PHP 步骤流程: 本文接上文,第三篇PHP 软件包版本:php-7.1.10.tar.bz2 步骤一:安装PHP环境 yum -y install \ libjpeg \ libjpeg-d ...

  4. 源码 linux下编译_Linux云服务器软硬链接及源码编译安装python3.8的一些备注

    推荐一个简书作者写的从零开始学习Linux,非常细,授人以鱼不如授人以渔. https://www.jianshu.com/p/54c0e6a1da99 正文:看一下服务器的版本 cat /proc/ ...

  5. linux下源码安装vim,ubuntu 源码编译安装最新的vim 8.0

    为什么要源码编译安装VIM? 因为我要安装ycm,但是ubuntu14.04仓库vim版本低 教程步骤: 1, 核对系统版本 2, 删除系统自带的vim 3, 编译安装vim 4, 检验vim的安装 ...

  6. Linux 下源码编译安装 vim 8.1

    前言 目前 linux 的各个发行版基本上都是带了一个 vi 编辑器的,而本文要说的 vim 编辑器对 vi 做了一些优化升级,更好用.当我们需要远程操作一台 linux 服务器的时候,只能使用命令行 ...

  7. Linux下源码编译安装新版libxcb

    前言 上一篇文章提到,linux 下编译Qt源码如果要用到Quick的话,那么运行时会依赖qxcb库,而编译生成qxcb库就需要先安装libxcb,并且最低要求 版本大于1.9.1 Requires ...

  8. Linux 源码编译安装过程-以安装XZ解压为例

    一.描述 Linux安装软件一般有两种安装方式:安装包安装和源码安装. 1.安装包安装.安装包安装比较简单,例如采用apt-get  install +软件名 命令,安装 deb 包的 Linux 操 ...

  9. linux 安装源码网卡包,【linux命令】Linux通过yum 或者源码编译安装vnstat查看网卡流量...

    Linux通过vnstat查看网卡流量有两种安装方式: yum 安装或者源码编译安装. 1,yum安装. 直接运行yum install vnstat  -y 安装完后测试: [[email prot ...

  10. linux git编译安装目录,Linux(centos) 环境下如何源码编译安装git

    21运维原创,转载请注明出处. 最近线上要使用git进行代码发布和版本管理了,之前搞过,一直没有做记录.从今儿起开始记录这块. linux上(当前文章使用的是centos,ubuntu采用apt-ge ...

最新文章

  1. 关于node.js的思考
  2. 从情报分析的高度来看APT***
  3. io_uring vs epoll ,谁在网络编程领域更胜一筹?
  4. Nginx(五):动静分离
  5. 9. 设计二个函数分别计算sinx和cosx_【数组分享】PHP函数array_udiff_assoc ()分享(20201128)...
  6. 打造一个全命令行的Android构建系统
  7. BZOJ 2707: [SDOI2012]走迷宫( tarjan + 高斯消元 )
  8. 用计算机找到自己的另一半,希望找到另一半的说说 期盼找到另一半的句子
  9. Python面试题汇总
  10. Linux下Socket客户端服务器通信
  11. 沥青防水卷材行业调研报告 - 市场现状分析与发展前景预测
  12. python 怎么样才有output_[学]Python用户手册笔记_4_Input and Output
  13. context:annotation-config、context:component-scan
  14. Java笔记——泛型擦除
  15. 黑苹果睡眠问题(仅适用自己的配置)
  16. Unity -- UI -- Scroll Rect
  17. Windows 10访问共享时提示“过时的SMB1协议”的修复办法
  18. HMM(隐马尔可夫)笔记
  19. No Babel config file detected for xxx(未检测到Babel配置文件)和Already included file name解决方案
  20. 什么是 SAP Support Package Stack

热门文章

  1. 5个SEO网站优化的技巧
  2. python post请求头部伪装随机(防止封ip)
  3. 好年货不用多等 拼多多30亿红包聚焦全国全球尖货好物
  4. 怎样推断server为虚拟机还是物理真机?
  5. matlab蚁群算法解决vrp过程,蚁群算法MATLAB解VRP问题
  6. 网页源代码查看竟然有这么多方法!你都知道吗?
  7. 微信小程序 地图组件标记文字
  8. 电脑c盘格式化,如何恢复C盘文件?
  9. WSL ubuntu ‘Permission denied’的解决方法
  10. Millet谷仓:人人受益的电商