由于我一直使用 Sublime Text 3 不支持 GBK 编码文件的中文内容查找,所以就想改用 vim 试试。

vim 的多文件查找命令可以用 vimgrep。但是直接用 vimgrep 的话是不支持 GBK 的。需要先用下面的命令把编码转换过来

1
:set encoding=gbk

然后就可以 vimgrep 查找了

1
:vimgrep /基本/**/*

我用的版本是 emacs24 ,然后做了一堆的配置后启动速度有点慢,但有些东西又不好精简。好在 emacs 提供了 –daemon 模式,开启 –daemon 进程后只要用 emacsclient 连接就能非常快的开启一个 emacs。但目前碰到的问题是原来的字体配置在这种模式下无效了,原因好像是因为 –daemon 进程是没有加载 X 对应的字体配置。所以我用了下面的配置让 emacsclient 也能自动使用自定义的字体配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
;; 字体配置函数
(defun my-apply-font ()
;; Setting English Font
(set-face-attribute
'default nil :font "Monaco 18")
;; Setting Chinese Font
(dolist (charset '(kana han symbol cjk-misc bopomofo))
(set-fontset-font (frame-parameter nil 'font)
charset
(font-spec :family "文泉驿等宽微米黑" :size 18))))

;; 解决client模式下的字体问题
(add-hook 'after-make-frame-functions
(lambda (frame)
(select-frame frame)
(if (window-system frame)
(my-apply-font))))


;; 只有在windows模式下进行设置
(if window-system
(my-apply-font))

主要就是利用了 after-make-frame-functions ,在创建 frame 的时候判断是否是 window 类型的,然后再应用一下字体配置。

最近弄的一个网站需要在全站添加上统计代码,本来呢这个需求直接写到模板里面就好,可是这个程序的模板有好几百个,一个个去写太蛋疼了,而且有些静态文件生成什么不太好弄。所以就打算在nginx上动动手脚。

google一番查到nginx有个sub模块可以用来干这个事情,代码也很简单。

sub_filter '</body>' '<div style="display:none;"><script src=“[统计代码引用的js地址]” language=“JavaScript”></script></div></body>';

然后通过测试发现静态文件里面有加上这些代码,但是php的页面上始终没有替换过来。后来用nginx的lua模板去整这玩意,发现原来是因为gzip的关系。因为我是通过反代后端的apache来执行php的,而apache返回过来的内容是被gzip过的,所以替换的时候找不到 </body> 。解决办法也很简单,不需要改动apache的配置只要在 nginx的反代代码里面加入下面这一句,改写掉 header 请求信息就行。

proxy_set_header Accept-Encoding "";

这样后端返回的代码就不会被gzip。然后我特意观察了一下 nginx 的返回信息,nginx 会对后端的代码替换后再用 gzip 压缩返回给浏览器。

原来我一直使用的是 ssh -D 7070 <root@xxxxx> 这种方式的 socks 代理,前段时间了解到 openvpn 可以使用 udp 连接,然后又跑去试了一下 openvpn。还是各种不满意啊,最后了解了一下现在比较火的 shadowsocks ,装上试了一下,感觉相当不错。

openvpn

优点

  1. 兼容性好

Read More

搭建完自己的docker-regsitry后需要push image过去,先要用 docker tag 给 image 添加一个 tag。然后用这个 tag 名去做 push ,原因是 docker push 时似乎需要`主机名/镜像名`的格式。

打上 tag

1
docker tag ubuntu:xunsearch 192.168.0.130:5000/xunsearch

192.168.0.130:5000 是我的 docker-regsitry 服务的ip地址和端口号。

Read More

docker-registry是一个docker的镜像服务器,支持push和pull。使用python编写,安装方式也比较简单。

下载

1
git clone https://github.com/dotcloud/docker-registry

使用 git 下载最新的代码

1
sudo python-pip install -r requirements.txt

安装相关的python包。

Read More

docker的镜像制作官方推荐的方式是编写 Dockerfile ,然后用 docker build 生成。好处是可以将环境生成脚本化,但平时我还是想要一个 shell 来安装一些东西,就像使用一个普通的虚拟机一样。

启动一个shell

1
sudo docker run -i -t ubuntu:12.04 /bin/bash

然后在里面安装好环境后退出,记下这个 container 的 id 。

1
sudo docker commit 1e1df5fe3869 ubuntu:tagname

用上面的这种方式提交到新的镜像里面就是一个新的环境了。

导出镜像

1
docker save IMAGENAME | bzip2 -9 -c>img.tar.bz2

导入镜像

1
bzip2 -d -c <img.tar.bz2 | docker load

docker是一个轻量级的linux容器,可以把整个环境部署到里面,然后打包发放。这样只要在本地先把环境搞好,部署到生产环境的时候直接把镜像拷过去,然后运行一下就可以正常使用,无需编译和安装各种依赖。相当于直接迁移一台虚拟机,不过比virtualbox, xen, kvm, vmware之类要轻量的多。

docker的环境包括 image 和 container 。images 是镜像, container 是运行时,进程在运行时产生的数据正常情况下都保存到这里,当然也可以通过映射把本地文件系统映射到里面去。

docker还提供一个镜像服务器的功能,可以直接从网上下载各种镜像。如果外网的下载太慢也可以通过架设 docker-regsitry 来建设自己的镜像服务器。

对于生产环境来说,由于 docker 是一个非常轻量的容器,所以不必担心性能问题。

安装docker

安装方式比较简单,可以直接参考 http://docs.docker.io/en/latest/installation/ 。我的环境是 ubuntu server 12.04,升级完内核后再安装就行了,需要注意的是系统必需是64位的。

Read More

起因

公司里有一台机子我拿来当测试机跟备份机,生产服务器上的环境会完整备份到这台机子上。原先采用的是ext4文件系统 ,然后有五个不同日期的完整备份,今天在看lvm资料的时候想到用快照去节省一下空间。然后装了lvm,但又想用lzo压缩,所以就直接上了btrfs,反正是测试机,性能什么的不重要,稳定性也不重要。

安装btrfs

我的环境是 ubuntu 12.04 desktop ,用apt-get install btrfs-tools把btrfs-tools安装上去就有btrfs相关的支持工具了。

迁移分区内容

由于我原先是用了ext4分区,所以就把内容复制出来,格式化成btrfs后再放回去。等我整个做完后才知道有个叫btrfs-convert的工具可以直接转换,当时就斯巴达了。

Read More

从昨天开始我在hostigation的vps上的sshd突然挂了,重启vps也没用,由于连接不上去也不知道是什么问题。所以昨天就发了一个tk过去,后来那边回复我说 maybe ddos 。搞的我很郁闷,今天早上用vps控制面板的 serial console 连接上去了,查看了一下发现是libcrypto.so这个lib找不到,后来用apt-get重装发现源有问题了,可能是上次更新了什么东西导致的。最后就把源里面的非官方源给去掉了,然后重装 openssh-client openssh-server ,恢复成功。后来在找寻解决ssh无法连接的备用远程控制方案的时候发现了mosh,据介绍是一款为解决移动设备上远程连接不稳定而开发的。

oschina上的介绍

Mosh 是 SSH 的替代品。

在高延迟的网络下,Mosh 比 SSH 流畅多了,而且3G网络下,丢失网络变更IP后,终端连接不会中断。

实际感受

实际测试后确实速度很快,连接美国的vps有时候用ssh延迟会很大,而用mosh就好很多了。

Read More