编辑一下CentOS的 /etc/ssh/sshd_config
TCPKeepAlive yes
ClientAliveInterval 300 #这个值可以调大一点
然后重启sshd
/etc/init.d/sshd restart
启用putty keepalive
putty -> Connection -> Seconds between keepalives ( 0 to turn off ),默认为0,改为60。
阅读全文
TCPKeepAlive yes
ClientAliveInterval 300 #这个值可以调大一点
然后重启sshd
/etc/init.d/sshd restart
启用putty keepalive
putty -> Connection -> Seconds between keepalives ( 0 to turn off ),默认为0,改为60。
阅读全文
一直使用putty(pietty), 因为简单,小巧.
但是, 一直也羡慕SecureCRT支持sz/rs进行file transfer, 很简单,,,很方便… 而小Putty就只能借助ftp或者winscp了….
今天发现了一个基于Putty的改进版Le Putty(项目地址:http://sourceforge.net/projects/leputty/), 可以完美的支持ZModem进行file transfer.
DownLoad:http://sourceforge.net/projects/leputty/
下载Le Putty以后, 解压到自己的目录.
在目录中, 解压lsrz, 然后在Le Putty中Setting->ZModem中, 将sz和rz路径指向从lsrz中解压出来的对应可执行文件, 并设置好本地接受文件目录.
接下来, 登录服务器,
1. 下载:
$ sz fil然后在Le Putty的标题栏右键, 选择ZModem Recive…
2. 上传:
$ r然后在Le Putty的标题栏右键, 选择ZModem Upload…
不足: 找不到显示Menu Bar的设置,,,, 也没有像pietty那样初始的简单登录界面., 不过,, 这些都是可以忍受的
来源:http://www.laruence.com/2010/04/21/1442.html
但是, 一直也羡慕SecureCRT支持sz/rs进行file transfer, 很简单,,,很方便… 而小Putty就只能借助ftp或者winscp了….
今天发现了一个基于Putty的改进版Le Putty(项目地址:http://sourceforge.net/projects/leputty/), 可以完美的支持ZModem进行file transfer.
DownLoad:http://sourceforge.net/projects/leputty/
下载Le Putty以后, 解压到自己的目录.
在目录中, 解压lsrz, 然后在Le Putty中Setting->ZModem中, 将sz和rz路径指向从lsrz中解压出来的对应可执行文件, 并设置好本地接受文件目录.
接下来, 登录服务器,
1. 下载:
$ sz fil然后在Le Putty的标题栏右键, 选择ZModem Recive…
2. 上传:
$ r然后在Le Putty的标题栏右键, 选择ZModem Upload…
不足: 找不到显示Menu Bar的设置,,,, 也没有像pietty那样初始的简单登录界面., 不过,, 这些都是可以忍受的
来源:http://www.laruence.com/2010/04/21/1442.html
最近经常碰到关于crontab不能执行的,初步总结了有以下几个原因:
第一,脚本的原因:大多数情况下,我们要相信科学,相信计算机,不是有鬼,就是我们的脚本的问题,这种问题导致crontab不能执行的概率占到70%以上。因为程序执行到某一步导致crontab终止执行,我就碰到一次在迁移代码的时候将数据库连错了。导致无法访问而死在那里了。
第二,执行环境问题,当我们碰到第一情况下,一般都可以通过手动执行程序将问题扼杀在摇篮里,一般情况下高手是不应该犯第一种错误的。问题是当我们手动执行成功而crontab不能执行的时候,笔者碰到一次就是执行环境的问题,例如相关路径的设置问题。解决方案:在代码最前面执行 source /home/user/.bash_profile
第三,系统时间不正确。这种问题最好理解,也是比较常见和隐蔽的问题,解决方案:date -s ********
第四,就是我们的脚本是否有可执行权限。必须保证执行脚本的用户有执行改文件的权限。
第五,crontab 守护进程死掉了。这种情况是极少发生的,但也不排除,当我们实在是找不到其他原因的时候可以用。解决方案:重启该进程。
另外,介绍大家一个关于如何查看crontab最修修改时间的方法:
进入目录/var/spool/cron/里面会有N个用户名为文件名的文件,只要建立过crontab的用户在这里都会有以该用户名为文件名的文件,该文件的最后修改时间就是该用户的的crontab的最后修改时间。just do it
阅读全文
第一,脚本的原因:大多数情况下,我们要相信科学,相信计算机,不是有鬼,就是我们的脚本的问题,这种问题导致crontab不能执行的概率占到70%以上。因为程序执行到某一步导致crontab终止执行,我就碰到一次在迁移代码的时候将数据库连错了。导致无法访问而死在那里了。
第二,执行环境问题,当我们碰到第一情况下,一般都可以通过手动执行程序将问题扼杀在摇篮里,一般情况下高手是不应该犯第一种错误的。问题是当我们手动执行成功而crontab不能执行的时候,笔者碰到一次就是执行环境的问题,例如相关路径的设置问题。解决方案:在代码最前面执行 source /home/user/.bash_profile
第三,系统时间不正确。这种问题最好理解,也是比较常见和隐蔽的问题,解决方案:date -s ********
第四,就是我们的脚本是否有可执行权限。必须保证执行脚本的用户有执行改文件的权限。
第五,crontab 守护进程死掉了。这种情况是极少发生的,但也不排除,当我们实在是找不到其他原因的时候可以用。解决方案:重启该进程。
另外,介绍大家一个关于如何查看crontab最修修改时间的方法:
进入目录/var/spool/cron/里面会有N个用户名为文件名的文件,只要建立过crontab的用户在这里都会有以该用户名为文件名的文件,该文件的最后修改时间就是该用户的的crontab的最后修改时间。just do it
阅读全文
<script language="javascript">
var truthBeTold = window.confirm("单击\"确定\"发送Qzone日志。单击\"取消\"不发送Qzone日志。");
if (truthBeTold) {
window.alert("发送Qzone日志成功");
} else window.alert("您选择不发送Qzone日志。");
</script>
示例二:
原blog(jackxiang.com)基本上处于荒废状态,一直想找个机会重整一下,顺便养成勤快更新的习惯,因为现在已经不能再去找“忙”的理由了。原blog用的域名是个cn域名,不太合适作个人博客地址,这次注册了个jackxiang.com的域名,仿一下盖茨大叔的thegatesnotes.com ,原来生活可以更美好:)
原blog使用的bo-blog程序说实话也算不错,但艳羡wordpress的强大,这次也跟国际接轨,使用了wp作为博客程序。本来想找个现成的theme先用一下,找来找去都不入眼,干脆自己做一个。还好wp的theme制作也比较简单,只要熟悉php,html,css,做个theme不在话下,关键还是看设计了。目前这个与博客域名同名的私人theme只是个半成品,以后慢慢再整。
接下来陆续会把旧blog的博文迁移到新版中,真的希望能更新勤快点,至少半月一篇吧!
---
安装好了最新的Wordpress,加入缓存等,Theml,后面发现还是Bo-Blog快捷,习惯了,又迁移回来了,哈哈。
原blog使用的bo-blog程序说实话也算不错,但艳羡wordpress的强大,这次也跟国际接轨,使用了wp作为博客程序。本来想找个现成的theme先用一下,找来找去都不入眼,干脆自己做一个。还好wp的theme制作也比较简单,只要熟悉php,html,css,做个theme不在话下,关键还是看设计了。目前这个与博客域名同名的私人theme只是个半成品,以后慢慢再整。
接下来陆续会把旧blog的博文迁移到新版中,真的希望能更新勤快点,至少半月一篇吧!
---
安装好了最新的Wordpress,加入缓存等,Theml,后面发现还是Bo-Blog快捷,习惯了,又迁移回来了,哈哈。
http://wordpress.org/extend/plugins/wp-sphinx-search/
有这样一种情况,数组A、数组B、数组C的元素来自数据表,其中每个数组的键是字段名,值是字段值,为了更好地描述,我举例如下:
假设我从数据表中读取到的两个数组分别是如下结构:
$a = array('auto_id' => '10006',
'goods_name' => 'Nokia ',
'telphoto' => '13412345678');
$b = array('small_pic' => '缩略图地址',
'price' => '1280',
'HotNum' => '1863',
'SellNum' => '63');
呵可...对了,就像上面这样的数组,不过我没有举例数组C哟,不过不影响你读懂数组合并的方法,现在要求把数组A和数组B合并为如下样子: $D = array('auto_id' => '10006',
'goods_name' => 'Nokia ',
'telphoto' => '13412345678'
'small_pic' => '缩略图地址',
'price' => '1280',
'HotNum' => '1863',
'SellNum' => '63');
实现的方法有两个:
第一个:$D = array_merge($a, $b);
第二个:$D = $a + $b; //完全保留原有数组索引
来源:http://www.ityoudao.com/Web/Php_583_1476.html
假设我从数据表中读取到的两个数组分别是如下结构:
$a = array('auto_id' => '10006',
'goods_name' => 'Nokia ',
'telphoto' => '13412345678');
$b = array('small_pic' => '缩略图地址',
'price' => '1280',
'HotNum' => '1863',
'SellNum' => '63');
呵可...对了,就像上面这样的数组,不过我没有举例数组C哟,不过不影响你读懂数组合并的方法,现在要求把数组A和数组B合并为如下样子: $D = array('auto_id' => '10006',
'goods_name' => 'Nokia ',
'telphoto' => '13412345678'
'small_pic' => '缩略图地址',
'price' => '1280',
'HotNum' => '1863',
'SellNum' => '63');
实现的方法有两个:
第一个:$D = array_merge($a, $b);
第二个:$D = $a + $b; //完全保留原有数组索引
来源:http://www.ityoudao.com/Web/Php_583_1476.html
文件上传表单<form enctype="multipart/form-data" action="URL" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
<input name="myFile" type="file">
<input type="submit" value="上传文件">
</form>
$_FILES数组内容如下:
$_FILES['myFile']['name'] 客户端文件的原名称。
$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。
$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。
$_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)
UPLOAD_ERR_OK
值:0; 没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE
值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE
值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上传。
UPLOAD_ERR_NO_FILE
值:4; 没有文件被上传。
值:5; 上传文件大小为0.
文件被上传结束后,默认地被存储在了临时目录中,这时您必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用PHP的 copy() 函数将它复制到其它位置,此时,才算完成了上传文件过程。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
阅读全文
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
<input name="myFile" type="file">
<input type="submit" value="上传文件">
</form>
$_FILES数组内容如下:
$_FILES['myFile']['name'] 客户端文件的原名称。
$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。
$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。
$_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)
UPLOAD_ERR_OK
值:0; 没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE
值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE
值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上传。
UPLOAD_ERR_NO_FILE
值:4; 没有文件被上传。
值:5; 上传文件大小为0.
文件被上传结束后,默认地被存储在了临时目录中,这时您必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用PHP的 copy() 函数将它复制到其它位置,此时,才算完成了上传文件过程。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
阅读全文
[方便查找]我的vim配置文件情况备份包含PHP函数查找等
Php/Js/Shell/Go jackxiang 2011-3-27 12:41
我的实践:
/etc/hosts.allow
我的配置:
##########By Jack 2015/07/17 #############
sshd:10.108.*.* 10.4.*.* 192.168.112.135 10.64.16.128 10.23.158.84 202.108.16.108/255.255.255.224 202.108.107.* 220.181.198.* 101.23.22.* 10.23.23.* 10.23.64.* 12.23.56.*
########## end #############
重启SSH:
service sshd restart 或:
/etc/init.d/sshd restart
——————————————这种小的代码进行部署会用到,实践如下:——————————————————
因为linux下的ssh的SSH限制某些用户/ip登录,功能影响如下:
1)会影响向测试机发执行测试执行上线脚本生成上线代码的命令和scp拷贝待上线代码到上线机特定目录并比对功能。
2)会影响向线上环境拷贝application下的PHP代码到上线机并比和目前仿真机代码比对出线上大于仿真的版本号文件。
为此,
得放开上线仿真机到测试机,上线仿真机到线上机的ssh连接,
因某些安全原因会给限制,放开IP即可,按如下操作步骤即可:
IP地址如下:
仿真机IP: 101.211.228.135(是它像两只手一样分别去两台机器上拿代码)
测试机IP: 101.211.1.114
线上机IP: 101.211.1.118
操作如下:
步骤一:
在测试机上打开ssh的限定:
用ssh登录到 101.211.1.114,
vi /etc/hosts.allow
sshd:101.211.228.135
步骤二,同理步骤一操作:
也放开线上机器对上线机的ssh连接:
用ssh登录到 101.211.1.118,
vi /etc/hosts.allow
sshd:101.211.228.135
步骤三:重启SSH:
service sshd restart 或:
/etc/init.d/sshd restart
—————————————————————以下内容摘自网络—————————————————————————
1,只允许某个IP登录,拒绝其他所有IP
在 /etc/hosts.allow 写:
sshd: 1.2.3.4
在 /etc/hosts.deny 写:
sshd: ALL</p>
用 iptables 也行:
iptables -I INPUT -p tcp --dport 22 -j DROP
iptables -I INPUT -p tcp --dport 22 -s 1.2.3.4 -j ACCEPT</p>
2,禁止某个用户通过ssh登录
在/etc/ssh/sshd_conf添加
AllowUsers 用户名
或者
AllowGroups 组名
或者
DenyUsers 用户名</p>
3,设定登录黑名单
vi /etc/pam.d/sshd
增加
auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/sshd_user_deny_list onerr=succeed</p>
所有/etc/sshd_user_deny_list里面的用户被拒绝ssh登录</p>
vi /etc/ssh/sshd_conf
DenyUsers jackxiang
来源:http://www.gipsky.com/modules/article6/view.article.php?59909
/etc/hosts.allow
我的配置:
##########By Jack 2015/07/17 #############
sshd:10.108.*.* 10.4.*.* 192.168.112.135 10.64.16.128 10.23.158.84 202.108.16.108/255.255.255.224 202.108.107.* 220.181.198.* 101.23.22.* 10.23.23.* 10.23.64.* 12.23.56.*
########## end #############
重启SSH:
service sshd restart 或:
/etc/init.d/sshd restart
——————————————这种小的代码进行部署会用到,实践如下:——————————————————
因为linux下的ssh的SSH限制某些用户/ip登录,功能影响如下:
1)会影响向测试机发执行测试执行上线脚本生成上线代码的命令和scp拷贝待上线代码到上线机特定目录并比对功能。
2)会影响向线上环境拷贝application下的PHP代码到上线机并比和目前仿真机代码比对出线上大于仿真的版本号文件。
为此,
得放开上线仿真机到测试机,上线仿真机到线上机的ssh连接,
因某些安全原因会给限制,放开IP即可,按如下操作步骤即可:
IP地址如下:
仿真机IP: 101.211.228.135(是它像两只手一样分别去两台机器上拿代码)
测试机IP: 101.211.1.114
线上机IP: 101.211.1.118
操作如下:
步骤一:
在测试机上打开ssh的限定:
用ssh登录到 101.211.1.114,
vi /etc/hosts.allow
sshd:101.211.228.135
步骤二,同理步骤一操作:
也放开线上机器对上线机的ssh连接:
用ssh登录到 101.211.1.118,
vi /etc/hosts.allow
sshd:101.211.228.135
步骤三:重启SSH:
service sshd restart 或:
/etc/init.d/sshd restart
—————————————————————以下内容摘自网络—————————————————————————
1,只允许某个IP登录,拒绝其他所有IP
在 /etc/hosts.allow 写:
sshd: 1.2.3.4
在 /etc/hosts.deny 写:
sshd: ALL</p>
用 iptables 也行:
iptables -I INPUT -p tcp --dport 22 -j DROP
iptables -I INPUT -p tcp --dport 22 -s 1.2.3.4 -j ACCEPT</p>
2,禁止某个用户通过ssh登录
在/etc/ssh/sshd_conf添加
AllowUsers 用户名
或者
AllowGroups 组名
或者
DenyUsers 用户名</p>
3,设定登录黑名单
vi /etc/pam.d/sshd
增加
auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/sshd_user_deny_list onerr=succeed</p>
所有/etc/sshd_user_deny_list里面的用户被拒绝ssh登录</p>
vi /etc/ssh/sshd_conf
DenyUsers jackxiang
来源:http://www.gipsky.com/modules/article6/view.article.php?59909
后期问题
在虚拟机里出现在最后时卡住了,于是排查:按F2,发现两个问题:
问题1:
mounting local filesystem: mount: mount point vmhgfs does not exist
mounting other filesystems: mount: mount point vmhgfs does not exist
问题2:
PHP作为服务启动时老启动不起来,卡了,在最后,只好关闭:chkconfig php-fpm off
统一在脚本里启动:在/etc/init.d# vi lnmp
nohup service php-fpm start > /dev/null 2>&1 &
对Mountain出现不存在的错误屏蔽掉:
/etc# vi fstab
#host://mnt/hgfs vmhgfs defaults,user,ttl=5,uid=root,gid=root,fmask=0113,dmask=0002 0 0
------------------------------------------------------------问题得到解决。
2.0 安装快速备份命令bcp
bcp命令:https://github.com/RickieL/bcp/blob/master/bcp
用于快速备份文件或目录。
wget https://nodeload.github.com/RickieL/bcp/tarball/master -O bcp.tar.gz
tar xzf bcp.tar.gz
cd RickieL-bcp-f65e017
chmod +x bcp
mv bcp /bin/bcp
2.1 备份php.ini配置文件
bcp /usr/local/php5/lib/php.ini
2.2 备份php-fpm.conf配置文件
bcp /usr/local/php5/etc/php-fpm.conf
2.3 备份/etc/init.d/php-fpm 启动文件
bcp /etc/init.d/php-fpm
2.4 备份原来的整个程序目录:
bcp /usr/local/php5
centos5.5安装最新的LNMP:
一、获取相关开源程序:
1、【适用CentOS操作系统】利用CentOS Linux系统自带的yum命令安装、升级所需的程序库(RedHat等其他Linux发行版可从安装光盘中找到这些程序库的RPM包,进行安装):
yum install telnet -y
yum install lrzsz -y
yum install nc -y
yum install unzip -y
yum install wget -y
yum install sudo -y
嵌入式串口相关操作rpm包安装:
yum install setserial
yum install minicom
扯下串口这块的记录:
得到的串口信息:
setserial -a /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test
setserial /dev/ttyS0 port 0x03f8 irq 4 uart 16550A baud_base 9600
设置:
root@192.168.225.128:/home/jackxiang/com# setserial /dev/ttyS0 port 0x03f8 irq 4 uart 16550A baud_base 9600
再看设置成功了没?
root@192.168.225.128:/home/jackxiang/com# setserial -a /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
Baud_base: 9600, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test
其它setserial参数设置:
root@192.168.225.128:/home/jackxiang/c_com# setserial -g /dev/ttyS0
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
root@192.168.225.128:/home/jackxiang/c_com# setserial -gb /dev/ttyS0
/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A
root@192.168.225.128:/home/jackxiang/c_com# setserial -g -G /dev/ttyS0
/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 9600 spd_normal skip_test
相关参考:http://phorum.study-area.org/index.php/topic,25440.0.html
http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Serial-HOWTO.html
http://baike.baidu.com/view/245027.htm
关于minicom也就可以在这儿查看以前的记录:http://jackxiang.com/visit.php?job=viewresult&sid=f13e4b9a640d4c80db689fab5db06c16
开始正式安装这个Lnmp:
sudo -s
LANG=C
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
RedHat AS4 系统环境,通常情况下缺少的支持包安装,64位和32位会自动识别:
yum install libjpeg-devel
yum install freetype-devel
yum install libpng-devel
CentOS下MySQL 5.7.9编译安装,安装成功:
https://blog.linuxeye.com/432.html
多行容易有问题,实践一行更好使:
mysql-8.0.0-dmr-Linux-x86_64
-- Downloading boost_1_60_0.tar.gz to /data/software/mysql-8.0.0-dmr/boost/boost_1_60_0/boost
-- [download 0% complete]
-- [download 1% complete]
直接不带boost版本的mysql安装包:
安装mysql最新版本:
tar -zxvf cmake-2.8.4.tar.gz
首先,需要下载安装Cmake;
wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.12.tar.gz/from/http://cdn.mysql.com/
安装cmake;
tar xvzf cmake-2.8.4.tar.gz
./configure
make
make install
http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.27.tar.gz
vi /etc/profile
PATH=$PATH:/usr/local/bin/
export PATH
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/ \
-DMYSQL_DATADIR=/usr/local/webserver/mysql/data \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/usr/local/webserver/mysql/data/mysql.sock \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0
为了不做软链接编译时就指定mysql.sock到另外的位置:
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/ \
-DMYSQL_DATADIR=/usr/local/webserver/mysql/data \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/data0/data/mysql.sock \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0
VPS实践如下:(2014-09-28)
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \
-DMYSQL_DATADIR=/data/mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0
我在编译的时候报错,意思是 DMYSQL_USER=mysql无效,懒得找原因,直接把那个参数给去掉了,接着进行下面的操作;
make && make install
如果想要加入:Coreseek编译上有区别,且目前版本不能全兼容,试了下:mysql5.5.8是可以的,需要加入参数:-DCMAKE_BUILD_TYPE=Release -DWITH_SPHINX_STORAGE_ENGINE=1
具体请看:http://jackxiang.com/post/4317/ 【可能没法访问,我还没有整理完的缘故】
/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql
cp support-files/my-small.cnf /etc/my.cnf
chown mysql:mysql /etc/my.cnf
chown -R mysql:mysql /usr/local/webserver/mysql
切换用户进入安装目录:
su mysql
cd /usr/local/webserver/mysql/scripts
./mysql_install_db
下面技巧实践Ok:
如安装的源代码文件给丢失后,也可以用下面的方法直接初始化Mysql的mysql表,相当于:
/usr/local/webserver/mysql/scripts/mysql_install_db --user=mysql --datadir=/data0/data/ --basedir=/usr/local/webserver/mysql
/usr/local/webserver/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --user=mysql
出现:[注意:这儿就是指定BaseDir函数的脚本的地方啦]
FATAL ERROR: Could not find ./bin/my_print_defaults
修改:
basedir="/usr/local/webserver/mysql"
builddir="/root/software/mysql-5.5.8"
解决方法[上面就是直接修改啦,下面是参数传入罢了]:
/usr/local/webserver/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/webserver/mysql --datadir=/usr/local/webserver/mysql/data &(这点非常重要)
如何修改basedir特别是vps里有两个盘时,把database放到另外一块盘上:
datadir = /data/datadir/mysql
innodb_log_group_home_dir = /data/datadir/mysql
root@*.10.6.23:/usr/local/mysql/bin# ./mysqladmin -umysql shutdown
cp -Rf /usr/local/mysql/var/* /data/datadir/mysql/.
root@*.10.6.23:/usr/local/mysql/bin# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/data/datadir/mysql/ZWCLC6X-7198.pid).
MYSQL启动后报:ERROR! The server quit without updating PID file错误的问题解决
无法启动mysql,后来上网找了一下解决方法,无非就是以下几种
1. 注释/etc/my.cnf里的skip-federated注释掉即#skip-federated;
2. my.cnf文件配置过高,重新定义其中的参数(根据服务器情况定义);
3. 杀掉mysql_safe和mysqld进程,然后再重启;
4. 当前日志文件过大,超出了my.cnf中定义的大小(默认为64M),删除日志文件再重启;
但是在主机中:
1. 注释中无skip-federated这个选项
2. My.cnf是自己优化过的,断电之前正常使用,不是这个的问题
3. Ps –ef | grep mysql 根本就没有mysql的僵尸进程
4. 没有这个问题
基本上网上的所有方式都试过了,都无法解决问题,然后我就打开了error.log,发现了是磁盘空间不够。
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4141403
root@*.10.6.23:/data/datadir# chown -R mysql:root mysql
root@*.10.6.23:/data/datadir# service mysql start
Starting MySQL.. SUCCESS!
110327 3:07:33 InnoDB: Initializing buffer pool, size = 128.0M
110327 3:07:33 InnoDB: Completed initialization of buffer pool
在/etc/my.cnf 打开下面的InnoDB配置以减少内存即可:
default-storage-engine=MyISAM [注意:Mysql5.6.11放在server-id里不行,还是会报Plugin 'InnoDB' is disabled错,要往上挪挪:放socket = /data0/data/mysql.sock 后就行了。]
server-id = 1
innodb_buffer_pool_size = 21M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
启动:带--user=mysql
/usr/local/webserver/mysql/bin/mysqld_safe --user=mysql &
编译PHP前准备:libiconv PHP Mysql都用得到,不安会出现如下情况
本人在编译php5.2.8时候,make ZEND_EXTRA_LIBS='-liconv',出现下列错误提示
ext/gd/libgd/gdkanji.o: In function `do_convert':
/data0/software/php-5.2.8/ext/gd/libgd/gdkanji.c:350: undefined reference to `libiconv_open'
/data0/software/php-5.2.8/ext/gd/libgd/gdkanji.c:365: undefined reference to `libiconv'
........
........
........
/data0/software/php-5.2.8/ext/iconv/iconv.c:2491: undefined reference to `libiconv_open'
/usr/bin/ld: final link failed: No space left on device
collect2: ld returned 1 exit status
先这样:
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
./configure --prefix=/usr/local/libiconv
make;make install
后依旧的话,则再看下:
注意“/usr/bin/ld: final link failed: No space left on device
”,应该是磁盘空间不够所致,果然,我清空了部分内容,顺利通过编译!算是给大家提醒一下,希望大家不要出现下列错误!
最后可能是直接用了make,而不是:make ZEND_EXTRA_LIBS='-liconv' ...
以上是我在编译:5.3.8版本时发现的,后面编译完后在运行FastCGI时会提示:
Starting php-fpm [eAccelerator] This build of "eAccelerator" was compiled for PHP version 5.3.6. Rebuild it for your PHP version (5.3.8) or download precompiled binaries.
done
于是需要重新编译一次这个缓存插件:
cd eaccelerator-0.9.6.1
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
还有就是查看php.ini关于eaccelerator的配置:
[eaccelerator]
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so"
eaccelerator.shm_size="128"
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
........
然后根据上面的目录结构中去删除以前版本的缓存即可:
root@116.255.139.240:/usr/local/webserver/eaccelerator_cache# ls
0 1 2 3 4 5 6 7 8 9 a b c d e f
root@116.255.139.240:/usr/local/webserver/eaccelerator_cache# rm -Rf *
------------------------------------------------------------------------------------------------------------------------------------
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local
make
make install
cd ..
http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download
wget http://nchc.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make
make install
cd ../../
http://sourceforge.net/projects/mhash/files/mhash/
wget http://nchc.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
make
make install
cd ..
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
http://sourceforge.net/projects/mcrypt/files/MCrypt/
wget http://nchc.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8
/sbin/ldconfig
./configure
make
make install
可能会出现:
=================================================================
configure: error: *** libmcrypt was not found
为了的到mcrypt.so库文件,先后安装编译了mhash和libmcrypt,但是到最后编译mcrypt时报错:
configure: error: *** libmcrypt was not found
最后发现是因为环境变量的问题,gcc编译的时候根据自身定义的变量寻找相关函数库等文件,libmcrypt也是刚安装的,在变量中没有定义出来,所以手动添加:
[root@localhost modules]# export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
再次编译即可。
=================================================================
PHP5.3.9: wget http://cn.php.net/get/php-5.3.9.tar.gz/from/this/mirror
编译PHP:
wget http://cn.php.net/distributions/php-5.3.6.tar.gz
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl
PHP7.0编译参数:
./configure --prefix=/usr/local/php7.0 --with-config-file-path=/usr/local/php7.0/etc --with-fpm-user=www --with-fpm-group=www --enable-fpm --disable-fileinfo --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-exif --enable-sysvsem --with-curl --enable-mbregex --enable-inline-optimization --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-ftp --with-gettext --enable-zip --enable-soap --disable-ipv6 --disable-debug --enable-opcache --with-readline
make时还是需要加上iconv那个:make ZEND_EXTRA_LIBS='-liconv',否则还是会报错,对于PHP7.0主PHP低的生产版本混合运行,把:
cp /etc/init.d/php-fpm拷贝到自己的home目录下修改一下路径,重新启动,这个脚本的启动参数打印了下,如下:
/usr/local/php7.0/sbin/php-fpm --daemonize --fpm-config /usr/local/php7.0/etc/php-fpm.conf --pid /usr/local/php7.0/var/run/php-fpm.pid
本次新加:
--with-pdo=shared -with-pdo-mysql=/usr/local/webserver/mysql
PHP想在一开始就把PDO编译进去,而不是直接加载PDO.so,在configure时可能会出现一个问题,如下:
checking for MySQL support for PDO... yes
checking for mysql_config... /usr/local/webserver/mysql/bin/mysql_config
checking for mysql_query in -lmysqlclient... no
checking for mysql_query in -lmysqlclient... (cached) no
configure: error: PDO_MYSQL configure failed. Please check config.log for more information.
引起的原因,Centos6.2最小化安装,没有安一个rpm包:mysql-level没有装,或者是mysql的版本不对。但Mysql我是通过源码安装的,于是,可以在目录 /usr/local/webserver/mysql/lib/ 找到以下需要的包,也就是最新的Mysql5.5.20编译好的这些库,如下:
[root@bogon lib]# echo ~+/libmysqlclient.
libmysqlclient.a libmysqlclient.so libmysqlclient.so.18 libmysqlclient.so.18.0.0
[root@bogon lib]# ls ~+/libmysqlclient.a
/usr/local/webserver/mysql/lib/libmysqlclient.a
export LDFLAGS=-L/usr/local/webserver/mysql/lib/
再次在PHP5.3.10下进行configure时,就不会提示PDO的相关问题了,但问题依旧,难道还是得要单独安装这个PDO模块!!
暂时不安PDO,先把所有用到的都给编译进PHP里去再说,如下:
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --enable-soap=shared --enable-pdo enable-dom --with-readline --enable-xmlwriter --with-pcre-regex --with-pear --enable-session --enable-spl --enable-hash --enable-reflection
出现:configure: error: Please reinstall readline - I cannot find readline.h
解决方法:
yum install readline-devel
但又报错:php configure: error: readline library not found 干脆去掉这一个不常用的项目:
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --enable-soap=shared --enable-pdo enable-dom --enable-xmlwriter --with-pcre-regex --with-pear --enable-session --enable-spl --enable-hash --enable-reflection
就configure通过了:
Thank you for using PHP.
make ZEND_EXTRA_LIBS='-liconv'
//如果是路径L不对得手动加参数:
make ZEND_EXTRA_LIBS='-liconv -L/usr/local/lib'
成功...
make install
/usr/bin/ld: ext/ldap/.libs/ldap.o: undefined reference to symbol 'ber_strdup'
/usr/bin/ld: note: 'ber_strdup' is defined in DSO /lib64/liblber-2.4.so.2 so try adding it to the linker command line
/lib64/liblber-2.4.so.2: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make: *** [sapi/cli/php] 错误 1
在老外的一篇文章中终于找到解决办法,我是在centos7下进行编译时遇到这个问题的:
-Run your configure command
-edit Makefile
-Find the line that starts with "EXTRA_LIBS ="
-Add the following to the end of the line " -llber"
cp php.ini-dist /usr/local/webserver/php/etc/php.ini
cd ../
刚开始就把SOAP编译进去:
Move into the source directory and configure PHP with SOAP enabled (this may take a few minutes):
cd php-5.2.5
./configure --enable-soap=shared
加上这个:
--enable-soap=shared
加上后是这样:
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --enable-soap=shared
make ZEND_EXTRA_LIBS='-liconv'
PHP5.6.3 2014-11-30 编译成功备案:
编译php报错:/usr/bin/ld: cannot find -liconv解决方法:
首先检查libiconv是否有安装,其次,确认libiconv的安装目录为/usr/local,即编译参数
]#./configure --prefix=/usr/local
然后记得更新下库
]#ldconfig
在最后面添加 -liconv :
编辑:
./src/MakeFile文件
将
LIBS = -lm -lexpat -L/usr/local/lib
改成
LIBS = -lm -lexpat -liconv -L/usr/local/lib
vi /etc/ld.so.conf
这样php编译安装就可以正常运行了。
但有时还是会报错的:
||||||PHP的configure没加:--with-iconv=/usr/local/libiconv引发的/usr/bin/ld: cannot find -liconv||||||||
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv=/usr/local/libiconv --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-gettext --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --with-snmp --enable-shmop --enable-sysvsem --enable-sysvshm --enable-calendar --enable-inline-optimization --with-curl --with-curlwrappers --enable-exif --enable-sysvmsg --with-mcrypt --with-gd --enable-gd-jis-conv --disable-debug --with-openssl --with-mhash --enable-pcntl --silent --enable-sockets
make
make install
出现的原因是没加:--with-iconv=/usr/local/libiconv ,这个是编译时编译到那儿的:
------------------------------------------------------------------------------------------------------------------------------------------
解决方法:
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar -zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/libiconv
make
make install
------------------------------------------------------------------------------------------------------------------------------------------
~/software/php-5.3.15# ./configure --help|grep iconv
--without-iconv[=DIR] Exclude iconv support
--with-iconv-dir=DIR XMLRPC-EPI: iconv dir for XMLRPC-EPI
--with-iconv-dir:
用于 PHP 编译时指定 iconv 在系统里的路径,否则会扫描默认路径。
--with-iconv:
要激活这个扩展必须在编译时使用[DIR]
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
昨天编译安装PHP的时候make报错,make: *** [sapi/fpm/php-fpm] Error 1
/usr/bin/ld: cannot find -liconv
collect2: ld returned 1 exit status
make: *** [sapi/fpm/php-fpm] 错误 1
上面的方法还是没法解决,最后解决了,直接用make,没有用make ZEND_EXTRA_LIBS='-liconv'
不再提示cannot find -liconv,而是:error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory ,于是按以前的方法,如下:ln -s /usr/local/webserver/mysql/lib/libmysqlclient.so.18 /usr/lib/ ,再make一下,直接就过去了,Yeath.
原因iconv重复安装在不同目录,造成include文件iconv.h等重复 通过 find / -name “iconv.h” 如果查找到2个以上返回结果,说明 iconv重复安装了,卸载多余的版本即可正常编译。
[root@bogon /]# find / -name "iconv.h"
/usr/local/libiconv/include/iconv.h
/usr/include/iconv.h
果然是这个问题。
安装iconv是源码编译安装,于是到安装目录cd /usr/local/src/libiconv-1.13.1,执行 make uninstall卸载自己安装的版本。再重新安装PHP。
问题1:
You may want to add: /usr/local/webserver/php/lib/php to your php.ini include_path
/root/jackxiang.com/php-5.3.6/build/shtool install -c ext/phar/phar.phar /usr/local/webserver/php/bin
cp: cannot stat `ext/phar/phar.phar': No such file or directory
[vps实践]linux下安装php5.3.6的扩展包pear :http://jackxiang.com/post/4153/
(1)chmod: cannot access `ext/phar/phar.phar': No such file or directory:
wget http://pear.php.net/go-pear.phar
[root@localhost phar]# /usr/local/webserver/php/bin/php go-pear.phar
Below is a suggested file layout for your new PEAR installation. To
change individual locations, type the number in front of the
directory. Type 'all' to change all of them or simply press Enter to
accept these locations.
1. Installation base ($prefix) : /usr/local/webserver/php
2. Temporary directory for processing : /tmp/pear/install
3. Temporary directory for downloads : /tmp/pear/install
4. Binaries directory : /usr/local/webserver/php/bin
5. PHP code directory ($php_dir) : /usr/local/webserver/php/lib/php
6. Documentation directory : /usr/local/webserver/php/docs
7. Data directory : /usr/local/webserver/php/data
8. User-modifiable configuration files directory : /usr/local/webserver/php/cfg
9. Public Web Files directory : /usr/local/webserver/php/www
10. Tests directory : /usr/local/webserver/php/tests
11. Name of configuration file : /usr/local/webserver/php/etc/pear.conf
1-11, 'all' or Enter to continue: all
这个根据个人环境进行修改。(我是直接回车即可)
================================================
(2)chmod: cannot access `ext/phar/phar.phar': No such file or directory:
make: [ext/phar/phar.phar] Error 1 (ignored)
解决方法1:./configure的时候 要加上--without-pear
然后再make install或者重新make ZEND_EXTRA_LIBS='-liconv',Then :make install
解决方法2:
cd ext/phar/. cp ./phar.php phar.phar
问题2:
/root/jackxiang.com/php-5.3.6/sapi/cli/php: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
make: *** [ext/phar/phar.php] Error 127
ln -s /usr/local/webserver/mysql/lib/libmysqlclient.so.18 /usr/lib/
PHP扩展:
memcache:
http://pecl.php.net/package/memcache
wget http://pecl.php.net/get/memcache-3.0.6.tgz
tar zxvf memcache-3.0.6.tgz
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../
eaccelerator:
wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../
PDO_MYSQL:
http://pecl.php.net/package/PDO_MYSQL
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-mysql=/usr/local/webserver/mysql
make
make install
cd ../
ImageMagick:
wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
tar zxvf ImageMagick.tar.gz
cd ImageMagick-6.6.8-8
./configure
make
make install
imagick:[依赖前面的ImageMagick,注意顺序]
wget http://pecl.php.net/get/imagick-3.1.0b1.tgz
tar -zxvf imagick-3.1.0b1.tgz
cd imagick-3.1.0b1
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../
修改php.ini文件:
cd /root/jackxiang.com/php-5.3.6
cp ./php.ini-production /usr/local/webserver/php/etc/php.ini
手工修改:查找/usr/local/webserver/php/etc/php.ini中的extension_dir = "./"
修改为extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"
//各种PHP版本的extension_dir是不一样的!!!
并在此行后增加以下几行,然后保存:
extension = "memcache.so"
extension = "pdo_mysql.so"
extension = "imagick.so"
再查找output_buffering = Off
修改为output_buffering = On
[eaccelerator]
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so"
eaccelerator.shm_size="128"
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="300"
eaccelerator.shm_prune_period="120"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
安装Nginx:
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.12.zip
tar zxvf pcre-7.8.tar.gz
cd pcre-8.12
./configure
make && make install
cd ../
wget http://nginx.org/download/nginx-0.9.6.tar.gz
wget http://nginx.org/download/nginx-1.0.2.tar.gz
cd nginx-0.9.6
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
cd ../
启动nginx:
/usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf
如果需要添加Nginx_HTTP_Push_Module长连接模块,需要加入新选项,/root/software/nginx_http_push_module-0.692是下载的模块文件位置:
--add-module=/root/software/nginx_http_push_module-0.692
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/software/nginx_http_push_module-0.692
自己加入安全模块的编译选项:
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/software/nginx_http_push_module-0.692 --add-module=/root/software/ngx_cache_purge-1.3 --with-http_secure_link_module
目前最新生产环境的版本:
wget http://nginx.org/download/nginx-1.0.8.tar.gz 这儿新加了一个模块:--with-http_mp4_module
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/software/nginx_http_push_module-0.692 --add-module=/root/software/ngx_cache_purge-1.3 --with-http_secure_link_module --with-http_mp4_module
编译:
make;make install
配置nginx.conf:
error_page 519 /519.html;
if ($request_uri ~* "(cost\()|(concat\()") {
return 519;
}
if ($request_uri ~* "[+|(%20)]union[+|(%20)]") {
return 519;
}
if ($request_uri ~* "[+|(%20)]and[+|(%20)]") {
return 519;
}
if ($request_uri ~* "[+|(%20)]select[+|(%20)]") {
return 519;
}
还有乱七八糟的一些扩展参考:
configure arguments: --prefix=/home/nginx --with-pcre --add-module=../ngx_http_consistent_hash --add-module=../ngx_max_connections --add-module=../ngx_cache_purge --add-module=../ngx_mp4_streaming_public --with-cc-opt=-O3 --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --without-http_memcached_module --without-http_fastcgi_module --with-google_perftools_module
编译过程中几个注意事项:
1、必须采用--with-pcre,而不要偷懒采用--without-http_rewrite_module,否则配置文件里将不支持if判断;
2、加载mp4_streaming,必须采用--with-cc-opt=-O3方式进行编译。
3、max_connections模块默认支持nginx最新版本是0.8.32,需要vi修改其DIR,然后path -p0,但千万不要看见有个Makefile就执行make && make install了,因为它会毫无道理的把整个nginx安装到当前目录的.nginx下隐藏起来……
最新安装nginx-1.1.0全编译项目配置如下:
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/software/nginx_http_push_module-0.692 --add-module=/root/software/ngx_cache_purge-1.3
在linux下安装Nginx的Pcre包的时候,有时候提示
configure: error: newly created file is older than distributed files!
Check your system clock
出现此编译错误,请检查你的系统时间是否设置有误。。。
查看硬件日期时间
hwclock -show
linux是每隔一段时间将系统时间写入 硬件bois的 如果刚设置完了就关机,开机后时间还是等于没有设置
# date -s 991128
Sun Nov 28 00:00:00 CST 1999
实例:设置时间伟2008年8月8号12:00
# date -s “2008-08-08 12:00:00″
修改完后,记得输入:
clock -w
把系统时间写入CMOS即可
参看:http://linux.net527.cn/fuwuqiyingyong/Webfuwuqi/16516.html
---------------------
配置nginx和phpfastcgi平滑过度:
创建php-fpm配置文件(php-fpm是为PHP打的一个FastCGI管理补丁,可以平滑变更php.ini配置而无需重启php-cgi):
在/usr/local/webserver/php/etc/目录中创建php-fpm.conf文件:
rm -f /usr/local/webserver/php/etc/php-fpm.conf
vi /usr/local/webserver/php/etc/php-fpm.conf
输入以下内容(如果您安装 Nginx + PHP 用于程序调试,请将以下的<value name="display_errors">0</value>改为<value name="display_errors">1</value>,以便显示PHP错误信息,否则,Nginx 会报状态为500的空白错误页):
优化fpm参数:
[root@localhost]# vi php-fpm.conf 【把前面的分号给去掉】
user = www
group = www
pm = dynamic
pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 7
pm.max_requests = 120
创建Nginx日志目录:
mkdir -p /data1/logs
chmod +w /data1/logs
chown -R www:www /data1/logs
创建Nginx配置文件
在/usr/local/webserver/nginx/conf/目录中创建nginx.conf文件:
rm -f /usr/local/webserver/nginx/conf/nginx.conf
vi /usr/local/webserver/nginx/conf/nginx.conf
<!--Begin-->
user www www;
worker_processes 8;
error_log /data1/logs/nginx_error.log crit;
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
}
http
{
include mime.types;
default_type application/octet-stream;
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
server
{
listen 80;
server_name status.blog.jackxiang.com;
location / {
stub_status on;
access_log off;
}
}
server
{
listen 80;
server_name jackxiang.com www.jackxiang.com;
index index.html index.htm index.php;
root /data0/htdocs/blog;
if (!-e $request_filename)
{
rewrite ^/post/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /read.php?entryid=$1&page=$2&part=$3 last;
rewrite ^/page/([0-9]+)/([0-9]+)/?$ /index.php?mode=$1&page=$2 last;
rewrite ^/starred/([0-9]+)/?([0-9]+)?/?$ /star.php?mode=$1&page=$2 last;
rewrite ^/category/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=category_$1&mode=$2&page=$3 last;
rewrite ^/archiver/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=archive&cm=$1&cy=$2&mode=$3&page=$4 last;
rewrite ^/date/([0-9]+)/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=showday_$1-$2-$3&mode=$4&page=$5 last;
rewrite ^/user/([0-9]+)/?$ /view.php?go=user_$1 last;
rewrite ^/tags/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ /tag.php?tag=$1&mode=$2&page=$3 last;
rewrite ^/component/id/([0-9]+)/?$ /page.php?pageid=$1 last;
rewrite ^/component/([^/]+)/?$ /page.php?pagealias=$1 last;
#Force redirection for old rules
rewrite ^/read\.php/([0-9]+)\.htm$ http://$host/post/$1/ permanent;
rewrite ^/post/([0-9]+)\.htm$ http://$host/post/$1/ permanent;
rewrite ^/post/([0-9]+)\_([0-9]+)\.htm$ http://$host/post/$1/$2/ permanent;
rewrite ^/post/([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/post/$1/$2/$3/ permanent;
rewrite ^/index\_([0-9]+)\_([0-9]+)\.htm$ http://$host/page/$1/$2/ permanent;
rewrite ^/star\_([0-9]+)\_([0-9]+)\.htm$ http://$host/starred/$1/$2/ permanent;
rewrite ^/category\_([0-9]+)\.htm$ http://$host/category/$1/ permanent;
rewrite ^/category\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/category/$1/$2/$3/ permanent;
rewrite ^/archive\_([0-9]+)\_([0-9]+)\.htm$ http://$host/archiver/$1/$2/ permanent;
rewrite ^/archive\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/archiver/$1/$2/$3/$4/ permanent;
rewrite ^/showday\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/date/$1/$2/$3/ permanent;
rewrite ^/showday\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/date/$1/$2/$3/$4/$5/ permanent;
#Filename alias
rewrite ^/([a-zA-Z0-9_-]+)/?([0-9]+)?/?([0-9]+)?/?$ /read.php?blogalias=$1&page=$2&part=$3 last;
}
#limit_conn crawler 20;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /data1/logs/access.log access;
}
}
<--End-->
安装Memache:
libevent-2.0.10-stable:
wget http://monkey.org/~provos/libevent-2.0.10-stable.tar.gz
tar xzf libevent-2.0.10-stable.tar.gz
cd libevent-2.0.10-stable
./configure
make
make install
#刷新库文件连接
ldconfig
Then Memcache setup:
wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
tar xzf memcached-1.4.5.tar.gz
cd memcached-1.4.5
./configure --prefix=/usr/local/webserver/memcached
make
make install
#增加用户组memcached和用户memcached
/usr/sbin/groupadd memcached
/usr/sbin/useradd -g memcached memcached
启动Memcached时可能出现的问题:
找不到以下的so,用如下操作及可:
ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/
启动PHP的FastCGI:
启动PHP FastCGI:
cp /root/jackxiang.com/php-5.3.6/sapi/fpm/init.d.php-fpm /etc/init.d/phpfpm
chmod 755 /etc/init.d/phpfpm
ulimit -SHn 51200
/etc/init.d/phpfpm start
启动PHp的FastCGI时可能会出现下面错误:
出现下面的错误(这个错误是我在安装过程中发现的,是内在不足导致的,在文章的结尾优化后,就不会有这样的问题了,在这里做个记录,方便大家学习)
Starting php_fpm eAccelerator: Could not allocate 67108864 bytes, the maximum size the kernel allows is 33554432 bytes. Lower the amount of memory request or increase the limit in /proc/sys/kernel/shmmax.
PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on line 0
PHP Fatal error: Unable to start eAccelerator module in Unknown on line 0
failed
#说明
php.ini中设置的eAccelerator,eaccelerator.shm_size="64",解释:eaccelerator可使用的共享内存大小(单位为MB),即64M
在Linux下,单个进程的最大内存使用量受/proc/sys/kernel/shmmax中设置的数字限制(单位为字节) /proc/sys/kernel/shmmax = 33554432 (32M)
临时更改该值:
echo 128000000 > /proc/sys/kernel/shmmax
或者
vi /etc/sysctl.conf
#add by jack
kernel.shmmax = 128000000
使配置立即生效:
/sbin/sysctl -p
优化Linux内核参数
vi /etc/sysctl.conf
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000使配置立即生效:
/sbin/sysctl -p
配置开机自动启动Nginx + PHP:
在不停止Nginx服务的情况下平滑变更Nginx配置
修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确
/usr/local/webserver/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/webserver/nginx/conf/nginx.conf test is successful这时,输入以下命令查看Nginx主进程号:
ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'
这时,执行以下命令即可使修改过的Nginx配置文件生效:
kill -HUP 6302
kill -HUP `cat /usr/local/webserver/nginx/nginx.pid`
编写每天定时切割Nginx日志的脚本:
创建脚本/usr/local/webserver/nginx/sbin/cut_nginx_log.sh
vi /usr/local/webserver/nginx/sbin/cut_nginx_log.sh
#!/bin/bash
# This script run at 00:00
# The Nginx logs path
logs_path="/usr/local/webserver/nginx/logs/"
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`
设置crontab,每天凌晨00:00切割nginx访问日志
crontab -e
00 00 * * * /bin/bash /usr/local/webserver/nginx/sbin/cut_nginx_log.sh
开机自动 启动namp服务如下设置,关于开机程序的自动启动:
1)如专门启动Mysql这样一个,你可以参考:
开机自动 启动Mysql的方法: http://www.jackxiang.com/post/4730/ ,
也就是随便芿一个可执行文件到目录:/etc/rc.d/init.d/ ,赋予可执行权限写入开机启动的脚本即可。
2)如果要同时启动多个服务器软件,则如下所示:
开机启动知识及步骤如下:
想用命令chkconfig加载自启动.提示"**服务不支持chkconfig",原来是自己写的脚本时,忘记写两行了.开头一般要这样写,345是启动级,85和15分别是启动优先级,关闭优先级,下面的就是描述了。:
#!/bin/bash
#chkconfig:345 61 61 //此行的345参数表示,在哪些运行级别启动,启动序号(S61);关闭序号(K61)
#description:nginx php mysql memcache start shell
,修改来自Apache里的启动shell,也可以不用修改:
保存为/etc/init.d/lnmp,内容如下:
#!/bin/bash
#chkconfig:345 61 61
#description:nginx php mysql memcache start shell
echo "Starting memcache mysql php nginx daemon..."
ulimit -SHn 51200
nohup /usr/local/webserver/memcached/bin/memcached -d -m 1 -u www -p 11211 > /dev/null 2>&1 &
nohup /usr/local/webserver/mysql/bin/mysqld_safe --user=mysql > /dev/null 2>&1 &
nohup /etc/init.d/phpfpm start > /dev/null 2>&1 &
nohup /usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf > /dev/null 2>&1 &
把脚本拷贝至/etc/init.d/目录下,执行命令:
ln -s /etc/init.d/lnmp /etc/rc.d/rc3.d/S61lnmp
ln -s /etc/init.d/lnmp /etc/rc.d/rc4.d/S61lnmp
ln -s /etc/init.d/lnmp /etc/rc.d/rc5.d/S61lnmp
再执行
chkconfig --add lnmp
chkconfig --levels lnmp345 on //也成
开机启动:
service lnmp start
env: /etc/init.d/lnmp: 权限不够
chmod -R a+x /etc/init.d/lnmp
reboot 重启动,看服务起来了没,没起来再运行:service lnmp 试试,这儿就不用start了,因上面没有start这个参数!!!
要删除某个service的自动启动的设置,使用--del选项,如下:
# chkconfig --del lnmp
# chkconfig --list | grep lnmp
Nginx这块自己有ssl启动需要输入密码,默认的那个不行,怎么干掉?
nginx 开机启动的service项想删除,service nginx start 这个想干掉,我现在放开机启动里了:
/etc/init.d/nginx //可以把它重写成自己的,因为我的有https
chkconfig nginx off
=======================shell环境关于bash启动脚本======================================
/etc/profile
/etc/bashrc
~/.bash_profile
~/.bashrc
~/.bash_logout
每一个文件都有特殊的功用并对登陆和交互环境有不同的影响。
/etc/profile 和 ~/.bash_profile 是在启动一个交互登陆shell的时候被调用。
/etc/bashrc 和 ~/.bashrc 是在一个交互的非登陆shell启动的时候被调用。
~/.bash_logout 在用户注销登陆的时候被读取
一 个交互的登陆shell会在 /bin/login 成功登陆之后运行。一个交互的非登陆shell是通过命令行来运行的,如[prompt]$/bin/bash。一般一个非交互的shell出现在运行 shell脚本的时候。之所以叫非交互的shell,是因为它不在命令行上等待输入而只是执行脚本程序。
关于开机程序的自动启动
系统脚本可以放置在/etc/rc.d/init.d中并建立/etc/rc.d/rc?.d链接,也可以直接放置在/etc/rc.d/rc.local中。
init.d脚本包含完整的start,stop,status,reload等参数,是标准做法,推荐使用。
为特定用户使用的程序(如有的用户需要使用中文输入法而有的不需要)放置在~/中的bash启动脚本中。
chkconfig --list //开机启动的list
ntsysv //simple gui,直接修改
chkconfig httpd off //还是这个见效快****
chkconfig iptables off //关闭防火墙,还是这个见效快*
chkconfig --list |grep sendmail
chkconfig sendmail off
chkconfig --list |grep auditd
chkconfig auditd off
chkconfig rpcgssd off
chkconfig rpcidmapd off
chkconfig rpcsvcgssd off
chkconfig portmap off最近发现了一个Deamo进程也可以关闭:
udp 0 0 0.0.0.0:46563 0.0.0.0:* 2295/avahi-daemon:
udp 0 0 0.0.0.0:5353 0.0.0.0:* 2295/avahi-daemon:
udp 0 0 :::5353 :::* 2295/avahi-daemon:
步骤方法如下:
chkconfig --list avahi-daemon
root@116.255.139.240:/data0/htdocs/blog/template# chkconfig --list avahi-daemon
avahi-daemon 0:off 1:off 2:off 3:on 4:on 5:on 6:off
avahi-daemon 关闭:
service avahi-daemon stop
chkconfig avahi-daemon off 再看:
root@116.255.139.240:/data0/htdocs/blog/template# chkconfig --list avahi-daemon
avahi-daemon 0:off 1:off 2:off 3:off 4:off 5:off 6:off确实关闭了。
试试把 avahi-daemon 服务关闭,你会得到空前变化。avahi-daemon
Avahi 是 zeroconf 协议的实现。它可以在没有 DNS 服务的局域网里发现基于 zeroconf 协议的设备和服务。它跟mDNS 一样。除非你有兼容的设备或使用 zeroconf 协议的服务,否则应该关闭它。现在用的基本都是DNS了。
更专业点讲就是The Avahi mDNS/DNS-SD daemon implements Apple’s Zeroconfarchitecture(also known as "Rendezvous" or "Bonjour"). The daemonregisters local IP addresses and static services using mDNS/DNS-SD andprovides two IPC APIs for local programs to make use of the mDNS recordcache the avahi-daemon maintains.
avahi-daemon is a daemon which runs on client machines to performZeroconf service discovery on a network. avahi-daemon must be runningon systems that use Avahi for service discovery. Avahi-daemon shouldnot be running otherwise.
AutoMount 自动挂载功能
方法: 启动进程autofs
在RedHat安装后期,在选择启动时需要自动执行进程的那一步骤剔选“autofs”。
如果已经安装好了作业系统,也可以更改该项设置。在Terminal中输入“setup”指令,选“System services”,或者直接输入启动进程配置指令“ntsysv”都可以打开启动进程配置介面,剔选“autofs后,下次进入RedHat Linux后,这一进程就会被自动装载。
1837 root 15 0 29424 1376 1060 S 0.0 0.5 0:00.23 automount
root@116.255.139.240:~# chkconfig --list|grep autofs
autofs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
chkconfig autofs off
root@116.255.139.240:~# service autofs stop
vps取消设置自动挂载ISCSI分区的服务:
方法一:
用编辑器打开/etc/fstab 例如:gedit /etc/fstab ,并在最后一行加入下列命令
/dev/sda1 /mnt/t0 ext2 defaults 0 0 //如果是FAT分区,则将ext2改为vfat。(这个选项很重要,如果没有则无法成功自动挂载)
关闭测试启动自动挂载磁盘的服务:
root@116.255.139.240:~# chkconfig --list|grep iscsi
iscsi 0:off 1:off 2:off 3:on 4:on 5:on 6:off
iscsid 0:off 1:off 2:off 3:on 4:on 5:on 6:off
root@116.255.139.240:~# chkconfig iscsid off
root@116.255.139.240:~# service iscsid stop
Stopping iSCSI daemon:
root@116.255.139.240:~# [ OK ]
Stopping automount: [ OK ]
php扩展ssh2的安装:
wget http://www.libssh2.org/download/libssh2-1.2.7.tar.gz
cd libssh2-1.2.7
./configure
make;make install
pecl install -f ssh2
选择:Y
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/ssh2.so
You should add "extension=ssh2.so" to php.ini
PHP SOAP Extension:
cd /root/jackxiang.com/php-5.3.6/ext/soap
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make;make install
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/soap.so
特别注意:
开机启动SVN服务的Apache的设置方法:
vim /etc/init.d/apache
/usr/local/webserver/apache2/bin/apachectl start
chmod 775 /etc/init.d/apache
chkconfig apache on
当然你也可以抄一个shell标准脚本,如前面php的phpfpm启动脚本。
遇到443端口加密需要需要输入密码的还请慎重考虑,如下所示:
Server svn.jackxiang.com:443 (RSA)
Enter pass phrase:
Apache:mod_ssl:Error: Pass phrase empty (needs to be at least 1 character).
Enter pass phrase:
Ok: Pass Phrase Dialog successful.
需要研究如何自动启动并自动地输入密码。
这块还不行,这块expect里的spawn要和ssh结合,nginx这种情况还不行,下面这个有警告,但是能执行:
上面路径要写死/usr/local/scripts,别相对:
startNginx.sh
升级到PHP5.3.8后启动FastCGI出现:
root@116.255.139.240:~/software/eaccelerator-0.9.6.1# cat /root/runphp.sh
pkill -9 php
usleep 100000
/etc/init.d/phpfpm start
=============执行上面这段代码:
root@116.255.139.240:~/software/eaccelerator-0.9.6.1# sh /root/runphp.sh
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
Starting php-fpm
done
原因是:估计升级PHP后 还是在原来PHP目录下,到了一个不存在的目录中 而显示错误.
Mysql的数据文件移动时出现的新问题:2011-10-16 Add By:jack。
主要是讲述新版本的Mysql在移动目录时,在特别是有Innodb的情况下,出现问题解决问题的一个过程,及Mysql的sock文件和PHP接合的问题。
Mysql数据文件搬家到另外一个目录出现的 二个问题(从/usr/local/webserver/mysql/data/ 搬家到:/data0/data),如下:
1.Innodb出现问题,Mysql启动不了,如附录中的日志所示:
InnoDB: The InnoDB memory heap is disabled
这样的警告,查资料说,只要在my.cnf中加入以下,就可以消除以上警告
innodb_use_sys_malloc =0
系统默认为
innodb_use_sys_malloc =1
似乎有人说innodb_use_sys_malloc =1速度更快,我还没有得到证实。
所以,我就没有修改了。
解决办法:
cd /data0/data
rm -Rf ibdata1
rm -Rf ib_logfile0
rm -Rf ib_logfile1
========================================================
1.检查Linux下Mysql的日志
2.错误信息是"Default storage engine (InnoDB) is not available"
解决方法:
1.删除在MySQL安装目录下的Data目录中的
ib_logfile0
ib_logfile1
2.找到在配置MySQL服务器时指定的InfoDB目录删除掉
ibdata1
3.重新启动MySQL的Service
这个问题第二天又摸索了一下,其实是可以用InnoDB引擎的.
需要在mysql生成的配置文件增加一行配置,即增加一个临时目录,这个在启动mysql服务的时候是需要的.
[mysqld]
tmpdir=/tmp
我的my.ini配置文件如下,注意红色字体,是默认不会生成的;
========================================================
如下:
root@116.255.139.240:/data0/data# rm -Rf ib_logfile0 ib_logfile1
root@116.255.139.240:/data0/data# rm -Rf ibdata1
root@116.255.139.240:/data0/data# rm -Rf ibdata1
后续指定DB目录,和InnoDB目录及日志文件设置如下:
datadir = /data0/data/
innodb_data_home_dir = /data0/data/
innodb_data_home_dir = /data0/data/
innodb_log_group_home_dir = /data0/data/
innodb_data_file_path = ibdata1:128M:autoextend
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_use_sys_malloc = 0
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 4M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 5M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
#log write and so on...
general-log = /data0/data/error_log/log-error.log
log-error = /data0/data/error_log/log-error.log
slow-query-log = /data0/data/error_log/log-slow-query.log
#slow query search
slow_query_log=1
slow_query_log_file = /data0/data/slow_query_log/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes
2.移动数据文件目录后再访问时出现了问题二:
Bo-Blog Database System Tips: Can not connect to MySQL server
Time: 2011-10-16 8:09am
Script:
Error: Can't connect to local MySQL server through socket '/usr/local/webserver/mysql/data/mysql.sock' (2)
Errno.: 2002
检测php.ini的设置,再检测my.conf里面的值设成一样就OK 另外目录mysql.sock所在目录的读取权限也是
如果用php连接要特别注意php.ini的设置
mysql.default_socket=(默认为空) ,这块连接Mysql相关的设置请看:http://www.jackxiang.com/post/4327/
所以首要侨务检测php.ini的设置,再检测my.conf里面的值设成一样就OK
另外目录mysql.sock所在目录的读取权限也是问题(兄弟们原谅我linux下的目录权限真的是不懂,所以简单点就直接chmod 777了)
另外要特别注意,我想这点才是可能导致失败的就是web目录不能用root用户运行.而应该用nobody用户
# vi /etc/my.cnf
[mysqld]
port = 3306
socket = /data0/data/mysql.sock
vi /usr/local/webserver/php/etc/php.ini
mysql.default_socket =
修改成和修改后的一样即可:
mysql.default_socket = /data0/data/mysql.sock
是FastCGI得重启fastcgi的Php,而如是Apache,则重启动Apache即可,就是把PHP.ini给纳入重新初始化。
附录Mysql启动后的日志情况:
111016 16:01:29 mysqld_safe Starting mysqld daemon with databases from /data0/data
InnoDB: Mutexes and rw_locks use InnoDB's own implementation
InnoDB: Compressed tables use zlib 1.2.3
111016 16:01:29 InnoDB: Initializing buffer pool, size = 18.0M
111016 16:01:29 InnoDB: Completed initialization of buffer pool
InnoDB: The first specified data file /data0/data/ibdata1 did not exist:
InnoDB: a new database to be created!
111016 16:01:29 InnoDB: Setting file /data0/data/ibdata1 size to 128 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100
InnoDB: Error: all log files must be created at the same time.
InnoDB: All log files must be created also in database creation.
InnoDB: If you want bigger or smaller log files, shut down the
InnoDB: database and make sure there were no errors in shutdown.
InnoDB: Then delete the existing log files. Edit the .cnf file
InnoDB: and start the database again.
111016 16:01:49 [ERROR] Plugin 'InnoDB' init function returned error.
111016 16:01:49 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
111016 16:01:49 [ERROR] Unknown/unsupported storage engine: InnoDB
111016 16:01:49 [ERROR] Aborting
启动Ok如下:
111016 16:05:13 mysqld_safe Starting mysqld daemon with databases from /data0/data
InnoDB: Mutexes and rw_locks use InnoDB's own implementation
InnoDB: Compressed tables use zlib 1.2.3
111016 16:05:13 InnoDB: Initializing buffer pool, size = 16.0M
111016 16:05:13 InnoDB: Completed initialization of buffer pool
InnoDB: The first specified data file /data0/data/ibdata1 did not exist:
InnoDB: a new database to be created!
111016 16:05:13 InnoDB: Setting file /data0/data/ibdata1 size to 128 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100
111016 16:05:22 InnoDB: Log file /data0/data/ib_logfile0 did not exist: new to be created
InnoDB: Setting log file /data0/data/ib_logfile0 size to 5 MB
InnoDB: Database physically writes the file full: wait...
111016 16:05:23 InnoDB: Log file /data0/data/ib_logfile1 did not exist: new to be created
InnoDB: Setting log file /data0/data/ib_logfile1 size to 5 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: 127 rollback segment(s) active.
InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
111016 16:05:24 InnoDB: 1.1.4 started; log sequence number 0
111016 16:05:24 [Note] Event Scheduler: Loaded 0 events
111016 16:05:24 [Note] /usr/local/webserver/mysql/bin/mysqld: ready for connections.
Version: '5.5.8-log' socket: '/data0/data/mysql.sock' port: 3306 Source distribution
注意,Nginx下的file_get_contents会出现100%的Cpu情况,原因是:
开启<value name="request_slowlog_timeout">3s</value>记录慢执行日志,会在日志中打印出执行慢的代码行数。php-cgi(php-fpm) 使用了Libevent,而Libevent 在 Linux 2.6 内核以上默认会使用 epoll I/O 模型处理 FastCGI 网络请求,而非 select/poll。在慢日志记录的代码行数中,包含 file_get_contents 以及其他函数,而 file_get_contents 等作为 Client 发起 HTTP 请求的函数使用的是 select/poll 模型,也就是说,只有 file_get_contents 等满足“TCP请求默认不超时、使用select/poll 模型、进程CPU 100%”的网络操作函数,会导致 strace -p 看到的这种情况。
最好还是用Curl吧,这个靠谱些。
后补上,如何在PHP里安装GD2,方法如下:
如果源码安装需要找齐下面的源码包,在安GD2时需要指定其安装的位置:
./configure --prefix=/usr/local/modules/gd --with-jpeg=/usr/local/modules/jpeg6 --with-png --with-zlib --with-freetype=/usr/local/modules/freetype
如果安装gd版本低,会报configure: error: Unable to find libgd.(a|so) >= 2.1.0 anywhere under /usr/local/gd
GD库重装成功 尝试重装PHP 依然报错 查找到libgd.*位置 复制到/usr/local/gd/ 依然找不到。 找到原因,GD库版本过低,低于2.1.0 下载最新版本
替换高版本gd解决,也可能是这样解决:
configure: error: Unable to find libgd.(a|so) >= 2.1.0 anywhere under /usr/local/libgd
如果提示libgd版本错误,把php编译参数--with-gd=/usr/local/libgd修改为--with-gd即可 ,Dockerfile 是这样的:--with-gd=/usr \ ,指向/usr。
修改成下面这个路径试试:
--with-gd=/usr/local/gd \
而要是自带的这个rpm,用linux的yum安好即可,特别要注意要用到的devel这样的包,这个是有一个头文件在里面的,
rpm -ql zlib-devel-1.2.3-27.el6.i686
/usr/include/zconf.h
/usr/include/zlib.h
/usr/lib/libz.so
如下,查看是否所有的包都安好了:
root@192.168.225.128:~# rpm -qa|grep zlib
zlib-devel-1.2.3-27.el6.i686
zlib-1.2.3-27.el6.i686
root@192.168.225.128:~# rpm -qa|grep libpng
libpng-devel-1.2.46-1.el6_1.i686
libpng-1.2.46-1.el6_1.i686
root@192.168.225.128:~# rpm -qa|grep freetype
freetype-2.3.11-6.el6_1.8.i686
freetype-devel-2.3.11-6.el6_1.8.i686
root@192.168.225.128:~# rpm -qa|grep libxml
libxml2-2.7.6-4.el6_2.1.i686
libxml2-devel-2.7.6-4.el6_2.1.i686
root@192.168.225.128:~# rpm -qa|grep gd
gdbm-1.8.0-36.el6.i686
root@192.168.225.128:~# rpm -qa|grep jpeg
libjpeg-6b-46.el6.i686
libjpeg-devel-6b-46.el6.i686
于是直接这样来安这个GD2即可:
./configure --prefix=/usr/local/gd
** Configuration summary for gd 2.0.34:
Support for PNG library: yes
Support for JPEG library: yes
Support for Freetype 2.x library: yes
Support for Fontconfig library: no
Support for Xpm library: no
Support for pthreads: yes
make;make install
PHP:
--with-gd=/usr/local/gd
安装配置方法:
/configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd=/usr/local/gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --enable-soap=shared --enable-pdo enable-dom --enable-xmlwriter --with-pcre-regex --with-pear --enable-session --enable-spl --enable-hash --enable-reflection
重新指定so的位置:
打开/etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/gd/lib
ldconfig
再make;make install ,以上安装出现PHP还是跑到php5.3.10/ext/gd 并报错了。考。。。。
再试着用源码来安装(记录一下,安装是可以,但在最后时发现php还是去读取了PHP自己的目录下的ext/gd),后面只有先暂时不安,在最后再来安装这个gd2:
FreeType安装
FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。支持单色位图、反走样位图的渲染。FreeType库是高度模块化的程序库,虽然它是使用ANSI C开发,但是采用面向对象的思想,因此,FreeType的用户可以灵活地对它进行裁剪。
[root@yznvm1 yzn]# wget http://nchc.dl.sourceforge.net/project/freetype/freetype2/2.4.8/freetype-2.4.8.tar.gz
[root@yznvm1 yzn]# tar xzvf freetype-2.4.8.tar.gz
[root@yznvm1 yzn]# cd freetype-2.4.8
[root@yznvm1 yzn]# ./configure --prefix=/usr/local/freetype
[root@yznvm1 freetype-2.4.8]# make && make install
[root@yznvm1 yzn]# wget http://www.ijg.org/files/jpegsrc.v8c.tar.gz
[root@yznvm1 yzn]# tar zxvf jpegsrc.v8c.tar.gz
[root@yznvm1 yzn]# cd jpeg-8c/
[root@yznvm1 jpeg-8c]# ./configure --prefix=/usr/local/jpeg
[root@yznvm1 jpeg-8c]# make && make install && cd ..
libpng
可查看http://www.libpng.org/pub/png/libpng.html
查看zlib版本
[root@yznvm1 yzn]# rpm -qa zlib
zlib-1.2.3-3
zlib-1.2.3-3
出于性能和安全考虑,zlib最好是1.2.5以上版本
[root@yznvm1 yzn]# wget ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.5.7.tar.gz
[root@yznvm1 yzn]# tar zxvf libpng-1.5.7.tar.gz
[root@yznvm1 yzn]# cd libpng-1.5.7
[root@yznvm1 libpng-1.5.7]# ./configure --prefix=/usr/local/libpng
[root@yznvm1 libpng-1.5.7]# make && make install
[root@yznvm1 libpng-1.5.7]# cd ..
libgd
http://www.libgd.org/ 这个网站down
[root@yznvm1 gd-2.0.33]# http://www.boutell.com/gd/http/gd-2.0.33.tar.gz
[root@yznvm1 gd-2.0.33]# tar xzvf gd-2.0.33.tar.gz
[root@yznvm1 gd-2.0.33]# cd gd-2.0.33
[root@yznvm1 gd-2.0.33]# ln -s /usr/local/libpng/include/pngconf.h /usr/include
[root@yznvm1 gd-2.0.33]# ln -s /usr/local/libpng/include/png.h /usr/include
[root@yznvm1 gd-2.0.33]# ./configure --prefix=/usr/local/gd2 --with-freetype=/usr/local/freetype --with-png=/usr/local/libpng --with-jpeg=/usr/local/jpeg
[root@yznvm1 gd-2.0.33]# make
[root@yznvm1 gd-2.0.33]# make install
下面是全的安装配置configure文件,但实践中要注意下面四点:
1)This is the test message -- configure: error: Could not find net-snmp-config binary. Please check your net-snmp installation.
configure: error: Could not find net-snmp-config binary. Please check your net-snmp installation.
Fix: yum install net-snmp-devel
2)
configure: WARNING: You will need re2c 0.13.4 or later 解决办法
我在为php安装imagick-2.3.0模块的时候出现来错误
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
说需要安装re2c
执行以下命令
wget http://sourceforge.net/projects/re2c/files/re2c/0.13.5/re2c-0.13.5.tar.gz/download
tar -zxvf re2c-0.13.5.tar.gz
cd re2c-0.13.5
./configure && make && make install
3)configure: warning: bison versions supported for regeneration of the Zend/PHP parsers: 1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 (found: none).
yum install bison
4)checking for lemon... no
configure: warning: lemon versions supported for regeneration of libsqlite parsers: 1.0 (found: none).
解决方法:
wget http://www.sqlite.org/cvstrac/getfile/sqlite/tool/lemon.c [下载不了]
这儿下:
http://code.google.com/p/lemonbind/source/browse/tools/lemon.c
gcc -o lemon lemon.c
mv lemon /usr/local/bin
重新运行 ./configure 后,问题解决。
最后正确的安装php5.3.10的配置configure方法,汇总,配置完所有的扩展要要用的配置参数了:
接着用如下make,不加参数会报错找不到ld什么的:
make ZEND_EXTRA_LIBS='-liconv'
更多的事件驱动扩展,PHP5.3 下安装ZendGuardLoader及eaccelerator 加速器:
http://www.jackxiang.com/post/5626/
PHP高一点的版本如:php-5.3.26,那些没有用的参数就不用了,于是得出下面的编译列表:
如果想兼容Nginx和Apache2时,还应加上--with-apxs2,但只能编译成一种,不能同时编译既支持fastCGI,又支持Apache的传统方式:
关于php编译时SAPI错误 :
近日在Centos6.3上编译php的时候出现了错误:You've configured multiple SAPIs to be build. You can build only |
| one SAPI module and CLI binary at the same time.
翻译:
You've configured multiple SAPIs to be build.You can build only one SAPI module and CLI binary at the same time.(你已经配置了多个SAPIs,你只可以建立一个SAPI模块和一个CLI binary。)
导致的原因是我的配置参数中同时使用了--enable-fpm 与--with-apxs2= ,因此编译的时候出错了,去掉其中的任意一个参数编译成功。
checking for Apache 1.x module support via DSO through APXS... configure: error: You have enabled Apache 1.3 support while your server is Apache 2. Please use the appropiate switch --with-apxs2
把下面的语句 --enable-fpm 去掉:就可以编译成功Apache下的PHP了。
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --enable-soap=shared --enable-pdo --enable-dom --enable-xmlwriter --with-pcre-regex --with-pear --enable-session --enable-hash --with-pdo-mysql=/usr/local/webserver/mysql --with-apxs2=/usr/local/webserver/apache2/bin/apxs
make ZEND_EXTRA_LIBS='-liconv'
会提示:如果要用Apache的线程安全模式,需要加上配置参数为: --enable-maintainer-zts
参考:http://jackxiang.com/post/5868/
You have built PHP for Apache's current non-threaded MPM.
If you change Apache to use a threaded MPM you must reconfigure
PHP with --enable-maintainer-zts
出现配置时的输出错误:
configure :error:unable to find your mysql installation
在--with-pdo-mysql后加上路径 ---with-pdo-mysql=/usr/local/webserver/mysql
终于再次编译成功!!
Apache相关的编译成功参数情况如下:
make install ...安装时会在Apache2下安装libphp5.so等文件:
在编译Apache下的PHP时出现一个can't find -lltdl的问题解决方法:
/usr/bin/ld: cannot find 错误解决方法
通常在软件编译时出现的usr/bin/ld: cannot find -lxxx的错误,主要的原因是库文件并没有导入的ld检索目录中。
解决方式:
1。确认库文件是否存在,比如-l123, 在/usr/lib, /usr/local/lib,或者其他自定义的lib下有无lib123.so, 如果只是存在lib123.so.1,
那么可以通过ln -sv lib123.so.1 lib123.so,建立一个连接重建lib123.so.
2。检查/etc/ld.so.conf中的库文件路径是否正确,如果库文件不是使用系统路径,/usr/lib, /usr/local/lib, 那么必须在文件中加入。
3。ldconfig 重建ld.so.cache文件,ld的库文件检索目录存放文件。尤其刚刚编译安装的软件,必须运行ldconfig,才能将新安装的
库文件导入ld.so.cache.
4。测试,gcc -l123 --verbose.
参考:http://blog.siyebocai.cn/20100324_5p424qs7.html
实践操作:
/usr/lib/libltdl.so /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [libphp5.la] 错误 1
找找下面这些位置是否有这样的包?
erro: Installed (but unpackaged) file(s) found:
/usr/lib64/libltdl.a
/usr/lib64/libltdl.la
/usr/lib64/libltdl.so.3.1.0
Installed (but unpackaged) file(s) found:
/usr/lib64/libltdl.a
/usr/lib64/libltdl.la
/usr/lib64/libltdl.so.3.1.0
如果找不到,解决的方法基本很容易.
#yum install libtool-ltdl-devel
如果找到,我的情况:
root@192.168.244.128:/# cd /;find . -name "*libltdl.so*"
./usr/lib/libltdl.so.7.2.1
./usr/lib/libltdl.so.7
按上面的介绍来作出添加操作:
1)检查/etc/ld.so.conf中的库文件路径是否正确,如果库文件不是使用系统路径,/usr/lib, /usr/local/lib, 那么必须在文件中加入。
2)ldconfig 重建ld.so.cache文件,ld的库文件检索目录存放文件。尤其刚刚编译安装的软件,必须运行ldconfig,才能将新安装的
库文件导入ld.so.cache.
如下操作:
vi /etc/ld.so.conf 添加一行:
/usr/lib/
执行: ldconfig
再次编译PHP即可!!!
------------------------------------------------------------------------------------------------------------------------------------------------------------------
还是不行啊?呵呵,那明明整上去了还不行再这样试试:
第一步很容做到:yum -y install libtool libtool-ltdl; //这一步实在是没有那个库再说吧,略。直接第二步。
root@192.168.244.128:/# ldconfig -p |grep ltdl
libltdl.so.7 (libc6) => /usr/lib/libltdl.so.7
第二步由于PHP的configure指定的libltdl名为libltdl.so,为此我们只需添加一个名称连接:ln -s /usr/lib64/libltdl.so.3.1.4 /usr/lib64/libltdl.so ,如果不是64位则:
,其原始文件是:/usr/lib/libltdl.so.7.2.1 ,一个个都是软链接。
http://blog.chinaunix.net/uid-20774942-id-3001010.html
------------------------------------------------------------------------------------------------------------------------------------------------------------------
安装php并且打补丁(由于gd与iconv冲突,暂不编译gd库),于是在后来追加编译gd库
进入目录php-5.2.10/ext/gd执行命令
/usr/local/php/lib/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-jpeg-dir=/usr/local/jpeg --with-png-dir=/usr/local/libpng --with-zlib-dir=/usr/local/zlib/ --with-freetype-dir=/usr/local/freetype
make;make install
,最后,发现这个新生成的gd.so,和前面默认安的这个gd是一样的东东,现在还是不太明白他们所说的gd2和gd有什么大的区别,哈哈,上面这种方法提供了一条安gd.so的方法,也还是不小的收获。同时,以前这个PDO都是编译为so,而上面这个编译是直接编译进php的源码时就编译了,也是不错的收获。
这次主要是把PHP模块Mysql的的PDO直接安装在了编译时,而不需要extension(;extension = "pdo_mysql.so"):
root@192.168.225.128:~/software/php-5.3.10# php -m|grep pdo
PHP Warning: Module 'pdo_mysql' already loaded in Unknown on line 0
pdo_mysql
pdo_sqlite
==============后期的方便操作的设置===================
方便管理,显示IP等,如:jackxiang@72.46.128.82:~#
vi ~/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ll='ls -l'
alias la='ls -A'
alias vi='vim'
alias v='vim'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
ipL=`/sbin/ifconfig eth0|grep "inet addr:"|cut -d: -f 2|cut -d" " -f1`
export PS1="\u@$ipL:\w# "
alias cdh="cd /usr/local/tads/htdocs/"
alias cnginx="cd /usr/local/webserver/nginx/"
alias chtdocs="cd /data0/htdocs/"
alias cphpuml="cd /root/software/PHP_UML-1.5.5/PHP/scripts"
一些目录的快捷键:
vi ~+/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/local/webserver/php/bin:/usr/local/webserver/mysql/bin:/usr/local/webserver/memcached/bin:/usr/local/webserver/nginx/sbin:./usr/local/webserver/subversion/bin:/usr/local/webserver/python/bin:/home/webdev/bin;
export PATH
unset USERNAME
alias chtdocs='cd /data0/htdocs'
alias cphp='cd /usr/local/webserver/php'
alias cmysql='cd /usr/local/webserver/mysql'
alias capache='cd /usr/local/webserver/apache'
alias cblog='cd /data0/htdocs/blog'
alias h='history'
Vim的一些设置等:
vi ~+/.vimrc
syntax on
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
set nu
if &term=="xterm"
set t_Co=8
set t_Sb=^[[4%dm
set t_Sf=^[[3%dm
endif
behave mswin
colo murphy
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set fileformats=unix
set fileencoding=utf-8
au FileType php call AddPHPFuncList()
function AddPHPFuncList()
set dictionary-=/root/.vim/ExtraVim/php_funclist.txt dictionary+=/root/.vim/ExtraVim/php_funclist.txt
set complete-=k complete+=k
endfunction
map <F10> : NERDTreeToggle<CR>
map <F12> ::TlistToggle<CR>
let NERDTreeWinPos = "right" "where NERD tree window is placed on the screen
let Tlist_Enable_Fold_Column = 0
let Tlist_Exit_OnlyWindow = 0
let Tlist_File_Fold_Auto_Close = 0
let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Hightlight_Tag_On_BufEnter = 1
let Tlist_Inc_Winwidth = 0
let Tlist_Max_Submenu_Items = 1
let Tlist_Max_Tag_Length = 30
let Tlist_Process_File_Always = 0
let Tlist_Show_Menu = 0
let Tlist_Show_One_File = 0
let Tlist_Sort_Type = "order"
let Tlist_Use_Horiz_Window = 0
let Tlist_Use_Right_Window = 1
let Tlist_WinWidth = 40
let tlist_php_settings = 'php;c:class;i:interfaces;d:constant;f:function'
eaccelerator的小生产配置备案:
[Zend]
zend_optimizer.optimization_level=15
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/data/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
YAML扩展:http://jackxiang.com/post/4431/
Xdebug:http://jackxiang.com/post/4675/
更加清晰的参考:
http://www.osyunwei.com/archives/4924.html
http://www.ypgogo.com/world/pearl/id/13000
_____________________PHP5.4以上非fastCGI和apche结合支持上传进度的实践之重新配置Apache____________________________
目的:想实现PHP5.4的进度progress的上传,搞了个nginx的,后来一老外说这Nginx玩意在获取进度时获取不到,还得用传统的Apache那一套。Add Time:14/3/27 星期四
一)给Apache2重新编译下PHP:(像什么GD库,Mysql先省了)
./configure --prefix=/usr/local/webserver/php5.4ForApache -with-apxs2=/usr/local/webserver/apache2/bin/apxs --with-curl --with-mcrypt --enable-mbstring --enable-pdo --with-iconv-dir=/usr/local/libiconv
二)make ZEND_EXTRA_LIBS='-liconv' && make install
libtool: install: install .libs/libphp5.so /usr/local/webserver/apache2/modules/libphp5.so
libtool: install: install .libs/libphp5.lai /usr/local/webserver/apache2/modules/libphp5.la
三)再次检查下httpd.conf的配置情况:
<IfModule mime_module>
TypesConfig conf/mime.types
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
启动Apache,开始测试。
root@192.168.0.6:/usr/local/webserver/apache2/bin# ./httpd -k start
httpd: Syntax error on line 388 of /usr/local/webserver/apache2/conf/httpd.conf: Cannot load modules/libphp5.so into server: /usr/local/webserver/apache2/modules/libphp5.so: undefined symbol: zend_parse_parameters
解决办法:
在新的服务器(centos 6.3)编译安装完php-5.4.8,再配置好php.ini和httpd.conf后,启动apache-2.4.3的时候,命令执行/usr/local/apache2/bin/apachectl start时,提示:
httpd: Syntax error on line 146 of /etc/httpd/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: undefined symbol: zend_parse_parameters
通过搜索发现,说是缺少bison。
如果通过rpm -qa|grep bison发现没有安装bison,安装bison即可。centos可以用yum install bison
rpm -qa|grep bison 是:bison-2.4.1-5.el6.i686,但是我发现已经安装了bison-2.4.1,rpm -e bison-2.4.1-5.el6.i686。最后实在是没办法了,下载了bison-2.5的rpm包直接安装。
[root@localhost ~]# wget http://ftp.gnu.org/gnu/bison/bison-2.5.tar.gz
[root@localhost ~]# tar -zxvf bison-2.5.tar.gz
[root@localhost ~]# cd bison-2.5
[root@localhost ~]# ./configure
[root@localhost ~]# make && make install
再重新编译安装了PHP[实践发现在重新编译PHP时要注意:make clean再编译,后才能启动Apache2并支持PHP5.4.26]。然后/usr/local/apache2/webserver/bin/apachectl start启动Apache。惊奇的发现可以正常启动了,测试了下PHP网页,可以正常访问。
来自:http://www.myxzy.com/post-272.html
1)配置好后,测试上传进度占比的PHP自己带的进度实践来源:
(1)http://www.pureweber.com/article/php-upload-progress/
(2)https://github.com/pureweber/samples/blob/master/php-upload-progress/upload.php
2)配置好后,测试上传进度占比的Flash实践来源:http://jackxiang.com/post/6939/
在虚拟机里出现在最后时卡住了,于是排查:按F2,发现两个问题:
问题1:
mounting local filesystem: mount: mount point vmhgfs does not exist
mounting other filesystems: mount: mount point vmhgfs does not exist
问题2:
PHP作为服务启动时老启动不起来,卡了,在最后,只好关闭:chkconfig php-fpm off
统一在脚本里启动:在/etc/init.d# vi lnmp
nohup service php-fpm start > /dev/null 2>&1 &
对Mountain出现不存在的错误屏蔽掉:
/etc# vi fstab
#host://mnt/hgfs vmhgfs defaults,user,ttl=5,uid=root,gid=root,fmask=0113,dmask=0002 0 0
------------------------------------------------------------问题得到解决。
2.0 安装快速备份命令bcp
bcp命令:https://github.com/RickieL/bcp/blob/master/bcp
用于快速备份文件或目录。
wget https://nodeload.github.com/RickieL/bcp/tarball/master -O bcp.tar.gz
tar xzf bcp.tar.gz
cd RickieL-bcp-f65e017
chmod +x bcp
mv bcp /bin/bcp
2.1 备份php.ini配置文件
bcp /usr/local/php5/lib/php.ini
2.2 备份php-fpm.conf配置文件
bcp /usr/local/php5/etc/php-fpm.conf
2.3 备份/etc/init.d/php-fpm 启动文件
bcp /etc/init.d/php-fpm
2.4 备份原来的整个程序目录:
bcp /usr/local/php5
centos5.5安装最新的LNMP:
一、获取相关开源程序:
1、【适用CentOS操作系统】利用CentOS Linux系统自带的yum命令安装、升级所需的程序库(RedHat等其他Linux发行版可从安装光盘中找到这些程序库的RPM包,进行安装):
yum install telnet -y
yum install lrzsz -y
yum install nc -y
yum install unzip -y
yum install wget -y
yum install sudo -y
嵌入式串口相关操作rpm包安装:
yum install setserial
yum install minicom
扯下串口这块的记录:
得到的串口信息:
setserial -a /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test
setserial /dev/ttyS0 port 0x03f8 irq 4 uart 16550A baud_base 9600
设置:
root@192.168.225.128:/home/jackxiang/com# setserial /dev/ttyS0 port 0x03f8 irq 4 uart 16550A baud_base 9600
再看设置成功了没?
root@192.168.225.128:/home/jackxiang/com# setserial -a /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
Baud_base: 9600, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test
其它setserial参数设置:
root@192.168.225.128:/home/jackxiang/c_com# setserial -g /dev/ttyS0
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
root@192.168.225.128:/home/jackxiang/c_com# setserial -gb /dev/ttyS0
/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A
root@192.168.225.128:/home/jackxiang/c_com# setserial -g -G /dev/ttyS0
/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 9600 spd_normal skip_test
相关参考:http://phorum.study-area.org/index.php/topic,25440.0.html
http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Serial-HOWTO.html
http://baike.baidu.com/view/245027.htm
关于minicom也就可以在这儿查看以前的记录:http://jackxiang.com/visit.php?job=viewresult&sid=f13e4b9a640d4c80db689fab5db06c16
开始正式安装这个Lnmp:
sudo -s
LANG=C
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
RedHat AS4 系统环境,通常情况下缺少的支持包安装,64位和32位会自动识别:
yum install libjpeg-devel
yum install freetype-devel
yum install libpng-devel
CentOS下MySQL 5.7.9编译安装,安装成功:
https://blog.linuxeye.com/432.html
多行容易有问题,实践一行更好使:
mysql-8.0.0-dmr-Linux-x86_64
-- Downloading boost_1_60_0.tar.gz to /data/software/mysql-8.0.0-dmr/boost/boost_1_60_0/boost
-- [download 0% complete]
-- [download 1% complete]
直接不带boost版本的mysql安装包:
安装mysql最新版本:
tar -zxvf cmake-2.8.4.tar.gz
首先,需要下载安装Cmake;
wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.12.tar.gz/from/http://cdn.mysql.com/
安装cmake;
tar xvzf cmake-2.8.4.tar.gz
./configure
make
make install
http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.27.tar.gz
vi /etc/profile
PATH=$PATH:/usr/local/bin/
export PATH
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/ \
-DMYSQL_DATADIR=/usr/local/webserver/mysql/data \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/usr/local/webserver/mysql/data/mysql.sock \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0
为了不做软链接编译时就指定mysql.sock到另外的位置:
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/ \
-DMYSQL_DATADIR=/usr/local/webserver/mysql/data \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/data0/data/mysql.sock \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0
VPS实践如下:(2014-09-28)
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \
-DMYSQL_DATADIR=/data/mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0
我在编译的时候报错,意思是 DMYSQL_USER=mysql无效,懒得找原因,直接把那个参数给去掉了,接着进行下面的操作;
make && make install
如果想要加入:Coreseek编译上有区别,且目前版本不能全兼容,试了下:mysql5.5.8是可以的,需要加入参数:-DCMAKE_BUILD_TYPE=Release -DWITH_SPHINX_STORAGE_ENGINE=1
具体请看:http://jackxiang.com/post/4317/ 【可能没法访问,我还没有整理完的缘故】
/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql
cp support-files/my-small.cnf /etc/my.cnf
chown mysql:mysql /etc/my.cnf
chown -R mysql:mysql /usr/local/webserver/mysql
切换用户进入安装目录:
su mysql
cd /usr/local/webserver/mysql/scripts
./mysql_install_db
下面技巧实践Ok:
如安装的源代码文件给丢失后,也可以用下面的方法直接初始化Mysql的mysql表,相当于:
/usr/local/webserver/mysql/scripts/mysql_install_db --user=mysql --datadir=/data0/data/ --basedir=/usr/local/webserver/mysql
/usr/local/webserver/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --user=mysql
出现:[注意:这儿就是指定BaseDir函数的脚本的地方啦]
FATAL ERROR: Could not find ./bin/my_print_defaults
修改:
basedir="/usr/local/webserver/mysql"
builddir="/root/software/mysql-5.5.8"
解决方法[上面就是直接修改啦,下面是参数传入罢了]:
/usr/local/webserver/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/webserver/mysql --datadir=/usr/local/webserver/mysql/data &(这点非常重要)
如何修改basedir特别是vps里有两个盘时,把database放到另外一块盘上:
datadir = /data/datadir/mysql
innodb_log_group_home_dir = /data/datadir/mysql
root@*.10.6.23:/usr/local/mysql/bin# ./mysqladmin -umysql shutdown
cp -Rf /usr/local/mysql/var/* /data/datadir/mysql/.
root@*.10.6.23:/usr/local/mysql/bin# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/data/datadir/mysql/ZWCLC6X-7198.pid).
MYSQL启动后报:ERROR! The server quit without updating PID file错误的问题解决
无法启动mysql,后来上网找了一下解决方法,无非就是以下几种
1. 注释/etc/my.cnf里的skip-federated注释掉即#skip-federated;
2. my.cnf文件配置过高,重新定义其中的参数(根据服务器情况定义);
3. 杀掉mysql_safe和mysqld进程,然后再重启;
4. 当前日志文件过大,超出了my.cnf中定义的大小(默认为64M),删除日志文件再重启;
但是在主机中:
1. 注释中无skip-federated这个选项
2. My.cnf是自己优化过的,断电之前正常使用,不是这个的问题
3. Ps –ef | grep mysql 根本就没有mysql的僵尸进程
4. 没有这个问题
基本上网上的所有方式都试过了,都无法解决问题,然后我就打开了error.log,发现了是磁盘空间不够。
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4141403
root@*.10.6.23:/data/datadir# chown -R mysql:root mysql
root@*.10.6.23:/data/datadir# service mysql start
Starting MySQL.. SUCCESS!
110327 3:07:33 InnoDB: Initializing buffer pool, size = 128.0M
110327 3:07:33 InnoDB: Completed initialization of buffer pool
在/etc/my.cnf 打开下面的InnoDB配置以减少内存即可:
default-storage-engine=MyISAM [注意:Mysql5.6.11放在server-id里不行,还是会报Plugin 'InnoDB' is disabled错,要往上挪挪:放socket = /data0/data/mysql.sock 后就行了。]
server-id = 1
innodb_buffer_pool_size = 21M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
启动:带--user=mysql
/usr/local/webserver/mysql/bin/mysqld_safe --user=mysql &
编译PHP前准备:libiconv PHP Mysql都用得到,不安会出现如下情况
本人在编译php5.2.8时候,make ZEND_EXTRA_LIBS='-liconv',出现下列错误提示
ext/gd/libgd/gdkanji.o: In function `do_convert':
/data0/software/php-5.2.8/ext/gd/libgd/gdkanji.c:350: undefined reference to `libiconv_open'
/data0/software/php-5.2.8/ext/gd/libgd/gdkanji.c:365: undefined reference to `libiconv'
........
........
........
/data0/software/php-5.2.8/ext/iconv/iconv.c:2491: undefined reference to `libiconv_open'
/usr/bin/ld: final link failed: No space left on device
collect2: ld returned 1 exit status
先这样:
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
./configure --prefix=/usr/local/libiconv
make;make install
后依旧的话,则再看下:
注意“/usr/bin/ld: final link failed: No space left on device
”,应该是磁盘空间不够所致,果然,我清空了部分内容,顺利通过编译!算是给大家提醒一下,希望大家不要出现下列错误!
最后可能是直接用了make,而不是:make ZEND_EXTRA_LIBS='-liconv' ...
以上是我在编译:5.3.8版本时发现的,后面编译完后在运行FastCGI时会提示:
Starting php-fpm [eAccelerator] This build of "eAccelerator" was compiled for PHP version 5.3.6. Rebuild it for your PHP version (5.3.8) or download precompiled binaries.
done
于是需要重新编译一次这个缓存插件:
cd eaccelerator-0.9.6.1
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
还有就是查看php.ini关于eaccelerator的配置:
[eaccelerator]
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so"
eaccelerator.shm_size="128"
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
........
然后根据上面的目录结构中去删除以前版本的缓存即可:
root@116.255.139.240:/usr/local/webserver/eaccelerator_cache# ls
0 1 2 3 4 5 6 7 8 9 a b c d e f
root@116.255.139.240:/usr/local/webserver/eaccelerator_cache# rm -Rf *
------------------------------------------------------------------------------------------------------------------------------------
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local
make
make install
cd ..
http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download
wget http://nchc.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make
make install
cd ../../
http://sourceforge.net/projects/mhash/files/mhash/
wget http://nchc.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
make
make install
cd ..
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
http://sourceforge.net/projects/mcrypt/files/MCrypt/
wget http://nchc.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8
/sbin/ldconfig
./configure
make
make install
可能会出现:
=================================================================
configure: error: *** libmcrypt was not found
为了的到mcrypt.so库文件,先后安装编译了mhash和libmcrypt,但是到最后编译mcrypt时报错:
configure: error: *** libmcrypt was not found
最后发现是因为环境变量的问题,gcc编译的时候根据自身定义的变量寻找相关函数库等文件,libmcrypt也是刚安装的,在变量中没有定义出来,所以手动添加:
[root@localhost modules]# export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
再次编译即可。
=================================================================
PHP5.3.9: wget http://cn.php.net/get/php-5.3.9.tar.gz/from/this/mirror
编译PHP:
wget http://cn.php.net/distributions/php-5.3.6.tar.gz
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl
PHP7.0编译参数:
./configure --prefix=/usr/local/php7.0 --with-config-file-path=/usr/local/php7.0/etc --with-fpm-user=www --with-fpm-group=www --enable-fpm --disable-fileinfo --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-exif --enable-sysvsem --with-curl --enable-mbregex --enable-inline-optimization --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-ftp --with-gettext --enable-zip --enable-soap --disable-ipv6 --disable-debug --enable-opcache --with-readline
make时还是需要加上iconv那个:make ZEND_EXTRA_LIBS='-liconv',否则还是会报错,对于PHP7.0主PHP低的生产版本混合运行,把:
cp /etc/init.d/php-fpm拷贝到自己的home目录下修改一下路径,重新启动,这个脚本的启动参数打印了下,如下:
/usr/local/php7.0/sbin/php-fpm --daemonize --fpm-config /usr/local/php7.0/etc/php-fpm.conf --pid /usr/local/php7.0/var/run/php-fpm.pid
本次新加:
--with-pdo=shared -with-pdo-mysql=/usr/local/webserver/mysql
PHP想在一开始就把PDO编译进去,而不是直接加载PDO.so,在configure时可能会出现一个问题,如下:
checking for MySQL support for PDO... yes
checking for mysql_config... /usr/local/webserver/mysql/bin/mysql_config
checking for mysql_query in -lmysqlclient... no
checking for mysql_query in -lmysqlclient... (cached) no
configure: error: PDO_MYSQL configure failed. Please check config.log for more information.
引起的原因,Centos6.2最小化安装,没有安一个rpm包:mysql-level没有装,或者是mysql的版本不对。但Mysql我是通过源码安装的,于是,可以在目录 /usr/local/webserver/mysql/lib/ 找到以下需要的包,也就是最新的Mysql5.5.20编译好的这些库,如下:
[root@bogon lib]# echo ~+/libmysqlclient.
libmysqlclient.a libmysqlclient.so libmysqlclient.so.18 libmysqlclient.so.18.0.0
[root@bogon lib]# ls ~+/libmysqlclient.a
/usr/local/webserver/mysql/lib/libmysqlclient.a
export LDFLAGS=-L/usr/local/webserver/mysql/lib/
再次在PHP5.3.10下进行configure时,就不会提示PDO的相关问题了,但问题依旧,难道还是得要单独安装这个PDO模块!!
暂时不安PDO,先把所有用到的都给编译进PHP里去再说,如下:
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --enable-soap=shared --enable-pdo enable-dom --with-readline --enable-xmlwriter --with-pcre-regex --with-pear --enable-session --enable-spl --enable-hash --enable-reflection
出现:configure: error: Please reinstall readline - I cannot find readline.h
解决方法:
yum install readline-devel
但又报错:php configure: error: readline library not found 干脆去掉这一个不常用的项目:
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --enable-soap=shared --enable-pdo enable-dom --enable-xmlwriter --with-pcre-regex --with-pear --enable-session --enable-spl --enable-hash --enable-reflection
就configure通过了:
Thank you for using PHP.
make ZEND_EXTRA_LIBS='-liconv'
//如果是路径L不对得手动加参数:
make ZEND_EXTRA_LIBS='-liconv -L/usr/local/lib'
成功...
make install
/usr/bin/ld: ext/ldap/.libs/ldap.o: undefined reference to symbol 'ber_strdup'
/usr/bin/ld: note: 'ber_strdup' is defined in DSO /lib64/liblber-2.4.so.2 so try adding it to the linker command line
/lib64/liblber-2.4.so.2: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make: *** [sapi/cli/php] 错误 1
在老外的一篇文章中终于找到解决办法,我是在centos7下进行编译时遇到这个问题的:
-Run your configure command
-edit Makefile
-Find the line that starts with "EXTRA_LIBS ="
-Add the following to the end of the line " -llber"
cp php.ini-dist /usr/local/webserver/php/etc/php.ini
cd ../
刚开始就把SOAP编译进去:
Move into the source directory and configure PHP with SOAP enabled (this may take a few minutes):
cd php-5.2.5
./configure --enable-soap=shared
加上这个:
--enable-soap=shared
加上后是这样:
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --enable-soap=shared
make ZEND_EXTRA_LIBS='-liconv'
PHP5.6.3 2014-11-30 编译成功备案:
编译php报错:/usr/bin/ld: cannot find -liconv解决方法:
首先检查libiconv是否有安装,其次,确认libiconv的安装目录为/usr/local,即编译参数
]#./configure --prefix=/usr/local
然后记得更新下库
]#ldconfig
在最后面添加 -liconv :
编辑:
./src/MakeFile文件
将
LIBS = -lm -lexpat -L/usr/local/lib
改成
LIBS = -lm -lexpat -liconv -L/usr/local/lib
vi /etc/ld.so.conf
这样php编译安装就可以正常运行了。
但有时还是会报错的:
||||||PHP的configure没加:--with-iconv=/usr/local/libiconv引发的/usr/bin/ld: cannot find -liconv||||||||
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv=/usr/local/libiconv --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-gettext --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --with-snmp --enable-shmop --enable-sysvsem --enable-sysvshm --enable-calendar --enable-inline-optimization --with-curl --with-curlwrappers --enable-exif --enable-sysvmsg --with-mcrypt --with-gd --enable-gd-jis-conv --disable-debug --with-openssl --with-mhash --enable-pcntl --silent --enable-sockets
make
make install
出现的原因是没加:--with-iconv=/usr/local/libiconv ,这个是编译时编译到那儿的:
------------------------------------------------------------------------------------------------------------------------------------------
解决方法:
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar -zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/libiconv
make
make install
------------------------------------------------------------------------------------------------------------------------------------------
~/software/php-5.3.15# ./configure --help|grep iconv
--without-iconv[=DIR] Exclude iconv support
--with-iconv-dir=DIR XMLRPC-EPI: iconv dir for XMLRPC-EPI
--with-iconv-dir:
用于 PHP 编译时指定 iconv 在系统里的路径,否则会扫描默认路径。
--with-iconv:
要激活这个扩展必须在编译时使用[DIR]
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
昨天编译安装PHP的时候make报错,make: *** [sapi/fpm/php-fpm] Error 1
/usr/bin/ld: cannot find -liconv
collect2: ld returned 1 exit status
make: *** [sapi/fpm/php-fpm] 错误 1
上面的方法还是没法解决,最后解决了,直接用make,没有用make ZEND_EXTRA_LIBS='-liconv'
不再提示cannot find -liconv,而是:error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory ,于是按以前的方法,如下:ln -s /usr/local/webserver/mysql/lib/libmysqlclient.so.18 /usr/lib/ ,再make一下,直接就过去了,Yeath.
原因iconv重复安装在不同目录,造成include文件iconv.h等重复 通过 find / -name “iconv.h” 如果查找到2个以上返回结果,说明 iconv重复安装了,卸载多余的版本即可正常编译。
[root@bogon /]# find / -name "iconv.h"
/usr/local/libiconv/include/iconv.h
/usr/include/iconv.h
果然是这个问题。
安装iconv是源码编译安装,于是到安装目录cd /usr/local/src/libiconv-1.13.1,执行 make uninstall卸载自己安装的版本。再重新安装PHP。
问题1:
You may want to add: /usr/local/webserver/php/lib/php to your php.ini include_path
/root/jackxiang.com/php-5.3.6/build/shtool install -c ext/phar/phar.phar /usr/local/webserver/php/bin
cp: cannot stat `ext/phar/phar.phar': No such file or directory
[vps实践]linux下安装php5.3.6的扩展包pear :http://jackxiang.com/post/4153/
(1)chmod: cannot access `ext/phar/phar.phar': No such file or directory:
wget http://pear.php.net/go-pear.phar
[root@localhost phar]# /usr/local/webserver/php/bin/php go-pear.phar
Below is a suggested file layout for your new PEAR installation. To
change individual locations, type the number in front of the
directory. Type 'all' to change all of them or simply press Enter to
accept these locations.
1. Installation base ($prefix) : /usr/local/webserver/php
2. Temporary directory for processing : /tmp/pear/install
3. Temporary directory for downloads : /tmp/pear/install
4. Binaries directory : /usr/local/webserver/php/bin
5. PHP code directory ($php_dir) : /usr/local/webserver/php/lib/php
6. Documentation directory : /usr/local/webserver/php/docs
7. Data directory : /usr/local/webserver/php/data
8. User-modifiable configuration files directory : /usr/local/webserver/php/cfg
9. Public Web Files directory : /usr/local/webserver/php/www
10. Tests directory : /usr/local/webserver/php/tests
11. Name of configuration file : /usr/local/webserver/php/etc/pear.conf
1-11, 'all' or Enter to continue: all
这个根据个人环境进行修改。(我是直接回车即可)
================================================
(2)chmod: cannot access `ext/phar/phar.phar': No such file or directory:
make: [ext/phar/phar.phar] Error 1 (ignored)
解决方法1:./configure的时候 要加上--without-pear
然后再make install或者重新make ZEND_EXTRA_LIBS='-liconv',Then :make install
解决方法2:
cd ext/phar/. cp ./phar.php phar.phar
问题2:
/root/jackxiang.com/php-5.3.6/sapi/cli/php: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
make: *** [ext/phar/phar.php] Error 127
ln -s /usr/local/webserver/mysql/lib/libmysqlclient.so.18 /usr/lib/
PHP扩展:
memcache:
http://pecl.php.net/package/memcache
wget http://pecl.php.net/get/memcache-3.0.6.tgz
tar zxvf memcache-3.0.6.tgz
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../
eaccelerator:
wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../
PDO_MYSQL:
http://pecl.php.net/package/PDO_MYSQL
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-mysql=/usr/local/webserver/mysql
make
make install
cd ../
ImageMagick:
wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
tar zxvf ImageMagick.tar.gz
cd ImageMagick-6.6.8-8
./configure
make
make install
imagick:[依赖前面的ImageMagick,注意顺序]
wget http://pecl.php.net/get/imagick-3.1.0b1.tgz
tar -zxvf imagick-3.1.0b1.tgz
cd imagick-3.1.0b1
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../
修改php.ini文件:
cd /root/jackxiang.com/php-5.3.6
cp ./php.ini-production /usr/local/webserver/php/etc/php.ini
手工修改:查找/usr/local/webserver/php/etc/php.ini中的extension_dir = "./"
修改为extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"
//各种PHP版本的extension_dir是不一样的!!!
并在此行后增加以下几行,然后保存:
extension = "memcache.so"
extension = "pdo_mysql.so"
extension = "imagick.so"
再查找output_buffering = Off
修改为output_buffering = On
[eaccelerator]
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so"
eaccelerator.shm_size="128"
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="300"
eaccelerator.shm_prune_period="120"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
安装Nginx:
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.12.zip
tar zxvf pcre-7.8.tar.gz
cd pcre-8.12
./configure
make && make install
cd ../
wget http://nginx.org/download/nginx-0.9.6.tar.gz
wget http://nginx.org/download/nginx-1.0.2.tar.gz
cd nginx-0.9.6
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
cd ../
启动nginx:
/usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf
如果需要添加Nginx_HTTP_Push_Module长连接模块,需要加入新选项,/root/software/nginx_http_push_module-0.692是下载的模块文件位置:
--add-module=/root/software/nginx_http_push_module-0.692
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/software/nginx_http_push_module-0.692
自己加入安全模块的编译选项:
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/software/nginx_http_push_module-0.692 --add-module=/root/software/ngx_cache_purge-1.3 --with-http_secure_link_module
目前最新生产环境的版本:
wget http://nginx.org/download/nginx-1.0.8.tar.gz 这儿新加了一个模块:--with-http_mp4_module
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/software/nginx_http_push_module-0.692 --add-module=/root/software/ngx_cache_purge-1.3 --with-http_secure_link_module --with-http_mp4_module
编译:
make;make install
配置nginx.conf:
error_page 519 /519.html;
if ($request_uri ~* "(cost\()|(concat\()") {
return 519;
}
if ($request_uri ~* "[+|(%20)]union[+|(%20)]") {
return 519;
}
if ($request_uri ~* "[+|(%20)]and[+|(%20)]") {
return 519;
}
if ($request_uri ~* "[+|(%20)]select[+|(%20)]") {
return 519;
}
还有乱七八糟的一些扩展参考:
configure arguments: --prefix=/home/nginx --with-pcre --add-module=../ngx_http_consistent_hash --add-module=../ngx_max_connections --add-module=../ngx_cache_purge --add-module=../ngx_mp4_streaming_public --with-cc-opt=-O3 --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --without-http_memcached_module --without-http_fastcgi_module --with-google_perftools_module
编译过程中几个注意事项:
1、必须采用--with-pcre,而不要偷懒采用--without-http_rewrite_module,否则配置文件里将不支持if判断;
2、加载mp4_streaming,必须采用--with-cc-opt=-O3方式进行编译。
3、max_connections模块默认支持nginx最新版本是0.8.32,需要vi修改其DIR,然后path -p0,但千万不要看见有个Makefile就执行make && make install了,因为它会毫无道理的把整个nginx安装到当前目录的.nginx下隐藏起来……
最新安装nginx-1.1.0全编译项目配置如下:
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/software/nginx_http_push_module-0.692 --add-module=/root/software/ngx_cache_purge-1.3
在linux下安装Nginx的Pcre包的时候,有时候提示
configure: error: newly created file is older than distributed files!
Check your system clock
出现此编译错误,请检查你的系统时间是否设置有误。。。
查看硬件日期时间
hwclock -show
linux是每隔一段时间将系统时间写入 硬件bois的 如果刚设置完了就关机,开机后时间还是等于没有设置
# date -s 991128
Sun Nov 28 00:00:00 CST 1999
实例:设置时间伟2008年8月8号12:00
# date -s “2008-08-08 12:00:00″
修改完后,记得输入:
clock -w
把系统时间写入CMOS即可
参看:http://linux.net527.cn/fuwuqiyingyong/Webfuwuqi/16516.html
---------------------
配置nginx和phpfastcgi平滑过度:
创建php-fpm配置文件(php-fpm是为PHP打的一个FastCGI管理补丁,可以平滑变更php.ini配置而无需重启php-cgi):
在/usr/local/webserver/php/etc/目录中创建php-fpm.conf文件:
rm -f /usr/local/webserver/php/etc/php-fpm.conf
vi /usr/local/webserver/php/etc/php-fpm.conf
输入以下内容(如果您安装 Nginx + PHP 用于程序调试,请将以下的<value name="display_errors">0</value>改为<value name="display_errors">1</value>,以便显示PHP错误信息,否则,Nginx 会报状态为500的空白错误页):
优化fpm参数:
[root@localhost]# vi php-fpm.conf 【把前面的分号给去掉】
user = www
group = www
pm = dynamic
pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 7
pm.max_requests = 120
创建Nginx日志目录:
mkdir -p /data1/logs
chmod +w /data1/logs
chown -R www:www /data1/logs
创建Nginx配置文件
在/usr/local/webserver/nginx/conf/目录中创建nginx.conf文件:
rm -f /usr/local/webserver/nginx/conf/nginx.conf
vi /usr/local/webserver/nginx/conf/nginx.conf
<!--Begin-->
user www www;
worker_processes 8;
error_log /data1/logs/nginx_error.log crit;
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
}
http
{
include mime.types;
default_type application/octet-stream;
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
server
{
listen 80;
server_name status.blog.jackxiang.com;
location / {
stub_status on;
access_log off;
}
}
server
{
listen 80;
server_name jackxiang.com www.jackxiang.com;
index index.html index.htm index.php;
root /data0/htdocs/blog;
if (!-e $request_filename)
{
rewrite ^/post/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /read.php?entryid=$1&page=$2&part=$3 last;
rewrite ^/page/([0-9]+)/([0-9]+)/?$ /index.php?mode=$1&page=$2 last;
rewrite ^/starred/([0-9]+)/?([0-9]+)?/?$ /star.php?mode=$1&page=$2 last;
rewrite ^/category/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=category_$1&mode=$2&page=$3 last;
rewrite ^/archiver/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=archive&cm=$1&cy=$2&mode=$3&page=$4 last;
rewrite ^/date/([0-9]+)/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ /index.php?go=showday_$1-$2-$3&mode=$4&page=$5 last;
rewrite ^/user/([0-9]+)/?$ /view.php?go=user_$1 last;
rewrite ^/tags/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ /tag.php?tag=$1&mode=$2&page=$3 last;
rewrite ^/component/id/([0-9]+)/?$ /page.php?pageid=$1 last;
rewrite ^/component/([^/]+)/?$ /page.php?pagealias=$1 last;
#Force redirection for old rules
rewrite ^/read\.php/([0-9]+)\.htm$ http://$host/post/$1/ permanent;
rewrite ^/post/([0-9]+)\.htm$ http://$host/post/$1/ permanent;
rewrite ^/post/([0-9]+)\_([0-9]+)\.htm$ http://$host/post/$1/$2/ permanent;
rewrite ^/post/([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/post/$1/$2/$3/ permanent;
rewrite ^/index\_([0-9]+)\_([0-9]+)\.htm$ http://$host/page/$1/$2/ permanent;
rewrite ^/star\_([0-9]+)\_([0-9]+)\.htm$ http://$host/starred/$1/$2/ permanent;
rewrite ^/category\_([0-9]+)\.htm$ http://$host/category/$1/ permanent;
rewrite ^/category\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/category/$1/$2/$3/ permanent;
rewrite ^/archive\_([0-9]+)\_([0-9]+)\.htm$ http://$host/archiver/$1/$2/ permanent;
rewrite ^/archive\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/archiver/$1/$2/$3/$4/ permanent;
rewrite ^/showday\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/date/$1/$2/$3/ permanent;
rewrite ^/showday\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ http://$host/date/$1/$2/$3/$4/$5/ permanent;
#Filename alias
rewrite ^/([a-zA-Z0-9_-]+)/?([0-9]+)?/?([0-9]+)?/?$ /read.php?blogalias=$1&page=$2&part=$3 last;
}
#limit_conn crawler 20;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /data1/logs/access.log access;
}
}
<--End-->
安装Memache:
libevent-2.0.10-stable:
wget http://monkey.org/~provos/libevent-2.0.10-stable.tar.gz
tar xzf libevent-2.0.10-stable.tar.gz
cd libevent-2.0.10-stable
./configure
make
make install
#刷新库文件连接
ldconfig
Then Memcache setup:
wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
tar xzf memcached-1.4.5.tar.gz
cd memcached-1.4.5
./configure --prefix=/usr/local/webserver/memcached
make
make install
#增加用户组memcached和用户memcached
/usr/sbin/groupadd memcached
/usr/sbin/useradd -g memcached memcached
启动Memcached时可能出现的问题:
找不到以下的so,用如下操作及可:
ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/
启动PHP的FastCGI:
启动PHP FastCGI:
cp /root/jackxiang.com/php-5.3.6/sapi/fpm/init.d.php-fpm /etc/init.d/phpfpm
chmod 755 /etc/init.d/phpfpm
ulimit -SHn 51200
/etc/init.d/phpfpm start
启动PHp的FastCGI时可能会出现下面错误:
出现下面的错误(这个错误是我在安装过程中发现的,是内在不足导致的,在文章的结尾优化后,就不会有这样的问题了,在这里做个记录,方便大家学习)
Starting php_fpm eAccelerator: Could not allocate 67108864 bytes, the maximum size the kernel allows is 33554432 bytes. Lower the amount of memory request or increase the limit in /proc/sys/kernel/shmmax.
PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on line 0
PHP Fatal error: Unable to start eAccelerator module in Unknown on line 0
failed
#说明
php.ini中设置的eAccelerator,eaccelerator.shm_size="64",解释:eaccelerator可使用的共享内存大小(单位为MB),即64M
在Linux下,单个进程的最大内存使用量受/proc/sys/kernel/shmmax中设置的数字限制(单位为字节) /proc/sys/kernel/shmmax = 33554432 (32M)
临时更改该值:
echo 128000000 > /proc/sys/kernel/shmmax
或者
vi /etc/sysctl.conf
#add by jack
kernel.shmmax = 128000000
使配置立即生效:
/sbin/sysctl -p
优化Linux内核参数
vi /etc/sysctl.conf
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000使配置立即生效:
/sbin/sysctl -p
配置开机自动启动Nginx + PHP:
在不停止Nginx服务的情况下平滑变更Nginx配置
修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确
/usr/local/webserver/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/webserver/nginx/conf/nginx.conf test is successful这时,输入以下命令查看Nginx主进程号:
ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'
这时,执行以下命令即可使修改过的Nginx配置文件生效:
kill -HUP 6302
kill -HUP `cat /usr/local/webserver/nginx/nginx.pid`
编写每天定时切割Nginx日志的脚本:
创建脚本/usr/local/webserver/nginx/sbin/cut_nginx_log.sh
vi /usr/local/webserver/nginx/sbin/cut_nginx_log.sh
#!/bin/bash
# This script run at 00:00
# The Nginx logs path
logs_path="/usr/local/webserver/nginx/logs/"
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`
设置crontab,每天凌晨00:00切割nginx访问日志
crontab -e
00 00 * * * /bin/bash /usr/local/webserver/nginx/sbin/cut_nginx_log.sh
开机自动 启动namp服务如下设置,关于开机程序的自动启动:
1)如专门启动Mysql这样一个,你可以参考:
开机自动 启动Mysql的方法: http://www.jackxiang.com/post/4730/ ,
也就是随便芿一个可执行文件到目录:/etc/rc.d/init.d/ ,赋予可执行权限写入开机启动的脚本即可。
2)如果要同时启动多个服务器软件,则如下所示:
开机启动知识及步骤如下:
想用命令chkconfig加载自启动.提示"**服务不支持chkconfig",原来是自己写的脚本时,忘记写两行了.开头一般要这样写,345是启动级,85和15分别是启动优先级,关闭优先级,下面的就是描述了。:
#!/bin/bash
#chkconfig:345 61 61 //此行的345参数表示,在哪些运行级别启动,启动序号(S61);关闭序号(K61)
#description:nginx php mysql memcache start shell
,修改来自Apache里的启动shell,也可以不用修改:
保存为/etc/init.d/lnmp,内容如下:
#!/bin/bash
#chkconfig:345 61 61
#description:nginx php mysql memcache start shell
echo "Starting memcache mysql php nginx daemon..."
ulimit -SHn 51200
nohup /usr/local/webserver/memcached/bin/memcached -d -m 1 -u www -p 11211 > /dev/null 2>&1 &
nohup /usr/local/webserver/mysql/bin/mysqld_safe --user=mysql > /dev/null 2>&1 &
nohup /etc/init.d/phpfpm start > /dev/null 2>&1 &
nohup /usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf > /dev/null 2>&1 &
把脚本拷贝至/etc/init.d/目录下,执行命令:
ln -s /etc/init.d/lnmp /etc/rc.d/rc3.d/S61lnmp
ln -s /etc/init.d/lnmp /etc/rc.d/rc4.d/S61lnmp
ln -s /etc/init.d/lnmp /etc/rc.d/rc5.d/S61lnmp
再执行
chkconfig --add lnmp
chkconfig --levels lnmp345 on //也成
开机启动:
service lnmp start
env: /etc/init.d/lnmp: 权限不够
chmod -R a+x /etc/init.d/lnmp
reboot 重启动,看服务起来了没,没起来再运行:service lnmp 试试,这儿就不用start了,因上面没有start这个参数!!!
要删除某个service的自动启动的设置,使用--del选项,如下:
# chkconfig --del lnmp
# chkconfig --list | grep lnmp
Nginx这块自己有ssl启动需要输入密码,默认的那个不行,怎么干掉?
nginx 开机启动的service项想删除,service nginx start 这个想干掉,我现在放开机启动里了:
/etc/init.d/nginx //可以把它重写成自己的,因为我的有https
chkconfig nginx off
=======================shell环境关于bash启动脚本======================================
/etc/profile
/etc/bashrc
~/.bash_profile
~/.bashrc
~/.bash_logout
每一个文件都有特殊的功用并对登陆和交互环境有不同的影响。
/etc/profile 和 ~/.bash_profile 是在启动一个交互登陆shell的时候被调用。
/etc/bashrc 和 ~/.bashrc 是在一个交互的非登陆shell启动的时候被调用。
~/.bash_logout 在用户注销登陆的时候被读取
一 个交互的登陆shell会在 /bin/login 成功登陆之后运行。一个交互的非登陆shell是通过命令行来运行的,如[prompt]$/bin/bash。一般一个非交互的shell出现在运行 shell脚本的时候。之所以叫非交互的shell,是因为它不在命令行上等待输入而只是执行脚本程序。
关于开机程序的自动启动
系统脚本可以放置在/etc/rc.d/init.d中并建立/etc/rc.d/rc?.d链接,也可以直接放置在/etc/rc.d/rc.local中。
init.d脚本包含完整的start,stop,status,reload等参数,是标准做法,推荐使用。
为特定用户使用的程序(如有的用户需要使用中文输入法而有的不需要)放置在~/中的bash启动脚本中。
chkconfig --list //开机启动的list
ntsysv //simple gui,直接修改
chkconfig httpd off //还是这个见效快****
chkconfig iptables off //关闭防火墙,还是这个见效快*
chkconfig --list |grep sendmail
chkconfig sendmail off
chkconfig --list |grep auditd
chkconfig auditd off
chkconfig rpcgssd off
chkconfig rpcidmapd off
chkconfig rpcsvcgssd off
chkconfig portmap off最近发现了一个Deamo进程也可以关闭:
udp 0 0 0.0.0.0:46563 0.0.0.0:* 2295/avahi-daemon:
udp 0 0 0.0.0.0:5353 0.0.0.0:* 2295/avahi-daemon:
udp 0 0 :::5353 :::* 2295/avahi-daemon:
步骤方法如下:
chkconfig --list avahi-daemon
root@116.255.139.240:/data0/htdocs/blog/template# chkconfig --list avahi-daemon
avahi-daemon 0:off 1:off 2:off 3:on 4:on 5:on 6:off
avahi-daemon 关闭:
service avahi-daemon stop
chkconfig avahi-daemon off 再看:
root@116.255.139.240:/data0/htdocs/blog/template# chkconfig --list avahi-daemon
avahi-daemon 0:off 1:off 2:off 3:off 4:off 5:off 6:off确实关闭了。
试试把 avahi-daemon 服务关闭,你会得到空前变化。avahi-daemon
Avahi 是 zeroconf 协议的实现。它可以在没有 DNS 服务的局域网里发现基于 zeroconf 协议的设备和服务。它跟mDNS 一样。除非你有兼容的设备或使用 zeroconf 协议的服务,否则应该关闭它。现在用的基本都是DNS了。
更专业点讲就是The Avahi mDNS/DNS-SD daemon implements Apple’s Zeroconfarchitecture(also known as "Rendezvous" or "Bonjour"). The daemonregisters local IP addresses and static services using mDNS/DNS-SD andprovides two IPC APIs for local programs to make use of the mDNS recordcache the avahi-daemon maintains.
avahi-daemon is a daemon which runs on client machines to performZeroconf service discovery on a network. avahi-daemon must be runningon systems that use Avahi for service discovery. Avahi-daemon shouldnot be running otherwise.
AutoMount 自动挂载功能
方法: 启动进程autofs
在RedHat安装后期,在选择启动时需要自动执行进程的那一步骤剔选“autofs”。
如果已经安装好了作业系统,也可以更改该项设置。在Terminal中输入“setup”指令,选“System services”,或者直接输入启动进程配置指令“ntsysv”都可以打开启动进程配置介面,剔选“autofs后,下次进入RedHat Linux后,这一进程就会被自动装载。
1837 root 15 0 29424 1376 1060 S 0.0 0.5 0:00.23 automount
root@116.255.139.240:~# chkconfig --list|grep autofs
autofs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
chkconfig autofs off
root@116.255.139.240:~# service autofs stop
vps取消设置自动挂载ISCSI分区的服务:
方法一:
用编辑器打开/etc/fstab 例如:gedit /etc/fstab ,并在最后一行加入下列命令
/dev/sda1 /mnt/t0 ext2 defaults 0 0 //如果是FAT分区,则将ext2改为vfat。(这个选项很重要,如果没有则无法成功自动挂载)
关闭测试启动自动挂载磁盘的服务:
root@116.255.139.240:~# chkconfig --list|grep iscsi
iscsi 0:off 1:off 2:off 3:on 4:on 5:on 6:off
iscsid 0:off 1:off 2:off 3:on 4:on 5:on 6:off
root@116.255.139.240:~# chkconfig iscsid off
root@116.255.139.240:~# service iscsid stop
Stopping iSCSI daemon:
root@116.255.139.240:~# [ OK ]
Stopping automount: [ OK ]
php扩展ssh2的安装:
wget http://www.libssh2.org/download/libssh2-1.2.7.tar.gz
cd libssh2-1.2.7
./configure
make;make install
pecl install -f ssh2
选择:Y
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/ssh2.so
You should add "extension=ssh2.so" to php.ini
PHP SOAP Extension:
cd /root/jackxiang.com/php-5.3.6/ext/soap
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make;make install
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/soap.so
特别注意:
开机启动SVN服务的Apache的设置方法:
vim /etc/init.d/apache
/usr/local/webserver/apache2/bin/apachectl start
chmod 775 /etc/init.d/apache
chkconfig apache on
当然你也可以抄一个shell标准脚本,如前面php的phpfpm启动脚本。
遇到443端口加密需要需要输入密码的还请慎重考虑,如下所示:
Server svn.jackxiang.com:443 (RSA)
Enter pass phrase:
Apache:mod_ssl:Error: Pass phrase empty (needs to be at least 1 character).
Enter pass phrase:
Ok: Pass Phrase Dialog successful.
需要研究如何自动启动并自动地输入密码。
这块还不行,这块expect里的spawn要和ssh结合,nginx这种情况还不行,下面这个有警告,但是能执行:
上面路径要写死/usr/local/scripts,别相对:
startNginx.sh
升级到PHP5.3.8后启动FastCGI出现:
root@116.255.139.240:~/software/eaccelerator-0.9.6.1# cat /root/runphp.sh
pkill -9 php
usleep 100000
/etc/init.d/phpfpm start
=============执行上面这段代码:
root@116.255.139.240:~/software/eaccelerator-0.9.6.1# sh /root/runphp.sh
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
Starting php-fpm
done
原因是:估计升级PHP后 还是在原来PHP目录下,到了一个不存在的目录中 而显示错误.
Mysql的数据文件移动时出现的新问题:2011-10-16 Add By:jack。
主要是讲述新版本的Mysql在移动目录时,在特别是有Innodb的情况下,出现问题解决问题的一个过程,及Mysql的sock文件和PHP接合的问题。
Mysql数据文件搬家到另外一个目录出现的 二个问题(从/usr/local/webserver/mysql/data/ 搬家到:/data0/data),如下:
1.Innodb出现问题,Mysql启动不了,如附录中的日志所示:
InnoDB: The InnoDB memory heap is disabled
这样的警告,查资料说,只要在my.cnf中加入以下,就可以消除以上警告
innodb_use_sys_malloc =0
系统默认为
innodb_use_sys_malloc =1
似乎有人说innodb_use_sys_malloc =1速度更快,我还没有得到证实。
所以,我就没有修改了。
解决办法:
cd /data0/data
rm -Rf ibdata1
rm -Rf ib_logfile0
rm -Rf ib_logfile1
========================================================
1.检查Linux下Mysql的日志
2.错误信息是"Default storage engine (InnoDB) is not available"
解决方法:
1.删除在MySQL安装目录下的Data目录中的
ib_logfile0
ib_logfile1
2.找到在配置MySQL服务器时指定的InfoDB目录删除掉
ibdata1
3.重新启动MySQL的Service
这个问题第二天又摸索了一下,其实是可以用InnoDB引擎的.
需要在mysql生成的配置文件增加一行配置,即增加一个临时目录,这个在启动mysql服务的时候是需要的.
[mysqld]
tmpdir=/tmp
我的my.ini配置文件如下,注意红色字体,是默认不会生成的;
========================================================
如下:
root@116.255.139.240:/data0/data# rm -Rf ib_logfile0 ib_logfile1
root@116.255.139.240:/data0/data# rm -Rf ibdata1
root@116.255.139.240:/data0/data# rm -Rf ibdata1
后续指定DB目录,和InnoDB目录及日志文件设置如下:
datadir = /data0/data/
innodb_data_home_dir = /data0/data/
innodb_data_home_dir = /data0/data/
innodb_log_group_home_dir = /data0/data/
innodb_data_file_path = ibdata1:128M:autoextend
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_use_sys_malloc = 0
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 4M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 5M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
#log write and so on...
general-log = /data0/data/error_log/log-error.log
log-error = /data0/data/error_log/log-error.log
slow-query-log = /data0/data/error_log/log-slow-query.log
#slow query search
slow_query_log=1
slow_query_log_file = /data0/data/slow_query_log/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes
2.移动数据文件目录后再访问时出现了问题二:
Bo-Blog Database System Tips: Can not connect to MySQL server
Time: 2011-10-16 8:09am
Script:
Error: Can't connect to local MySQL server through socket '/usr/local/webserver/mysql/data/mysql.sock' (2)
Errno.: 2002
检测php.ini的设置,再检测my.conf里面的值设成一样就OK 另外目录mysql.sock所在目录的读取权限也是
如果用php连接要特别注意php.ini的设置
mysql.default_socket=(默认为空) ,这块连接Mysql相关的设置请看:http://www.jackxiang.com/post/4327/
所以首要侨务检测php.ini的设置,再检测my.conf里面的值设成一样就OK
另外目录mysql.sock所在目录的读取权限也是问题(兄弟们原谅我linux下的目录权限真的是不懂,所以简单点就直接chmod 777了)
另外要特别注意,我想这点才是可能导致失败的就是web目录不能用root用户运行.而应该用nobody用户
# vi /etc/my.cnf
[mysqld]
port = 3306
socket = /data0/data/mysql.sock
vi /usr/local/webserver/php/etc/php.ini
mysql.default_socket =
修改成和修改后的一样即可:
mysql.default_socket = /data0/data/mysql.sock
是FastCGI得重启fastcgi的Php,而如是Apache,则重启动Apache即可,就是把PHP.ini给纳入重新初始化。
附录Mysql启动后的日志情况:
111016 16:01:29 mysqld_safe Starting mysqld daemon with databases from /data0/data
InnoDB: Mutexes and rw_locks use InnoDB's own implementation
InnoDB: Compressed tables use zlib 1.2.3
111016 16:01:29 InnoDB: Initializing buffer pool, size = 18.0M
111016 16:01:29 InnoDB: Completed initialization of buffer pool
InnoDB: The first specified data file /data0/data/ibdata1 did not exist:
InnoDB: a new database to be created!
111016 16:01:29 InnoDB: Setting file /data0/data/ibdata1 size to 128 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100
InnoDB: Error: all log files must be created at the same time.
InnoDB: All log files must be created also in database creation.
InnoDB: If you want bigger or smaller log files, shut down the
InnoDB: database and make sure there were no errors in shutdown.
InnoDB: Then delete the existing log files. Edit the .cnf file
InnoDB: and start the database again.
111016 16:01:49 [ERROR] Plugin 'InnoDB' init function returned error.
111016 16:01:49 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
111016 16:01:49 [ERROR] Unknown/unsupported storage engine: InnoDB
111016 16:01:49 [ERROR] Aborting
启动Ok如下:
111016 16:05:13 mysqld_safe Starting mysqld daemon with databases from /data0/data
InnoDB: Mutexes and rw_locks use InnoDB's own implementation
InnoDB: Compressed tables use zlib 1.2.3
111016 16:05:13 InnoDB: Initializing buffer pool, size = 16.0M
111016 16:05:13 InnoDB: Completed initialization of buffer pool
InnoDB: The first specified data file /data0/data/ibdata1 did not exist:
InnoDB: a new database to be created!
111016 16:05:13 InnoDB: Setting file /data0/data/ibdata1 size to 128 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100
111016 16:05:22 InnoDB: Log file /data0/data/ib_logfile0 did not exist: new to be created
InnoDB: Setting log file /data0/data/ib_logfile0 size to 5 MB
InnoDB: Database physically writes the file full: wait...
111016 16:05:23 InnoDB: Log file /data0/data/ib_logfile1 did not exist: new to be created
InnoDB: Setting log file /data0/data/ib_logfile1 size to 5 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: 127 rollback segment(s) active.
InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
111016 16:05:24 InnoDB: 1.1.4 started; log sequence number 0
111016 16:05:24 [Note] Event Scheduler: Loaded 0 events
111016 16:05:24 [Note] /usr/local/webserver/mysql/bin/mysqld: ready for connections.
Version: '5.5.8-log' socket: '/data0/data/mysql.sock' port: 3306 Source distribution
注意,Nginx下的file_get_contents会出现100%的Cpu情况,原因是:
开启<value name="request_slowlog_timeout">3s</value>记录慢执行日志,会在日志中打印出执行慢的代码行数。php-cgi(php-fpm) 使用了Libevent,而Libevent 在 Linux 2.6 内核以上默认会使用 epoll I/O 模型处理 FastCGI 网络请求,而非 select/poll。在慢日志记录的代码行数中,包含 file_get_contents 以及其他函数,而 file_get_contents 等作为 Client 发起 HTTP 请求的函数使用的是 select/poll 模型,也就是说,只有 file_get_contents 等满足“TCP请求默认不超时、使用select/poll 模型、进程CPU 100%”的网络操作函数,会导致 strace -p 看到的这种情况。
最好还是用Curl吧,这个靠谱些。
后补上,如何在PHP里安装GD2,方法如下:
如果源码安装需要找齐下面的源码包,在安GD2时需要指定其安装的位置:
./configure --prefix=/usr/local/modules/gd --with-jpeg=/usr/local/modules/jpeg6 --with-png --with-zlib --with-freetype=/usr/local/modules/freetype
如果安装gd版本低,会报configure: error: Unable to find libgd.(a|so) >= 2.1.0 anywhere under /usr/local/gd
GD库重装成功 尝试重装PHP 依然报错 查找到libgd.*位置 复制到/usr/local/gd/ 依然找不到。 找到原因,GD库版本过低,低于2.1.0 下载最新版本
替换高版本gd解决,也可能是这样解决:
configure: error: Unable to find libgd.(a|so) >= 2.1.0 anywhere under /usr/local/libgd
如果提示libgd版本错误,把php编译参数--with-gd=/usr/local/libgd修改为--with-gd即可 ,Dockerfile 是这样的:--with-gd=/usr \ ,指向/usr。
修改成下面这个路径试试:
--with-gd=/usr/local/gd \
而要是自带的这个rpm,用linux的yum安好即可,特别要注意要用到的devel这样的包,这个是有一个头文件在里面的,
rpm -ql zlib-devel-1.2.3-27.el6.i686
/usr/include/zconf.h
/usr/include/zlib.h
/usr/lib/libz.so
如下,查看是否所有的包都安好了:
root@192.168.225.128:~# rpm -qa|grep zlib
zlib-devel-1.2.3-27.el6.i686
zlib-1.2.3-27.el6.i686
root@192.168.225.128:~# rpm -qa|grep libpng
libpng-devel-1.2.46-1.el6_1.i686
libpng-1.2.46-1.el6_1.i686
root@192.168.225.128:~# rpm -qa|grep freetype
freetype-2.3.11-6.el6_1.8.i686
freetype-devel-2.3.11-6.el6_1.8.i686
root@192.168.225.128:~# rpm -qa|grep libxml
libxml2-2.7.6-4.el6_2.1.i686
libxml2-devel-2.7.6-4.el6_2.1.i686
root@192.168.225.128:~# rpm -qa|grep gd
gdbm-1.8.0-36.el6.i686
root@192.168.225.128:~# rpm -qa|grep jpeg
libjpeg-6b-46.el6.i686
libjpeg-devel-6b-46.el6.i686
于是直接这样来安这个GD2即可:
./configure --prefix=/usr/local/gd
** Configuration summary for gd 2.0.34:
Support for PNG library: yes
Support for JPEG library: yes
Support for Freetype 2.x library: yes
Support for Fontconfig library: no
Support for Xpm library: no
Support for pthreads: yes
make;make install
PHP:
--with-gd=/usr/local/gd
安装配置方法:
/configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd=/usr/local/gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --enable-soap=shared --enable-pdo enable-dom --enable-xmlwriter --with-pcre-regex --with-pear --enable-session --enable-spl --enable-hash --enable-reflection
重新指定so的位置:
打开/etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/gd/lib
ldconfig
再make;make install ,以上安装出现PHP还是跑到php5.3.10/ext/gd 并报错了。考。。。。
再试着用源码来安装(记录一下,安装是可以,但在最后时发现php还是去读取了PHP自己的目录下的ext/gd),后面只有先暂时不安,在最后再来安装这个gd2:
FreeType安装
FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。支持单色位图、反走样位图的渲染。FreeType库是高度模块化的程序库,虽然它是使用ANSI C开发,但是采用面向对象的思想,因此,FreeType的用户可以灵活地对它进行裁剪。
[root@yznvm1 yzn]# wget http://nchc.dl.sourceforge.net/project/freetype/freetype2/2.4.8/freetype-2.4.8.tar.gz
[root@yznvm1 yzn]# tar xzvf freetype-2.4.8.tar.gz
[root@yznvm1 yzn]# cd freetype-2.4.8
[root@yznvm1 yzn]# ./configure --prefix=/usr/local/freetype
[root@yznvm1 freetype-2.4.8]# make && make install
[root@yznvm1 yzn]# wget http://www.ijg.org/files/jpegsrc.v8c.tar.gz
[root@yznvm1 yzn]# tar zxvf jpegsrc.v8c.tar.gz
[root@yznvm1 yzn]# cd jpeg-8c/
[root@yznvm1 jpeg-8c]# ./configure --prefix=/usr/local/jpeg
[root@yznvm1 jpeg-8c]# make && make install && cd ..
libpng
可查看http://www.libpng.org/pub/png/libpng.html
查看zlib版本
[root@yznvm1 yzn]# rpm -qa zlib
zlib-1.2.3-3
zlib-1.2.3-3
出于性能和安全考虑,zlib最好是1.2.5以上版本
[root@yznvm1 yzn]# wget ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.5.7.tar.gz
[root@yznvm1 yzn]# tar zxvf libpng-1.5.7.tar.gz
[root@yznvm1 yzn]# cd libpng-1.5.7
[root@yznvm1 libpng-1.5.7]# ./configure --prefix=/usr/local/libpng
[root@yznvm1 libpng-1.5.7]# make && make install
[root@yznvm1 libpng-1.5.7]# cd ..
libgd
http://www.libgd.org/ 这个网站down
[root@yznvm1 gd-2.0.33]# http://www.boutell.com/gd/http/gd-2.0.33.tar.gz
[root@yznvm1 gd-2.0.33]# tar xzvf gd-2.0.33.tar.gz
[root@yznvm1 gd-2.0.33]# cd gd-2.0.33
[root@yznvm1 gd-2.0.33]# ln -s /usr/local/libpng/include/pngconf.h /usr/include
[root@yznvm1 gd-2.0.33]# ln -s /usr/local/libpng/include/png.h /usr/include
[root@yznvm1 gd-2.0.33]# ./configure --prefix=/usr/local/gd2 --with-freetype=/usr/local/freetype --with-png=/usr/local/libpng --with-jpeg=/usr/local/jpeg
[root@yznvm1 gd-2.0.33]# make
[root@yznvm1 gd-2.0.33]# make install
下面是全的安装配置configure文件,但实践中要注意下面四点:
1)This is the test message -- configure: error: Could not find net-snmp-config binary. Please check your net-snmp installation.
configure: error: Could not find net-snmp-config binary. Please check your net-snmp installation.
Fix: yum install net-snmp-devel
2)
configure: WARNING: You will need re2c 0.13.4 or later 解决办法
我在为php安装imagick-2.3.0模块的时候出现来错误
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
说需要安装re2c
执行以下命令
wget http://sourceforge.net/projects/re2c/files/re2c/0.13.5/re2c-0.13.5.tar.gz/download
tar -zxvf re2c-0.13.5.tar.gz
cd re2c-0.13.5
./configure && make && make install
3)configure: warning: bison versions supported for regeneration of the Zend/PHP parsers: 1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 (found: none).
yum install bison
4)checking for lemon... no
configure: warning: lemon versions supported for regeneration of libsqlite parsers: 1.0 (found: none).
解决方法:
wget http://www.sqlite.org/cvstrac/getfile/sqlite/tool/lemon.c [下载不了]
这儿下:
http://code.google.com/p/lemonbind/source/browse/tools/lemon.c
gcc -o lemon lemon.c
mv lemon /usr/local/bin
重新运行 ./configure 后,问题解决。
最后正确的安装php5.3.10的配置configure方法,汇总,配置完所有的扩展要要用的配置参数了:
接着用如下make,不加参数会报错找不到ld什么的:
make ZEND_EXTRA_LIBS='-liconv'
更多的事件驱动扩展,PHP5.3 下安装ZendGuardLoader及eaccelerator 加速器:
http://www.jackxiang.com/post/5626/
PHP高一点的版本如:php-5.3.26,那些没有用的参数就不用了,于是得出下面的编译列表:
如果想兼容Nginx和Apache2时,还应加上--with-apxs2,但只能编译成一种,不能同时编译既支持fastCGI,又支持Apache的传统方式:
关于php编译时SAPI错误 :
近日在Centos6.3上编译php的时候出现了错误:You've configured multiple SAPIs to be build. You can build only |
| one SAPI module and CLI binary at the same time.
翻译:
You've configured multiple SAPIs to be build.You can build only one SAPI module and CLI binary at the same time.(你已经配置了多个SAPIs,你只可以建立一个SAPI模块和一个CLI binary。)
导致的原因是我的配置参数中同时使用了--enable-fpm 与--with-apxs2= ,因此编译的时候出错了,去掉其中的任意一个参数编译成功。
checking for Apache 1.x module support via DSO through APXS... configure: error: You have enabled Apache 1.3 support while your server is Apache 2. Please use the appropiate switch --with-apxs2
把下面的语句 --enable-fpm 去掉:就可以编译成功Apache下的PHP了。
./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --enable-soap=shared --enable-pdo --enable-dom --enable-xmlwriter --with-pcre-regex --with-pear --enable-session --enable-hash --with-pdo-mysql=/usr/local/webserver/mysql --with-apxs2=/usr/local/webserver/apache2/bin/apxs
make ZEND_EXTRA_LIBS='-liconv'
会提示:如果要用Apache的线程安全模式,需要加上配置参数为: --enable-maintainer-zts
参考:http://jackxiang.com/post/5868/
You have built PHP for Apache's current non-threaded MPM.
If you change Apache to use a threaded MPM you must reconfigure
PHP with --enable-maintainer-zts
出现配置时的输出错误:
configure :error:unable to find your mysql installation
在--with-pdo-mysql后加上路径 ---with-pdo-mysql=/usr/local/webserver/mysql
终于再次编译成功!!
Apache相关的编译成功参数情况如下:
make install ...安装时会在Apache2下安装libphp5.so等文件:
在编译Apache下的PHP时出现一个can't find -lltdl的问题解决方法:
/usr/bin/ld: cannot find 错误解决方法
通常在软件编译时出现的usr/bin/ld: cannot find -lxxx的错误,主要的原因是库文件并没有导入的ld检索目录中。
解决方式:
1。确认库文件是否存在,比如-l123, 在/usr/lib, /usr/local/lib,或者其他自定义的lib下有无lib123.so, 如果只是存在lib123.so.1,
那么可以通过ln -sv lib123.so.1 lib123.so,建立一个连接重建lib123.so.
2。检查/etc/ld.so.conf中的库文件路径是否正确,如果库文件不是使用系统路径,/usr/lib, /usr/local/lib, 那么必须在文件中加入。
3。ldconfig 重建ld.so.cache文件,ld的库文件检索目录存放文件。尤其刚刚编译安装的软件,必须运行ldconfig,才能将新安装的
库文件导入ld.so.cache.
4。测试,gcc -l123 --verbose.
参考:http://blog.siyebocai.cn/20100324_5p424qs7.html
实践操作:
/usr/lib/libltdl.so /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [libphp5.la] 错误 1
找找下面这些位置是否有这样的包?
erro: Installed (but unpackaged) file(s) found:
/usr/lib64/libltdl.a
/usr/lib64/libltdl.la
/usr/lib64/libltdl.so.3.1.0
Installed (but unpackaged) file(s) found:
/usr/lib64/libltdl.a
/usr/lib64/libltdl.la
/usr/lib64/libltdl.so.3.1.0
如果找不到,解决的方法基本很容易.
#yum install libtool-ltdl-devel
如果找到,我的情况:
root@192.168.244.128:/# cd /;find . -name "*libltdl.so*"
./usr/lib/libltdl.so.7.2.1
./usr/lib/libltdl.so.7
按上面的介绍来作出添加操作:
1)检查/etc/ld.so.conf中的库文件路径是否正确,如果库文件不是使用系统路径,/usr/lib, /usr/local/lib, 那么必须在文件中加入。
2)ldconfig 重建ld.so.cache文件,ld的库文件检索目录存放文件。尤其刚刚编译安装的软件,必须运行ldconfig,才能将新安装的
库文件导入ld.so.cache.
如下操作:
vi /etc/ld.so.conf 添加一行:
/usr/lib/
执行: ldconfig
再次编译PHP即可!!!
------------------------------------------------------------------------------------------------------------------------------------------------------------------
还是不行啊?呵呵,那明明整上去了还不行再这样试试:
第一步很容做到:yum -y install libtool libtool-ltdl; //这一步实在是没有那个库再说吧,略。直接第二步。
root@192.168.244.128:/# ldconfig -p |grep ltdl
libltdl.so.7 (libc6) => /usr/lib/libltdl.so.7
第二步由于PHP的configure指定的libltdl名为libltdl.so,为此我们只需添加一个名称连接:ln -s /usr/lib64/libltdl.so.3.1.4 /usr/lib64/libltdl.so ,如果不是64位则:
,其原始文件是:/usr/lib/libltdl.so.7.2.1 ,一个个都是软链接。
http://blog.chinaunix.net/uid-20774942-id-3001010.html
------------------------------------------------------------------------------------------------------------------------------------------------------------------
安装php并且打补丁(由于gd与iconv冲突,暂不编译gd库),于是在后来追加编译gd库
进入目录php-5.2.10/ext/gd执行命令
/usr/local/php/lib/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-jpeg-dir=/usr/local/jpeg --with-png-dir=/usr/local/libpng --with-zlib-dir=/usr/local/zlib/ --with-freetype-dir=/usr/local/freetype
make;make install
,最后,发现这个新生成的gd.so,和前面默认安的这个gd是一样的东东,现在还是不太明白他们所说的gd2和gd有什么大的区别,哈哈,上面这种方法提供了一条安gd.so的方法,也还是不小的收获。同时,以前这个PDO都是编译为so,而上面这个编译是直接编译进php的源码时就编译了,也是不错的收获。
这次主要是把PHP模块Mysql的的PDO直接安装在了编译时,而不需要extension(;extension = "pdo_mysql.so"):
root@192.168.225.128:~/software/php-5.3.10# php -m|grep pdo
PHP Warning: Module 'pdo_mysql' already loaded in Unknown on line 0
pdo_mysql
pdo_sqlite
==============后期的方便操作的设置===================
方便管理,显示IP等,如:jackxiang@72.46.128.82:~#
vi ~/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ll='ls -l'
alias la='ls -A'
alias vi='vim'
alias v='vim'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
ipL=`/sbin/ifconfig eth0|grep "inet addr:"|cut -d: -f 2|cut -d" " -f1`
export PS1="\u@$ipL:\w# "
alias cdh="cd /usr/local/tads/htdocs/"
alias cnginx="cd /usr/local/webserver/nginx/"
alias chtdocs="cd /data0/htdocs/"
alias cphpuml="cd /root/software/PHP_UML-1.5.5/PHP/scripts"
一些目录的快捷键:
vi ~+/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/local/webserver/php/bin:/usr/local/webserver/mysql/bin:/usr/local/webserver/memcached/bin:/usr/local/webserver/nginx/sbin:./usr/local/webserver/subversion/bin:/usr/local/webserver/python/bin:/home/webdev/bin;
export PATH
unset USERNAME
alias chtdocs='cd /data0/htdocs'
alias cphp='cd /usr/local/webserver/php'
alias cmysql='cd /usr/local/webserver/mysql'
alias capache='cd /usr/local/webserver/apache'
alias cblog='cd /data0/htdocs/blog'
alias h='history'
Vim的一些设置等:
vi ~+/.vimrc
syntax on
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
set nu
if &term=="xterm"
set t_Co=8
set t_Sb=^[[4%dm
set t_Sf=^[[3%dm
endif
behave mswin
colo murphy
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set fileformats=unix
set fileencoding=utf-8
au FileType php call AddPHPFuncList()
function AddPHPFuncList()
set dictionary-=/root/.vim/ExtraVim/php_funclist.txt dictionary+=/root/.vim/ExtraVim/php_funclist.txt
set complete-=k complete+=k
endfunction
map <F10> : NERDTreeToggle<CR>
map <F12> ::TlistToggle<CR>
let NERDTreeWinPos = "right" "where NERD tree window is placed on the screen
let Tlist_Enable_Fold_Column = 0
let Tlist_Exit_OnlyWindow = 0
let Tlist_File_Fold_Auto_Close = 0
let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Hightlight_Tag_On_BufEnter = 1
let Tlist_Inc_Winwidth = 0
let Tlist_Max_Submenu_Items = 1
let Tlist_Max_Tag_Length = 30
let Tlist_Process_File_Always = 0
let Tlist_Show_Menu = 0
let Tlist_Show_One_File = 0
let Tlist_Sort_Type = "order"
let Tlist_Use_Horiz_Window = 0
let Tlist_Use_Right_Window = 1
let Tlist_WinWidth = 40
let tlist_php_settings = 'php;c:class;i:interfaces;d:constant;f:function'
eaccelerator的小生产配置备案:
[Zend]
zend_optimizer.optimization_level=15
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/data/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
YAML扩展:http://jackxiang.com/post/4431/
Xdebug:http://jackxiang.com/post/4675/
更加清晰的参考:
http://www.osyunwei.com/archives/4924.html
http://www.ypgogo.com/world/pearl/id/13000
_____________________PHP5.4以上非fastCGI和apche结合支持上传进度的实践之重新配置Apache____________________________
目的:想实现PHP5.4的进度progress的上传,搞了个nginx的,后来一老外说这Nginx玩意在获取进度时获取不到,还得用传统的Apache那一套。Add Time:14/3/27 星期四
一)给Apache2重新编译下PHP:(像什么GD库,Mysql先省了)
./configure --prefix=/usr/local/webserver/php5.4ForApache -with-apxs2=/usr/local/webserver/apache2/bin/apxs --with-curl --with-mcrypt --enable-mbstring --enable-pdo --with-iconv-dir=/usr/local/libiconv
二)make ZEND_EXTRA_LIBS='-liconv' && make install
libtool: install: install .libs/libphp5.so /usr/local/webserver/apache2/modules/libphp5.so
libtool: install: install .libs/libphp5.lai /usr/local/webserver/apache2/modules/libphp5.la
三)再次检查下httpd.conf的配置情况:
<IfModule mime_module>
TypesConfig conf/mime.types
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
启动Apache,开始测试。
root@192.168.0.6:/usr/local/webserver/apache2/bin# ./httpd -k start
httpd: Syntax error on line 388 of /usr/local/webserver/apache2/conf/httpd.conf: Cannot load modules/libphp5.so into server: /usr/local/webserver/apache2/modules/libphp5.so: undefined symbol: zend_parse_parameters
解决办法:
在新的服务器(centos 6.3)编译安装完php-5.4.8,再配置好php.ini和httpd.conf后,启动apache-2.4.3的时候,命令执行/usr/local/apache2/bin/apachectl start时,提示:
httpd: Syntax error on line 146 of /etc/httpd/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: undefined symbol: zend_parse_parameters
通过搜索发现,说是缺少bison。
如果通过rpm -qa|grep bison发现没有安装bison,安装bison即可。centos可以用yum install bison
rpm -qa|grep bison 是:bison-2.4.1-5.el6.i686,但是我发现已经安装了bison-2.4.1,rpm -e bison-2.4.1-5.el6.i686。最后实在是没办法了,下载了bison-2.5的rpm包直接安装。
[root@localhost ~]# wget http://ftp.gnu.org/gnu/bison/bison-2.5.tar.gz
[root@localhost ~]# tar -zxvf bison-2.5.tar.gz
[root@localhost ~]# cd bison-2.5
[root@localhost ~]# ./configure
[root@localhost ~]# make && make install
再重新编译安装了PHP[实践发现在重新编译PHP时要注意:make clean再编译,后才能启动Apache2并支持PHP5.4.26]。然后/usr/local/apache2/webserver/bin/apachectl start启动Apache。惊奇的发现可以正常启动了,测试了下PHP网页,可以正常访问。
来自:http://www.myxzy.com/post-272.html
1)配置好后,测试上传进度占比的PHP自己带的进度实践来源:
(1)http://www.pureweber.com/article/php-upload-progress/
(2)https://github.com/pureweber/samples/blob/master/php-upload-progress/upload.php
2)配置好后,测试上传进度占比的Flash实践来源:http://jackxiang.com/post/6939/
FATAL ERROR: Could not find ./bin/my_print_defaults
修改:
basedir="/usr/local/mysql"
builddir="/root/software/mysql-5.5.9"
FATAL ERROR: Could not find ./bin/my_print_defaults
If you are using a binary release, you must run this script from
within the directory the archive extracted into. If you compiled
MySQL yourself you must run 'make install' first.
/usr/local/webserver/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/webserver/mysql --datadir=/usr/local/webserver/mysql/data
修改:
basedir="/usr/local/mysql"
builddir="/root/software/mysql-5.5.9"
FATAL ERROR: Could not find ./bin/my_print_defaults
If you are using a binary release, you must run this script from
within the directory the archive extracted into. If you compiled
MySQL yourself you must run 'make install' first.
/usr/local/webserver/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/webserver/mysql --datadir=/usr/local/webserver/mysql/data
[vps实践]linux下安装php5.3.6的扩展包pear
Php/Js/Shell/Go jackxiang 2011-3-26 14:15
(1)chmod: cannot access `ext/phar/phar.phar': No such file or directory:
wget http://pear.php.net/go-pear.phar
[root@localhost phar]# /usr/local/webserver/php/bin/php go-pear.phar
Below is a suggested file layout for your new PEAR installation. To
change individual locations, type the number in front of the
directory. Type 'all' to change all of them or simply press Enter to
accept these locations.
1. Installation base ($prefix) : /usr/local/webserver/php
2. Temporary directory for processing : /tmp/pear/install
3. Temporary directory for downloads : /tmp/pear/install
4. Binaries directory : /usr/local/webserver/php/bin
5. PHP code directory ($php_dir) : /usr/local/webserver/php/lib/php
6. Documentation directory : /usr/local/webserver/php/docs
7. Data directory : /usr/local/webserver/php/data
8. User-modifiable configuration files directory : /usr/local/webserver/php/cfg
9. Public Web Files directory : /usr/local/webserver/php/www
10. Tests directory : /usr/local/webserver/php/tests
11. Name of configuration file : /usr/local/webserver/php/etc/pear.conf
1-11, 'all' or Enter to continue: all
这个根据个人环境进行修改。(我是直接回车即可)
(2)chmod: cannot access `ext/phar/phar.phar': No such file or directory:
make: [ext/phar/phar.phar] Error 1 (ignored)
解决方法:./configure的时候 要加上--without-pear
wget http://pear.php.net/go-pear.phar
[root@localhost phar]# /usr/local/webserver/php/bin/php go-pear.phar
Below is a suggested file layout for your new PEAR installation. To
change individual locations, type the number in front of the
directory. Type 'all' to change all of them or simply press Enter to
accept these locations.
1. Installation base ($prefix) : /usr/local/webserver/php
2. Temporary directory for processing : /tmp/pear/install
3. Temporary directory for downloads : /tmp/pear/install
4. Binaries directory : /usr/local/webserver/php/bin
5. PHP code directory ($php_dir) : /usr/local/webserver/php/lib/php
6. Documentation directory : /usr/local/webserver/php/docs
7. Data directory : /usr/local/webserver/php/data
8. User-modifiable configuration files directory : /usr/local/webserver/php/cfg
9. Public Web Files directory : /usr/local/webserver/php/www
10. Tests directory : /usr/local/webserver/php/tests
11. Name of configuration file : /usr/local/webserver/php/etc/pear.conf
1-11, 'all' or Enter to continue: all
这个根据个人环境进行修改。(我是直接回车即可)
(2)chmod: cannot access `ext/phar/phar.phar': No such file or directory:
make: [ext/phar/phar.phar] Error 1 (ignored)
解决方法:./configure的时候 要加上--without-pear
文:周鸿祎
阅读全文
阅读全文
最近有个月经问题,老有人问为何开机后,还没有其他服务,mem就被用完了?是不是内存泄露?是否要重启服务?只能说不要看现象,要看本质才能找到问题的根源。
往往给出这样的结果,怀疑内存用了90%:
Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached
这样怀疑很普遍,因为很多人用惯了Windows。Windows下,可以使用任务管理器查看当前进程对于内存的消耗情况。在我看来,Windows物理内存总是留下一定的空间,就算此时物理内存有空闲时,也会让某些程序去使用虚拟内存,目的是在Windows下启动新程序时,直接分配空闲的物理内存,这样子新程序启动速度就较快,而Linux则不然。
而在Linux下,使用top命令看到内存占用情况:
Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached
这里的结果显示使用了3.8G的used,占用率达到90%。看看free的结果你还可以对比一下:
$ free -m
total used free shared buffers cached
Mem: 4049 3784 265 0 208 2939
-/+ buffers/cache: 636 3413
Swap: 2588 0 2588
虽然MEM显示了3.7G左右的used,但是(-/+ buffers/cache)减去buffers和cache的结果可以看到,当前进程实际占用内存是636M,而可用空闲(free)内存为3.4G。
可以这么理解:在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。
如上面的例子:使用了4G的内存,3.7G被占用,但是buuffer和cached部分作为缓存,可以使用命中率的方式提高使用效率,而且这部分缓存是根据指令随时可以释放的,我们可以认为这部分内存没有实际被使用,也可以认为它是空闲的。
因此查看目前进程正在实际被使用的内存,是used-(buffers+cache),也可以认为如果swap没有大量使用,mem还是够用的,只有mem被当前进程实际占用完(没有了buffers和cache),才会使用到swap的。
个人之见,欢迎拍砖。
参考:http://apps.hi.baidu.com/share/detail/23407310
往往给出这样的结果,怀疑内存用了90%:
Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached
这样怀疑很普遍,因为很多人用惯了Windows。Windows下,可以使用任务管理器查看当前进程对于内存的消耗情况。在我看来,Windows物理内存总是留下一定的空间,就算此时物理内存有空闲时,也会让某些程序去使用虚拟内存,目的是在Windows下启动新程序时,直接分配空闲的物理内存,这样子新程序启动速度就较快,而Linux则不然。
而在Linux下,使用top命令看到内存占用情况:
Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached
这里的结果显示使用了3.8G的used,占用率达到90%。看看free的结果你还可以对比一下:
$ free -m
total used free shared buffers cached
Mem: 4049 3784 265 0 208 2939
-/+ buffers/cache: 636 3413
Swap: 2588 0 2588
虽然MEM显示了3.7G左右的used,但是(-/+ buffers/cache)减去buffers和cache的结果可以看到,当前进程实际占用内存是636M,而可用空闲(free)内存为3.4G。
可以这么理解:在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。
如上面的例子:使用了4G的内存,3.7G被占用,但是buuffer和cached部分作为缓存,可以使用命中率的方式提高使用效率,而且这部分缓存是根据指令随时可以释放的,我们可以认为这部分内存没有实际被使用,也可以认为它是空闲的。
因此查看目前进程正在实际被使用的内存,是used-(buffers+cache),也可以认为如果swap没有大量使用,mem还是够用的,只有mem被当前进程实际占用完(没有了buffers和cache),才会使用到swap的。
个人之见,欢迎拍砖。
参考:http://apps.hi.baidu.com/share/detail/23407310