之前在学校用的都是类似树莓派这种 ARM 结构的低功耗 Linux box,比如树莓派一代,Cubieboard 2 双卡版等,Cubieboard 双卡版的性能还是不错的,也有 sata 接口。X86 架构的服务器在软件兼容性和性能上是要高出普通 ARM 板子不少的,虽然 Intel NUC 之类的硬件性能还是不错,但是价格和功耗还是偏高。然而前几天在家准备使用 Nghttp2 对接交大服务器时却遇到不小的问题,软件仓库及自己编译出的二进制在运行时总会遇到段错误,于是乎便开始寻觅价格相对低廉的低功耗 X86 家用服务器。

X32-N2808 硬件概述

依稀记得在 SHLUG 邮件列表中有人提到过新创云的低功耗板子,前一阵子趁京东 618 大促搜了下新创云,发现 X32-N2808 这款移动端半价促销(不到400即可拿下),无内存无硬盘,虽然也写明无 WiFi, 但实际上卖家发货时还是带了一块 PCI-E 无线网卡及蓝牙芯片,无线网卡是 Atheros 家的,实测对 Linux 支持很好,用于自建热点很方便。简单问了下客服,内存条是可以使用笔记本内存条的,但是得使用低压版 1.35v 的,也就是说没有必要买新创云自家昂贵的内存条以及 SSD 等,由于不确定自己的笔记本内存条是否可用,低压版 1.35v 的内存条没有一起下单。

拿到板子后立马把后盖拆了下来,内部做工还算不错,接口及组件列表如下:

  • CPU 为赛扬双核 N2808
  • 内存条仅有一个插槽,LPDDR3,也就是说这里和客服说的有出入,以 1.5V(LPDDR3) 为准
  • 一个 PCI-E 的无线网卡,卖家送的 Atheros 网卡
  • 一个 msata,可以扩展 SSD 用,SSD 暂时太贵了,没买
  • 一个 SATA II,我买了一块 1 T 西数笔记本硬盘,板子预留了空间,拧上螺丝即用
  • 两个 HDMI 高清接口
  • 两个 USB 3.0
  • 四个 USB 2.0
  • 一个千兆以太网卡,作为网络路由器和媒体服务器非常不错
  • 音频接口

所以总的来讲接口还是非常丰富的,和一台普通的台式机没差多少。整机功耗实测 6 W 左右,名副其实的低功耗 X86 服务器。 自己加内存条和硬盘后的谍照如下。

板子内部接口 2.5英寸笔记本硬盘

BIOS 设置

X23-N2808 的默认 BIOS 设置很多特性都是关闭的,比如 ACPI, 启动项的 Legacy USB 支持等,为了避免安装 Linux 系统时和 UEFI 肉搏,建议支持 Legacy USB 启动。

安装 Archlinux

Archlinux 发行版的软件包更新虽然非常快,但作为家用服务器操作系统还是有不少优势的,比如丰富的第三方 AUR 和较新的软件包,默认没有 GUI,极简哲学。室友问我为何不选择相对更稳定的 Ubuntu Server,对于我来说,除了以上优势外,那就是我对 Archlinux 比较熟悉,配置各项服务来那是轻车熟路。systemd 写起 service 来也深得我心——简洁,清晰。

对于 ARM 板子来说,安装 Archlinux 那是易如反掌,按照 https://archlinuxarm.org 上的操作 dd 写入 sd 卡即可,非常简单。对于 X86 板子来说则需要按照 Beginners’ guide 安装。也可以参考下 给妹子看的 Arch Linux 桌面日常安装,不过这里是作为家用服务器用途,所以图形界面 X 是不必要的,简述下步骤如下:

  1. 将 Archlinux 的 ISO 安装镜像 dd 到优盘制作启动优盘
  2. 开机后启动项引导选择刚制作好的 Archlinux 启动优盘
  3. 给硬盘分区,我之前想使用 LVM 作为逻辑卷管理,但启动失败,弃用 LVM 后顺利安装
  4. 格式化文件系统后可以使用 discard,noatime 等挂载提升性能,并写入到 fstab 中
  5. 安装基本系统 pacstrap -i /mnt base base-devel vim zsh
  6. arch-chroot, 将 USTC 或者 tuna 的源放在前面对大陆的朋友有好处
  7. 启用 en_US.UTF-8zh_CN.UTF-8 locale
  8. 因为我这里采用有线方式联网,所以不必安装 wpa_supplicant dialog 等,家用服务器用途还是建议以有线方式接入
  9. 安装 grub 引导器,这里有坑,后面细说
  10. 添加新用户及启用 archlinuxcn 和安装yaourt

为了更好的使用 pacmanyaourt, 你可以在新建普通用户之后安装 packer, 这样在安装软件时可不必再加上 sudo, 也不必区别对待 pacmanyaourt.

重启时系统无法正常关机

在关机或者重启时系统会显示

watchdog did not stop!

并且系统几分钟内都无法正常关机。解决办法是在 grub 配置文件(/etc/default/grub)中设置 GRUB_CMDLINE_LINUX="reboot=bios". 更新 grub.cfg - grub-mkconfig -o /boot/grub/grub.cfg. 详见 acpi - message at shutdown: watchdog did not stop! - Unix & Linux Stack Exchange

dmesg 显示 usb xxx device descriptor read/64, error

对于这个板子倒是无关紧要,试过插入不同 USB 接口时 dmesg 显示的错误信息与后面6个接口无关。如果有关系的话可参考 usb 1-4: device descriptor read/64, error -71 | Guy Rutenberg

启动时忽略硬盘挂载错误

作为家用服务器,你很可能会给它增添一块硬盘作为数据存储中心,这块硬盘在你测试时也许就不接入服务器了,在这种情况下我们需要改动 /etc/fstab 的挂载参数忽略这种错误,否则系统可能无法正常启动。以我为例;

# /dev/sdb1
UUID=bf5aae46-d95a-461d-b9f3-544db87b6696       /xxxx     ext4            rw,noatime,discard,data=ordered,nofail,x-systemd.device-timeout=1 0 2

细节可参看 fstab - ArchWiki

使用 linux-lts

众所周知,Arch 的哲学之一就是尽量与上游保持一致,kernel 的更新也是非常频繁,所以为了稳定性考虑还是建议安装使用 linux-lts.

新建用户

useradd -m -g users -G wheel -s /bin/zsh neo

将用户 neo 加入附加组 wheel 中,启用 sudo 特权。

运行 visudo 将用户 neo 加入免密使用 sudo:

## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL

password-free for user neo:

Defaults:neo !authenticate

oh-my-zsh

安装完 zsh 之后怎能没有扩展?oh-my-zsh 是非常不错的选择。

packer -S oh-my-zsh-git
cp /usr/share/oh-my-zsh/zshrc ~/.zshrc

ssh

packer -S openssh

由于默认不提供 ssh 接入,作为服务器使用这个还是必不可少的。 生成密钥可参考 Generating a new SSH key

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

优化 ssh 连接 - tmux + mosh

packer -S mosh tmux

tmux 可用于同时 hold 多个 terminal, 断线重连只需 tmux a, 谁用谁知道。 mosh 则可用于 UDP 接入,在移动环境或者网络环境较差时非常管用。

基本系统及软件已经安装完毕,后续我将自己配置无线热点、无痛科学上网和媒体服务器等过程详述在博客中。