存档

‘freebsd’ 类别的存档

openwrt 修改/tmp分区大小

openwrt默认分配1/2 RAM给/tmp分区,可以通过修改:/lib/preinit/xx_essential_fs 文件(其只XX为启动优先级,默认为10,有可能会变),在这个文件内找到pi_size=$(awk ‘/MemTotal:/ {l=5242880;mt=($2*1024);print((s=mt/2)<l)&&(mt>l)?mt-l:s}’ /proc/meminfo),直接改成:pi_size=xxxxxx 即可(单位为字节)。

$(awk ‘/MemTotal:/ {l=5242880;mt=($2*1024);print((s=mt/2)<l)&&(mt>l)?mt-l:s}’ /proc/meminfo)

FreeBSD 下运行PHP 高负载下临时文件的加速

最近有一台服务器经常发生500错误,紧急将部分服务转移走后对服务器进行了一段时间的观察,发现服务器对硬盘的IO操作非常频繁,这台服务器也是虚拟机结构,同一个物理服务器下有多台FreeBSD的WEB在运行,本身IO就非常慢,如果IO再如此频繁的话势必造成整台服务器性能低下。

通过分析确认要的IO存取都是由PHP的Session文件造成的,而FreeBSD的/var/tmp并非RAM盘,因此性能低下。最终把/var/tmp改成RAM盘后性能明显提升,操作如下,这里开启了一个256M的RAM盘。(以下代码可以直接放至/etc/rc.local中)。另外听同事说CentOS的/var目录本身就是RAM盘,所以使用CentOS不需要这样做,看来freeBSD真的太保守了。

/sbin/mdconfig -a -t swap -s 256M -u 1
/sbin/newfs -U -i 512 -b 4096 md1
/sbin/mount /dev/md1 /mnt/md1
/bin/mkdir /mnt/md1/tmp
#/bin/ln -s -f /mnt/md1/tmp /var/tmp
/bin/mkdir /mnt/md1/fastcgi_temp
#/bin/ln -s -f /mnt/md1/fastcgi_temp /usr/local/nginx/fastcgi_temp

/sbin/mdconfig -a -t swap -s 256M -u 1

/sbin/newfs -U -i 512 -b 4096 md1

/sbin/mount /dev/md1 /mnt/md1

/bin/mkdir /mnt/md1/tmp

#/bin/ln -s -f /mnt/md1/tmp /var/tmp  (只需要执行一次)

Freebsd 自带VI在远程编辑时方向键乱码问题

虽然Freebsd带了一个ee编辑器,但是使用不是很习惯,经常还是会输入vi来编辑,但是当使用putty登录进入插入状态时方一按方向键就会插入ABCD这样的乱码。解决办法如下:
1、编辑~/.vimrc文件
vi ~/.vimrc
2、增加一行:
set nocompatible

pfSense 灾难恢复

不知道是我安装的这个版本问题,还是pfSense 1.2版的Traffic Shaper确实没有做好。在进行Traffic Shaper设置的时候不只一次的报告配置文件错误,严重的是在配置文件已经被Traffic Shaper程序破坏的情况下修改NAT或防火墙规则时就会造成规则失效。如果这台防火墙位于IDC,而远程控制的规则失效,问题是非常可怕的。

最近我管理的一台pfSense就遇到这种情况,因为我对Traffic Shaper不太熟悉,委托香港同事帮忙设置,结果Traffic Shaper抽风,造成很多NAT规则与虚拟IP都无效了。头痛的是恢复到上一次的配置也无法解决,而且重启pfSense后竟然Web及SSH都无法连接。解决办法如下:

1、使用远程KVM访问控制台,将pfSense恢复到默认设置

2、重启后Lan被恢复到192.168.0.1,因此首先设置Lan的IP,另外Wlan的IP被设置为DHCP,这时先不要管它,从控制台进入Shell后手动修改IP:
1) ipconfig em1 WANIP netmask 255.255.255.x    ( WLANIP是IDC分配的IP地址。)
2) route add default GETWAYIP   (GETWAYIP 是IDC的网关地址)
3) 在/etc/resolv.conf 增加DNS服务器:nameserver x.x.x.x
3、将之前备份的配置文件放在一台可以访问的服务器上,名为config.xml,如果之前没有备份配置文件的话,可以先在Vmware里建立一个pfSense,主要配置一下WLAN的IP,并建立一条允许访问WLAN的WebGUIPort的规则。然后将配置文件导出即可。需要注意的是如果Vmware里的网卡型号与真机上的不一样,需要修改一下config.xml内 interfaces->lan->if里的网卡名称。
4、在pfSense主机上将配置文件下载下来:
1)fetch -o /conf/config.xml  http://url/config.xml
2)fetch -o /cf/conf/config.xml  http://url/config.xml
5、重启防火墙,使用Web登录调整即可。

总结:pfSense故障后,如果恢复到缺省设置的话,外网无法通过Web访问,如果将pfSense使用在企业内部的话是没问题的,但如果pfSense位于远程或IDC的话,就会造成一但重设后,管理员就会被自己的防火墙拒之门外,因此只能通过FreeBSD命令来配置WANIP及相关规则来打开管理员大门。

编译VMware下最快的FreeBSD

原创内容,如需转载,请联系作者:easy@mpnew.com
服务器的性能越来越强大,硬件成本也越来越低,相对的空间、电力、环境的成本则越来越高,因此服务器虚拟化越来越多的得到的企业的重视,它不仅可以降低企业投资成本,而且虚拟化的服务器环境也让硬件升级、服务器迁移等变得更加简单而快速。

在初次使用的时候,您肯定会担心虚拟化本身也会浪费硬件资源,当然,这是肯定的,我没有很准确的数据,但据说在Vmware下每一个Vmware会损失1%~5%的性能,但这并不会阻止人们去使用虚拟化,因为CPU已经不是很严重的问题,不信你现在查看一下你所管理的所有服务器,能找到几台CPU占用超过50%的呢?

当然,我们对这种性能的损失也不能视而不见,特别是对于FreeBSD或Linux这类开源操作系统,在虚拟机下重新编译内核是非常有必要的。通过编译并简单调整的FreeBSD系统在Vmware下不仅可以使启动速度提高1到2倍,内核的内存占用也可以大幅降低。

FreeBSD的编译其实相当相当简单,你可以首先参考这里:http://www.freebsd.org/doc/zh_CN/books/handbook/kernelconfig-building.html,我最初也是根据这里的介绍完成第一次的编译工作。

一、准备:

1:运行 sysinstall, 选择 Configure, 然后是 Distributions、src, 选中其中的base 和sys。
2:下载:FB4VM_by_easy ,将其保存至:/usr/src/sys/i386/conf
3:进入/usr/src目录,然后执行:
make buildkernel KERNCONF=FB4VM_by_easy
make installkernel KERNCONF=FB4VM_by_easy
4:编辑/boot/loader.conf ,在里面加上:kern.hz=100
5:执行完成后就可以重启计算机,这个时候系统应当能够正常启动,并且启动速度也较之前快很多。
6:清理无用文件,在确定系统无问题后就可以删除以下文件:
/usr/src 下所有文件
/usr/obj 下所有文件
/boot/kernel.old 下所有文件。

通过以上简单几步就可以让Vmware下的FreeBSD变得非常节省资源,如果你还有其它运行在Vmware下的同版本的FreeBSD主机的话,并不需要每一台都重新编译,只需要将刚才这台主机上 /boot/kernel 目录下所有文件打包,替换掉其它主机上的对应文件即可。

在FreeBSD上安装Nginx+PHP

原创内容,如需转载,请联系作者:easy@mpnew.com
由PfSense防火墙开始接触FreeBSD,感觉FreeBSD不仅功能强大,而且非常易用。特别是因为公司的需要,现在的业务都运行在虚拟机上,FreeBSD的轻巧也让我感到更加适合运用在Web环境中,特别是自己重新编译内核后整个系统启动超快,安装后不到200M的硬盘占用,内存占用也不到30M左右。

以下是以FreeBSD 7.0 环境为例:
注:建议安装FreeBSD是使用最小化安装,有时间我会介绍一下在Vmware环境下的最小化编译。
一、安装nginx
1:首先使用Sysinstall 安装PCRE Library
2:configure   &&make &&make install
Nginx安装依赖PCRE,其它都非常简单,最初我安装的时候都是自己编译相关依赖的库,最后发现FreeBSD安装盘带的版本也不低,而且相关库对性能也没什么影响,使用安装盘安装可以省下不少时间。另外在configure还有很多参数,但即使你不带任何参数,编译出一个稳定的nginx是没问题的。如果你需要SSL记得 ./configure –with-http_ssl_module。
Nginx相关可参考:www.nginx.net

二、安装PHP
1、使用Sysinstall安装以下组件:
1):curl
2):libiconv
3):png/jpeg  (如果需要GD库支持png或jpeg的话)
4):libxml2
5):autoconf (如果不需要安装任何扩展可以不安装)
6:perl (如果不需要安装任何扩展可以不安装/安装autoconf时自动安装)
7:mysql-client (如果不需要mysql 扩展可以不安装)
2、下载libmcrypt编译安装,我现在用的是libmcrypt-2.5.8 这个版本。
3、配置PHP、编译、安装,推荐的配置:
./configure –enable-force-cgi-redirect –with-mcrypt –enable-inline-optimization –with-curl –enable-fastcgi –with-zlib  –with-gd

4、安装需要的扩展:
1)Mysql:如果需要Mysql扩展的话进入源码目录的ext/mysql,首先要执行:/usr/local/bin/phpize ,执行完成后就可以按通常的方法 :./configure && make && make install

2)GD:如果需要GD库,同样的进入ext/gd,执行:/usr/local/bin/phpize,然后:./configure && make && make install
3)安装Xcache加速扩展,Xcache可以从:http://xcache.lighttpd.net/ 下载。下载解压,安装方法与上面的扩展一样。

5、FastCGI启动代理:由于Nginx不能直接支持PHP,因此你需要自己管理FastCGI,一般常用的有两种办法管理,一种是使用Lighttpd里的spawn-fcgi,还有一种是使用PHP的fpm补丁,理论上使用fpm补丁后功能更加强大一些,不过我使用spawn-fcgi比较习惯。spawn-fcgi可以自己下载lighttpd编译后提取,不过你可以以直接下载我编译好的文件。

三、配置及脚本
现在Nginx与PHP都已经安装好了,但要想正常使用还需要做一些配置才行。

Nginx的启动文件在:/usr/local/nginx/sbin下,配置文件一般建议放在/usr/local/nginx/conf下,自己通过命令管理nginx是比较麻烦的事,在这里我已经准备了一些脚本,你可以拿过去直接使用:
1、下载:nginx.conf到/usr/local/nginx/conf 下面。
2、下载:fcgi.conf到/usr/local/nginx/conf下面。
3、下载:php.ini到/usr/local/nginx/conf下面。
4、下载:spawn-fcgi到/usr/local/nginx/sbin下面。
5、下载:fcgi.sh到/usr/local/nginx/sbin下面。
6、下载:nginx.sh到/usr/local/nginx/sbin下面。

好了,记得把spawn-fcgi、fcgi.sh、nginx.sh的权限改为651,这个时候你可以执行:
1、/usr/local/nginx/sbin/fcgi.sh start
2、/usr/local/nginx/sbin/nginx.sh start
执行完成后就可以使用http://server 来访问服务器了,网站存放在:/usr/local/www目录下,可以先放一个phpinfo页面查看效果,另外很多细节的配置分别是nginx.conf、fcgi.sh、nginx.sh几个文件里,建议在服务器能够正常运行后再做调整。
目前了解nginx最好的网站就是:www.nginx.net ,如果有不了解的地方可以直接访问:http://wiki.codemongers.com/Main 。