因为国内的DNS服务器存在污染问题,用VPN后都不愿意用国内的DNS服务器;但是如果常用8.8.8.8等,又导致访问国内的cdn时候返回线路,导致访问缓慢;这个问题不好解决,相对好点的方法在连接vpn前使用isp提供的dns,而连接后替换成外国的dns。 但是OpenVPN的--dhcp-option配置,对非Win32的客户端是无效的,只能考虑执行自定义脚本来完成: vpnup.sh 1 2 3 4 5 6 7 8 9 #!/bin/bash RESOLVE=/etc/resolv.conf FOREIGNDNS1='4.2.2.1' FOREIGNDNS2='4.2.2.2' DNSMARK='_MK' sed "s/^nameserver/#$DNSMARK nameserver/" -i $RESOLVE echo "nameserver $FOREIGNDNS1" >> $RESOLVE echo "nameserver $FOREIGNDNS2" >> $RESOLVE vpndown.sh 1 2 3 4 #!/bin/bash RESOLVE=/etc/resolv.conf DNSMARK='_MK' sed -e '/^nameserver/d' -e "s/^#$DNSMARK //" -i $RESOLVE 很简单,就是使用sed来完成/etc/resolv.conf文件的内容替换。 实际上我还使用了chnroutes的脚本生成的国内路由表,上面两段只是分别贴到其中的vpnup/vpndown当中。
上个月买了台在美帝的超廉价vps,基本上跑跑openvpn什么的,一个月下来流量一个百分点都没过,于是试试架点别的服务,先试试奶瓶腿。 VPS的内存就是钱。虽然这台VPS有384M内存,不算小,但apache什么的内存大户还是不考虑了,直接上nginx+fastcgi。 此前有做过这个组合的笔记《简单配置nginx+fastcgi后端的WordPress服务器》,不做博客的话mysql就省掉了。 但是启动php-cgi是个问题,还好有人写了不错的启动脚本/etc/init.d/php-fastcgi,Nginx, PHP and a PHP FastCGI daemon init script。而这篇How to set up nginx with PHP on Ubuntu的脚本稍微简化一点,而且是用Unix Socket来绑定nginx跟fastcgi的通讯。这样就免除了lo interface的依赖。 假设奶瓶Dabr是没什么难度的事情,奶瓶腿的话,我从项目的SVN checkout出源码后,下载 user_oauth.php并改名覆盖原来的common/user.php,以支持后台自动oauth登录Twitter;然后配置到nginx的虚拟主机目录下,基本就结了。 当然兽兽Showfom的Dabr教程里面提到了使用nginx的伪静态改写规则,这必须的(跟用wordpress一样): 1 2 3 if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?q=$1 last; } 最后遇到的问题是,访问奶瓶腿的Setting,保存后502错误,查看error.log看到报的是: 24219#0: *40 upstream sent too big header while reading response header from upstream 直接Google找到答案,就是调大nginx的fastcgi缓冲区。 1 2 [...]
作为秘籍,本文包含折腾Xen所必须了解,但是在一般能找到的教程里面都没提及的资料。这里不包含一些必须的步骤等,所以很可能你需要先浏览这些资料,并让浏览器同时开着这些页面随时查阅: DebianWiki Xen DebianWiki DebianInstaller/Xen XenWiki HowTos Ubuntu Doc/Xen Ubuntu 9.04上的XEN虚拟服务器(一) 安装XEN (二) 安装虚拟机 在 Debian 上安装和配置 Xen 一:Xen工具及其关系 《在 Debian 上安装和配置 Xen》一文把在Debian上安装Xen简化成一道命令: On Debian Lenny 5.0 : apt-get install xen-hypervisor-3.2-1-amd64 xen-linux-system-2.6.26-2-xen-amd64 xen-utils-3.2-1 xenstore-utils xenwatch xen-shell xen-tools On Debian Squeeze 6.0 apt-get install xen-linux-system xen-hypervisor xen-utils xen-tools xen-hypervisor主要只有一个文件:/boot/xen-3.2-1-amd64.gz,就是宿主内核; xen-linux-system则是打了Xen补丁的Linux内核,这个内核脱离hypervisor是无法启动的,只适用于虚拟机;dom0对hypervisor来说也是虚拟机之一,domU也可以直接用这个内核启动。 xen-utils则是运行在Dom0上的程序,比如xend、xm,作用是跟hypervisor通讯,是主要由Python编写的一系列程序。 xen-tools是如xen-create-image的一系列工具,作为xm工具的前端,用以管理安装虚拟机;这是一套perl脚本,也有很灵活扩展性。 xen-shell是一个交互式的shell,常见用于VPS服务商提供给用户的操作界面,用户根据几个封装好的命令控制虚拟机如重启等工作。(Debian 6.0 下没有了。) xenstore-utils、 [...]
1 2 3 4 5 6 #!/usr/bin/env xdg-open [Desktop Entry] Type=Application Exec=gnome-control-center Name=gnome_con 把上面的内容保存为/usr/share/gdm/autostart/LoginWindow/gnome_con.desktop,注销登出,在GDM画面时自然出现了gnome-control-center的配置窗口,在外观(apprerance)里面可以配置GMD的壁纸、图标主题,电源管理(Power Managerment)可以设置本本的屏幕背光、触摸板鼠标等等等等,跟一般Gnome配置无异。 完成后重新登录,删除上述保存的文件,即可。Ubuntu 10.04, Fedora 12等一大堆跟进了Gnome 2.28以上的发行版都可以这么配置。 关于GDM还有一些较高级的配置可见 Simple Greeter的开发文档 ,需要配置gconf内的选项,可按上述方法,仅把Exec一项改为Exec=gconf-editor;也可使用su -c,用gconftool-2工具设置文档里面提到的键值具体可参看 ArchLinux Wiki Gnome 2.28 Changes 。
2010-7-26 Updated: 支持侦测繁忙服务器。 Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #!/bin/bash LOCAL_PORT=7070 auto_login_ssh () { expect -c "set timeout -1; spawn ssh [...]
Vim has been so graceful that I like to have any text editing work done in her, especially coding and blogging. As a Firefox user, I previously use scribefire to write to my wordpress blog, actually I was working with HTML, I don't like WYSIWYG editing, which always creates dirty codes. However, scribefire is not [...]
我的U盘是跟钥匙系一起的,最近两次因为U盘插在公司机器上下班后忘了拿,结果回家后在门口游荡,郁闷的等室友回来才有家门进,于是要做这么个东西,关机前检测到没拔U盘,要猛叫猛叫。 原理倒是不复杂,研究了下,检测U盘可以读取/proc/bus/usb/devices,如果主机上插有U盘,会出现Driver=usb-storage这一行的。 *Update: * /proc/bus/usb/devices只有在挂载了usbfs才有; usbutils工具里面除了lsusb,还提供了usb-devices工具,列出内容跟/proc/bus/usb/devices是一样的, 更适合。 然后是关机脚本的运行。Linux关机时候会执行level 0的init脚本,比如对于Debian/Ubuntu,就是/etc/rc0.d下的文件,我工作机跑的是Archlinux,专门为用户自定命令提供了/etc/rc.local.shutdown文件,作为/etc/rc.shutdown的hook,前者不会因为initscripts包的升级安装被覆盖。 至于让主机会叫,当然是主机喇叭了,这里可没有外放音箱。查了下发现beep这个程序,安装后发现功能还不少,可以定制beep的音调,时长等,可玩性很高。于是先找了音谱频率对照表,按把美剧《24小时》里面CTU内常用的电话铃声谱了出来,大概是EEGC 或者 EEC^C的样子,不过因为主板蜂鸣器的结构区别,通常不同频率的音量有些不同。 另外当然也应该有点视觉提示啦,在init script里面,终端支持的东西多着呢,按终端颜色代码,让终端打印红色加粗闪烁体,足够显眼了。 最终效果是这样的: 1 2 3 4 5 6 7 8 9 10 #!/bin/bash # # /etc/rc.local.shutdown: Local shutdown script. # while [[ `usb-devices | grep usb-storage` ]]; do echo -e "\033[31;1;5m!!!!!! Unplug Your USB Driver or I'll Keep SCREAMING !!!!!!! \033[0m" [...]
ssh连接远程主机时候询问密码,跟su、sudo命令的默认行为一样,是不从stdin读入数据的,据称是为安全考虑,但是有时候在脚本当中确实需要无人守值的登陆。 搜索一下不难找到类似的例子,使用expect来完成密码应答: 1 2 3 4 5 6 7 8 9 10 #!/bin/bash auto_login_ssh () { expect -c "set timeout -1; spawn -noecho ssh -o StrictHostKeyChecking=no $2 ${@:3}; expect *assword:*; send -- $1\r; interact;"; } auto_login_ssh passwd user@host StrictHostKeyChecking=no参数让ssh默认添加新主机的公钥指纹,也就不会出现出现是否继续yes/no的提示了。 expect很不错,上述代码基本可以达到要求了,能够当翻墙用的ssh -D自动登陆,执行远程命令等等,但是如果作为一个完全非交互的远程工具,应该说还一差,不能返回整个连接执行过程是否成功。 使用expect后,程序的exit status是expect的,而不是ssh的,所以如果遇上连接不到的主机、密码错误等情况,expect也一样是正常退出,$?为0,所以需要对expect的代码稍加修改; 1 2 3 4 5 6 7 8 9 10 11 [...]
Page optimized by WP Minify WordPress Plugin