Ubuntu下的LAMP环境编译安装

虚拟机安装

  • 使用镜像安装ISO
  • 启动虚拟机转换网络桥接模式
  • ifconfig 查看IP
  • 使用mac终端 或者 window ssh连接Linux
  • MAC连接如下:
ssh username@ip

Ubuntu 下的 apt-get 更新

  • 在使用之前,需要使用apt-get update进行资源目录的更新,注意这里是网络资源目录更新。
  • apt-get upgrade是进行所安装软件的更新

下载LAMP环境安装包

下载依赖包

公共依赖包

cmake   // 用来预编译MySQL
make    // 源码预编译
gcc // GNU c编译器
g++ // GNU c++编译器 
libxml2-dev // 编译安装libxml2会用此依赖包
libxml2
build-essential // 编译程序的依赖包 作用:提供编译程序必须软件包的列表信息
bison   // 安装Mysql会用到
build-depgcc    // Ubuntu下的gcc安装
libncurses5-dev // 安装libncurses5的依赖包
re2c    // PHP语法分析器
libmcrypt   // 算法加密库
autoconf    // 自动配置,phpize会用到

Apache依赖包

apr // Apache可移植运行库
apr-until   // 
pcre    // 一个Perl库

编译安装

Apache

  • 安装apr

解压后进入目录,执行如下命令

./configure --prefix=/usr/local/apr
make && make install
  • 安装apr-until

解压后进入目录,执行如下命令

./configure --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr 
make && make install
  • 安装pcre

解压后进入目录,执行如下命令

./configure --prefix=/usr/local/pcre
make && make install
  • 安装Apache

解压后进入目录,执行如下命令

./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
make && make install

有时用tar解压.错误如下:

gzip: stdin: unexpected end of file 
tar: Unexpected EOF in archive 
tar: Unexpected EOF in archive 
tar: Error is not recoverable: exiting now 

原因:该源码包在下载过程中被破坏或者未使用想对应后缀的解压命令。
解决方法:重新下载。

  • 配置Apache

进入 /usr/local/apache/conf 目录 备份http.conf 为 http.conf.bak

vi  http.conf

将187行 ServerName 前#去掉,更改为 ServerName 127.0.0.1:80 保存退出;
进入 apache/bin 目录 apachectl 为服务启动脚本,将此文件 cp 到 /etc/init.d/httpd;
执行命令:sudo service httpd start 通过浏览器访问 localhost 即可看见 it Work 即可;
如果出现未启动情况请查看80端口是否被其他程序占用。

MySQL 安装编译

创建用户和用户组

groupadd mysql
useradd -g mysql- s "/sbin/nologin" // 防止以mysql用户登录系统

进入mysql目录,执行cmake

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_USER=mysql -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_DEBUG=0 -DWITH_READLINE=1 -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost

-DCMAKE_INSTALL_PREFIX=安装根目录
-DCMAKE_INSTALL_PREFIX=unix套接字目录
-DDEFAULT_CHARSET=默认字符集
-DDEFAULT_COLLATION=默认编码
-DWITH_EXTRA_CHARSETS=额外的编码,请使用ALL来编译。
-DWITH_MYISAM_STORAGE_ENGINE=1 编译myisam存储引擎,默认的存储引擎,不加也可以
-DWITH_INNOBASE_STORAGE_ENGINE=1 支持InnoDB存储引擎,这个也是默认安装的
-DWITH_READLINE=1 使用readline功能
-DENABLED_LOCAL_INFILE=1 可以使用load data infile命令从本地导入文件
-DMYSQL_DATADIR=数据库 数据目录
-DDOWNLOAD_BOOST=1 // 下载boost,这个用来编译高版本的Mysql,没有会报错,也可以进行apt-get
-DWITH_BOOST=/usr/local/boost // 使用boost

这个问题我重新安装一次就没有了

debian 系统下安装,需要把系统 Swap 设到最大的 512M(linode 默认的 Swap 是 256M,最大是 512M),不然编译时会报 “g++: internal compiler error: Killed (program cc1plus)” 的错误:(

编译安装

./configure  --prefix=/usr/local/php  --with-apxs2=/usr/local/apache/bin/apxs    --with-mysql=/usr/local/mysql --with-freetype-dir=/usr/local/freetype --with-jpeg-dir=/usr/local/libjpeg  --with-png-dir=/usr/local/libpng --with-zlib-dir=/usr/local/zlib --enable-mbstring  --enable-xml  --enable-sockets 

make && make install

配置mysql

安装默认数据库

cd /usr/local/mysql/scripts

初始化数据库

./mysql_install_db --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data   --user=mysql

复制配置文件

cd /usr/local/mysql/support-files
cp my-medium.cnf /etc/my.cnf cpmysql.server /etc/init.d/mysqld

修改配置配置文件

vi /etc/init.d/mysqld /*编辑basedir=和datadir=*/
basedir=/usr/local/mysql datadir=/home/mysql servicemysqld start

提示:出国一次pid的错误,解决方式是重新安装。

PHP安装编译

可以查看一下INSTALL文件,里面有安装说明。

说明:此次安装未在编译PHP安装模块,主要是可以通过phpize来实现编译后PHP的扩展安装;如果有需要,也可以实现在前期编译前安装相应的扩展模块,只需要按正常顺序进行解压,配置,编译即可,在编译PHP时加入相应的OPtions参数即可,但需要注意的是依赖包问题。

开始编译

进入PHP解压目录
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with--mysql=/usr/local/mysql

--with-apxs2=/usr/local/apache/bin/apxs // 挂在apache上,并且开启PHP模块
--with-mysql=/usr/mysql/mysql // PHP的扩展模块mysql

make && make install

复制配置文件

cp php.ini-development/usr/local/php/lib/php.ini

修改php.ini 文件 中搜索 date 将默认时区修改为 Asia/Shanhai

修改http.conf文件

向 http.conf 文件中加入

<FilesMatch \.php$>  
SetHandler application/x-httpd-php 
</FilesMatch>

搜索DirectoryIndex 修改为

index.html index.php index.htm

在Apache的htdoc目录中建立文件

mv index.html index.php
vim index.php
<?php
echo phpinfo();
?>

安装完成进行测试

浏览器打开对应IP即可

编译PHP扩展

GD库的安装

GD依赖包有很多,需要在安装之前全部安装
注意:安装过程中可能还会需要相应的依赖包,选择安装

libfreetype6-dev
libfontconfig1-dev
libgpm-dev
libjpeg62
libjpeg62-dev
libpng12-0
libpng-12-0-dev
libfeetype6
libfreetype6-dev
libxml2
libxml2-dev
zlib1g
zlib1g-dev
libcurl3
libcur3-dev
libncurses5-dev
libperl-dev bison

libpng

tar -xf libpng-1.6.16.tar.gz
cd libpng-1.6.16
./configure
make
make install

jpegsrc

mkdir /usr/local/jpeg9
mkdir /usr/local/jpeg9/bin
mkdir /usr/local/jpeg9/lib
mkdir /usr/local/jpeg9/include
mkdir -p /usr/local/jpeg9/man/man1
cd /usr/local/src/
tar -zxvf jpegsrc.v9a.tar.gz
cd jpeg-9a/
./configure --prefix=/usr/local/jpeg9/ --enable-shared --enable-static
make && make install

freetype

tar -xf freetype-2.5.5.tar.gz
cd freetype-2.5.5
./configure
make && make install

这是提示找不到libpng的安装位置,所以需要将libpng的bin目录配置到环境变量中

vi /etc/profile
LIB_PNG=/usr/local/libpng/bin
PATH=$LIB_PNG:$PATH  
export PATH 
生效:./etc/profile

GD库

进入安装的源码包中,找到ext扩展包目录,进如相应扩展包目录 或者 自己下载扩展包,进入相应扩展包目录
我的目录如下:

cd /usr/local/src/php-5.6.19/ext/gd

使用phpize生成configure

/usr/local/php/bin/phpize

使用 configure 安装配置

./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

修改php.ini,在该文件的 Dynamic Extensions 模块下添加一行

extension=gd.so

检测gd库安装情况

/usr/local/bin/php -m
/usr/local/bin/php -m |grep gd

安装memcache

安装memcache之前需要安装libevent支持

wget http://down1.chinaunix.net/distfiles/libevent-2.0.21-stable.tar.gz
tar -zxvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure --prefix=/usr/local/libevent
make && make install

接下来安装扩展包

下载memcache
解压
进入目录
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache
make

做到这一步应该会报错,未报错直接跳过。错误内容大致如下:

/usr/local/src/memcache-2.2.3/memcache.c: 在函数‘php_mmc_connect'中:
/usr/local/src/memcache-2.2.3/memcache.c:1902: 错误:提供给函数‘zend_list_insert'的实参太少
/usr/local/src/memcache-2.2.3/memcache.c:1919: 错误:提供给函数‘zend_list_insert'的实参太少
/usr/local/src/memcache-2.2.3/memcache.c: 在函数‘zif_memcache_add_server'中:
/usr/local/src/memcache-2.2.3/memcache.c:1975: 错误:提供给函数‘zend_is_callable'的实参太少
/usr/local/src/memcache-2.2.3/memcache.c:2003: 错误:提供给函数‘zend_list_insert'的实参太少
/usr/local/src/memcache-2.2.3/memcache.c: 在函数‘zif_memcache_set_server_params'中:
/usr/local/src/memcache-2.2.3/memcache.c:2059: 错误:提供给函数‘zend_is_callable'的实参太少
/usr/local/src/memcache-2.2.3/memcache.c: 在函数‘mmc_find_persistent'中:
/usr/local/src/memcache-2.2.3/memcache.c:2159: 错误:提供给函数‘zend_list_insert'的实参太少
/usr/local/src/memcache-2.2.3/memcache.c:2177: 错误:提供给函数‘zend_list_insert'的实参太少
make: *** [memcache.lo] 错误 1

纠错方式:

根据错误,进行修改:
vi memcache.c
将所有的:zend_list_insert(pool, le_memcache_pool); 
改为:zend_list_insert(pool, le_memcache_pool TSRMLS_CC);
将所有的:zend_list_insert(mmc, le_pmemcache);
改为:zend_list_insert(mmc, le_pmemcache TSRMLS_CC);
将所有的:if (!zend_is_callable(failure_callback, 0, NULL))
改为:if (!zend_is_callable(failure_callback, 0, NULL, NULL))

vim 修改方式

全部替换
%s/old/new/g

修改完成后,重新make编译:

make && make install

成功则显示

Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-zts-20131226/

接下来修改php.ini配置文件,增加extension=memcache.so即可,重启服务器

注意:其他扩展库依据以上步骤即可

虚拟机设置

编辑apache服务器的配置文件,开启扩展模块vhost,即去除#号即可

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

http.conf 同级目录下,extra目录,vim httpd-vhosts.conf

<Directory "/usr/local/apache/docs/wbl">
     Options Indexes
     AllowOverride None
     Require all granted
</Directory>
 
<VirtualHost 172.2.2.33:80>
     ServerAdmin webmaster@dummy-host2.example.com
     DocumentRoot "/usr/local/apache/docs/wbl"
     ServerName wbl.wbl.com
     ErrorLog "logs/wbl.wbl.com-error_log"
     CustomLog "logs/wbl.wbl.com-access_log" common
</VirtualHost>

主机电脑设置。我的是OSX系统

vim /etc/hosts
加入
172.2.2.33  wbl.wbl.com

重启Apache即可,直接在网页上查看即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容

  • 一、卸载系统原有软件 mysql sudo apt-get autoremove --purge mysql-se...
    liangxifeng833阅读 1,377评论 0 3
  • 一、LAMP环境的介绍 1.LAMP环境的重要性 思索许久,最终还是决定写一篇详细的LAMP的源码编译安装的实验文...
    endmoon阅读 2,542评论 4 26
  • php+mysql+apache+centos 编译安装 领导要求先保证php环境稳定,然后再去考虑其他,例如性能...
    dnaEMx阅读 2,106评论 1 16
  • 1.LAMP介绍  LAM(M)P:L: linuxA: apache (httpd)M: mysql, mar...
    尛尛大尹阅读 1,022评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139