为什么要源码编译
一般来说,我们软件的安装方式有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相关 站
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
pcre
version:pcre-8.37
apr-util
version:apr-util-1.5.4
mysql
version:mysql-5.6.26
php
version:php-5.6.13
安装之前需要注意不要再运行yum安装的程序避免冲突
1、LAMP源码编译的基础环境
测试centos7.4和centos6.8支持
[root@XueGod63 ~]# lsb_release -a
Description: CentOS release 6.8 (Final
[root@XueGod63 ~]# uname -a
Linux XueGod63.cn 2.6.32-431.el6.x86_64 …
#1:使用root权限,从根目录到yum.repo.d文件下
cd /etc/yum.repos.d
#2、备份ContOS.repo
mv CentOS-Base.repo CentOS-Base.repo.backup
#3、从url中下载所对应的repo文件
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
#或者
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
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 && echo $p>
[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
# echo $p>
#看上一个命令的结果
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
[root@XueGod63 ~]# echo $p>
–prefix=/usr/local/apache2.4 #安装路径 定义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命令控制
echo $p>
[root@xuegod63 mysql-5.6.26]# make -j 3 && make install
这些编译参数的帮助寻找方法:
http://www.mysql.com→→Documentation→→选择对应的版本(5.6)→→HTML Online→→View→→Installation & Upgrades→→Installing MySQL from Source →→MySQL Source-Configuration Options→→
表2.13 MySQL源代码-配置选项引用(CMake)
格式
描述
违约
介绍
移除
使用与正式版本相同的构建选项
生产的构建类型
RelWithDebInfo
安装基目录
/usr/local/mysql
默认服务器字符集。
latin1
默认服务器排序规则
latin1_swedish_ci
是否启用调试同步支持
ON
5.6.36
是否包括gcov支持
5.6.3
启用gprof(仅优化Linux构建)
OFF
5.6.6
使用-DBUILD_config=MySQL_Relation,忽略libaio检查
OFF
5.6.1
用户可执行目录
PREFIX/bin
文献目录
PREFIX/docs
头文件目录
PREFIX/include
信息文件目录
PREFIX/docs
选择预定义的安装布局
STANDALONE
库文件目录
PREFIX/lib
手册页目录
PREFIX/man
MySQL-测试目录
PREFIX/mysql-test
插件目录
PREFIX/lib/plugin
服务器可执行目录
PREFIX/bin
脚本目录
PREFIX/scripts
安全文件_priv默认值
platform specific
5.6.34
aclocal/mysql.m4安装目录
PREFIX/share
额外支持文件目录
PREFIX/support-files
到memcached的路径
[none]
是否启用MySQL维护者特定的开发环境
OFF
Windows/OSX项目名称
MySQL
5.6.5
Unix套接字文件
/tmp/mysql.sock
要格外小心地创建一个独立于构建位置和时间的构建结果。
5.6.37
Solaris 10+上的客户端链接库
5.6.20
tmpdir默认值
5.6.16
启用AddressSaniizer
OFF
5.6.15
在构建ndbmemcache时使用捆绑libeVENT
ON
在构建ndbmemcache时使用绑定memcached
ON
在构建MySQL集群连接器时使用Classpath for Java。默认值是空字符串。
是否包括调试支持
OFF
bundled
5.6.12
在NDB存储引擎中启用错误注入。不应用于构建用于生产的二进制文件。
OFF
googlemock分发的路径
使用捆绑libedit库
ON
5.6.12
使用哪一个图书馆p>
bundled
5.6.6
是否包括liback(TCP包装程序)支持
OFF
构建NDB存储引擎;用于WITH_NDBCLUSTER_STORKER_Engine的别名
ON
构建多线程数据节点。
ON
默认情况下,由mysqld启用二进制日志记录。
ON
生成用于测试或故障排除的调试版本。
OFF
启用Java和集群J支持的构建。默认启用。仅在MySQL集群中支持。
ON
使用此选项构建的管理服务器使用的默认端口。如果此选项未用于构建该选项,则管理服务器的默认端口为1186。
[none]
包括NDBAPI测试程序。
OFF
设置NUMA内存分配策略
5.6.27
使用捆绑的读行库
OFF
5.6.5
SSL支持类型
system
是否libmysqlclient.so.18同时包含符 16和18。
OFF
5.6.31
启用unixODBC支持
OFF
是否要在Val差尔头文件中编译
OFF
Zlib支持类型
bundled
配置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=
#修改为
46 basedir=/usr/local/mysql
47 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
[root@localhost ~]# /etc/init.d/mysqld start
Starting MySQL…..The server quit without updating PID fil[失败]r/lib/mysql/localhost.localdomain.pid).
1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的权限
解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data” “chmod -R 755 /usr/local/mysql/data” 然后重新启动mysqld!
2.可能进程里已经存在mysql进程
解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程 ”杀死,然后重新启动mysqld!
3.可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。
解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。本人就是使用第三条方法解决的 !http://blog.rekfan.com/186
4.mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。
解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data
5.skip-federated字段问题
解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。
6.错误日志目录不存在
解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限
7.selinux惹的祸,如果是centos系统,默认会开启selinux
解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。
查看mysql版本
mysql> s;
————–
mysql Ver 14.14 Distrib 5.6.26, for Linux (x86_64) using EditLine wrapper
Connection id: 12
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ”
Using delimiter: ;
Server version: 5.6.26 Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysql.sock
Uptime: 2 min 16 sec
Threads: 1 Questions: 42 Slow queries: 0 Opens: 68 Flush tables: 1 Open tables: 61 Queries per second avg: 0.308
编译安装配置PHP
wget http://cn2.php.net/distributions/php-5.6.13.tar.gz
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
# echo $p>
–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
出现错误:configure: error: xml2-config not found. Please check your libxml2 installation.
运行yum install libxml2,然后再运行yum install libxml2-devel安装完毕后,重新运行上面的./configure命令。
[root@XueGod63 php-5.6.13]# make –j 3 ; make install ; cd /usr/local/src/php-5.6.13
# echo $p>
[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
……
251
252 DirectoryIndex index.html index.php#添加index.php
253
……
379 AddType application/x-compress .Z
380 AddType application/x-gzip .gz .tgz #上面两行是以前有的
381 AddType application/x-httpd-php.php#下面两行是添加的,需要添加以支持PHP
382AddType application/x-httpd-php-source.phps
修改完,重启下Apache服务。
测试
[root@XueGod63 ~]# vim /usr/local/apache2.4/htdocs/index.php
phpinfo();
/p>
修改完,重启下Apache服务。然后使用客户端浏览此页面
/etc/init.d/apache2.4 restart
/usr/local/apache2.4/bin/apachectl restart
错[Sat Sep 07 08:35:34.099917 2019] [:crit] [pid 31751:tid 139866593748736] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
AH00013: Pre-configuration failed

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览211574 人正在系统学习中 相关资源:苹果必备软件内含破解工具 iworks2016+office2016+Xcode9 GM-CSDN…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!