星期一, 十月 29, 2012

安装MathType 5.2c到Office 2007


安装MathType 5.2c到Office 2007时安装程序会提示不支持的Office版本,让升级到新版本,安装完成后打开Word不出现MathType工具栏。事实上,可能通过手动安装实现MathType 5.2在Word 2007中运行。
Word安装是:找到MathType的Word支持文件MathType Commands 5 For Word.dot和MathPage.wll,手动放入Word启动加载文件夹中即可。两个文件所在路径分别是(根据安装路径调整)
C:\Program Files\MathType\Office Support\MathType Commands 5 For Word.dot
C:\Program Files\MathType\MathPage\MathPage.wll
找到后,复制并粘贴到(给所有用户安装)
C:\Program Files\Microsoft Office\Office12\STARTUP
如果是给单个用户安装,那么目标路径为
#Windows Vista & 7
C:\Users\[用户名]\AppData\Roaming\Microsoft\Word\STARTUP
#Windows XP
C:\Documents and Settings\[User Account Name]\Application
Data\Microsoft\Word\Startup
注意两个路径根据需要任选其一即可。
PowerPoint安装过程:打开PowerPoint 2007,单击左上角的Office图标打开菜单,在菜单最下面找到并打开PowerPoint选项对话框,对话框左侧选择加载项,在右侧下方找到管理,下拉列表中选择PowerPoint加载项,点旁边的转到按钮,在弹出的对话框中点添加按钮,找到并添加下面的文件即可(根据MathType安装路径调整)
C:\Program Files\MathType\Office Support\MathType AddIn (PowerPoint 2003).ppa
安装完成后如果菜单栏没有加载项的话,重启PowerPoint应该就可以了。

关闭Windows 7自动跃点功能实现指定多条默认路由选路顺序


在Win7下搭了个隧道,手动添加路由并设置了一个比较低的跃点数,开始使用的时候发现流量走隧道,但是过一会自动变成本地网卡。同样的设置在XP中从来没出现过。查资料后发现确实为Windows 7的(新)特性。
1. Windows 7下路由跃点值由两部分之和构成(设备跃点数和路由本身跃点数),所以当你用
netsh int ip add route 0.0.0.0/0 "Internet" 10.0.0.1 metric=10 public=yes store=active
这样的命令(或者route)添加路由时,再用route print看到的路由metric值并不是自己在命令中指定的值(比如上面的命令增加的路由metric可能为20)。这就是因为Win7给你指定的metric值上增加了设备本身metric。
2. 设备本身metric默认为自动生成,与此设备连接速度和带宽有关,而且使用过程中可能发生变化。这应该就是隧道时灵时不灵的原因了吧。
修改很简单,依次打开控制面板,网络和Internet,网络和共享中心,左侧找到更改适配器设置,找到本地网卡,右键点之,属性,选择IPv4,点属性,弹出对话框中点高级按钮,将自动跃点项前的对勾去掉,填入一个合适的值(如1000)。再用同样的方法修改隧道对应的适配器的跃点值(如100)。回来连接隧道上网,再不出现上网过程中路由自动改变的问题了。
这个方法同样适用于多网卡情况,有时需要用到多个网卡同时接入,但各有不同用途,就需要手动设置跃点(metric)值,可以参考官方论坛的文章。最后抱怨一下Win7这个功能,可能带来很大的问题,有时用户本来指望使用加密的VPN连接保护通信,结果因为其连接速度不如原生的本地网卡,在使用过程中由于Win7自动跃点,不知不觉所有流量改为通过本地网卡路由,结果数据在用户不知情的情况下变为明文传输。

星期二, 十月 23, 2012

证书和CA两则


再记录两则关于证书和CA的问题。
1. nginx中配置证书路径。自签名证书有个问题就是根证书本来没有在客户端中存储,所以需要在http服务器中配置证书路径(certificate chain)一次将证书和根证书发送给客户端。在Apache服务器中有专门的CA证书配置语法,但nginx则需要一个证书本身包含路径中的所有证书,生成命令为
cat servercert.pem > chaincert.pem
cat rootcert.pem >> chaincert.pem
#如果有intermediate certificate,则包含在rootcert之前,如下
cat servercert.pem > chaincert.pem
cat intercert.pem >> chaincert.pem
cat rootcert.pem >> chaincert.pem
2. windows xp和server 2003不支持证书散列算法sha-2(包含sha-256、sha-512等),所以,为了最大的兼容性,尽量服务器证书和根证书签名散列算法都sha1,否则查看证书时会提示invalid signature.

删除IE证书中其他人类别的证书


误导入一个证书到IE的其他人类别中,打开Internet选项发现竟然不能删除,就其他类别下的证书不能删除,不知道微软怎么想的。通过一翻折腾,终于找到方法。
首先用Win+R键打开运行对话框,输入mmc打开管理控制台,在菜单栏中选择文件->添加删除管理单元,打开对话框左侧找到证书,点添加按钮,弹出对话框中选择我的用户账户,点完成,确定回到程序主界面。
现在在左侧的证书中找到其他人的类别,找到要删除的证书,在右键菜单中即可删除。删除完成关闭程序时提示是否保存,可以选择不保存,不会影响操作结果。

使用openssl制作自签名的CA并签名自己的网站


Https可以很大程序上提高网站安全性,防止网站和用户通信被第三方获得。但是要使用https就必需要有证书,证书由可信CA(Certificate Authority)颁发,但是这种证书价钱非常高,一般每年收费100美元以上,而且,对于某些针对性很强的网站(比如机构内部网站),并不需要全局可信的证书,所以很多情况下,可以用自签名的证书代替。制作自签名的证书可以用Windows Server版自带的CA工具,更多的情况下,用的是openssl证书工具。使用openssl签名证书相关的工作主要有CA生成、证书请求生成和证书签名。使用工具主要是openssl自带的CA.pl工具,路径为/usr/lib/ssl/misc/CA.pl.
1. CA生成。自签名证书可以直接制作,但是首先制作一个自签名CA,然后再给网站签署证书,更便于管理,而且安全性也更有保证。使用命令
/usr/lib/ssl/misc/CA.pl -newca
可以生成一个自签名的CA. 首先要输入私钥保护密码(必须),然后是其他信息,主要需要用户输入的信息为:
  • Country Name - 国家名(美国US,中国CN)
  • State or Province Name - 行政省或州名 (Hubei, California)
  • Locality Name - 城市名(Wuhan, Los Angeles)
  • Organization - 公司名(My Company)
  • Organizational Unit Name - 公司中的部门名称(Network Security Department)
  • Common Name - 通用名(注意:这是最重要的部分,它是区分你跟其他CA的标记名,如果你在做一个自签名网站的话,这里应该输入网址。对于CA,输入XXX CA, My CA类似的名字)
  • Email Address - 管理员信箱不解释
下面除询问私钥密码时必须输入外(共三次密码输入中的第二次),其它问题应该都可以忽略。使用默认的配置生成的CA有效期有3年,修改可以在CA.pl中查找CADAYS设置。默认的签名证书有效期只有1年,在CA.pl中DAYS变量设置。
默认情况下证书加密使用的是1024bit,建议修改为2048bit以上,在/etc/ssl/openssl.cnf中
default_bits            = 1024
默认hash算法是sha1,如果需要可以选择更强的sha256或者sha512. 不建议使用md5. 也在此配置文件中修改。
2. 生成证书请求,不管是用自签名还是让可信CA签名,都需要首先生成证书请求。使用命令
/usr/lib/ssl/misc/CA.pl -newreq
输入信息方式同生成CA时。生成newreq.pem提交到自签名CA或者可信CA进行签名。不过为了后面安装设置方便,需要把当前私钥的保护密码删除(除非你想在每次apache启动时手动输入密码),命令为
openssl rsa -in newkey.pem -out newkey.nopass.pem
证书签名完成以后配置apache时,密钥文件使用应该使用newkey.nopass.pem,不要用newkey.pem.
3. 用自签名CA给签署证书请求,确保当前目录下存在demoCA和newreq.pem文件,命令为
/usr/lib/ssl/misc/CA.pl -sign
签名完成的证书在newcert.pem文件中。配置apache使用cacert.pem(demoCA文件夹内)、newcert.pem和newkey.nopass.pem三个文件即可实现https访问。
当然也可以直接在第一步的Common Name中输入网站名称,生成自签名证书,但是这样会有两个问题:一是管理不方便,机构内有几个网站,就需要用户导入几次证书,而使用CA的方式用户只需导入CA证书即可;二是密钥和证书在同一服务器上,如果安全出现问题比较麻烦,相比之下CA方式只要CA私钥安全吊销证书即可。

星期四, 十月 18, 2012

解决SMP平台程序GUI卡死问题,VirtualBox完美运行Mac OS X


VirtualBox提供Mac OS X比较完美的支持,选择单核时Lion安装上直接就能完美运行,速度相对来说还是比较快的。但是Mountain Lion在单核平台下却不能安装,安装进行到还剩4分钟时死机,双核安装没有问题。但是双核平台下不管是Lion还是Mountain Lion运行都不正常,程序GUI经常卡死,屏幕刷新不完全等错误,但是系统本身没有死机,强行退出程序后还能继续运行。原本以为是MAC的SMP调度算法和VirtualBox不兼容,但是根据这个帖子的说法,应该是很多Intel多核平台都存在的问题,而安装VoodooTSCSync这个插件可以解决此问题。
VoodooTSCSync可以在其官方主页下载,Multibeast没有提供(希望以后版本能集成),安装可以使用KextDrop(下载连接)。安装完后修改VoodooTSCSync的Info.php,找到IOCPUNumber字段,根据给虚拟机分配的核心数修改,双核如下:
<key>IOCPUNumber</key>
<integer>2</integer>
进入系统后可以用kextstat查看已经加载的kext列表,使用kextload -v [name.kext]可以手动加载内核模块,使用kextcache -system-prelinked-kernel和kextcache -system-caches可以重新生成kext cache,使用system_profiler|grep -i core可以看到核心数,Lion在/var/log/kernel.log中搜索tsc可以看到VoodooTSCSync模块加载输出的字符串,Mountain Lion在/var/log/system.log中
补充一点: 装了VoodooTSCSync后虽然卡死情况少了,但是并没有完全消失,所以对比下来还是单核平台下运行原生Lion稳定性最好。而且VoodooTSCSync好像只有当机器类型是Mac Pro的情况下才管用,机器类型在/Extra/smbios.plist内设置,相关内容如下
<key>SMfamily</key>
<string>Mac Pro</string>
<key>SMproductname</key>
<string>MacPro3,1</string>>

星期三, 十月 17, 2012

设置Xen网络让虚拟机通过NAT上网


在Debian6下安装Xen4,基本过程很顺利(参考相关debian文档xen文档),但是安装完成后设置nat网络让虚拟客户端上网费了不少神。据debian和xen的文档介绍,debian安装的xen虽然自带network-script用来设置各种类型的网络,但是这些脚本工作不是很好,所以建议用户采用debian的brctl工具手动设置bridge功能和nat,在此基础上设置虚拟机网络参数。
1. 设置主机bridge网络,将来虚拟机的网卡都连接到此网卡上(相当于插在一个交换机上)
#/etc/network/interfaces
#modify
auto lo xenbr0
#add
iface xenbr0 inet static
        bridge_ports none
        address 10.0.120.1
        broadcast 10.0.120.255
        netmask 255.255.255.0
配置文件中,auto lo xenbr0表示系统启动后设置的bridge网卡xenbr0自动启动,而不需要手动运行ifconfig xenbr0 up这样的命令。bridge_ports指定添加进bridge的系统现有的网卡(假如虚拟机有独立ip的话后面就不需要设置nat,这里添加本机网络端口,如:eth0)。其它参数根据需要设置。
2. 找到/etc/xen/xend-config.sxp,添加下面一句,可以实现虚拟机启动时网卡自动加入bridge网络
#/etc/xen/xend-config.sxp
(vif-script vif-bridge)
3. 添加iptables规则实现nat,网络地址和网络外部端口根据实际情况设定
#/etc/network/if-pre-up.d/xennat
#!/bin/sh
iptables -t nat -A POSTROUTING -s 10.0.120.0/24 -o eth0 -j MASQUERADE
iptables -I FORWARD -s 10.0.120.0/24 -j ACCEPT
iptables -I FORWARD -d 10.0.120.0/24 -j ACCEPT
同时打开内核forwarding,编辑/etc/sysctl.conf文件,加入或修改
net.ipv4.ip_forward=1
4. 为了简化虚拟机创建,可以把网络默认参数添加进xen-tools配置文件,修改/etc/xen-tools/xen-tools.conf
#/etc/xen-tools/xen-tools.conf
gateway    = 10.0.120.1
netmask    = 255.255.255.0
broadcast  = 10.0.120.255
nameserver=8.8.8.8
bridge = xenbr0
passwd = 1
arch=i386
vcpus=1
5. 虚拟机示例
debian虚拟机创建,使用xen-create-image命令
#debian domu
xen-create-image --hostname deb1 --ip 10.0.120.101 --pygrub
windows虚拟机类型为hvm(硬件虚拟机,需要cpu支持vt-x),需要手动创建配置文件
#windows hvm
#/etc/xen/xp1.cfg
kernel = '/usr/lib/xen-4.0/boot/hvmloader'
builder='hvm'
memory = 256
vcpus=1
name = "xp1"
#vif = ['bridge=xenbr0']
vif = [ 'ip=10.0.120.102,mac=00:16:3E:85:4A:60,bridge=xenbr0' ]
disk = ['file:/home/xen/domains/xp1/hd.img,hda,w','file:/home/xen/domains/xp1/xp.iso,hdc:cdrom,r']
acpi = 1
apic=1
device_model = '/usr/lib64/xen-4.0/bin/qemu-dm'  #lib for 32bit, lib64 for 64bit
boot="c"
sdl=0
serial='pty'
vnc=1
vnclisten=""
vncpasswd=""
usbdevice='tablet'    #needed, else mouse won't work right
需要注意的是Windows虚拟机必须使用USB鼠标(usbdevice='tablet'),否则鼠标光标工作不正常。配置文件指定的硬盘镜像hd.img使用命令dd生成
# 8G硬盘镜像
dd if=/dev/zero of=/home/xen/xp1/hd.img bs=1M seek=8192 count=0
启动虚拟机用xm create命令,虚拟机启动后,debian可以通过xm console deb1连接控制台;windows用vnc连接本地127.0.0.1可以连接到桌面。
#start vm
xm create /etc/xen/deb1.cfg
xm create /etc/xen/xp1.cfg
#us vncviewer on 127.0.0.1 for windows desktop

Debian6下安装Xen4后GRUB2菜单冗余项问题解决


Debian 6默认的bootloader是grub2,其启动菜单由一系列的/etc/grub.d中的脚本自动生成。其中默认包含10_linux脚本用来枚举本地linux内核生成启动项,安装xen后,20_linux_xen添加了自动枚举xen dom0内核的功能。但是,xen安装的dom0内核也能被10_linux检测到,于是启动菜单里dom0相关的启动项会出现两遍,而由于10_linux生成的项没有启动xen本身,所以这些多余的项目存在没有意义,需要将其删除。
让10_linux仿照20_linux_xen脚本用内核对应的config-XXXversion文件信息判断内核是否是dom0内核,如果是的话,则从生成列表中将其剔除,改动的代码如下:
--- 10_linux.bak 2012-10-16 22:30:43.893612434 +0800
+++ 10_linux 2012-10-17 09:16:09.192399881 +0800
@@ -51,6 +51,18 @@
   LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
 fi

+# check kernel's flavor to prevent xen kernel from booting natively without hypervisor
+is_not_xen ()
+{
+ basename=$(basename $1)
+ version=$(echo $basename | sed -e "s,^[^0-9]*-,,g") 
+ if grep -qx "CONFIG_XEN_DOM0=y" /boot/config-${version} ; then
+  false;
+ else
+  true;
+ fi
+}
+
 linux_entry ()
 {
   os="$1"
@@ -95,7 +107,7 @@
 }

 list=`for i in /boot/vmlinu[zx]-* /vmlinu[zx]-* ; do
-        if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
+        if grub_file_is_not_garbage "$i" && is_not_xen "$i" ; then echo -n "$i " ; fi
       done`
 prepare_boot_cache=

星期二, 十月 16, 2012

Win7下设置gogo6 4in6 tunnel默认路由


gogo6的4in6 tunnel使用比较方便,XP下直接拨号连接上后所有数据就自动走tunnel了,但是win7下发现连接上后默认路由不变,数据还走原来路径。检查配置文件发现gogo6连接上后route相关参数设置在template\windows.cmd中,打开,找到
netsh int ip add route 0.0.0.0/0 "%TSP_TUNNEL_INTERFACE%" %TSP_SERVER_ADDRESS_IPV4% publish=yes %NETSH_PERS% > NUL
修改为
netsh int ip add route 0.0.0.0/0 "%TSP_TUNNEL_INTERFACE%" %TSP_SERVER_ADDRESS_IPV4% metric=1
也可以直接改成使用route命令,不过route命令前需要等待一段时间
rem wait 5 secs before add route
ping -n 5 ::1 > NUL
route add 0.0.0.0 mask 0.0.0.0 %TSP_SERVER_ADDRESS_IPV4%
即可实现使用gogo6的4in6 tunnel默认路由,建议同时增加DNS配置
netsh int ip set dnsservers "%TSP_TUNNEL_INTERFACE%" static 8.8.8.8 primary

星期日, 十月 14, 2012

Debian 6.0.6下设置使用rt2870无线网卡


手头有一块USB无线网卡,芯片是rt2870的,在win7和ubuntu下都是直接识别,不需要配置,但是在新装的debian 6.0.6下就是不能用。表现为用iwlist提示unable to scan,在gnome环境中networkmanger提示device not ready。google之发现主要是两个问题:
1. debian默认没有安装ranlink-firmware,虽然安装了驱动但是没有firmware,所以设备不能使用,依照debian官方手册的方法下载安装ralink-firmware即可解决。也可以手动在这里下载安装。
2. 安装好firmware后还不能用的话,可以用lsmod查看一下系统是否加载了rt2x00usb、rt2x00lib、rt2800usb三个模块。rt2870网卡只使用rt2870sta模块即可,其他三个会造成无法使用。解决方法是打开 /etc/modprobe.d/blacklist.conf,添加
blacklist rt2800usb
blacklist rt2x00usb
blacklist rt2x00lib
最后,如果在控制台可以手动设置连接,但是gnome环境下不能连接的话,把/etc/NetworkManager/NetworkManager.conf里面的managed=false改为managed=true应该可以解决。更详细的资料可以参考官方说明

Windows7+VirtualBox安装Mac OS X几个问题


经过两天折腾,无数遍重装,终于在Windows 7上的VirtualBox中安装好了Mac OS X 10.8.0 Mountain Lion,而且使用10.8.2 Combo升级包升级后直接可以继续使用。摸清了一些VB上安装Mountain Lion的规律,几个关键点写一下:
1. 安装介质尽量用PC专用的,刚开始以为App Store上的原装货就能安装,结果折腾了很久,换了无数引导盘,都不能成功。后来下载了一个Mountain Lion for PC DVD,一次就引导成功。
2. 安装过程中最重要的工具就是引导盘,Mac OS X启动需要EFI,但是VirtualBox原生的EFI并不支持,所以必须要用引导盘(bootloader)启动安装程序,一般常用的是chameleon,iboot,hackboot等几个。我用chameleon最新的2.1版本引导安装,一次就装好并进入成功的系统。
3. 为了简化使用,第一次启动后可以选择把bootloader安装到硬盘上,以后就能直接启动了。我同样用了chameleon 2.1,不过它有两个版本,iso版是用来安装了启动系统的,zip版在Mac系统下运行可以安装到硬盘上。
4. Mac系统不像Windows这样万金油系统,他是给专用硬件设计的,而且尽可能限制非苹果机器安装,所以网上有很多软件包用来解决兼容性问题和驱动不同的硬件,著名的有multibeast,可以一次安装解决很多问题。但是网上multibeast的教程一般都是针对真实硬件的,事实上,经过不懈的折腾发现,virtualbox对Mac的支持本来就很好。装好系统后只发现一个明显的问题,就是启动非常慢,有时候甚至跟死机一样,进不了登陆界面。这个问题可以通过安装multibeast中的fakesmc来解决。而且,virtualbox下装mountain lion只需要安装这一个额外的软件包即可。
5. 好像是VB和mac的多核调度机制兼容性的问题,虚拟机设置双核的时候,经常有程序卡死,改成单核后,虽然响应比较慢,但是程序没有响应这种问题没再出现过(不过单核的装不上Mountain Lion,只能装Lion)。
6. 默认VB分辨率是1027x768的,修改分辨率需要改两个地方,mac中/Extra/org.chameleon.Boot.plist,添加或者修改代码
<key>Graphics Mode</key>
<string>1920x1080x32</string>
同时需要进入命令行,到VirtualBox安装目录运行命令
vboxmanage setextradata "Name of virtual machine" "CustomVideoMode1" "1920x1080x32"
virtualbox下安装mac的好处是兼容性比较好,鼠标、键盘自动识别,而且升级系统后不用重新设置。但是速度比较慢,程序反应迟钝,经常卡死(Mountain Lion的问题,估计跟多核调度有关)。vmware下有第三方的显卡驱动(vmsvga2)和vmware-tools支持,据说性能高一些,具体我没有测试。
系统安装主要步骤参照:How to install OS X Mountain Lion in Virtualbox [Windows]。不同的地方是我的内存只有4G,所以只给虚拟机分配了1.5G(1536M)。

UPDATE: 使用iAtkOS L2安装的比较完美,安装时不需要其他引导程序,安装好后不需要添加任何其他软件包。配置参照上面链接的文章,CPU用单核即可。装好后,可以完美升级10.7.5。

星期四, 十月 11, 2012

HP Compaq pro 4300 SFF OEM 激活机制研究


Windows 7的OEM激活是微软给OEM厂商提供的一种可以量产化的激活方式,详细的基本原理可以参考BIOS之家的相关文章。厂商一般根据自己的情况实现OEM激活的具体方式,HP Pro 4300 SFF的BIOS全部自带SLIC 2.1,但是预装Windows的型号SLIC 2.1在ACPI表中是可见的,而无Windows预装的则不可见,也就不能实现安装HP版本Windows的自动激活。根据BIOS之家和其它网站的文章看,是HP在BIOS中设置了标记,程序根据标记决定是否在ACPI表中导出SLIC信息,在HP台式机中,这个标记是feature byte,本本不详。这个标记是可以用程序设置的,笔记本使用HP SLP Tools设置,而台式机则根据BIOS版本不同,设置方式不同。
根据hpfocus网站的信息,5.0以前的BIOS需要使用dmi503工具设置,6.0版本的开机用Ctrl+F10进入可以设置,而7.0的则是进入BIOS后通过Ctrl+A进入工程模式然后在Security->System IDs项目中设置。Pro 4300 sff的版本是7.0的,但是进入工程模式后发现feature byte不可写。Google之,在scribd上的文章里看到说feature byte只有当BIOS中type 11信息无效时才可写,否则只读。进一步Google看到Type 11信息是OEM String,Pro 4300 SFF使用的AMI BIOS可以使用amidebios.exe读写此信息。
使用amidebios /os命令打开oem string(type 11),可以看到实际上就是feature byte和BID合成的字符串。使用amidebios /os 1 ""和amidebios /os 2 ""将老信息清空,回到BIOS设置,发现feature byte变为可写。找一台预装Windows的PC的feature byte写入,再用SLIC Toolkit检查看到SLIC 2.1信息读取成功。
amidebios工具可以在网上搜HP DMI ToolKit,里面有。只可在DOS下运行。估计这个方法也适用于现在BIOS不太容易修改的8000系列、pro 6000系列等(未测试)。

强制WordPress直接访问文件系统更新


更新WP时经常会碰到提示输入ftp或者ssh用户密码信息,非常讨厌。即使设置group用户可写都不行,为了让它直接访问文件系统,有时需要将目录设置权限成777,这其实上不安全。
WP在更新时会根据一系统参数判断是否直接写文件系统,首先文件owner,其次是否可写,同时满足这两个条件才行,所以直接设置group写入权限会不正常。但是,为了系统安全着想,有时候并不想把文件用户设置成nobody或者www-data这类用户,所以就需要强制WP直接访问文件系统。做到这点,在wp-content目录权限设置正确的前提下,其实只需要在wp-config.php中添加define('FS_METHOD', 'direct');即可。完整设置如下:
chgrp www-data -R wp-content
chmod g+w -R wp-content/
echo -e "define('FS_METHOD', 'direct');" >> wp-config.php

星期日, 十月 07, 2012

免费VPS一枚


国外VPS供应商ChunkHost提供免费VPS给用户,为了防止滥用,要求使用Facebook账户登陆申请,配置128MB/3G/35G,虽然有点低,不过他们声称只要你在用就可以一直免费,如果长时间不用,会暂停系统但是保留数据。
有注册过的人说他们免费VPS放出很慢,注册后会把你放到一个waitlist中,等系统有名额再开通,可能要等比较久。9月18日开通过一批,不知道下一次什么时候。不过这样也有好处,比较难得到的也许能长久些。。。而且除了Facebook账号什么都不需要,所以有兴趣的可以试着注册了慢慢等。
他们还提供更高配置的VPS,可以免费试用14天,不过需要信用卡,看看就行。

星期六, 十月 06, 2012

还是niginx/premalinks/super cache问题


前篇WordPress/Nginx打开permalinks并安装Super Cache插件介绍了用if和rewrite实现wordpress的permalinks和super cache,但是,根据Nginx文档IfIsEvil的介绍,if语句由于实现的历史原因,在location上下文中工作并不正常。所以这里把if...set...放到location外的server上下文中,然后再用try_files标记代替原来的rewrite。
#首先还是WP/super cache配置文件wp-super-cache
set $cache_uri $request_uri;

# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
        set $cache_uri 'null cache';
}

if ($query_string != "") {
        set $cache_uri 'null cache';
}

# Don't cache uris containing the following segments
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
        set $cache_uri 'null cache';
}

# Don't use the cache for logged in users or recent commenters
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
        set $cache_uri 'null cache';
}

location /blog {
        index  index.html index.htm index.php;
        try_files /blog/wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /blog/index.php?$args ;
}
这里假设WP安装在/blog目录下。其次是网站配置文件,包含wp-super-cache到server上下文中,需要注意的是WP对应的location已经放到wp-super-cache中了,所以网站配置文件中不再需要。如果WP不是虚拟目录的话,建议将root标记也放到server上下文中,这样php只需要配置一次.网站配置文件完整的server块如下:
        listen   443;
        server_name  localhost.localdomain;

        root /var/www;
        include wp-permalinks-super-cache;

        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
多网站/目录共享WP配置方法可以参考文档:http://codex.wordpress.org/Nginx

星期五, 十月 05, 2012

Nginx/php-fpm平台下增加php脚本运行时间解决504错误


在一个低配的VPS(cpu限制主频,php脚本执行时间长)上安装wordpress(平台是nginx/php-fpm/postgresql),总是出来504 Gateway Timeout,nginx提示php-fpm没有响应。修改php.ini中maximum_execution_time没有作用,于是想到nginx等待时间太短所致。在nginx的虚拟主机配置文件中php fastcgi相关的配置中添加fastcgi_read_timeout,延长nginx等待fastcgi的时间从默认的60s到120s,问题解决。
        location ~ \.php$ {
                #...其它配置信息
                include fastcgi_params;
                fastcgi_read_timeout 120s;
        }

星期四, 十月 04, 2012

Postgresql中创建Unicode(UTF8)编码的数据库


为了数据显示一致性,现在网站存储中文数据时一般都会用utf8编码,但是在postgresql中用以下命令创建数据库时,会出错
create database my_db encoding='utf8';
提示错误:ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)
这是因为Postgresql创建数据库时实际上是从已有模板中复制,系统默认使用template1,但是这个模板不支持utf8编码,所以命令稍做修改即可
create database my_db template template0 encoding='utf8';
关于postgresql中模板以及创建数据库更详细的信息可以参考:http://www.pgsqldb.org/pgsqldoc-8.1c/manage-ag-templatedbs.html

列出所有已安装软件

Debian、Redhat、OpenBSD、FreeBSD等有软件包管理概念的*nix系统中可以用命令列出所有已安装的软件包:
Debian:
dpkg --list
dpkg --list | grep 'package-name'
dpkg --list | grep -i '*php*'
Redhat:
rpm -qa
rpm -qa | grep 'package-name'
rpm -qa | grep -i '*httpd*'
OpenBSD/FreeBSD:
pkg_info
pkg_info | grep 'package-name'