原来 divert 还要指定ipv4…

最近发现本子的IPv6不能用了…… 一开始还以为是学校路由器有问题后来发现win下可以用…… 另外,刚开机可以用……而且ping6的同时tcpdump会导致系统死锁…… 所以怀疑是软件问题之后想起来,最近为了让新买的Desire能上网,让本挂在无线网上面,设置成了网关…… 还带NAT的……启动那个脚本之后,果然IPv6就挂了……删掉divert 8668 ip from any to any via msk0之后,果然就好了…… 但是我指定的明明是ip,应该是IPv4吧……去往上搜,搜到了FreeBSD 6的Errata,里面说,因为divert套接字不支持IPv6,所以指定ip的话,IPv6的包会被丢掉…… 要指定ip4这样……原来ip指的是所有IP包么!改成divert 8668 ip4 from any to any via msk0果然就一切正常了…… 不能想当然啊…… 另外,这个问题FreeBSD 6就有了,到现在divert套接字还是老样子么…… 真是没人干活啊…… 至少对于divert和v6特殊处理一下么……

折腾

折腾了几天,搞了各种事情* 升级Avant Window Navigator到trunk(0.3.9)有一大堆的事情,比如说:# bzr up之后,有冲突,干脆全部干掉重来。发现configure有问题,引用了莫名其妙的ac_python_version变量,这个东西哪里都没有。只好手动改成2.6。# 引用了libdesktop-agnostic,ports里没有,上网去发现貌似也在launchpad上边,可能也是awn这群人搞的,遂bzr co下来# 结果编译的时候有诸多问题,上网去,发现有bug-report,说是vala版本太新,而且他还branch了一个various-fixes分支出来# 第一次听说vala,貌似是利用gobject这套系统,配合一个类似于C#的语言,给C以面向对象能力。编译的时候先弄成C再编译# 再bzr co了那个fixes branch,终于好了。回头对付awn,还算比较容易# 新版多了个curve模式,貌似速度也好不少,稳定性也是,看来这个rewrite还不错* 升级awn-extras也有不少事情:# 发现里面的各个菜单组件都或者崩溃或者没有程序菜单,追溯到python-gmenu,最后看调试信息,发现没有applications.menu文件# 本来想生成一个完了,但是下了个菜单编辑工具alacarte,发现这个里面已经有程序菜单了…… 而且gnome-panel也有…… 标准不统一啊……# 之后再查资料,发现说XDG这套标准允许有前缀,并且通过locate得知有一个gnome-applications.menu在恰当的地方# 最后通过把XDG_MENU_PREFIX设为gnome-解决# 之后又是发现那个Media Player Applet不能放大的(不是文件大小)视频。怀疑和之前totem的问题一样# 看代码发现用的playbin这个gstreamer组件,直接gst-launch,果然出错,而且信息和totem的一样# 上网搜了一下,有人说totem的pkg-message里说了这个问题,果然有…… 用了就好了# 说明这个问题不只totem有,用gstreamer的都有…… 为啥默认的那些shm的参数那么小……* xps文件查看上两天有人发来xps文件,不能看…… 去网上下了XPS Essentials装,结果wine运行说有gdiplus的函数没实现…… 搜了之后,发现新版wine实现了,遂下载新版,结果换了一个函数…… 只好拷了一个gdiplus.dll过来,运行倒是可以,就是换页要好几秒……于是去网上找开源解决方案,找到ghostxps,后来发现就是ghostscript那个公司做的。直接转pdf,10M的xps变成了5xxK,但是里面图片质量很差。去网上看了一下,对latex转pdf有人说应该先转ps再ps2pdf,应该是同理。但是直接转出来的ps竟然有4xxM…… 再转pdf,有17M,还能忍受,质量很好* skypebsd ports里面那个skype是static的2.0.0.72-oss版,我输入不了中文,遂尝试新版。结果新版2.1.0.xx的dynamic版都会卡死在futex系统调用上,而static版不但不能输入中文,还没有声音……搜索得知,新版用了pulse,遂用rpm安装alsa的pulse插件,linux的pulse库等,结果运行时说shm_open没有实现…… 还是不行又尝试装了alsa的oss插件,并且设为默认,这次终于有声音了,但是…… 不能录音……最后还是回归老的了……* 自动挂载本来我山寨了一个自动挂载脚本,利用devd的CDEV建立事件,在ntfs/*和msdosfs/*出现的时候,自动挂载到/mnt/*结果现在有了iPod,就有问题了:我一般只是想充电而已于是要挂载自动camcontrol eject,问题是CDEV事件不包括设备名,只有label。在找不到反查工具的情况下,只好自己从label查设备大致上就是一个枚举,利用gpart结果得到所有设备,然后用glabel得到上面的label,并且进行匹配,符合的就是对应设备。搞的时候发现,glabel status的第一行输出一直是Name Status Components,而Name下面显示的就是label,而且Name的最后一个字母严格和label最后一个字母对齐,通过这个,可以保证从输出结果得到的label是完整的label,不多不少。现在碰见iPod就会自动卸载了,真不错……* easytag的崩溃问题本来easytag给某些歌写tag的时候,总是崩溃。这两天研究一下,发现都是不正常的ape tag引起的。虽然easytag本身只写id3 tag,但是他写的时候,会先清除ape tag,而要清除就要先解释,于是就挂了…… 我搞了py-apetag下来,结果删tag的时候也说不能解释……你们删除tag就不会简单地先删掉再建一个空的么…… 非要解释……最后手动把文件结尾APETAGEX开始的东西全干掉,世界清静了…… 感想:# gstreamer好强大,我视频库里那些视频都可以放…… 虽然对字幕的支持还是令人怀疑# 发现一个好东西,gst-editor,类似于windows里directx开发包里那个编辑directshow filter图的那个东西,这里是编辑gstreamer …

Continue reading ‘折腾’ »

Hacking FreeBSD to change manual page width

I don’t like the fixed width of manual pages, since I have such a wide terminal, but the man pages only occupied the left part.By inspecting the process launched, it seems like that there are several processes related:sh -c (cd /usr/share/man/en.UTF-8 ; /usr/bin/zcat /usr/share/man/en.UTF-8/man1/ls.1.gz | /usr/bin/tbl | /usr/bin/groff -S -Wall -mtty-char -man -Tutf8 | /usr/bin/col …

Continue reading ‘Hacking FreeBSD to change manual page width’ »

利用 bcdedit 解决 Vista 启动问题

前一段时间,把系统原来的还原分区(一个NTFS)清了,在那里装了FreeBSD 8/amd64。之后发现,FreeBSD的分区引导记录很不行,他只找活动分区启动,而不管自己是哪个分区的引导记录(大概也不知道……),所以从原来的BSD切换到新装的很麻烦,要手动改活动分区。于是就装了个grub4dos,折腾了半天终于好了。装完之后,尝试新菜单,发现Vista进不去了…… 提示大概是这样的:\Windows\system32\winload.exe 文件未找到或者已损坏 错误0xc000000e。试了一下,发现Vista启动菜单里面其他的项目也用不了了。想了一下,多半是干掉那个还原分区之后,Windows所在的分区成了第一个Windows能够认出来的分区,于是这个Boot Loader分不清楚了,不能在老地方找到这个文件了……先尝试把那个新装了BSD的分区类型改成NTFS,结果Windows还是不认…… 改回去之后,我想只好手动修改启动数据库了。Vista的启动数据库,不像XP就是根目录下面有一个boot.ini,而是在根目录下面\Boot\BCD这个文件里面,还是个二进制文件…… Windows就给了一个bcdedit来弄。因为进不了Vista,我尝试着用虚拟机里的XP来跑。这个虚拟机同时也把主机的真实硬盘作为第二块硬盘挂在上面。启动虚拟机,尝试了一下,bcdedit竟然能用,于是拷到WinXP这边来。主机Vista所在的盘在虚拟机里面是D盘,所以在运行bcdedit的时候,后面都要加上/store d:\boot\BCD 。改的过程其实很少。bcdedit原来那些命令也都能用。命令里面某一项的GUID,可以通过直接运行 bcdedit /store d:\boot\BCD 来了解,最上面{xxxxxxxx-…..}那个就是了,一串很长的十六进制数。默认项这个可以用{default}代替。首先,把默认项指定成Vista(原来是老BSD):bcdedit /store d:\boot\BCD /default <Vista项的GUID>然后设置默认项设备为分区d(一开始我设了c,结果还是不行…… Windows还是把那个算进去了么……)bcdedit /store d:\boot\BCD /set {default} device partition=D:bcdedit /store d:\boot\BCD /set {default} osdevice partition=D:这就好了。效果不用重启都能看见。还是利用虚拟机,qemu或者VirtualBox都可以,直接挂主机硬盘,Vista果然跑起来了…… 不过一会儿就蓝屏了……

gdb的出错消息

一直以来,运行gdb,之后输入 attach <PID>,会收到一些错误消息:> gdbGNU gdb 6.1.1 [FreeBSD]Copyright 2004 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type “show copying” to see the conditions.There is absolutely no warranty for GDB.  Type “show warranty” for details.This GDB was …

Continue reading ‘gdb的出错消息’ »