月度归档:2015年04月

lnmpa php升级脚本问题

上篇说到wordpress把php和apache搞崩溃的问题,我看了一下php版本5.2.17有点老,遂升级,原来装的这一套是再lnmp.org上面下的,说实话licess和lnmp对于我们这种小白级的用户带来了太多方便,感谢他,让我们可以一键傻瓜配置环境,但实际上这种东西有不小的风险。

网上有很多教你直接拷贝这段代码在终端里面运行,各种一键傻瓜安装都是wget一个脚本然后直接chmod+x然后执行,先不说脚本作者水平如何的问题。这个脚本放在什么地方,写了什么东西都是问题,即便作者不乱来,假设放这个脚本的地方被攻陷了,其他黑客修改了脚本,也能给你的系统带来不可估计的风险。特别是没多少人把脚本下下来先自己检查一下,看了也不一定都能看懂是在做什么。而且像lnmp的安装脚本里面又各种wget其他东西,方式跟木马下载器是一样的。

当然你不信就不用就是了,我使用1.0版本的lnmpa_upgrade_php脚本时候就出现了问题,先是脚本根据输入的版本号下载php源码包,然后configure和make,其中configure的命令行是写死在脚本里面的,实际上随着php的变化有一些参数已经不适用了,例如说enable-safe-mode。参数不适用就算了,但是还有其他问题,例如说有一个参数with-libevent-dir,脚本里面好像漏了这个参数前面的两个横杠–,不过这个参数也是无效的。

此外脚本里面configure之后从老的apache目录下拷来了libtool覆盖了php本目录下的libtool,导致后面编译失败,这个处理也没有任何注释之类的解释是为何要这样做。反正我注释掉这个处理之后编译才通过了。

另外上面的编译失败还暴露了另一个问题,就是这个脚本的错误处理基本没有,像编译出错这么严重的,脚本没有处理,直接就继续往下执行,这多恐怖……

说一下蛋疼的wordpress和apache崩溃问题

很久之前我就发现我的博客wordpress搬到这一台服务器之后有时候wordpress后台有些页面会导致后台进程崩溃,具体是apache的进程会崩,日志显示

[notice] child pid 30702 exit signal Segmentation fault (11)

而且是必现的,具体是wordpress后台的更新页面还有插件页面。我在apache前面套了nginx,nginx表现就是502。然后想起来技巧就是直接把wp-contents目录里面的plugins子目录重命名,这样可以禁用所有插件。果然禁用了之后,一切正常。

其实apache本身还算是稳定的,能把apache搞挂了的一般就是php模块内的事情。我也不知道为何php错误日志里面啥相关信息都没有,另外搞了很久也没办法让apache把coredump保存到文件(ulimit -c | sysctl配置 | apache配置均已修改),想看看怎么崩的也没有办法,真是太蛋疼了。一种脚本语言把它的运行时以及运行时容器进程搞挂……

我觉得我离全站纯静态不远了……

记录一次离奇的pureftpd+mysql用户530无法登录问题

是这样的pureftpd还算是个比较轻量的服务器ftp软件,还可以搭配比较灵活的认证。其中有一种用法就是搭配mysql,把用户身份存在在mysql里面方便管理。但是当我把环境搭建好之后创建了ftp用户发现连接后认证失败530。在log里面看到说pureftpd无法连接数据库,access denied ftp@localhost。

网上有很多说法,包括localhost和127.0.0.1之间的host问题等。但是日志里面其实我们明确这是mysql用户登录问题,导致pureftpd无法查询数据库。然后我反反复复折腾重新创建数据库用户,确认密码正确性等等,均无果,直到有一次我在重启pureftpd服务的时候发现

[root@vps7 ~]# service pureftpd restart
Restarting Pure-FTPd: Stopping Pure-FTPd: Pure-FTPd is not running.
Starting Pure-FTPd: Running: /usr/local/pureftpd/sbin/pure-ftpd –daemonize -A -c50 -B -C5 -D -E -fftp -H -I15 -lmysql:/usr/local/pureftpd/pureftpd-mysql.conf -lunix -L2000:8 -m4 -p20000:30000 -s -U133:022 -u100 -k99 -Z

什么鬼,pureftpd not running? 我看了下进程pureftpd确实是在跑的进程,进一步查看这个启动脚本看到它从一个位置获取pureftpd的pid,而那个pid文件并不存在。所以其实我重启pureftpd服务实际上并不成功,老的进程没杀掉,新的进程肯定因为端口冲突不能正常起来,所以修改的配置也没有生效。手工杀掉重新启动服务之后就ok了,观察pid文件也正常了。