Tag: Linux
使用rsync同步文件
by Elton on 九.04, 2009, under Linux
什么是 rsync?
rsync 应用程序是在 Linux® 和 UNIX® 上广泛使用的文件传输和同步程序,而且它已经移植到了 Windows® 上。它的关键特性是一个非常快的算法,它只通过数据链路发送文件差异,因此把机器之间传输的数据总量降低到最低限度。(如果使用 File Transfer Protocol [FTP] 或 rcp 和 scp 等实用程序,那么即使只修改了一个字节,也会发送完整的文件)。当然,rsync 并非只能处理现有的文件:它还可以处理只在链路一端存在的文件和目录。最后,通过压缩数据来优化通信,因此可以通过非宽带连接使用这个工具。
使用 rsync
我们使用 rsync 把本地文件直接同步到一个远程服务器。还可以把远程服务器同步到本地,或者同步两个本地目录,但是不能同步两个远程服务器。
效果相同但格式不同的两个rsync命令
1 2 3 4 5 6 7 8 9 10 | rsync --compress --recursive --delete --links --times --perms --owner --group --verbose --progress --stats --rsh="ssh" --exclude "*bak" --exclude "*~" /my/path/at/the/laptop/* myserver:/some/path/at/the/server rsync -zrltpogve "ssh" --progress --stats --delete --exclude "*bak" --exclude "*~" /my/path/at/the/laptop/* myserver:/some/path/at/the/server |
注意,上面命令中选项的次序是任意的,而且大多数选项有短格式。首先,–compress(或 -z)指定将压缩数据,这可以节省带宽。应该总是使用这个选项。(在非常高速的数据链路上,不进行压缩可能也可以,但是对于大多数远程连接,压缩都是有帮助的)。可以使用补充选项 –compress-level=level 指定压缩的级别;但是,通常可以接受标准的压缩级别。
–recursive (-r) 选项让 rsync 递归地复制所有目录。这会复制目录中的所有文件,包括其中的子目录及其内容。如果不需要这个功能,可以使用 –dirs 选项 (-d) 产生相反的效果:跳过子目录及其内容。
在默认情况下,rsync 把需要的文件复制到目标计算机,但是并不删除额外文件。通过使用 –delete 选项,目标目录会与原目录保持完全一致。但是要注意:如果把一个空目录同步到远程目录,就会删除远程目录中的所有内容!
如果原目录中有符号链接,–links 选项(或 -l)会在目标目录中重新创建这些符号链接。另一种方法是使用 –copy-links(或 -L)复制符号链接指向的文件或目录,而不是复制符号链接本身。如果有符号链接指向复制的树之外的文件或目录(这是一种安全风险),可以使用 –copy-unsafe-links。–safe-links 选项忽略这样的链接,这更安全。
后面四个选项(–times、–perms、–owner 和 –group 或 -tpog)分别让 rsync 保持原来的更新时间戳、权限、所有者和组信息。同时指定所有这些选项的简便方法是使用 –archive(或 -a),这还会设置 –recursive 和 –links 选项。
后面三个选项(–verbose、–progress 和 –stats)提供关于 rsync 正在执行的操作的大量信息。如果对这些信息不感兴趣,只需跳过它们,除非出现错误,rsync 会悄悄地运行。
尽管当前的 rsync 版本默认使用 ssh,但是可以使用 –rsh(或 -e)选项强制使用 ssh。如果需要使用额外的 ssh 参数(例如希望让 ssh 使用非标准端口),可以添加这些参数,例如 –rsh “ssh -p 12345″。
可以使用 –exclude 选项(和对应的 –include)选择要同步的文件。在这个示例中,排除了常见的备份文件。应该根据需要排除和包含文件,从而优化发送的内容。
最后,指定源路径和目标路径。不要忘记最后的 /*,否则结果可能不符合期望。可以通过查看文档了解 some/path、some/path/ 和 some/path/* 之间的差异。但是,使用 /* 是最保险的方法。
可以使用 -a 选项 (–archive) 简化清单 1 中的命令,见 清单 2。(如果作为根在服务器上运行 rsync,-a 选项可能会复制一些额外的内容 — 请查阅文档 — 这不是一种安全的做法)。rsync 还有许多选项;可以通过 rsync –help 和 man rsync 了解所有选项。
深入理解sudo
by Elton on 七.27, 2009, under Linux
以前没有太在意这方面的知识,现整理如下:
用root用户登录或用su – 切换到root用户,使用visudo命令,方法跟vi一样
赋予用户在所有主机上的所有权限
在最后一行加入
1 | your_user_name ALL=(ALL) ALL |
第一个ALL表示主机,后两个ALL表示权限
保存即可。
指定主机别名
为了方便设置一批主机,可以在文件中定义别名,如
1 | Host_Alias FILESERVERS = fs1, fs2 |
指定用户别名
用户同样可以设置别名,方便定义一组用户,如:
1 | User_Alias ADMINS = jsmith, mikem |
指定命令别名
为了方便给不同用户设置不同的权限,可以将相关命令打包成一个组,如:
1 | Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool |
授权用户指定主机指定权限
有了上面的知识积累,就可以给指定的用户授予指定的管理员权限,如:
1 | your_user_name server1 = NETWORKING |
授权某个用户组相应权限
如果想将一组用户都可以使用sudo,则使用%加在组名前面
1 | %your_group_name ALL=(ALL) ALL |
授权用户使用管理权限的时候不输入密码
如果想不必输入密码,则需要更改visudo中的相关行如下
1 | your_user_name ALL=(ALL) NOPASSWD: ALL |
设置过以上相关内容后,就可以使用sudo临时使用需要管理权限的命令,方法是
1 | sudo commands |
如果没有指定NOPASSWORD的话,是需要输入相关用户密码的。
可以使用sudo -l命令列出此用户的相关特殊权限
使用fail2ban增强Linux安全防护
by Elton on 七.26, 2009, under Linux
观察/var/log/messages你可能会经常发现有类似以下的访问记录
1 2 3 4 5 6 | Jul 26 04:16:22 prosight sshd[29679]: Invalid user benjamin from 123.140.230.12 Jul 26 04:16:23 prosight sshd[29681]: Invalid user daniel from 123.140.230.12 Jul 26 04:16:24 prosight sshd[29683]: Invalid user william from 123.140.230.12 Jul 26 04:16:24 prosight sshd[29685]: Invalid user anthony from 123.140.230.12 Jul 26 04:16:25 prosight sshd[29687]: Invalid user cameron from 123.140.230.12 Jul 26 04:16:25 prosight sshd[29689]: Invalid user james from 123.140.230.12 |
同一个用户在不断的尝试用各种用户来登录你的机器。 fail2ban可以很有效的阻止这种频繁的试图登录你的机器的尝试
安装fail2ban
对于gentoo来说很简单,只要emerge一下就可以了。 其他版本的Linux可以通过源码或者rpm包安装
1 | $ sudo emerge -av fail2ban |
设置fail2ban
/etc/fail2ban/fail2ban.conf 是fail2ban的全局基本配置,基本不用动
1 2 3 4 5 | $ cat /etc/fail2ban/fail2ban.conf loglevel = 3 logtarget = /var/log/fail2ban.log socket = /tmp/fail2ban.sock |
/etc/fail2ban/jail.conf 是fail2ban的规则配置文件,我们需要根据情况来编辑它
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [DEFAULT] ignoreip = 127.0.0.1 #可以忽略的ip,多个ip用空格隔开 #当在findtime时间内(秒)失败超过maxretry次数后,就被封bantime时间(秒) bantime = 3600 findtime = 600 maxretry = 3 backend = auto #如果你使用的是iptables就将这个规则设置为true [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] mail-whois[name=SSH, dest=yourmail@mail.com] logpath = /var/log/sshd.log #你ssh日志存放的地址 |
启动fail2ban
1 | $ sudo /etc/init.d/fail2ban start |
查看fail2ban状态
启动之后,只要符合filter所定义的正则式规则的日志项出现,就会执行相应的action。由于0.8源码树采用客户机/服务器的模式,因此可以很方便的查询fail2ban的执行情况。比方所,要查询刚才定义的“ssh-iptables”段的情况,只要执行
1 | fail2ban-client status ssh-iptables |
输出结果:
1 2 3 4 5 6 7 8 | Status for the jail: ssh-iptables |- filter | |- Currently failed: 0 | `- Total failed: 5 `- action |- Currently banned: 1 | `- IP list: 192.168.210.21 `- Total banned: 1 |
fail2ban-client也可以直接定义运行中的fail2ban参数
比如增加屏蔽时间为一天
1 | fail2ban-client set ssh-iptables bantime 86400 |
重新读入配置文件
1 | fail2ban-client reload |
其它还有很多用法,可以不带参数执行fail2ban-client查看更多选项。
因为fail2ban的框架,所以可以执行修改filter或者action来满足自己的特殊需要,比如我希望改变fail2ban默认的 iptables规则插入方式,那么我就可以到action.d目录下,找到希望修改的action,这里的例子是iptables.conf
默认actionstart的iptables规则有一条是
1 | iptables -I INPUT -p <protocol> --dport <port> -j fail2ban-<name> |
这样就把fail2ban的规则插到INPUT链的最前面,而我希望自己写的一条iptables -A INPUT -p ALL -s 1.2.3.4/32 -j ACCEPT一直作为第一条规则从而使自己的IP作为信任IP不受防火墙后面规则的限制。那么就要修改fail2ban的启动规则,把上面那条改为
1 | iptables -I INPUT 2 -p <protocol> --dport <port> -j fail2ban-<name> |
这样fail2ban就会把自己的规则作为INPUT链的第二条规则插入,而不影响第一条。
这里只是一个很简单的例子,你可以根据自己的规则,对action做更多的修改。
而在filter.d目录里就是一些日志的正则式匹配规则,系统自带了一些常见软件的匹配,如 sshd,apache,postfix,vsftpd,pure-ftpd等等。来看看sshd的规则,就能了解这些filter应该怎么写,你就可以用fail2ban来保护更多自己的服务。
sshd.conf的内容
1 2 3 4 5 6 7 8 | [Definition] failregex = Authentication failure for .* from <HOST> Failed [-/w]+ for .* from <HOST> ROOT LOGIN REFUSED .* FROM <HOST> [iI](?:llegal|nvalid) user .* from <HOST> ignoreregex = |
可以看到,每行一则正则式,对应各种错误认证,如果你的sshd版本错误认证日志项不太一样,可以修改这里的,或者加入更多。
Gentoo 网络配置
by Elton on 七.09, 2009, under Linux
1. 配置ip
/etc/conf.d/net
DHCP 动态获取
1 | config_eth0=( "dhcp" ) |
固定IP
1 2 3 4 | config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255" ) 或者 config_eth0=( "192.168.0.2/24 brd 192.168.0.255" ) routes_eth0=( "default via 192.168.0.1" ) |
2. DNS设置
/etc/resolv.conf
1 | nameserver 202.96.209.5 202.96.209.133 |
3. 重启网卡
1 | /etc/init.d/net.eth0 start | stop | restart |
4. 配置防火墙 iptables
# stop iptables services
/etc/init.d/iptables stop
# disable all chains
iptables -F
iptables -t nat -F
iptables -t mangle -F
# allow ssh
iptables -A INPUT -i eth0 -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp –dport 80 -j ACCEPT
# allow old connection and deny new connection
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -m state –state NEW,INVALID -j DROP
# allow all localhost
iptables -A INPUT -i lo -j ACCEPT
# define default policy
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
# save
/etc/init.d/iptables save
/etc/init.d/iptables restart
#加入自动启动任务,使iptables自动启动
rc-update add iptables default
如何删除一条规则?比如删除80端口,让外面无法访问。
iptables -D INPUT -i eth0 -p tcp –dport 80 -j ACCEPT
如何再添加?
iptables -I INPUT -i eth0 -p tcp –dport 80 -j ACCEPT
最后别忘记用
/etc/init.d/iptables save
/etc/init.d/iptables restart
这两个命令保存并重启
针对Intel Core i7优化安装Gentoo
by Elton on 七.08, 2009, under Linux
要让Core i7处理器在gentoo里工作得正常需要从3个方面来设置。下面我一一来说明。
1. CFlag
Core i7的信息
vendor_id : GenuineIntel
cpu family : 6
model : 26
model name : Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz
/etc/make.conf内容
1 2 3 | CHOST="x86_64-pc-linux-gnu" CFLAGS="-march=core2 -msse4 -mcx16 -msahf -O2 -pipe" CXXFLAGS="${CFLAGS}" |
2, Kernel Setup
1 2 3 4 5 6 7 8 | Processor type and features ---> Subarchitecture Type () ---> (X) PC-compatible Processor family () ---> (X) Pentium M [ ] Generic x86 support [*] Supported processor vendors ----> [*] Support Intel processors |
填写你的CPU核数
1 2 3 4 5 | Processor type and features ---> [*] Symmetric multi-processing support (8) Maximum number of CPUs (2-256) [ ] SMT (Hyperthreading) scheduler support [*] Multi-core scheduler support |
支持64位CPU
1 2 3 4 5 | Processor type and features ---> -- Machine check support [*] Intel MCE features Executable file formats / Emulations ---> [*] IA32 Emulation |
3. Hardware Sensors
增加硬件监控
1 2 3 4 | Device Drivers ---> Hardware Monitoring support ---> <m> Hardware Monitoring support <m> Intel Core (2) Duo/Solo temperature sensor |
Gentoo的编译参数
by Elton on 七.02, 2009, under Linux
Gentoo一个最大的好处就在于其文档相当的全面,今天在maillist上看到有人提到这篇Compilation Optimization Guide,读过之后对gentoo系统的认识又深入了一点,记几点心得。
1. CFLAGS 是为编译C语言编写的代码所设置的环境变量, CXXFLAGS 是为编译C++代码所设置的环境变量。
2. -march 参数告诉编译器为指定的cpu架构做优化,只有当没有合适的 -march 参数时,才会用到 -mcpu 和 -mtune,因为后二者都不是为指定的cpu优化的,更generic一些,其中 -mtune 比 -mcpu 更generic。
3. -O2 是推荐的参数, -O3 并不适合 GCC4.x。 -Os 算是 -O2 的加强版,但是只用于硬盘或者cpu cache非常小的情况。 -O 参数的最高级别就是3,原文甚至给出了gcc的源码来证明,即使设成 -O9 也没有效果。
4. -pipe 参数会加快编译速度。
5. -fomit-frame-pointer 会减小编译出来的代码,但是有一定的风险,会是调试程序变得困难,特别是调试java程序。
6. 其余参数都可以忽略不计,只要设置好上面的参数,就是最安全的。
如:
1 2 3 | CFLAGS="-march=core2 -O2 -pipe -fomit-frame-pointer" CHOST="i686-pc-linux-gnu" CXXFLAGS="${CFLAGS}" |
MySQL 编译参数优化
by Elton on 六.23, 2009, under Linux
适当的调整MySQL的编译参数,可以极大的提升MySQL的性能,官方文档说可以提升10-30%的性能。
1. -static 13%
–with-client-ldflags=-all-static
–with-mysqld-ldflags=-all-static
静态链接提高13%性能
2. -pgcc 1%
CFLAGS=”-O3 -mnocona -mstack-align-double” CXX=gcc
CXXFLAGS=”-O3 -mnocona -mstack-align-double
-felide-constructors -fno-exceptions -fno-rtti”
如果是Inter处理器,使用pgcc提高1%性能, 其中-m参数指定你cpu的类型,如果你是Intel Pentium4 支持64位的CPU就试用nocona这个参数,如果你是Intel Core2则使用core2这个参数。详细的cpu支持参数列表在这里
3. Unix Socket 7.5%
–with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock
使用unix套接字链接提高7.5%性能,所以在windows下mysql性能肯定不如unix下面
4. –enable-assembler
允许使用汇编模式(优化性能)
1 2 3 4 5 6 7 8 9 10 | CFLAGS="-O3 mnocona" CXX=gcc CXXFLAGS="-O3 mnocona -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer -ffixed-ebp" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=all |
通过U盘安装Gentoo minimal iso
by Elton on 六.22, 2009, under Linux
1. 下载install-amd64-minimal-20090618.iso
2. 利用UltraISO来刻录镜像
3. 插入U盘
4. 用UltralISO打开iso文件
5. 选择启动 -> 写入硬盘镜像
6. 格式化U盘,再点写入
7. 在BIOS中选择从USB启动
之后就可以用U盘启动系统,进行安装了。
CentOS环境中lighttpd+php+fastcgi+eAccelerator安装配置
by Elton on 六.21, 2009, under Linux, PHP
Lighttpd 作为新一代的web server,以小巧(不到1M的大小)、快速而著称,因为服务器上安装了rails、java,并以lighttpd为前端代理服务器,不想再部署apache了,所以直接使用lighttpd来部署,顺便看一下性能如何。
本文主要介绍在CentOS下,配置一套用lighttp作为web server的php环境
· 安装Lighttpd
从http://www.lighttpd.net/download/下载源码
安装前先检查pcre是否安装,需要pcre和pcre-devel两个包。 用yum search pcre*检查,如果都是installed就是都安装了。否则安装缺少的包。
1 2 3 4 5 | yum install pcre-devel tar xzvf lighttpd-1.4.23.tar.gz cd lighttpd-1.4.23 ./configure --prefix=/usr/local/lighttpd |
configure完毕以后,会给出一个激活的模块和没有激活模块的清单,可以检查一下,是否自己需要的模块都已经激活,在enable的模块中一定要有“mod_rewrite”这一项,否则重新检查pcre是否安装。然后编译安装:
1 | make && make install |
编译后配置:
1 2 3 | cp doc/sysconfig.lighttpd /etc/sysconfig/lighttpd mkdir /etc/lighttpd cp doc/lighttpd.conf /etc/lighttpd/lighttpd.conf |
如果你的Linux是RedHat/CentOS,那么:
1 | cp doc/rc.lighttpd.redhat /etc/init.d/lighttpd |
如果你的Linux是SuSE,那么:
1 | cp doc/rc.lighttpd /etc/init.d/lighttpd |
其他Linux发行版本可以自行参考该文件内容进行修改。然后修改/etc/init.d/lighttpd,把
1 | lighttpd="/usr/sbin/lighttpd" |
改为
1 | lighttpd="/usr/local/lighttpd/sbin/lighttpd" |
此脚本用来控制lighttpd的启动关闭和重起:
1 2 3 | /etc/init.d/lighttpd start /etc/init.d/lighttpd stop /etc/init.d/lighttpd restart |
如果你希望服务器启动的时候就启动lighttpd,那么:
1 | chkconfig lighttpd on |
这样lighttpd就安装好了,接下来需要配置lighttpd。
配置Lighttpd
修改/etc/lighttpd/lighttpd.conf
1)server.modules
取消需要用到模块的注释,mod_rewrite,mod_access,mod_fastcgi,mod_simple_vhost,mod_cgi,mod_compress,mod_accesslog是一般需要用到的。
2)server.document-root, server.error-log,accesslog.filename需要指定相应的目录
3)用什么权限来运行lighttpd
server.username = “nobody”
server.groupname = “nobody”
从安全角度来说,不建议用root权限运行web server,可以自行指定普通用户权限。
4)静态文件压缩
compress.cache-dir = “/tmp/lighttpd/cache/compress”
compress.filetype = (“text/plain”, “text/html”,”text/javascript”,”text/css”)
可以指定某些静态资源类型使用压缩方式传输,节省带宽,对于大量AJAX应用来说,可以极大提高页面加载速度。
5)配置ruby on rails
最简单的配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $HTTP["host"] == "www.xxx.com" { server.document-root = "/yourrails/public" server.error-handler-404 = "/dispatch.fcgi" fastcgi.server = (".fcgi" => ("localhost" => ("min-procs" => 10, "max-procs" => 10, "socket" => "/tmp/lighttpd/socket/rails.socket", "bin-path" => "/yourrails/public/dispatch.fcgi", "bin-environment" => ("RAILS_ENV" => "production") ) ) ) } |
即由lighttpd启动10个FCGI进程,lighttpd和FCGI之间使用本机Unix Socket通信。
如果想指定www.abc.com以及所有二级域名,则需要把第一行改为
$HTTP[”host”] =~ “(^|.)abc.com” {
…
}
如果要设置代理,比如lighttpd和tomcat整合,tomcat放在lighttpd后面,则需要通过代理访问tomcat
$HTTP["host"] =~ “www.domain.cn” {
proxy.server = ( “” => ( “localhost” => ( “host”=> “127.0.0.1″, “port”=> 8080 ) ) )
}
则www.domain.cn为主机的网址都交给tomcat处理,tomcat的端口号为8080. 在tomcat的虚拟主机中,需要捕获www.domain.cn这个主机名,设置这个虚拟主机。这里的host都是跟tomcat里面的虚拟主机对应的。
· 安装支持fastcgi的PHP
安装PHP所需的相关类库
curl
1 2 3 4 5 6 7 | wget http://curl.cs.pu.edu.tw/download/curl-7.19.5.tar.bz2 tar xvjf curl-7.19.5.tar.bz2 cd curl-7.19.5 ./configure --prefix=/usr/local/curl make make install |
gettext
1 2 3 4 5 6 | wget ftp://ftp.ntu.edu.tw/pub/gnu/gnu/gettext/gettext-0.17.tar.gz tar xvzf gettext-0.17.tar.gz cd gettext-0.17 ./configure --prefix=/usr/local/gettext make make install |
zlib
1 2 3 4 5 | wget http://kent.dl.sourceforge.net/sourceforge/libpng/zlib-1.2.3.tar.gz tar xvzf zlib-1.2.3.tar.gz cd zlib-1.2.3 ./configure --prefix=/usr/local/zlib make && make install |
libpng
1 2 3 4 5 | wget http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/l/li/libpng/libpng-1.2.9.tar.gz tar xvzf libpng-1.2.9.tar.gz cd libpng-1.2.9 ./configure --prefix=/usr/local/libpng make && make install |
jpeg
1 2 3 4 5 6 7 8 9 10 11 12 13 | wget http://www.ijg.org/files/jpegsrc.v6b.tar.gz tar xvzf jpegsrc.v6b.tar.gz cd jpeg-6b/ ./configure --prefix=/usr/local/jpeg6 make mkdir /usr/local/jpeg6/bin mkdir -p /usr/local/jpeg6/bin mkdir -p /usr/local/jpeg6/man/man1 mkdir -p /usr/local/jpeg6/lib mkdir -p /usr/local/jpeg6/include make install-lib make install |
freetype
1 2 3 4 5 6 | wget http://download.savannah.gnu.org/releases/freetype/freetype-2.3.9.tar.gz tar xvzf freetype-2.3.9.tar.gz cd freetype-2.3.9 ./configure --prefix=/usr/local/freetype2 make make install |
gd
1 2 3 4 5 6 7 | wget http://www.libgd.org/releases/gd-2.0.35.tar.gz tar xvzf gd-2.0.35.tar.gz cd gd-2.0.35 ./configure --prefix=/usr/local/gd2 --with-zlib=/usr/local/zlib/ --with-png=/usr/local/libpng/ --with-jpeg=/usr/local/jpeg6/ --with-freetype=/usr/local/freetype2/ make 如果第一次make出错,试着再make一次,我就是这样,第二次就对了。 make install |
PHP
1 2 3 4 5 6 7 8 | tar xvzf php-5.2.10.tar.gz cd php-5.2.10 ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-jpeg-dir=/usr/local/jpeg6/ --with-png-dir=/usr/local/libpng/ --with-gd=/usr/local/gd2/ --with-freetype-dir=/usr/local/freetype2/ --with-zlib-dir=/usr/local/zlib --with-curl=/usr/local/curl --with-gettext=/usr/local/gettext --enable-fastcgi --enable-zend-multibyte --with-config-file-path=/etc --enable-discard-path --enable-force-cgi-redirect make make install cp php.ini-dist /etc/php.ini 可以使用php -m查看你安装的模块 |
eAccelerator
eAccelerator是一个开源的PHP加速器
1 2 3 4 5 6 7 8 | wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2 tar xjvf eaccelerator-0.9.5.3.tar.bz2 cd eaccelerator-0.9.5.3 export PHP_PREFIX="/usr/local/php" $PHP_PREFIX/bin/phpize ./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config make make install |
执行好后,会提示安装到的路径,下面会用到,如我的被安装到这里
/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613
编辑php.ini中的内容
vim /etc/php.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | cgi.fix_pathinfo = 1 zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so" eaccelerator.shm_size="16" eaccelerator.cache_dir="/tmp/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9" |
如果一切顺利,你可以通过下面命令来验证是否安装成功
1 2 3 4 5 | $ php -v PHP 5.2.10 (cli) (built: Jun 20 2009 23:32:09) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by eAccelerator |
修改/etc/lighttpd/lighttpd.conf文件,添加下面的配置
vim /etc/lighttpd/lighttpd.conf
1 2 3 4 5 6 7 8 | fastcgi.server = ( ".php" => ( "localhost" => ( "socket" => "/tmp/php-fastcgi.socket", "bin-path" => "/usr/local/php/bin/php-cgi" ) ) ) |
重启lighttpd
1 | /etc/init.d/lighttpd restart |
写一个php测试文件在lighttpd的网站目录里,测试php是否安装成功
MySQL 5.1.35 安装Innodb报unknown variable innodb_data_home_dir错误
by Elton on 六.18, 2009, under Linux
今天在一台服务器上安装最新的Mysql 5.1.35,通过源代码安装。
编译安装都很顺利,到执行
1 | bin/mysql_install_db --user=mysql |
就报了usr/local/mysql/libexec/mysqld: unknown variable ‘innodb_data_home_dir=/usr/local/mysql/var/’错误。
之前从来没有过,百思不得其解,Google了一下,发现原来是最新的MySQL默认不带innodb引擎。 于是重新编译,在configrue的时候,加上–with-plugins=innobase这个参数
之后可以进入数据库,执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | mysql>show plugin; +————+——–+—————-+————–+———+ | Name | Status | Type | Library | License | +————+——–+—————-+————–+———+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | | CSV | ACTIVE | STORAGE ENGINE | NULL | GPL | | MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL | | MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | SPHINX | ACTIVE | STORAGE ENGINE | NULL | GPL | | PBXT | ACTIVE | STORAGE ENGINE | libpbxt.so | GPL | | InnoDB | ACTIVE | STORAGE ENGINE | ha_innodb.so | GPL | +————+——–+—————-+————–+———+ |
如果还没有,就执行一下
1 | mysql>install plugin innodb soname 'ha_innodb.so'; |


