选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……
我完全无法理解为什么会有人愿意被一个应用程序绑住。无非两种情况:一种是这个应用程序是花钱买来的,一种是这个应用程序没花钱。花钱买来的程序,没啥可废话的,直接要求对方提供就好了。如果不是花钱买的,可选的东西那么多,为什么非得选那么一个破玩意呢?
吐槽完,推荐一个网站: http://www.showmycode.com/。你懂的。
Read more...有时,会有需要接入远程的 IPv6 网络。例如,办公或网吧等环境可能不提供 IPv6 接入的条件,或者需要接入更高安全级别的网络等等。
使用 OpenVPN 提供 IPv6 服务需要的条件包括:
一些关键的配置
在 tap0 上配置一个固定的 IPv6 地址。例如,你的 IPv6前缀::1/64。
在 /etc/rtadvd.conf 中配置:
tap0:\
:addr="你的IPv6前缀::":prefixlen#64:
此处64为用于VPN的前缀长度。
OpenVPN配置为使用tap设备。
OpenVPN需要有一个 up 脚本,类似这样:
#!/bin/sh
/sbin/ifconfig tap0 内网IPv4地址/掩码
/sbin/ifconfig tap0 inet6 IPv6地址 prefixlen 64
这个配置主要是为了避免在重启OpenVPN时丢掉网卡的IPv6配置。
客户端的连接后脚本大致如此:
#!/bin/sh
/sbin/ifconfig tap0 inet6 accept_rtadv auto_linklocal
/usr/sbin/rtsold tap0
安全考虑
Read more...今天跟 刘老师 讨论交换机问题的时候想到的。记一下这条命令。
tcpdump -nn -v -i em0 -X -s 1500 -c 1 'ether[20:2] == 0x2000'
原則上,在 Internet 提供服務的機器,應提供對應的 whois 記錄,以便在出現問題時能夠與事主及時聯絡。北美地區的數字資源,例如 IP 地址、AS號等等,是由 ARIN 負責分配的。
對於比較小的地址塊, ARIN 通常並不直接分配(目前 ARIN 分配 IPv4 地址的最小單元是 /23)。往往這些小地址塊是從上游 ISP 獲得的,根據規定,上游 ISP 有責任為客戶註冊相應的信息備查。
在開始獲得 IP 地址之前,需要先到 ARIN 註冊 Web 賬戶和 POC Handle。POC Handle 隨後提交給 ISP 去做 SWIP 註冊。對應的表格是"ARIN-REASSIGN-DETAILED",填妥之後交給 ISP,由 ISP 去 ARIN 註冊。成功之後,在 ARIN 的 Web 賬戶裡就可以看到自己的 Org ID(未來在其他ISP也可以重複使用) 並進行管理了。
附帶說一句,ARIN在採用REST的Whois以後,whois信息的更新基本上是即時生效的了。在幾個月前,類似的操作需要多至一天才會反映到 whois 系統中。
以上。
Read more...今天去 中国驻旧金山总领事馆 换了护照,这里记下过程,希望对别人有用。
需要准备的材料:
具体过程如下:
工作日早上9点开车到达旧金山 Japan Town 的 停车场,然后从 Geary Blvd 上来(中国驻旧金山总领事馆的地址是在 1450 Laguna Street,但护照及签证处则是在 Geary Blvd 上,直接走过去即可)。停车的收费标准是 $2/hr。
进入签证大厅时需要通过安检。和美国驻华大使馆类似,这里原则上也不允许携带照相器材(不过这次专程从 Redmond, WA 飞过来换护照的老康同学还是带了手机),而且也没有地方可以存包,所以我把手机等物品都留在了车上。
进入签证大厅之后首先在右手边取号(护照换新和签证是两个不同的按钮)。由于之前没能准备小二寸照片,因此首先在左手边的拍照柜台拍照片,大约3分钟之后即可取得。由于现场拍照的人比较多,因此照片不会由照相柜台进行裁剪,而是由在护照窗口的工作人员将照片剪下。
换护照会把申请表、照片、原护照、复印件、现金支票、预付费的信封和排队的号收走。正常情况下,在办完之后申请人手里应该有下面这些东西:
由于来办理签证和护照的人都不少(美国西海岸多个州以及北加州都归旧金山总领事馆负责),因此要早去排队。从进门到办完全部手续所需的时间大约是60-90分钟。
Read more...VirtualBox可以在远程运行,并把界面通过 ssh 的 X11 转发放到管理员的桌面。
在 FreeBSD 上可以用 port 来安装 VirtualBox:
# portsnap fetch update
# cd /usr/ports/emulators/virtualbox-ose
# make install clean
接着配置 VirtualBox 所需要的内核模块:
echo 'vboxdrv_load="YES"' >> /boot/loader.conf
echo 'vboxnet_enable="YES"' >> /etc/rc.conf.local
将需要使用VirtualBox的用户添加到vboxusers组:
# pw groupmod vboxusers -m delphij
安装 xauth:
# cd /usr/ports/x11/xauth
# make install clean
重启系统,或手工加载模块之后,就可以从远程 ssh 进来运行 VirtualBox 了:
desktop% ssh -Y vsvc.example.com # 【注1】
vsvc% VirtualBox
VirtualBox的管理界面会出现在客户端系统上(当然,在列出文件时仍然是服务器端的文件)。
在安装、调试之后,就可以用VBoxHeadless来启动远程的虚拟机了。
【注1】这里使用的是"Trusted Forwarding",如果远程主机不可信,这样做会提高安全风险。
Read more...之前 @quakelee 提的一个问题(通道上登录第二台机器作为跳板登录第三台机器,但不把ssh私钥传到中间那台机器上)。如果shell是csh,在 ~/.cshrc 中加入:
source ~/auth.csh
[ -e ${SSH_AUTH_SOCK} ] || ssh-agent -t 15m -c > ~/auth.csh && source ~/auth.csh
然后所有的 csh 就可以使用同一个ssh agent了。
注意事项:
之前家里用的那个 Linksys WRT310N 路由器就有相当严重的问题(不排除是DD-WRT的问题),如果连续若干天不重启的话,无线网络的连接有时就会失败。部署新的路由器之后,设置了一个cron任务令其每天早上5:30重启:
30 5 * * * /usr/bin/ssh root@10.253.87.254 reboot > /dev/null 2>&1
当然,执行cron的那个用户需要使用ssh key来登录WRT310N,并事先将key传到WRT310N上面。
由于 FreeBSD 默认会对链路状态的变化进行记录,因此只要查看系统日志就可以知道cron是否真的执行了。
在之前的部分我们讨论过关于功耗的问题。在实际使用过程中,我发现 powerd(8) 对于 CPU 占用的计算是有问题的:它计算的是所有CPU的占用率之和,而比较合理的依据则是占用率最高的CPU的占用率。不过,对 Atom 来说 powerd 能够产生的影响有限,因此如果真在使用Atom系统的话不一定真的需要这个patch。下面这个patch可以让 powerd 更有效地 throttle CPU 的频率:
Index: usr.sbin/powerd/powerd.c
===================================================================
--- usr.sbin/powerd/powerd.c (revision 213306)
+++ usr.sbin/powerd/powerd.c (working copy)
@@ -127,6 +127,7 @@
{
static long *cp_times = NULL, *cp_times_old = NULL;
static int ncpus = 0;
+ int newload;
size_t cp_times_len;
int error, cpu, i, total;
@@ -151,7 +152,7 @@
return (error);
if (load) {
- *load = 0;
+ *load = newload = 0;
for (cpu = 0; cpu < ncpus; cpu++) {
total = 0;
for (i = 0; i < CPUSTATES; i++) {
@@ -160,8 +161,10 @@
}
if (total == 0)
continue;
- *load += 100 - (cp_times[cpu * CPUSTATES + CP_IDLE] -
+ newload = 100 - (cp_times[cpu * CPUSTATES + CP_IDLE] -
cp_times_old[cpu * CPUSTATES + CP_IDLE]) * 100 / total;
+ if (*load < newload)
+ *load = newload;
}
}
对路由器这样的设备来说,当有软件 bug 的时候,我们往往希望系统自己恢复并报告问题,而不是等待用户去用调试器现场调试。想要达到这个目的,可以使用 watchdog 机制。在这款主板上有两个 watchdog,其中系统没有自带的那个 Winbond watchdog 的驱动如下:
Read more...操作是否对齐是一个简单而容易忽略的性能(有时是可靠性)问题。对齐主要是指读写操作不产生不必要地跨越存储设备上原生存储单元的访问,这里的存储单元说的是在访问路径上的任何设备,它可以是外存,也可以是内存,甚至是CPU附近或内建的快取缓存,等等。
在C/C++中,对于内存的访问多数是在编译时可以预测的。一般来说编译器会在编译过程中自动对数据结构进行补足(除非由于某种需要而指定了__packed),并对可能产生这类问题的冒险行为,例如将一个较短的数据类型的指针cast成一个较长数据类型的指针进行警告。因此,在希望有较高性能的硬件平台上,不对齐的内存字操作往往会导致硬件异常(Alpha、IA64、SPARC64等)。但是对于便宜的PC硬件(x86和amd64)来说,为了保证和先前硬件的兼容性,它们往往会选择默默承受这样的问题,并在CPU的microcode中将这类操作转换成两次读操作。
通过仔细地编写C代码,可以在某些情况下减少非对齐或比字长短的操作,许多C的字符串处理函数都可采用这种方法。例如,在实现 strlen(3) 函数时,可以采取下面的策略:
上面只是关于 strlen(3) 采用的技巧的粗略介绍。当然,由于好的程序绝对不会将 strlen(3) 放在关键路径上,因此这个改进的现实意义并不太大。实际测试中,这个改进版本的 strlen(3) 平均比按字节比较的版本快5.2倍,而对非常短的字符串则只有最多16%左右的性能损失。
对于外围设备的操作对齐相对来说更复杂一些。例如,采用4k扇区的硬盘,或者采用RAID的磁盘阵列,其固件需要将写操作拆成和物理扇区或stripe同样的大小,将数据读出,然后再重写。这个过程比较耗时(实际测试显示,在 WD AV25 硬盘上,对齐的4k写操作和未对齐的4k写操作的IOPS可相差达60倍),对于RAID,如RAID5的情形,还可能进一步引发一致性问题。
要避免这类问题,唯一的办法是对存储格式进行合理的规划。例如,采用的记录尺寸应为块尺寸的整数倍(对于多数 Unix 文件系统来说这并不是问题),或采用日志的方式将写操作收集起来先行写入整个存储块,然后在提交阶段将写操作凑成整块来做。
不过需要注意的是,操作系统的存储驱动必须能够告诉文件系统如何对齐。FreeBSD中,这是通过g_provider对象的stripesize和stripeoffset属性来暴露给文件系统的。如果操作系统本身没有提供对齐支持,在分区时强制分区以整物理扇区,而不是整逻辑磁道(17个512 byte扇区)的位置开始,也可以在一定程度上缓解这个问题。
Read more...