NUC 折腾笔记 - Linux 系统篇

2024-01-24 11:18
文章标签 linux 系统 笔记 折腾 nuc

本文主要是介绍NUC 折腾笔记 - Linux 系统篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NUC 折腾笔记 - Linux 系统篇

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

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

写在前面

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tdhO6YQg-1612096546665)(https://attachment.soulteary.com/2021/01/31/nuc-inner.jpg)]

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

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

为了验证第三个想法,开始了折腾之旅。

Ubuntu 20.04 安装

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

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

启动盘制作

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4T61OmGv-1612096546667)(https://attachment.soulteary.com/2021/01/31/balena.png)]

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

进入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

cn.archive.ubuntu.comsecurity.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。

配置数据盘

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j7sHCEld-1612096546668)(https://attachment.soulteary.com/2021/01/31/nuc-sata.jpg)]

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

fdisk -lDisk /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-0F9AXXXXXXXXDevice           Start        End    Sectors   Size Type
/dev/nvme0n1p1    2048    1050623    1048576   512M EFI System
/dev/nvme0n1p2 1050624 2000408575 1999357952 953.4G Linux filesystemDisk /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->wmkfs.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-commoncurl -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/bashFILENAME="docker-compose-`uname -s`-`uname -m`"
VERSION=1.28.2if [ -f "$FILENAME" ]; thenecho "$FILENAME exists.";
elsecurl -L https://github.com/docker/compose/releases/download/${VERSION}/${FILENAME} -o ${FILENAME}
ficurl -L https://github.com/docker/compose/releases/download/${VERSION}/${FILENAME}.sha256 -o ${FILENAME}.sha256CHECK=$(shasum -c ${FILENAME}.sha256)if [ $? != 0 ]; thenecho "${FILENAME} checksum is not valid";exit 1;
fimv ${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


我现在有一个小小的折腾群,里面聚集了一些喜欢折腾的小伙伴。

在不发广告的情况下,我们在里面会一起聊聊软件、HomeLab、编程上的一些问题,也会在群里不定期的分享一些技术沙龙的资料。

喜欢折腾的小伙伴欢迎扫码添加好友。(请注明来源和目的、实名入群,否则不会通过审核)

关于折腾群入群的那些事


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2021年01月31日
统计字数: 6218字
阅读时间: 13分钟阅读
本文链接: https://soulteary.com/2021/01/31/nuc-notes-linux-system.html

这篇关于NUC 折腾笔记 - Linux 系统篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/639519

相关文章

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全