NUC 折腾笔记 - Linux 系统篇

NUC 折腾笔记 - Linux 系统篇
写一篇迟到的折腾笔记:NUC8 8i5beh 。原本计划折腾 Hackintosh ,最后折腾了一台 Linux Homelab 设备。

本篇记录 NUC 基础系统配置中的一些细节。

写在前面

2021 年的第一个月,因为众所周知的原因,NUC 11 的到货迟到成为了现实,10 代产品的本地货源在两周前也比较捉急,好在口碑爆表的 8 代 NUC 的货源还是非常充足的,性价比也同样占优。

加上正巧最近在折腾 MacOS 客户端,心说如果 NUC 8 代产品靠谱的话,相比较笔记本来说无屏幕、功耗更低来说持续跑一些程序的话,优势还是不小的。(便宜大碗、坏了不心疼呀)

于是在网上找了一家“出售成套方案、到手即用”的店铺,入手了一台经典神机 NUC8(8i5beh),在 NUC 到手后通电后,产生了三个想法:

NUC 8 性能真不错,系统运行顺滑,但是在运行 Mac OS 时,风扇瞬间起飞(比MacBook 编译程序还要暴躁),散热是真的有压力,还好没有入手 NUC8 i7 版本以及 NUC 10 跑这个场景。
NUC 11 应该值得等待,制程优化带来的散热问题应该有好转(已在 M1 Mac 上验证),加上性能也有质变,希望年后物流速度尽快恢复吧。
虽然网上资料更多的是用 NUC 8 做 Hackintosh,但或许 Linux 或许更适合它,对核显需求更低、发热更低,加上本身不错的计算能力和扩展能力。
为了验证第三个想法,开始了折腾之旅。

Ubuntu 20.04 安装
考虑偶尔可以使用 HDMI 接显示器使用,并且想更省事的使用“官方默认”的 VNC 功能,所以这次的安装采用 Desktop 版本。

如果你不需要 VNC 和 Wi-Fi 功能,完全可以使用 Server 版镜像,毕竟复杂性更低,相对可靠性更高嘛。

启动盘制作
Mac 下的启动盘制作方案非常多,这里推荐一个“跨端”方案:balenaEtcher,一款高颜值的引导盘刷写工具,命令行过程中索然无味的等待将被配色清新的界面所取代。

使用方法很简单,只需要下载好镜像,然后戳戳戳,一路下一步就可以了。

进入U盘引导
NUC 默认启动速度很快,想要使用 U 盘引导安装系统,需要在启动过程中“疯狂”按 F10 ,进入启动菜单选择。

提升系统安装速度
在使用启动盘安装的过程中推荐断开网络(别插网线、别连无线),可以解决默认软件源下载更新缓慢的问题,从而大幅提升安装速度。

选择系统安装类型
安装模式选择正常安装(Normal installtion)和最小化安装(Minimal installtion)都可以,两者差别在于默认安装软件包的多寡。如果你希望保留默认的 VNC 工具、桌面的话可以考虑使用正常安装偷个懒。

如果你的 NUC 使用的是非 Intel 网卡,在安装的时候选择安装三方驱动(Install third-party software for graphics and Wi-Fi hardware...)可以在第一次正式系统的时候正常使用 Wi-Fi 网卡。

但是需要注意,不要着急更新系统,会出现网卡无法工作的情况。

拔掉引导盘
如果你习惯了服务器版在安装完毕后提示你“拔掉U盘”,那么在安装桌面版的时候要注意一下,桌面版并不会提示你安装完毕,请弹出可移动设备。

安装完毕需要自行拔掉 U 盘,避免循环启动安装镜像。

重复安装无法启动系统
如果你选择重复安装 Ubuntu,那么可能会因为 UEFI “残留数据” 导致需要进入 Grub 恢复模式重新初始化引导。

这里可能是 grub 在 nvme 设备下处理 EFI 分区有问题,虽然使用下面的命令可以修复卡在启动界面的系统:


grub rescue>set root=hd0,msdos5
​grub rescue>set prefix=(hd0,msdos5)/boot/grub
​grub rescue>insmod normal
​grub rescue>normal

但是在“完整系统”中执行恢复“三招”会发现系统并不能被修复:


update-grub
grub-install /dev/nvme0n1
reboot

这时建议重新初始化硬盘,删除 NVME 磁盘前的引导记录。我这里使用 Mac 磁盘工具对 NUC 磁盘进行了初始化。

系统基础配置
在安装完毕之后,就是进行系统的基础配置了。

更换软件源
进入系统之后,使用默认的 vi 软件编辑软件源列表:


vim /etc/apt/sources.list

http://cn.archive.ubuntu.comhttp://security.ubuntu.com 替换为国内速度更快的清华源:


:0,$ s/cn.archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn\/ubuntu/
:0,$ s/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn\/ubuntu/

然后保存文件,并执行 apt update 获取新的软件列表。但如果你是苹果网卡用户,请先不要更新系统。

配置 SSH 终端连接
还是老方法,安装 openssh-server 软件包即可:


apt install -y openssh-server

如果需要修改链接端口或者其他配置,可以修改 /etc/ssh/sshd_config 中的端口。

这个配置适用于你使用“网线”、“无线”以及“雷电3”组网连接设备。有了 SSH ,接下来的配置会方便非常多,因为你可以复制下面的各种“现成的命令”啦。

Ubuntu 系统 BCM94360CS2 网卡驱动问题
NUC 是“原生”被 Ubuntu 支持的,但是我前文提过,我有购买“整套”的方案,卖家已经帮我处理掉了运行 MacOS 的网卡等硬件问题,将原始的网卡去掉,硬件改造几乎用不到的读卡器线路,换上 BCM94360CS2 。

这样做对于运行 MacOS 的好处是:让 DIY 爱好者头疼的蓝牙和无线功能会一切正常。并且在保证功能正常的前提下,可以以节约一个 M2 接口,来安装我的 Nvme 硬盘。

但是使用 Ubuntu 的话,这个网卡则会带来一个小问题:驱动与内核不兼容、只要升级 Ubuntu 软件包,功能必定 Crash 掉。

修复 BCM94360CS2 网卡驱动问题
如果你在安装过程中没有勾选“三方驱动”选项,那么在安装完毕之后,我们默认是不会有网卡无线驱动的,需要自行安装。网上给出的方案是手动执行(也是 Ubuntu 镜像中的默认三方驱动包):


apt-get install bcmwl-kernel-source

在不更新系统内核的情况下,你会发现网卡顺利的工作了,你可以使用网卡搜索到身边的信号,并且进行链接,但是一旦你执行系统升级命令,在过程中你将会看到类似这样的报错信息:


Building module:
cleaning build area...
make -j8 KERNELRELEASE=5.8.0-40-generic -C /lib/modules/5.8.0-40-generic/build M=/var/lib/dkms/bcmwl/6.30.223.271+bdcom/build...(bad exit status: 2)
ERROR: Cannot create report: [Errno 17] File exists: '/var/crash/bcmwl-kernel-source.0.crash'
Error! Bad return status for module build on kernel: 5.8.0-40-generic (x86_64)
Consult /var/lib/dkms/bcmwl/6.30.223.271+bdcom/build/make.log for more information.
   ...done.
/etc/kernel/postinst.d/initramfs-tools:
update-initramfs: Generating /boot/initrd.img-5.8.0-40-generic

倘若你勾选了“安装三方驱动”,那么得到的也仅仅是在首次系统安装完毕之后,无线能够使用而已,一旦你执行了系统升级命令,还是会得到和上面一样的错误信息。

这个问题在 launchpad 社区有人已经报过:


https://bugs.launchpad.net/bugs/1878045
https://bugs.launchpad.net/ubuntu/+source/bcmwl/+bug/1878045

解决方案是彻底卸载掉“默认驱动包”,重新安装适合的软件包:


apt purge bcmwl-kernel-source
apt-get install broadcom-sta-source
apt-get install broadcom-sta-dkms
apt-get install broadcom-sta-common

执行完毕上述命令后,重新启动,系统便会一切正常。

系统进阶配置
NUC 默认支持使用两个盘位,建议使用 NVME 做为系统盘,我这里使用了新版国货之光:致钛PC005;而另外一个盘位支持的是 SATA 协议,我使用了另外一款口碑很棒的硬盘致钛 SC001。

配置数据盘

使用 fdisk 查看当前磁盘列表:


fdisk -l

Disk /dev/nvme0n1: 953.89 GiB, 1024209543168 bytes, 2000409264 sectors
Disk model: ZHITAI PC005 Active 1TB                 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 9D048B5E-4CXX-41XX-A8XX-0F9AXXXXXXXX

Device           Start        End    Sectors   Size Type
/dev/nvme0n1p1    2048    1050623    1048576   512M EFI System
/dev/nvme0n1p2 1050624 2000408575 1999357952 953.4G Linux filesystem

Disk /dev/sda: 953.89 GiB, 1024209543168 bytes, 2000409264 sectors
Disk model: ZHITAI SC001 Act
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
可以看到 /dev/sda 并未初始化,使用 fdisk 的交互模式来进行磁盘初始化。

fdisk -u /dev/vdb

# 交互式输入:p->n->p->enter->enter->enter->w

mkfs.ext4 /dev/sda
echo /dev/sda /data ext4 defaults 0 0 >> /etc/fstab
reboot

重启之后,再次使用 fdisk 查看:


Disk /dev/sda: 953.89 GiB, 1024209543168 bytes, 2000409264 sectors
Disk model: ZHITAI SC001 Act
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

可以看到磁盘已经就绪。

安装容器环境
安装容器的方法还是一如既往的简单,这里给出全部使用镜像来安装的命令:


apt install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common

curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

apt update && apt install -y docker-ce

为了方便使用,这里我写了一个更简单的脚本来进行安装:

curl -o- https://raw.githubusercontent.com/soulteary/linux-scripts/main/docker.sh | bash

安装 compose 也比较简单,我这里也写了一套简单的脚本:

#!/bin/bash

FILENAME="docker-compose-`uname -s`-`uname -m`"
VERSION=1.28.2

if [ -f "$FILENAME" ]; then
    echo "$FILENAME exists.";
else
    curl -L https://github.com/docker/compose/releases/download/${VERSION}/${FILENAME} -o ${FILENAME}
fi

curl -L https://github.com/docker/compose/releases/download/${VERSION}/${FILENAME}.sha256 -o ${FILENAME}.sha256

CHECK=$(shasum -c ${FILENAME}.sha256)

if [ $? != 0 ]; then
    echo "${FILENAME} checksum is not valid";
    exit 1;
fi

mv ${FILENAME} /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
rm ${FILENAME}.sha256
echo "done";
docker-compose -v

同样,有更简单的安装方式:


curl -o- https://raw.githubusercontent.com/soulteary/linux-scripts/main/docker-compose.sh | bash

安装常用软件
为了方便管理和监控系统运行状态,可以安装一些常用运维软件。


apt install net-tools htop iftop iotop -y

最后
下一篇内容,我们聊聊雷电接口加持下的性能小钢炮 NUC8 如何在日常中发挥威力。

--EOF

上一篇:NUC 折腾笔记 - Linux 系统篇


下一篇:动手学CV-目标检测入门教程4:模型结构