LS-WXL Debian改造过程

缘由

自从老婆搬过来,并且把我07年的笔记本霸占以后,台式机充当下载机已经一年多了。看着最近的电费单总是一阵阵的不爽,就想着弄个全职下载机。想要自己的VPS也不是一天两天了,AWS的micro instance免费体验也到期了,弄个机器也要能装linux才行。 半个月前买了个Buffalo LS-WXL,原因有很多

  • 便宜  —— 不到600,看中Synology的也有段时间了,可惜就是贵了点
  • 不带硬盘 —— WD My Book Live, 不错,可惜找不到不带硬盘的,刚买的2T硬盘不想浪费了
  • 可以改Debian —— Linux党的最爱,折腾不是问题
  • 有两个硬盘位 —— 不想格式化2T硬盘,里面积攒的电影要挪出来也没地方暂放了。还有两个多余的笔记本硬盘。

要折腾必先获取root权限,有了root就可以通过optware玩些初级的东西了。

获取Root权限

完整方法

参考:http://buffalo.nas-central.org/wiki/Category:LS-WXL#Gain_Root_Access 买过来直接就是1.60的固件了,直接跳到 #Firmware_1.41_and_later 开始就行。

偷懒方法

下载别人提供的已经破解好的固件,http://forum.buffalo.nas-central.org/viewtopic.php?f=68&t=23603 有了root权限也不是就能为所欲为了,Buffalo在固件里面直接定死了 —— 要么RAID0,要么RAID1。要让我多余的硬盘发挥余热还是得靠Debian。

改造成Debian

制作rootfs

参考:Debian Squeeze on ‘V’ and ‘X’ Series (LS-WXL and others)

装Debian系统

  • 一开始参照前面的教程复制文件到/boot,启动后只能是闪蓝灯的无限循环; 用LSupdaterg刷,同样结果。
  • 后来找到了这个帖子,有外国网友已经制作好了一个完整的刷机包,第一次就刷成了,很兴奋,可是为什么就不能装软件?(一定是我打开方式不对,XD)  这个方法后来辗转又回来试过,不过不知道为什么就不行了。
  • 又找到个国内网友的帖子,他的方法只要直接解压rootfs就行了。可惜他的包放在115,而115关了大众分享。

想了想,hddrootfs.buffalo.buffalo本来就是系统根文件夹的压缩包,国内网友的帖子很靠谱。找出前面的自己做的 hddrootfs.buffalo.updated 准备就这么干了。 拔出硬盘,装到移动硬盘盒里,插上电脑,重建gpt分区表,手动分区。 sdd1 1G  /boot ext3 sdd2 5G  /         ext3 sdd3 1G  swap sdd4 剩下的100多G xfs /mnt/disk1 找出前面收集到的2.7M的 uImage.buffalo、 1.5K的空白 initrd.buffalo,放入sdd1。把hddrootfs.buffalo.updated放入sdd2,解压,针对当前分区修改 /etc/fstab。 把硬盘重新插入LS-WXL,召唤神龙 启动。过一会儿后,ssh能连入就是成功了。 继续参考前面制作rootfs的文章下文,安装blstools(修复LED灯状态,控制风扇速度),打开开机日志,安装xfs文件系统工具,设置时区,开启debian安全更新源。 Debian系统总算是可以用了,关机插上第二块硬盘,再开机,发现不能mount ext4分区。Buffalo官方uImage.buffalo内核不支持ext4文件系统。

编译内核

参考:Building the Debian kernel 编译之前修改.config,在File systems下加入

CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_XATTR=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y

内核编译安装完成,重启后就能加载ext4分区了。 直接使用http://pastebin.com/9yWQBnhW的脚本会有一堆如下的错误信息:

cat: /sys/class/gpio/gpio42/value: No such file or directory

原因是以上脚本有误,导致无法创建GPIO signals。脚本中的字符串比较要用“=”而不是“==”, 默认的dash不支持“==”。

gpio_config()
{
if [ $1 = “enable” ]; then
[ -d /sys/class/gpio/gpio$2 ] echo $2 > /sys/class/gpio/export
if [ $3 = “output” ]; then
echo out > /sys/class/gpio/gpio$2/direction
else
echo in > /sys/class/gpio/gpio$2/direction
fi
else
echo $2 > /sys/class/gpio/unexport
fi
}