制作 X86 平台的龙芯内核交叉编译环境

先下载 Binutils 2.20 和 GCC Core 4.4.2。
Binutils 2.20: http://ftp.gnu.org/gnu/binutils/binutils-2.20.tar.bz2
Binutils 2.20 Loongson2f 补丁: http://heiher.info/sftp/files/binutils-2.20-loongson2f.patch
GCC Core: http://ftp.gnu.org/gnu/gcc/gcc-4.4.2/gcc-core-4.4.2.tar.bz2

设置环境变量和新建目录

$ mkdir -p /opt/loongson-cross-tools/usr/{bin, lib, share}
$ echo "PATH=$PATH:/opt/loongson-cross-tools/usr/bin" >> ~/.bashrc

编译 Binutils:

$ tar xjf binutils-2.20.tar.bz2
$ cd binutils-2.20
$ patch -Np1 -i ../binutils-2.20-loongson2f.patch
$ cd .. && mkdir binutils-build && cd binutils-build
$ ../binutils-2.20/configure --prefix=/opt/loongson-cross-tools/usr --target=mipsel-pc-linux-gnu --with-sysroot=/opt/loongson-cross-tools --enable-64-bit-bfd --disable-nls --enable-shared
$ make configure-host
$ make
$ make install

编译 GCC:

$ tar xjf gcc-core-4.4.2.tar.bz2
$ mkdir gcc-build && cd gcc-build
$ ../gcc-4.4.2/configure --prefix=/opt/loongson-cross-tools/usr --target=mipsel-pc-linux-gnu --with-sysroot=/opt/loongson-cross-tools --disable-multilib --with-newlib --disable-nls --disable-shared --disable-threads --enable-languages=c --with-abi=64
$ make all-gcc
$ make all-target-libgcc
$ make install-gcc
$ make install-target-libgcc

Over!

FastDog – 轻量级的 Web 服务器

最近在学习 Web 开发,在学习过程中我觉得认真的研究一下 HTTP 协议还是有一定必要的。就试着写一个 Web 服务器玩玩吧,好久没有用C语言写过程序了,也当作一个练习吧。

FastDog 大致的架构如下:
* HTTP 1.1 协议
* 支持静态和动态页面
* 高性能I/O
* 多工作线程
* 基于共享库的模块化站点框架

目前在看最重要的东西 RFC2616(HTTP 1.1 协议),看完准备实现 HTTP 部分和站点框架。

项目网站:http://github.com/heihaier/fastdog/

Over!fastdog/

交换硬盘分区的设备文件命名

这个可以通过 udev 来解决问题,默认 udev 是根据分区表中的序列来分配的,那也就可以通过修改分区表中的序列来实现了。这里就记录一下修改的过程。
1. 使用如下命令打印出分区表信息。
$ sudo fdisk -l /dev/hda

Disk /dev/hda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000
 
   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1          14      112423+  83  Linux
/dev/hda2              15        2447    19543072+  83  Linux
/dev/hda3            2448       19180   134407822+  83  Linux
/dev/hda4           19181       19457     2225002+  82  Linux swap / Solaris

2. 删除将要交换的两个分区,例如 /dev/hda1 和 /dev/hda2。
$sudo fdisk /dev/hda
d
1
d
2
3. 创建新的分区,达到交换目的。
n
p
1
15
2447
n
p
2
1
14
w

这样就完成的交换操作。

Over!

在 Linux 系统中清除 Windows 用户密码

不论你由于什么原因丢失了正确的 Windows NT/2000/XP/Vista 的用户密码,导致不能正常登录用户。你都可以使用下面的方法清除了硬盘中 Windows 系统的用户密码。

此方法是使用一位德国高手的程序 chntpw,这个程序是完全开放源代码的,如果你有兴趣去研究 Windows SAM 文件的格式,这个程序是一个很好的参考。

1. 制作 Linux Live CD
如果你已经有一张可以直接引导且包含NTFS-3G模块的 Live CD,那么就可以略过一个步骤。否则建议你下载一个 Ubuntu Live CD并刻录成盘。

2. 下载 chntpw
下载 chntpw 最新版本的源代码(其中包含已经静态编译好的 i386 版本的二进制程序)到 U盘中。
下载地址:chntpw-source-080526.zip

3. 清除密码
使用 Live CD 启动计算机,插入保存了 chntpw 程序的U盘。挂载安装了 Windows 系统和U盘的分区。解压缩 chntpw 源代码包。运行 chntpw 程序清除密码。(chntpw 的详细使用方法在源代码中的 README.txt 文件中有详细的解释)

Over!

WordPress 评论数学验证的简单实现

谈到 WordPress 的垃圾评论,我已经无语了。下面给出一个 WordPress 评论数学验证的简单实现方法。希望能够解决由垃圾评论给你带来的烦恼。

1. 编辑 WordPress 安装目录的 wp-comments-post.php 文件,修改下面列出的两处:

$comment_author       = ( isset($_POST['author']) )  ? trim(strip_tags($_POST['author'])) : null;
$comment_author_email = ( isset($_POST['email']) )   ? trim($_POST['email']) : null;
$comment_author_url   = ( isset($_POST['url']) )     ? trim($_POST['url']) : null;
$comment_content      = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null;
// 在其后加入如下代码
/* Comment Math Checker
 * Heihaier - admin@heiher.info 
 */
$comment_numa	= (isset($_POST['numa'])) ? trim($_POST['numa']) : null;
$comment_numb	= (isset($_POST['numb'])) ? trim($_POST['numb']) : null;
$comment_sumab	= (isset($_POST['sumab'])) ? trim($_POST['sumab']) : null;
if ( get_option('require_name_email') && !$user->ID ) {
	if ( 6 > strlen($comment_author_email) || '' == $comment_author )
		wp_die( __('Error: please fill the required fields (name, email).') );
	elseif ( !is_email($comment_author_email))
		wp_die( __('Error: please enter a valid email address.') );
}
// 在其后加入如下代码
/* Comment Math Checker
 * Heihaier - admin@heiher.info 
 */
if(!$user->ID)		// guest user only
{
	if((($comment_numa + $comment_numb) != $comment_sumab) || empty($comment_sumab))
		wp_die(__('Error: please type the correct results of the math problems.'));
}

Continue reading WordPress 评论数学验证的简单实现

呼吁 Windows 程序员注意权限问题

Unix 系统一直注重用户权限的保护,这个机制也促使这个系统中的应用程序对权限保护的支持。现在的 Windows 操作系统越来越注重权限的控制,很多用户也开始通过权限来用户权限来保护系统文件和用户私有文件。

但是用户会遇到很多的问题,绝大多数是应用程序对权限保护机制的支持有问题,主要表现在这些问题应用程序需要读写程序的安装目录,而在权限保护下程序的安装目录一般应该设置为只读的,这样才能防止程序被恶意篡改。同时也让这些程序不能正常工作了。一些用户因此取消了对程序目录的保护,设置为可读可写,这样使安全性大打折扣。
Continue reading 呼吁 Windows 程序员注意权限问题

看我怎么优化 Windows XP

新单位里有一台 P3 的老机,安装了 Windows XP 操作系统和一大堆没有用的垃圾软件,例如金山杀毒软件、瑞星杀毒软件等等。本来性能就不高的机器是更慢了,几乎不能用。

为了让它能玩一些小游戏,对它进行了一些优化和安全处理,下面是具体的日志:
1. 首先把不需要的一些软件都删除了,如杀毒软件等等。
2. 除了 Administrator 用户,删除其它非系统用户。
3. 把所有的分区都转换成 NTFS。
4. 创建一个新的用户组,名为 Limited Users。
5. 创建一个新的用户,隶属于 Limited Users 和 Users,千万不要属于其它的用户组,因为这个用户将作为日常使用的用户。
6. 把安装了操作系统的磁盘(C:\)的 Limited Users 组权限设置成可读不可写。
7. 在其它所有磁盘里创建名为 vroot 的文件夹,把原有的文件全部移动到这个文件夹里。
8. 指定其它所有磁盘的 Limited Users 组权限为可读不可写;指定其中的 vroot 文件夹为可读、可写。 指定所有磁盘里的 Recycler 文件夹的 Everyone 组权限为可读、可写、可修改。
9. 清理开机自启动项目,注册表里和用户启动文件夹,不要忽略了 All Users。
10. 清理不需要的服务,如系统帮助等等。
11. 为各个用户设置密码, Administrator 用户的密码要安全。
12. 安装需要的软件,同时也要指定软件安装目录的权限,有些垃圾软件安装目录不可写还进行不了,这类软件也就只有在 Windows 操作系统里能出现。
13. 保护 IE 主页不被非法篡改,先到日常用户里设置 IE 主页为 http://www.heiher.info,再到管理用户里进行注册表程序,搜索 http://www.heiher.info 并改成你想设置的主页如 http://www.google.com,再修改这个表项的 Limited Users 组的权限为不可修改。下面去日常用户里修改看看吧,那是绝对修改不了的。
14. 最后还是通过用户权限和文件系统的权限去保护一些你私人的文件数据。

经过上述的一些处理后,进程数只有 12,启动后内存占用 89 MB。效果是不错的,相对安全,因为 Windows XP 的漏洞还是很多的,一些病毒通过漏洞提高自身权限就没有办法了。

有兴趣还可以找一些经常出现的病毒来进行试试,看看情况怎么样。我试了多数是报错退出,可能是想修改系统文件没有成功吧,哈哈。

另外还有一些问题,这些问题都是因为一些应用软件开发者的原因,例如腾讯的 Cross Fire 游戏就使用了一款“安全”模块,需要在游戏启动后控件键盘驱动程序,这样的应用程序在 Users 组里是无法正常运行的。还有一些应用软件在运行时需要在安装目录里创建新文件,这样的应用程序保护文件不方便。其它完全可以把这些文件写到 %HOMEDIRVE%%HOMEPATH%\Application Data\ 目录里从而避免这样的问题。

这个方法不可能绝对安全,但相对多数 Windows 用户的方法(例如安装杀毒软件、一些行为实时监控等等)很安全。防火墙还是很好的东西,有需要应该安装一款。

Over!