RFC4235与RFC7463

RFC4235与RFC7463

基本上两篇RFC文档是传承的关系,RFC7463场景应用比RFC4235要详细很多,一些旧的SIP设备未必支持7463。

在兼容性方面,对于SIP-SUBSCRIBE消息,两篇RFC文档采用了不同的Event,rfc4235中定义“dialog”,而rfc7463中定义“dialog;shared”。rfc4235限定在只订阅SIP呼叫对话的状态,因此在dialog-info中,要求必须填充dialog元素,其中就包含call-id,remote-tag以及local-tag等典型呼叫参数。

而rfc7463不仅仅是关注呼叫,更关注“状态呈现”,因此凡是与“状态”相关的消息,都尽量进行了定义。比如在“11.1. Registration and Subscription”章节中,就定义了终端注册的状态呈现。在注册流程中,就没有dialog的信息。

呈现信息多,对用户当然有好处,对VoIP系统也很有意义,尤其是在企业应用场景中。但是需要注意的是这也大大增加了VoIP系统的负荷,实际部署中要慎重考虑。

2018汽车年审

2018汽车年审

与往年有个显著的不同:需要到交警的网站上先预约,包括时间和年审地点等。我不知道这个变化,直接开车到年审地点,幸亏现场车不多,于是在一位工作人员的帮助下,现场扫描二维码预约,当时就给办理。明年估计车辆会比较多,需要提前做好预约。

事先检查交通违约情况,有的话赶紧先处理掉。

年审需要携带的资料包括:(1)汽车行驶证(2)身份证。这次没检查我的交强险保单,似乎电脑里已经联网检查了。现场看到有些人提交了交强险保单,不知道是什么情况。建议还是带上交强险保单。今年费用是230元。

检查似乎比以前严格了,比如要求打开汽车前盖进行检查。我以前从来没打开过前盖,不知道怎么操作,现场一度手忙脚乱,后来也是在工作人员的帮助下打开的。

今年很赞的是:检查完后十分钟即可拿到新证件,往年一般要到下午或者第二天才能拿到。另外,不再发单独的绿标,只有一个年检通过的标。

Ubuntu 18.10

Ubuntu 18.10

这个版本更新了外观,基础色调没有变换。图标搞成圆角,有点像手机界面上的图标,deb的图标居然是粉红色的…… 其他似乎变换不大,依然是很慢。

jemalloc

jemalloc

看到一个redis新版本发布的新闻,注意到其中的内存管理采用了jemalloc,替代标准gcc中的malloc。搜索了相关的信息,感觉jemalloc是个相当不错的内存管理模块,尤其在碎片化管理方面很吸引人。作为需要长期运行的服务器软件,内存管理方面的确是需要慎重考虑,jemalloc 有facebook这样的大厂支持,又有redis做背书,值得我们尝试。

在Debian系统中可以直接安装jemalloc的dev库:

sudo apt install libjemalloc-dev

安装后,头文件在以下目录:

/usr/include/jemalloc

库文件在以下目录(X86系统):

/usr/lib/x86_64-linux-gnu

或者以下目录(Raspberry Pi):

/usr/lib/arm-linux-gnueabihf

Linux下的一些命令

Linux下的一些命令

这两天费了老大劲查一个linux系统下的问题,最终查出了原因,其中用到一些日常不太使用的命令,记录一下,以免以后忘记。

strace -e trace=write -p 1234

这个命令是获取进程(进程ID是1234)的输出信息。

cd /proc/1234/fd
ls | wc -l

检查进程1234打开的句柄数。

perror 24

显示errno的提示信息。上述例子显示“errno=24”时的具体提示信息。

ulimit -a

检查用户的各项资源配置,比如句柄数、进程数等。通常这些资源数配置在 /etc/security/limits.conf 文件中。

uname -a

查询内核版本。

另外,Debian 7是在tty7上启动xwindows,而初始信息是输出到tty1上,用组合键 Ctrl+Alt+F1/F7 即可进行切换。

粗浅理解数据库联合索引

粗浅理解数据库联合索引

在表中对多个列建立联合索引,比如(a, b, c),这种情况下实际建立了三个索引:

  • a
  • (a, b)
  • (a, b, c)

因此,如果对b或者c列进行查询,就需要另外建立索引进行优化。当然,不是索引越多越好,毕竟对插入、更新数据(实际也就是I/O)会有影响。

root用户也用sudo

root用户也用sudo

过往在升级Debian (Testing版本)时,总是以root身份进行操作,例如:

apt update
apt upgrade

最近使用同样的命令升级时,总是提示错误,意思大约是“找不到ldconfig”文件或者无权执行。这是很奇怪的问题,毕竟当前用户是root,而且ldconfig显然就在‘/sbin’目录下,肉眼可见。

检查了root用户的env,发现Path的设置为:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

确实没有包含‘/sbin’目录,因此root用户的确无法直接执行ldconfig命令。再次检查‘/etc/profile’文件,在路径设置时进行了以下判断:

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi

当然,可以直接修改该文件,或者修改root用户的.bashrc文件,将’/sbin’目录将入路径当中。
然而根据profile文件的判断条件,也可以不做任何修改,只是执行命令时,加上‘sudo’即可。例如上述更新命令修改为:

sudo apt upgrade
markdown中的换行

markdown中的换行

以前google notebook用来记笔记极好,可惜google放弃了这个产品,后续试了evernote,onenote,有道笔记,以及qmail中的记笔记等,都有这样那样的问题,实在不太满意。

有朋友推荐用markdown记笔记,使用程序员必备工具VS code就可以直接预览markdown文件。markdown文件本质上就是文本文件,因此结合github等版本管理工具,还很容易对笔记进行版本管理、永不丢失,挺有意思。

markdown语法比较简单,基本上不妨碍记笔记时的思维过程。最近遇到“换行”的问题,简单搜索了一下,原来是采用以下语法:

两下空格后,再按回车键。

稍显麻烦,不过还能接受。

办理(香港)护照和身份证

办理(香港)护照和身份证

今天(2018-06-29)带苗去香港沙田事务处申请办理护照。记录一下,有些地方需要注意,方便以后办理这些证件。

过程与“办理回港证”基本一致。首次办理护照时,需要同时办理身份证,因此实际上是办理两个证件。需要的资料和复印件如下:

(1)大人的港澳通行证,以及过关时打印的小标签。需要在现场复印,将通行证和小标签复印在同一张纸上(复印费2港币)。

(2)小孩的出生纸原件及复印件(可在家复印好,也可交2港币现场复印)。

(3)小孩的回港证、回乡证以及学籍表,无需复印。

(4)现场填两张表(其中一张表在网上预约时可以下载,没下载也没关系,拿号时会给),现场有模版,照着填即可。需要注意的是“十一歲以下人士的香港永久性居民身份證申請書”这张表,里面主要填大人的信息,如果没有香港住址,可以填深圳地址;无香港身份证可以填通行证,父母双方的英文全名与小孩出生纸上的要一致(我当时填的是中文名的汉语拼音)。另外,中文要用繁体!

(5)两张小孩的白底照片。可以在大陆拍照好,基本上按照内地大一寸大头贴的标准,坐姿端庄,露额头、露耳朵、无眼镜、无头饰等就可以了,和大陆的证件照标准相差无几。现场也提供自助照相。

(6)小孩必须亲自到场。

(7)费用是185港币,最好带好零钱。

这次再次证明推延症害死人,办事要乘早。上周网上预约的时候,赫然发现一直到7月底各事务处都几乎全满额,像上次一样发现沙田事务处只在今天有点名额。除了路途比较遥远,办理过程总体上是轻松愉快的。由于我不懂粤语,因此心理上总是比较紧张,实际上完全不用担心。事务处工作人员都非常和蔼,从来没有遇到给白眼的情况,专业的服务态度值得我们学习。

尤其值得一提的是今天遇到的办事员李姑娘(?李小姐,抱歉我不知道香港的准确称呼,我看到位置上的名称是“李xx”)。李姑娘能说流利的普通话,态度温柔、细心,指导我填表时没有丝毫的不耐烦,一直非常耐心,对待孩子也是轻声慢语,当然人也漂亮,实在是如沐春风!如果能遇到像李姑娘这样的办事员,我愿意每次都跋山涉水地去沙田事务处!

最后,事务处人确实很多,有些人也是莫名其妙,对大陆人未必友善(大家都懂的),请务必照顾好孩子,其他无关紧要!

2018-07-09 更新: 拿到回执过一天,就可以预约拿证的时间。一定要预约拿证!回执单上有预约网址。需要注意的是,回执单的申请编号中间没有横线,而网上预约填编号时有横线,直接输入即可,程序会自动进行横线分割。

2018-07-23 更新: 领证件时不需要小孩在场,只需要带上回执单、大人的通行证、过关的小票即可,所有材料无需复印。

手工解除fail2ban封锁的IP地址

手工解除fail2ban封锁的IP地址

首先检查fail2ban的log文件,看是哪一个jail的规则触发了封锁,比如apache的规则。然后可以使用fail2ban-client确认该规则的封锁状态:

root@minisipserver:~$ fail2ban-client status apache
Status for the jail: apache
|- filter
|  |- File list:        /var/log/apache2/error.log
|  |- Currently failed: 0
|  `- Total failed:     21
`- action
   |- Currently banned: 1
   |  `- IP list:       184.15.66.88
   `- Total banned:     3

例如,示例中apache的规则封锁了“184.15.66.88”。接着使用以下命令解除对该IP地址的封锁:

fail2ban-client set apache unbanip 184.15.66.88