12月 152013
 

最近我把个人资料迁移到了一个新笔记本电脑上,旧电脑不再使用了,需要清除上面的个人数据。旧电脑是 Windows XP 与 Linux (Fedora 19) 的双系统,个人资料在 Linux 下,所以任务是清空 Linux 系统,保留原有 XP 可用。

由于重要的数据都已导出,所以这给了我一次在实体机上尝试 rm -rf / 的绝佳机会。众所周知,这项操作需要 root 权限 (su/sudo),而且 GNU 的 rm 默认已不再允许在顶级根目录下这样做,所以真实的命令是:

sudo rm -rf --no-preserve-root /

我是在原 Linux 系统图形界面的虚拟终端里做此操作的。过了一会儿,突然虚拟终端不见了,桌面背景等都还在。在图形界面试图新建虚拟终端无效。于是我切到控制台终端,发现控制台一直是等待状态,没法登录。(猜想是相应的程序都没了。)切回图形界面后发现鼠标键盘失去响应,但桌面背景还在。此时已经做不了什么有意义的操作,于是按电源键关机了。

之后用 Live USB 开机登录,挂载硬盘分区,发现原 Linux 的文件并没有全删光,还残留若干空目录,也有非空目录下有残余文件,$HOME 下也有几个残余文件(视频目录里有东西!$HOME 下还留着一个 PDF 文档!),不过所剩无几。

不过我们知道,Linux 下的 rm 本质上是去掉文件系统中的链接 (unlink),硬盘上的数据并没有擦除。使用数据恢复工具还是有可能找回其内容的。要真正地清空硬盘分区,需要进行“低格”,即低层格式化。Linux 上的 dd 命令可以做到这一点。如下 /dev/sda7 是一个 Linux 分区,我们通过往上面写入全零 (/dev/zero) 来擦除数据(使用 /dev/urandom 写入随机数也是可以的)。

[liveuser@localhost~]$ sudo dd if=/dev/zero of=/dev/sda7 & pid=$!

注意其中用的是一个 & 号,意为放后台运行。后面将进程号赋值给 pid 变量,是为了后面可以方便地查询进度,毕竟受限于磁盘 IO,dd 对于几百 GB 的硬盘是很慢的。可以通过向 dd 命令发送 USR1 信号获取当前进度:

[liveuser@localhost ~]$ sudo kill -USR1 $pid
[liveuser@localhost ~]$ 512417+0 records in
512417+0 records out
262357504 bytes (262 MB) copied, 17.5086 s, 15.0 MB/s

由于耗时实在太长,我是晚上把电脑一直开着,第二天去看的结果。最终擦写完成后会显示类似下面的信息:

[liveuser@localhost~]$ dd: writing to ‘/dev/sda7’: No space left on device
210183058+0 records in
210183057+0 records out
107613725184 bytes (108 GB) copied, 8295.38 s, 13.0 MB/s

可见,这个 108 GB 的分区用了两个多小时才擦写完。类似地对每个 Linux 分区执行上述 dd 命令,即可把所有数据擦除干净。有人会建议多擦写几次(3次?)以更加确定数据不会被恢复。不管怎样,注意务必写对分区编号,不然把(未备份的)有用数据擦掉了就出大事了。(如果你要清空整个硬盘的话,注意把硬盘设备名弄对。)

清除数据的任务到此就宣告结束了。不过,对于双系统来说,正常的引导是通过 GRUB 来实现的,而 /boot 分区或文件在前面已经被擦除了,所以开机会进入 GRUB 的 rescue shell 中。我没有搞明白如何在这里引导进入 XP 系统,于是用 Windows 系统光盘恢复引导。由于手头没有 XP 安装盘,当时用的是一个 Server 2003 的安装盘。不过操作是一样的,这个文档里有详细说明。简单来讲,就是进入 Windows 安装盘修复模式后执行 fixmbr 命令。

4月 042013
 

Fedora 中午社区三月的线下活动于 3 月 23 号在北京图灵公司的一个办公室兼活动室举行。这次活动是和北京 GNOME 用户组 (BJGUG) 联合举办的,除了 Fedora 社区外,BJGUG 还召集到了 Ubuntu、openSUSE 和中标软件的社区贡献人员爱好者等。聚会主题是讨论社区建设中的问题。

我做了题为《Fedora 及其中文社区》的报告,介绍了 Fedora 的主要特点,以及中文社区的现状。这里面要传达的主旨是两点:1) Fedora 是一个强调自由、友爱、杰出、前卫的发行版,这四点是社区的四原则,也可谓核心价值观。这是对社区的定位,也是社区发展的基石。2) Fedora 中文社区是一个活跃而友好的社区,社区的主要沟通方式是邮件列表IRC 聊天室

之后的问答交流环节,有问及 Fedora 与红帽的具体关系。简单说来,Fedora 是一个社区项目,红帽对它进行赞助。Fedora 的新版本命名、发布管理等事务都由社区主导,红帽也不对社区维护的站点的内容负责。有问及与其他 Fedora 的本地化社区的交流,我想现在并没有多少。后面李震宁讲到和台湾的有关 Linux 推广的交流,不过在 Fedora 这里中文社区本来就不区分大陆或者港台或者其他地方,只要会说中文就可以。不过我很期待在 APAC 区域的 FUDCon 上,或者其他场合与其他的本地化社区进行交流。有朋友问到 Fedora 中文社区的核心问题是什么,对此我无法给出明确回答。我的一点体会是社区的核心在于人,而非技术。对于技术社区而言,虽然最初是对技术的兴趣使不同的人来到社区,但是社区发展是要人来推动的。具体地说,是需要活跃的贡献人员积极交流、分工协作,把社区的事务活动做好,使社区繁荣发展的。

承前所述,社区目前的一大问题是缺少贡献人员。这个问题是众多发行版社区、GNOME 项目等共有的。如何壮大社区贡献者的队伍,是个很值的思考的问题。这个问题还可以分为两步,一是如何吸引非 Linux 用户成为新用户,二是如何将普通用户转化为贡献人员。对于第一个子问题,我们需要热心的社区成员帮助新手入门。对于新手提问,应该尽量的耐心,多一些提醒和指导,毕竟 Linux 与其他系统差别比较大,新用户需要面对许多习惯的转变,另外老手也是从新手开始一步一步摸索出来的。维护一份面向初学者的高质量的常见问题解答 (FAQ) 会事半功倍。线下活动中加入新手体验和引导环节也会有所帮助。第二个问题是从用户到贡献者。我们应该让普通用户了解到为社区做贡献是一件不难做的事情。报 BUG、做测试、参与本地化翻译、打包、组织线下活动都是做贡献的好方式。做贡献不意味着要付出很多精力,工作之余闲暇时有一定投入就好。相对于日常工作,社区参与更多以兴趣为导向。社区应鼓励普通用户把社区贡献当作力所能及的志愿活动,参与到贡献者的行列中来,壮大贡献人员队伍。

对于中文社区而言,本地化或曰翻译也是很重要的一环。毕竟许多人还是看中文更舒服,或者只能看得懂中文。软件、网站、维基、文档都需要本地化,以帮助更多的中文用户更好的使用 Linux 系统。本地化目前遇到的问题一方面是翻译一致性的保证。不同人对同一词条可能叫法不一,我们得提醒后来的翻译者参照现有翻译以及术语表尽量保持前后一致。另外,软件的多样性需要不同专业背景的人提供恰当的翻译。翻译人员最好有多样的学科背景与专业方向。此外,目前还有发现了翻译问题但不知改报到何处的问题。我在此也给个提醒,GNOME 与 GNU 软件翻译的问题应报到 i18n-zh 邮件列表。Fedora 翻译问题应报到 trans-zh_cn 列表。RPM、Yum 等 Fedora 上游项目的翻译问题暂且也可报到 trans-zh_cn 列表。

最后汇报一下活动的福利。吉拉德 (Gerard) 带去了两件 Fedora 的 T 恤,图灵免费送出了若干本书,李震宁带去了许多年历,此外还有 Ubuntu 贴纸、笔等等。活动结束后大家去立水桥附近一海鲜城聚餐。此行收获颇丰,期待后面再聚。

附上活动照片链接视频链接,我的幻灯片链接

2月 222012
 

几天前,我在系统 Fedora 16 启动过程中 Plymouth 的主题气泡快要充满时,把USB接口的鼠标接了上去,发现之后在 GDM 登录界面,移动鼠标根本不会让光标移动。使用笔记本上的触摸板倒是正常。登录进入系统后,插上U盘测试,根本出不来 /dev/sdb。换其他的USB接口,依然不行。查看日志 /var/log/messages,可以看到大量类似的行(dmesg输出也有类似信息):

Feb 20 22:00:14 localhost kernel: [   34.571048] hub 2-0:1.0: connect-debounce failed, port 2 disabled

上网 Google,看到 Launchpad 上一个 kernel bug 讨论中,不少人遇到过这个问题。其中提到的解决方案之一是重启电脑,修改 BIOS 设置里 USB Legacy Support 或类似选项为禁用,之后进入 Linux 系统,应该不会有新的上述错误信息,USB 接口可以正常使用。再次重启,在 BIOS 中重新启用 USB Legacy Support,然后进入系统,也不会再有类似错误信息。USB 接口也可以重新正常使用。我使用了这一方法,对我的情形的确有效。(然而根据讨论,有的机器上就没有作用)

当然,潜意识告诉我:在启动未就绪时热插拔不是个好主意。不过这究竟会带来什么问题,是否会导致硬件故障,我着实没有搞清楚。

1月 252012
 

我曾经在 Ubuntu 系统上听到过(很响亮的) 终端响铃,但并没有在 Fedora 下听到过,无论是 GNOME 2(Metacity), Compiz, Fvwm 还是 Gnome Shell。今天由于想实验这里的程序, 我着实希望终端响铃可以工作。

无奈的是,最初 Google "linux terminal bell" 相关内容,大多是介绍关闭终端响铃 的文章。不过,后面终于看到了相关的帖子:列表讨论Bugzilla 讨论

最终,我根据 Bugzilla 讨论中第 34 楼 Paul Egan 的描述,(部分)解决了问题。 (感谢他!)下面是简要描述:

在终端下执行

pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell
pactl load-module module-x11-bell sample=bell

然后测试

echo -e "\a"

正常的话,可以听到 glass.ogg 的玻璃声了。在终端 Tab 有不唯一的补全结果时, 在 Vim 中一行行尾处按 l 企图向右移动时,都有同样的报警声。注意这里的报警声 并非旧式的终端响铃(单音beep),而是用 glass.ogg 替代。

讨论内容很有意义,事实上最开始很难相信这是和 PulseAudio、窗口管理器/桌面环境有关的问题。具体是谁的 bug?呃,PulseAudio 开发者表示这应该是在客户端(桌面环境)做(类似 Metacity 的做法),Xfce 开发者则认为这不是他们的问题 ╮(╯_╰)╭

我用的是 Fvwm 窗口管理器,作为窗口管理器用户,解决问题最好的方式还是自己来了。Fvwm 用户可以在配置文件 (~/.fvwm/config) 中的 InitFunction 中添加两行,以在初始时自动执行上面两条命令,基本解决没有响铃的问题。

DestroyFunc InitFunction
AddToFunc InitFunction
# others
+ I Exec exec pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell
+ I Exec exec pactl load-module module-x11-bell sample=bell
# others

事实上,在之前我搜索中,看到有人提到在 Debian 上启用 pcspkr 模块 即可解决问题。然后在我的 Fedora 16 这里,着实没有效果。

另外,在控制台终端 (Ctrl+Alt+F2) 下同样的测试则听不到报警声音,不知为何。

1月 242012
 

LWN 新闻时看到了 Linux 内核的一个本地提权漏洞。zx2c4 博客有详细介绍,强烈建议阅读。

源代码见这里,适合 Fedora 的版本在此。如果你只是想试试,下载下来源代码保存为 mempodipper.c,然后:

gcc mempodipper.c -o mempodipper
./mempodipper

然后在得到的新 shell 里:

sh-4.2# whoami
root

如果输出如上所示是 root,那么表明已经中枪了 😀

这个漏洞已经在 1 月 17 号被 Linus 在内核代码树修复,参见这里

Fedora 已经有新的内核更新解决这个问题,截止现在 (date -d "1970-01-01 1327392894 sec UTC") 已经出现在 testing 仓库, 但还没推送到 updates 仓库中。

1月 232012
 

有一本书叫 "Open Sources: Voices from the Open Source Revolution", 是一些开源界人士写的散文的集合,内容涉及社区精神、GNU 和 FSF、Linux 历史、 商业模式等等。我曾经在图书馆借阅出过一个影印版。 它在清华图书馆的逸夫馆外文图书借阅区,索书号是 TP31 FO61 2003

后来发现,书中文章都可以在 Oreilly 网站上看到,如这里是简介。

借助于 Gooogle,各篇文章也可以通过搜索得到。如想看 Larry Wall 有关 Perl 的 文章,使用如下去搜索即可:

perl site:http://oreilly.com/catalog/opensources/book/

然后你就可以发现,链接是 http://oreilly.com/catalog/opensources/book/larry.html