某商vps上编译php时报错“undefined reference to `libiconv_open'”的处理

帮朋友的阿里云的服务器装wordpress。该服务器上面已经装了有好几个站点,web环境是wdlinux的所谓一键安装脚本,向来极其厌恶这种所谓的一键脚本,版本老化,目录不合理,乱。但为了兼容现有环境,还是决定在它上面继续。无语的是,这个web配置实在乱透了,nginx作前端,把动态请求反代到后方apache上,这样配置一个web站点,要同时设置两套web。而且还是使用php 5.2.17,这个老掉牙的版本!搞了半天,真心不想搞下去了。于是决定新安装php新版本,以php-fpm运行,简洁优雅地在nginx上跑。

之前自己服务器上路的是php 7.0.9,直接下载这个版本源码,使用之前自己的configure参数,但在make时出错了,错误消息第一行非常长,核心就是iconv有问题

undefined reference to `libiconv_open'

尝试安装iconv-devel等办法都使用了,都不行。

经过google,也有别的朋友遇到同样问题,make时加参数即可,如下:

 make ZEND_EXTRA_LIBS='-liconv'

堪称完美,在所有解决方案里最简便,向该博客作者表示感谢。 继续阅读

手把手教你在centos下编译安装配置高性能web服务器环境nginx+php(fast-cgi)+mysql等/适合小内存vps使用

本文为实战操作过程的全程记录,采用一台新创建的linode vps(512M内存)环境,操作系统采用centos 6.2,以从源码编译的方式安装配置nginx, php(fast-cgi模式)web环境。

我们的目标:配置一台高性能、安全的web服务器。

继续阅读

centos 6下编译安装php时安装mcrypt支持库

centos6本身不带mcrypt库的支持,手工编译php时,还需要先安装该库,这里有两个途径

1. 使用第三方源实现yum安装,推荐使用RPMforge,在centos下配置该yum源,配置后即可尝试yum install libmcrypt, yum install libmcrypt-devel, yum install mcrypt-devel 安装该库。本人没有实际操作,不确定具体该包的包名。因为如果使用该库,就没必要手工编译php了,直接yum安装好了。配置RPMforge如下

 rpm -ivh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
 yum clean all
 yum makecache

请参看RPMforge, 很不错的centos RPM/yum源

2. 手工编译安装mcrypt库的支持。

这才是本文主要针对的,手工编译。按php官方的说明 http://www.php.net/manual/en/mcrypt.requirements.php

These functions work using » mcrypt. To use it, download libmcrypt-x.x.tar.gz from» http://mcrypt.sourceforge.net/ and follow the included installation instructions

但是http://mcrypt.sourceforge.net/并没有libmcrypt,而是应该到sourceforge上下载,http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/

下载,解压,./configure, make,make install, 很常规的步骤。注意libmcrypt需要c++编译器,请保证安装过gcc-c++, 否则请yum install gcc-c++装之

 

centos 6 下编译安装 nginx

下载nginx源码包,可以到nginx官方的下载文件归档里 http://nginx.org/download/ 下载

下载pcre源码,并编译安装,从pcre官方下载  ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.zip

解压缩 unzip pcre-8.21.zip

进入源码目录 cd pcre-8.21/

./configure

make

make install

全部使用默认,不必要指定目录,这样包容易被找到。

安装nginx

这里使用nginx 1.0.8为例。

下载源码包  wget http://nginx.org/download/nginx-1.0.8.tar.gz

解压缩 tar xvf nginx-1.0.8.tar.gz

进入源码目录 cd nginx-1.0.8/

查看配置参数 ./configure --help (此步可以省略)

简单配置 ./configure
(注:centos 6 默认安装pcre包的,但是其安装位置并不为nginx识别,而且即使手工指定好像也不行,编译过程中会提示找不到文件;所以才需要先安装pcre包)

不指定任何配置选项,应该可以成功通过,得到如下的消息

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + md5: using system crypto library
  + sha1: using system crypto library
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

然后就是 make

应该不会出问题,接着make install 就安装好了。

先测试一下是否可以运行,执行 /usr/local/nginx/sbin/nginx 没有消息提示,通过浏览器打开nginx所在的ip地址,应该可以看到

 

Welcome to nginx!

 

这样的一个简单页面,证明nginx可以工作。

接下来的工作就是配置nginx了,其配置文件为/usr/local/nginx/conf/nginx.conf

Linux From Scratch(LFS)编译耗费时间SBU

许多人都想知道编译和安装一个软件包预计需要多长时间。因为 Linux From Scratch 可以在多种不同的系统上创建,准确估计所需的时间是不可能的。2006年最快的系统上编译安装最大的软件包(Glibc)大约需要 20 分钟,但在很慢的系统上可能耗费长达三天时间。我们不提供准确时间,代之以标准编译时间单位(SBU)来度量。

SBU 度量具体说明如下,LFS中第一个编译的软件包是静态编译的 Binutils 。编译这个软件包所花费的时间就作为标准编译时间单位(SBU)。所有其它软件的编译时间都用这个时间来衡量。

例如,对于一个编译时间为 4.5 SBU 的软件包,这意味着如果一个系统静态编译安装 Binutils 需要花费 10 分钟,那么编译这个软件包将大约需要 45 分钟。幸运的是,大多数软件包编译安装所需的时间都比 Binutils 所需的时间要短。

SBU 并不十分精确,因为它依赖于许多因素,包括宿主系统 GCC 的版本。另外,在基于对称多处理器(SMP)的机器上,SBU 更加不准确。我们提供 SBU,仅仅是给出安装一个软件包所需时间的大概估计,在某些情况下实际花费的时间与预估计的时间之间可能有数十分钟的差异。

要查看在一些特定机器上的实际编译安装时间,我们推荐您查看 LinuxFromScratch SBU 的主页 http://www.linuxfromscratch.org/~bdubbs/

The LinuxFromScratch SBU Home Page

Chapter 5 Chapter 6
Name SBU
Average
SBU
Std Dev
Name SBU
Average
SBU
Std Dev
bunutils-pass-1 1.0 0.0 MAKEDEV 0.0 0.1
gcc-pass-1 5.6 5.3 kernel-headers 0.0 0.3
kernel-headers 0.1 0.5 man-pages 0.0 0.1
glibc 5.4 9.4 glibc 3.7 6.2
tcl 0.2 0.6 gcc 6.0 13.2
expect 0.1 0.2 coreutils 0.2 0.6
dejagnu 0.0 0.2 zlib 0.0 0.1
gcc-pass-2 3.9 6.3 lfs-utils 0.0 0.2
bunutils-pass-2 0.6 0.7 findutils 0.0 0.1
gawk 0.1 0.2 gawk 0.0 0.1
coreutils 0.4 0.5 ncurses 0.2 0.3
bzip2 0.0 0.1 vim 0.1 0.6
gzip 0.1 0.2 m4 0.0 0.1
diffutils 0.1 0.5 bison 0.1 0.3
findutils 0.1 0.2 less 0.0 0.1
make 0.1 0.4 groff 0.1 0.2
grep 0.1 0.4 sed 0.0 0.1
sed 0.1 0.5 flex 0.0 0.1
gettext 0.5 0.9 gettext 0.6 1.7
ncurses 0.3 0.4 net-tools 0.0 0.1
patch 0.0 0.2 inetutils 0.1 0.2
tar 0.1 0.3 perl 0.6 1.6
texinfo 0.1 0.2 texinfo 0.0 0.1
bash 0.2 0.3 autoconf 0.4 1.5
util-linux 0.0 0.3 automake 0.8 3.1
perl 0.4 0.6 bash 0.1 0.4
file 0.0 0.1
Chapter 8 libtool 0.2 0.8
kernel 0.3 1.1 bzip2 0.0 0.1
diffutils 0.0 0.1
ed 0.0 0.1
kbd 0.0 0.1
e2fsprogs 0.1 0.2
grep 0.0 0.1
grub 0.0 0.1
gzip 0.0 0.0
man 0.0 0.1
make 0.0 0.1
modutils 0.0 0.1
patch 0.0 0.1
procinfo 0.0 0.1
procps 0.0 0.1
psmisc 0.0 0.1
shadow 0.1 0.2
sysklogd 0.0 0.1
sysvinit 0.0 0.1
tar 0.1 0.5
util-linux 0.1 0.1
gcc-2.95.3 0.1 0.6
lfs-bootscripts 0.0 0.1

 

来源于网上资料汇总,主要参考以下

http://lamp.linux.gov.cn/Linux/LFS-6.2/chapter04/aboutsbus.html

http://www.linuxfromscratch.org/~bdubbs/

LFS-6.2中文文档 http://lamp.linux.gov.cn/Linux/LFS-6.2/index.html

现在的linux内核编译太简单了:linux kernel2.6.36.2编译手记

先show一下新内核:

[feng@fsc ~]$ uname -a
Linux fsc 2.6.36.2fsc #2 SMP Mon Dec 13 21:02:02 CST 2010 i686 i686 i386 GNU/Linux

硬件环境:asus A8jr 笔记本 (07年的机器,比较老了)

cpu core1 2250GHz
RAM 3G ddr2 667
VGA ATI x2300
......

背景:使用fedora13(fedora14已经正式版发布,但没有升级),但内核还是2.6.31,从fedora12里的rpm包安装的;因为2.6.33以后的内核与电脑不兼容,启动后就花屏,跟电视机屏幕的“雪花”一样,所以从fedora12里释放出内核并安装。fedora13在线yum升级后,还切换回2.6.31内核。

kernel 2.6.36.2正式发布了,比较无聊,于是wget下载内核源码,学习编译内核;以前编译过,但并不很成功。学习鸟哥linux私房菜里的内核编译,写得很详细,基本上是照着里面一步一步来的。这次准备摸索一下。

首先当然是要make menuconfig,选择模块。然后make 没有带参数,花费时间很长,睡觉。

今天早上醒来,make install,然而出错了,消息大致是有什么依赖错误,可能是哪里有不对吧。于是关机(休眠),上班。

晚上回来,启动电脑,发现grub里启动项多了一个,就是新编译的2.6.36.2,居然可以启动系统,只是驱动不太对,没有网络,无线有线都没有;lsmod查看加载的模块,结果一个都没有,大概是驱动没有加载,或者是没有编译出来。为了保险起见,重新配置,添加了很多驱动。回忆之前看鸟哥的文章,make all,这样最简单,看make help里指明,它将编译

* vmlinux      - Build the bare kernel
* modules      - Build all modules
* bzImage      - Compressed kernel image (arch/x86/boot/bzImage)

三项,花费时间还是比较长;然后make install,重启,还是没有加载上驱动,看说明,才知道,make install并不安装内核模拟,于是make modules_install;重启。本来做好了面对“花屏”,然而没有。果然,网络正常,无线自动连上,可以正常上网。

之前看鸟哥文章里讲的,要手工复制内核到/boot,还要手工编译initrd文件,再手工修改grub.conf,很是复杂。这次编译内核,完全是出乎意料,所有这些都没做,只是简单的执行了几个命令,所有这些都自动完成了。这大概也就是“易用”吧。不过还是有点问题,linux启动中,vmware的几个服务,还是启动失败,原因没有查,可能按现在的水平还很难找到原因。

一点经验,linux其实很容易,甚至比windows更容易,当然不是在像傻瓜操作的那些方面。

最后,希望看过这篇文章或没有看到这篇文章的朋友们,都能真正爱上linux,能随心所欲使用它提高工作生活学习效率,have fun!