Monthly Archives: November 2015

避免在wifi断线重连时vpnc的dns server被NetworkManager重写

用vpnc连公司的网络的时候有个问题,就是如果wifi短暂断开重新连接之后vpnc设置的dns会被覆盖成wifi默认的地址,而不是公司的dns地址,这时候公司的网络还是通的,但dns就不能用了。两种方法可以解决,一是断开vpnc重新连接,二是用 vpnc –local-port 0 重连。但这两种方法都麻烦,想个办法让NetworkManager不覆盖 /etc/resolv.conf是比较理想的办法。

看了下 /etc/vpnc/vpnc-script 是如何写 /etc/resolv.conf 的,又看了下 /etc/NetworkManager/dispatcher.d/pre-up.d/ 里的脚本,觉得可以在 vpnc-script 里保存一份resolv.conf,当NetworkManager运行pre-up.d的时候看看vpnc是否在运行并且vpnc保存的resolv.conf副本也存在,就用这个副本再次覆盖/etc/resolv.conf

最后就是改了下 /etc/vpnc/vpnc-script

--- /etc/vpnc/vpnc-script.orig  2015-11-29 15:40:36.673524008 +0800
+++ /etc/vpnc/vpnc-script       2015-11-29 15:39:52.895101651 +0800
@@ -80,6 +80,7 @@
 HOOKS_DIR=/etc/vpnc
 DEFAULT_ROUTE_FILE=/var/run/vpnc/defaultroute
 RESOLV_CONF_BACKUP=/var/run/vpnc/resolv.conf-backup
+RESOLV_CONF_VPNC=/var/run/vpnc/resolv.conf-vpnc
 SCRIPTNAME=`basename $0`
 
 # some systems, eg. Darwin & FreeBSD, prune /var/run on boot
@@ -413,6 +414,8 @@
 search $CISCO_DEF_DOMAIN"
        fi
        echo "$NEW_RESOLVCONF" > /etc/resolv.conf
+       # save another copy for NetworkManager use
+       echo "$NEW_RESOLVCONF" > $RESOLV_CONF_VPNC
 
        if [ "$OS" = "Darwin" ]; then
                case "`uname -r`" in
@@ -474,6 +477,7 @@
        fi
        grep '^#@VPNC_GENERATED@' /etc/resolv.conf > /dev/null 2>&1 && cat "$RESOLV_CONF_BACKUP" > /etc/resolv.conf
        rm -f -- "$RESOLV_CONF_BACKUP"
+       rm -f -- "$RESOLV_CONF_VPNC"
 
        if [ "$OS" = "Darwin" ]; then
                case "`uname -r`" in

然后给NetworkManager添加一个pre-up.d脚本

$ cat /etc/NetworkManager/dispatcher.d/99-vpnc-dns 
#!/bin/bash
RESOLV_CONF_VPNC=/var/run/vpnc/resolv.conf-vpnc

if pgrep vpnc && [ -f $RESOLV_CONF_VPNC ]; then
        cat $RESOLV_CONF_VPNC >/etc/resolv.conf
fi

$ cd /etc/NetworkManager/pre-up.d/
$ sudo ln -s ../99-vpnc-dns .

这样生活稍微美好了一点儿。

记两个跟颜色相关的事情,mutt里patch语法高亮和彩色的manpage

1. 让mutt对patch进行语法高亮

看patch的时候没有语法高亮看光秃秃的patch很难看,想着怎么能高亮一下。搜索到有人说设置mailcap,纯文本文件用view(也就是 vim -R)来显示,间接的用到了vim的语法高亮,比如在 ~/.mailcap 中设置

text/plain; vim -R -- %s ; needsterminal

并且在 ~/.muttrc 中设置

set allow_ansi

但在我的Fedora23系统上不管用,问题是vim识别不出来mail的filetype,也就无法用diff.vim来进行高亮。也许再继续折腾下vim这个方法应该还是能走通的。但我没继续这么折腾。

我看到diff的语法高亮也挺简单的,就想用mutt的color指令自己实现高亮,经过摸索还真成了。其实也就是在 ~/.muttrc 中添加如下设置,颜色可以自己改

# coloring patch
# diff --git
color body brightgreen default "^diff --git a/.*$"
# removed
color body brightred default "^-.*$"
# added
color body brightcyan default "^[+].*$"
# --- a/
color body brightgreen default "^--- a/.*$"
# +++ b/
color body brightgreen default "^[+]{3} b/.*$"
# @@ -111,3... @@
color body brightyellow default "^@@.*@@"
# ---
color body brightyellow default "^---$"
# --
color body yellow default "^--$"

一点小问题就是,只要是以 +/- 开头的行都会高亮,不管这个邮件到底是不是patch。其实问题不大。

2. 彩色的manpage

这个在网上搜一下很多,但基本都是指向ArchWiki上的文档。我在Fedora19的时候这么做还是管用的,好像从20开始就不工作了。奇怪的是RHEL6/7这个方法同样管用。现在升级到了23终于不能忍了。

经过搜索(千辛万苦啊),找到了fedora user list上的一个thread,最终解决了我的问题。

解决方法很简单,在ArchWiki的设置基础上,再

export GROFF_NO_SGR=yes

彩色manpage就又工作了。什么原理我不知道,也不想继续找了,反正是跟termcap和groff有关的。

Monthly Pic 2015 10

十月事情还挺多,照片就不少,一样一样说。

IMG_20151007_140732
月初逛迪卡农,本着人生四大原则之一“喜欢就买”的精神,买了yy的羽毛球鞋

IMG_20151012_054213

然后在CLSF和CLK之前请三天假,头天晚上买的车票,第二天晚上就到黄山市了,这是黄山市的屯溪老街清晨的景象,黑白的徽派建筑,我喜欢

IMG_20151012_170920

黄山的飞来石,不过这张形状好奇怪……

IMG_20151013_094226

黄山十月天气很好,据说只有不到三分之一的时间是晴天,我赶上了。就不奢望云海了

IMG_20151013_123026

传说中的迎客松,也就那样,周围围了好多人,照两张像就走了

IMG_20151014_180100

CLSF的纪念品,这个红帽的优盘还挺受欢迎的

IMG_20151014_181007

借Coly的光,我也尝了一次30一瓶的矿泉水

IMG_20151017_102906

CLSF之后继续参加CLK

IMG_20151017_131150

时隔7年再游南京大学

IMG_20151022_114812

为了和老校长做斗争,翻出了6年前折腾的龙芯盒子,我交叉编译出来的OpenSuSE竟然还能用

IMG_20151023_135454

最终龙芯盒子还是刷成了Debian,我的系统也没了