delphij's Chaos
选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……
作弊条
首次创建git库:git svn clone
\[svn代码库到HEAD分支的URL\]\[git代码库名\]例如,对于 FreeBSD,对应的URL为 http://svn.freebsd.org/base/head/
一般来说,从远程svn库复制需要的时间会比较长,也可以考虑首先在本地建立一份镜像,然后直接用 file:/// 去指定。
接下来编辑 .git 中的 config 文件,找到类似:
[svn-remote "svn"]
url = file:///downloads/mirrors/freebsd/base/head
fetch = :refs/remotes/git-svn
对于不同的分支,可以继续添加新的svn-remote小节,例如:
[svn-remote "svn-releng-8.2"]
url = file:///downloads/mirrors/freebsd/base/releng/8.2
fetch = :refs/remotes/git-svn-releng-8.2
添加完之后,用git svn fetch svn-releng-8.2这样的命令来同步对应的分支。
本地开发分支比较简单,只需git checkout -b
\[你的分支名字\]\[源分支\]即可。
如果需要在另一个系统上做开发,则需要一些特别的步骤。
首先是git clone远程系统上的代码库。然后编辑.git/config,其中应该有类似这样的部分:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = server:/repo/freebsd.git
为svn的branch建立对应的remote:
[remote "svn"]
fetch = +refs/remotes/*:refs/remotes/svn/*
url = server:/repo/freebsd.git
然后git pull,在git branch -r时就能看到远程系统上的git-svn branch了。这个主要是在git merge的时候比较有用。
Read more...我一直是非常反对重装系统的。从技术上说,今天的折腾并不算是重装系统,不过因为把机器上所有的数据(是的,文件系统全部都拆掉重建了)都重写了一遍,所以还是算做了一次吧。
在采购 家里的路由器 的时候,选择了 WD 的 AV-25【1】 系列硬盘。我选的那款硬盘使用的是新式的 AF (4kiB扇区)格式。
FreeBSD 使用的主流文件系统 UFS 和 ZFS,以及 ahci(4) 驱动都 直接支持 4kiB 扇区。但是,目前市面上的AF硬盘,为了与先前的 BIOS 和操作系统(主要是 Windows XP)兼容,对于 ATA IDENTIFY 的回应,原先返回扇区尺寸的位置变成了逻辑扇区尺寸,这种做法俗称512e,即硬盘通过固件或其他方式模拟山区尺寸为512字节,并处理相关的回写操作。
以512字节为单位进行读写时,在AF格式的硬盘上是低效的。FreeBSD的 ahci(4) 驱动和对应的 ada(4) 驱动会设置 stripesize 以反映驱动器采用的实际物理扇区尺寸,但文件系统并不直接识别这个尺寸。
对于 ZFS 而言,其扇区尺寸是在创建时以 ashift 值写死的,目前在命令行没有办法指定这个值,也不能在创建 ZFS 之后修改。如果修改内核令其使用 GEOM 的 stripesize 来产生 ashift,对 AF 硬盘则会出现内核得到的 ashift 比先前已经存在的 ashift 大,从而导致 ZFS 无法识别的问题(如果创建 ZFS 时已经使用了更大的 ashift 则没有关系)。因此,必须想办法让 ZFS 在创建时就知道扇区尺寸是 4KiB。
FreeBSD 5.3-RELEASE 时新增了一个调试用的 GEOM class —- gnop。可以用它来封装其他 GEOM 对象,并改变扇区尺寸,方法是 gnop create -S 4096 /dev/gpt/store (此处 /dev/gpt/store 是一个按 4k 对齐的 GPT 分区的 label)。gnop会产生一个新的设备节点,/dev/gpt/store.nop,其向系统汇报的扇区尺寸是我们指定的 4096 字节,而不是驱动器汇报的逻辑扇区尺寸 512 字节。
使用这个设备节点创建的 ZFS 就会采用正确的 ashift 值了。
使用 zdb -C pool名字可以检查 ashift 值:对于扇区尺寸为 512 字节的 zpool,其 ashift 是 9,而我们希望的 ashift 值是12。
gnop节点在系统重启以后会消失,但 ZFS 会记住 ashift,因此并不会导致问题。此处也可以 zpool export,gnop destroy /dev/gpt/store.nop 然后再 zpool import 来验证。
经测试,ZFS在知道正确的扇区尺寸以后,持续写操作的性能可以提高至少一倍。
Read more...上回书说到通道服务器的问题。在 /etc/csh.cshrc 中添加下列内容,可令系统同时启动gpg-agent和ssh-agent:
setenv SSH_AUTH_SOCK /dev/null/nonexistent
if ("${TERM}" != "su") then
[ -e ~/.gpg-agent.csh ] && source ~/.gpg-agent.csh >& /dev/null
echo UPDATESTARTUPTTY | /usr/local/bin/gpg-connect-agent >& /dev/null || /usr/local/bin/gpg-agent --daemon --ignore-cache-for-signing >& ~/.gpg-agent.csh && source ~/.gpg-agent.csh >& /dev/null
[ -e ~/.ssh-agent.csh ] && source ~/.ssh-agent.csh >& /dev/null
[ -e ${SSH_AUTH_SOCK} ] || ssh-agent -c -t 20m >& ~/.ssh-agent.csh && source ~/.ssh-agent.csh >& /dev/null
endif
启动gpg-agent的作用是在一段时间内不用重新输入gpg的密码。
Read more...主任说:冗余不做,日子甭过;备份不做,十恶不赦。
以前一直是每天手动给自己的新服务器做备份,最近找时间写了一套脚本来自动完成这个事情。
脚本没啥复杂的,大体的思路是这样:
由于是通过 Internet (从AS6939送到AS33651)传递快照,所以使用了压缩。用ssh来完成传输的考虑主要是因为它能够做到互相验证身份。
Read more...我个人比较喜欢复杂的随机生成的密码。这是一个JavaScript的密码生成器,完全裸奔的界面,可以自行设定字母、数字和特殊符号出现的概率(默认是字母=3×52,数字=7×10,特殊符号2×27,或者78:35:27的关系)。
使用方法很简单,设置参数之后按Generate按钮,系统会随机生成希望数量的随机密码。然后从里面挑一个自己觉得容易记住的就可以了。
由于全部计算是在客户端完成(可以自行查看代码来验证),因此可以将其复制到任何支持网页的地方使用(采用任何GPL授权的软件除外)。
Read more...再发一次。
FreeBSD基金会是符合美国税法501(c)3款的非盈利慈善机构,它为 FreeBSD 的开发以及全球范围内的开发者会议活动提供资助,并帮助 FreeBSD Project 的开发人员提供法律咨询。
FreeBSD基金会今年的捐款目标是 $350,000,目前已经募集到$226,066的捐款。即使是小额捐款也可帮助 FreeBSD 基金会,在美国纳税人通常还可在一定程度上抵税。
捐款网址: http://www.freebsdfoundation.org/donate/。
其他信息请参见 捐款将用来做什么、基金会2010年12月公告、如何申请资助、基金会财报。
Read more...在很久很久以前就有人提出IPv4将要用完的事情,然而当时IPv4地址空间还很充裕,而且NAT还没有非常广泛地使用。于是这事说着说着就变成了一个狼来了的故事,不停地有人嚷嚷IPv4地址要用完了,而这个用完的日期则在600天、400天和300天附近的时候反复来回地拉锯了很久。
和狼来了那个故事稍微不太一样的是,喊狼来了的那些人,例如大的IPv6 ISP和运营商已经早早做好了准备,而那些把这故事当做狼来了而毫无警惕的人则只好手忙脚乱地应付了。
阿宅的一大恶趣味是喜欢仅仅因为"Because we can"而去做一些事情,我也是。我自己的网站的第一个DNS AAAA记录是2007年7月31日创建的,而FreeBSDChina.org于2007年8月4日也已经开始在IPv6上提供服务。由于当时条件所限,在当时我能够使用的唯一的测试手段是登录到一台位于北美的有双栈支持的测试服务器来进行测试。到了北美以后,因为这里的住户 IP 地址是很少发生变化的,我开始在家搭建 IPv6 路由,到后来在北美地区托管了一台服务器,基本上一直都是以双栈的方式接入Internet了。目前,我拥有两个/48的IPv6地址段和两个/64的IPv6地址段。
时间过得很快。今年年初的时候我看到了一个报道说 IPv4 地址大约还剩不到1年了,于是开始关注相关的报道。根据 Hurricane Electric 的估算,今天距离 IPv4 中央地址池的地址耗尽还有大约 47 天。中央地址池的耗尽对最终用户并不会产生立即而直接的影响(总有各种各样的办法来减少IP地址的占用,大企业或者ISP可以用NAT,双层甚至三层NAT等技术来减少实际使用的IP,等等),但是无论如何,我们之前所熟悉的那个互联网的日子已经所剩不多了。
Read more...这其实是一个很严肃的话题。
我在酒店或者提供免费wireless访问的地方一般都会拨VPN回家/公司,然后通过那里的路由访问Internet。这个习惯不能完全消除运营商进行的攻击,但能减少能够实施这种攻击的人的范围。
许多地方会提供免费或收费的 Internet 服务给访客,以方便{会议,旅行,占小便宜,蛋疼}等各种心态的人群的需要。但是,这些地方的网络有时会有一些问题,例如,为了方便,往往它们并不会设置任何访问控制手段,或使用公共的密码。
攻击者可以携带一个提供Internet访问的无线接入点,将其配置成与那个公共的无线接入点采用同样的认证方式。例如,这个人可能在隔壁的房间,很明显,在使用那些认证信息时,你的计算机有很大的可能会连接到攻击者提供的接入点。在你的系统看来,攻击者此时具备与运营商相同的地位:他可以劫持DNS【实际上,第一次访问Internet时弹出的那个登录页面通常就是通过DNS劫持来实现的】,替换你访问的网站(比如银行,邮箱,等等),或进行更复杂一些的攻击,例如通过劫持某个子站来进行XSS,等等。
拨VPN回家可以避免受到这类攻击的侵害:你和VPN服务器要互相做身份验证,并且对通讯内容进行加密。
当然,这样做并不能阻止你的VPN服务器的Internet提供者进行的攻击,但是,相对来说,这类攻击要更容易追查(因为你知道应该去找谁)。
Read more...我完全无法理解为什么会有人愿意被一个应用程序绑住。无非两种情况:一种是这个应用程序是花钱买来的,一种是这个应用程序没花钱。花钱买来的程序,没啥可废话的,直接要求对方提供就好了。如果不是花钱买的,可选的东西那么多,为什么非得选那么一个破玩意呢?
吐槽完,推荐一个网站: 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...