为LibVirt添加新的API

LibVirt 是一套用于控制虚拟化的API,除了提供了一套无关具体虚拟化细节的API 之外,还提供了一个daemon(libvirtd) 和一个控制台工具(virsh)。本文演示了如何在LibVirt 中新加一个API,并且在libvirtdvirsh 中使用新的API 完成新的功能。

为了方便说明,在文章的示例中只演示了添加一个API,如果要看完整的示例,可以查看项目Arondight/libvirt-add-new-api-demo,这是一个相对完整的示例,项目中新API 的说明以及Patch 的使用可以参见其中的README.txt

GTK事件及信号机制

最近在给公司重写一版用Qt3 写的软件,界面比较老,功能也年久失修,商量了一下决定用GTK 重写界面和功能。之前接触的都是Qt,对GTK 了解不多。个人觉得跟Qt 的信号-槽机制相比,GTK 的的信号回调机制稍显不同。然后这篇文章就是自己理解的GTK 信号回调机制。

事件和信号

GTK 是一个基于事件驱动的框架,就是说GTK 程序会一直循环在gtk_main 函数中,直至一个事件发生,然后跳转到对应的事件处理函数中,执行完毕后再次回到gtk_main 的循环。这听起来很符合逻辑,但是GTK 中除了事件外,还有一个概念是信号,特别是当你写几个GTK 程序后就会发现你处理的几乎都是信号。

典型的例如。

1
g_signal_connect (G_OBJECT (mainWindow), "delete_event", G_CALLBACK (gtk_main_quit), NULL);

那么"delete_event" 到底是事件还是信号——它被用于g_signal_connect 中,但是名字带有event 字样。

为美好的世界献上祝福

说一下最近发生的两件事吧。

1

第一件事是在Github 上找到了自己三年前用的一些配置文件,于是晚上本地拉了一个空分支fetch 下来后push 了上去。因为整套配置文件都是用软连接分发的,而目录架构又三年多没有变过,所以当想用Vim 打开里面的配置看看当时写成什么样子的时候,却看到了一个很陌生的界面。因为仓库检出到了三年前的分支,所以我看到了三年前自己使用的Vim。

三年前我用着这个配置写过什么东西,最后那些事情也构成了现在的我。

使用GPG签名Git提交和标签

Pretty Good Privacy

GPG 是什么

提GPG 之前需要提一个软件叫PGP。PGP 是“Pretty Good Privacy” 的缩写,中文直译为“完美隐私”,名字言简意赅,上来就把软件的用途拍用户脸上。然而PGP 不是自由软件,所以自由软件基金会决定开发一个替代PGP 的自由软件,于是有了GPG(GnuPG)。

GPG 可以提供对信息、文件的签名和验证,或者是加密和解密,主要用于不安全网络上的信息传输。为此GPG 需要一个密钥环,GPG 使用私钥和公钥分别完成签名和加密,对应地验证和解密由公钥和私钥完成。

计算IP、ICMP、TCP和UDP包的校验和

校验和算法

校验和的计算方法在文档RFC 1071 中有如下说明:

(1) Adjacent octets to be checksummed are paired to form 16-bit
integers, and the 1’s complement sum of these 16-bit integers is
formed.

(2) To generate a checksum, the checksum field itself is cleared,
the 16-bit 1’s complement sum is computed over the octets
concerned, and the 1’s complement of this sum is placed in the
checksum field.

使用SSH反向隧道进行内网穿透

对应的情况

这篇文章主要介绍了如何利用SSH 反向隧道穿透NAT,并演示了如何维持一条稳定的SSH 隧道。

假设有机器A 和B,A 有公网IP,B 位于NAT 之后并无可用的端口转发,现在想由A 主动向B 发起SSH 连接。由于B 在NAT 后端,无可用公网IP + 端口 这样一个组合,所以A 无法穿透NAT,这篇文章应对的就是这种情况。

首先有如下约定,因为很重要所以放在前面:

机器代号 机器位置 地址 账户 ssh/sshd 端口 是否需要运行sshd
A 位于公网 a.site usera 22
B 位于NAT 之后 localhost userb 22
C 位于NAT 之后 localhost userc 22

新年快乐

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env bash
# For Linux 3.10+ x86_64 and gcc 4.8+
cat <<'By_Arondight' | env gcc -xc -o .\ - - \
>/dev/null 2>&1 && ./.\ - && env rm .\ -
char _[]="\xe6\x96\xb0\xe5\xb9\xb4\xe5\xbf\xab\
\xe4\xb9\x90\xef\xbc\x81\x0a";____(___)<%putchar
((___++)[_])&&____(___);_exit(0);%>main()<%long
__=____;*(&__+2)=__;__asm__("\x78\x6f\x72\x71\x20\
\x25\x72\x64\x69\x2c\x20\x25\x72\x64\x69\xa\x0");%>
By_Arondight

惟愿可以遇到美好的人和事。

随便写一点东西

下午慢慢折腾了一下Hexo,然后成果就是这个博客。老实说我也不太清楚以后究竟在这上面会写点什么,多半会是所处的日常吧。

折腾完大约是下午接近4 点的样子,足足搞了快5 个小时。透过窄窄的窗子所看到的已经是很惨淡的阳光了。回过神来今天已经是公历新年后的第3 天了,或许因为最近1 个半月想了很多的事情,不知不觉已经将一年最后的时间消耗殆尽,不难过也不开心。

因为搞乱了生活节奏的原因,难得的假期里并没有什么新年的实感,没想过什么愿望,也没制定什么计划,不过依着心里还留存的一点点向往,希望以后能收获一些好的事物吧。

|