珂珂的个人博客 - 一个程序猿的个人网站

N150 万兆小主机折腾记

        前段时间由于wifi 上传到威联通nas很慢,索性想着拉一根隐形光纤来连接,主要走网线太难看了。思来想去还是买个万兆小主机当openwrt ,和另外性能强的服务器分开,这样避免all in boom。

小黄鱼搜索只有一个n100 的卖830 本想砍价到800  他后来又涨了再后来就卖掉了,那只有买个全新的了,n100和n150价格只差几十,由于n100出来比较久,可能兼容性会好一些,但想来买新不买旧还是买了n150,兼容性以后应该会解决了。

由于n150的核显还可以,而且我知道支持SR-IOV 那么底层肯定安装pve了。

一、更新pve源

二、显示cpu和硬盘温度

先安装sensors

apt-get install lm-sensors -y

安装后运行下面命令看是否能显示温度

sensors

我在github上找了pve_tools  发现安装了还是不能显示,github搜索pve_source 没搜到,按以前的安装pve_source 安装后还是不能显示,可能是脚本版本旧了,pve 版本新了吧。后来还是通过恩山论坛一位大佬的脚本尝试可以

【新提醒】(2023.12.13)SHELL脚本:一键给PVE增加温度,cpu功耗频率,硬盘等信息-软路由,x86系统,openwrt(x86),Router OS 等-恩山无线论坛

一键执行脚本

(curl -Lf -o /tmp/temp.sh https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh || curl -Lf -o /tmp/temp.sh https://mirror.ghproxy.com/https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh) && chmod +x /tmp/temp.sh && /tmp/temp.sh remod

没有显示功耗的,请执行下面的命令安装依赖,请确保安装成功,就是最后的一行的输出,必须为 “成功!” 才表示安装成功了。

apt update ; apt install linux-cpupower && modprobe msr && echo msr > /etc/modules-load.d/turbostat-msr.conf && chmod +s /usr/sbin/turbostat && echo 成功!

如果你已经用别人的脚本之类的修改过页面,请先用下面命令先回复官方设置之后,才可以运行本脚本:

apt update
apt install --reinstall pve-manager=$(dpkg -l pve-manager | tail -n 1 | awk '{print $3}')
apt install --reinstall proxmox-widget-toolkit=$(dpkg -l proxmox-widget-toolkit | tail -n 1 | awk '{print $3}')
rm -f /usr/share/perl5/PVE/API2/Nodes.pm*bak
rm -f /usr/share/pve-manager/js/pvemanagerlib.js*bak
rm -f /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js*bak

另外:每次pve升级之后都需要执行一次脚本,因为升级后PVE会自己还原文件

三、开启直通

编辑/etc/default/grub

将里面的GRUB_CMDLINE_LINUX_DEFAULT="quiet"改为GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

对于AMD则是 amd_iommu=on

更新grub

update-grub

重启

四、安装openwrt

找了几个openwrt固件都没合适的,最后勉强找了个可用的,反而不用怎么设置直接就可以用了,ipv6也正常。这里注意需要将最后个eth3 设为wan ,因为eth3为直通的2.5G i266网卡,eht0 为i266  管理口, eth1 eht2为万兆网口,前3个都作为lan 而且没有直通。

另外openwrt 设置为2核2G 内存比较合适,单核的话万兆性能不太够。

外网访问内网的ipv6

还需要将转发设为接受

五、设置SRIOV直通核显

之前有个1135G7 的小主机当时sriov不太成功,没想到这次居然很顺畅

按照github上的步骤依次执行以下命令

GitHub - strongtz/i915-sriov-dkms: dkms module of Linux i915 driver with SR-IOV support

apt install build-* dkms
apt install proxmox-headers-6.8 proxmox-kernel-6.8
wget -O /tmp/i915-sriov-dkms_2025.03.27_amd64.deb "https://github.com/strongtz/i915-sriov-dkms/releases/download/2025.03.27/i915-sriov-dkms_2025.03.27_amd64.deb"
dpkg -i /tmp/i915-sriov-dkms_2025.03.27_amd64.deb

编辑/etc/default/grub

改为intel_iommu=on i915.enable_guc=3 i915.max_vfs=7 module_blacklist=xe

update-grub
update-initramfs -u
apt install sysfsutils

修改文件

echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7" > /etc/sysfs.conf

上面地址可以用 lspci | grep VGA 查看

重启

再用lspci | grep VGA    可以看到有8个说明成功

运行ls -la /dev/dri   看是否正常

六、给windows 10分配sriov的显卡

这次很顺利也不需要改配置也不需要设为主gpu 也不需要删除pve虚拟显卡

主要不要把第一个 00:02.0 分了,需要从下面的开始分配

分配后直接按照intel 核显驱动成功。另外windows 10的任务管理器显示cpu频率为0.8   但实际应该不只,我用cpuz 跑了单核300分。 但安装intel核显驱动的时候还是挺卡的。

七、安装LXC

安装ubuntu 24.04  设为2核2G,虚拟内存设为4G,安装完成后在pve管理网页中的lxc控制台执行

sed -i '/PermitRootLogin/ a PermitRootLogin yes' /etc/ssh/sshd_config

重启lxc  然后就可以ssh 用root登录了

换源

cd /etc/apt
cp sources.list sources.list.bak
sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' sources.list

然后就可以apt update了。

但是发现默认步骤创建的lxc 执行ls -la /dev/dri  找不到设备,而且在pve控制台中不能更改无特权的容器

再新建一个LXC容器取消勾选无特权的容器。创建完后发现lxc控制台没有输出,这时候需要关机,在选项下把这几个勾上

再重启控制台就有输出了。

这时候运行ls -l /dev/dri  看到还是没有设备,需要在pve的ssh中修改lxc的配置文件

/etc/pve/lxc/105.conf

在文件末尾加入

lxc.cgroup2.devices.allow: c 226:0 rwm

lxc.cgroup2.devices.allow: c 226:128 rwm

lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file

lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file

然后重启LXC容器,  intel cpu都是上面的配置?

然后验证ls -l /dev/dri

即可正常看到

安装gpu工具

apt-get install -y intel-gpu-tools

运行

intel_gpu_top

但我这里报错,不管是pve宿主机安装还是lxc中安装都是如此

宿主机

如果设置了显卡 SR-IOV 虚拟化直通,那么命令可能需要修改一下才能生效:

intel_gpu_top -d sys:/sys/devices/pci0000:00/0000:00:02.0

这么长的命令使用很不方便,我们可以通过设置 alias 别名来提升使用效率

alias intel='intel_gpu_top -d sys:/sys/devices/pci0000:00/0000:00:02.0'

2025.4.28 可以使用 下面命令查看

intel_gpu_top -d sriov


飞牛NAS

安装好飞牛os后,开启ssh

另外安装的时候如果选默认但使用uefi 则会安装不了,此时需要进入虚拟机的bios 关闭uefi安全引导啥的就可以安装了。

运行

ls -l /dev/dri

显示

而在pve的LXC中是显示的

怀疑是飞牛没装驱动

在飞牛应用中心安装

重启后运行

ls -l /dev/dri

还是如此

那先挂载威联通的文件吧

在文件管理中新建个文件夹

点击文件夹的右键详细信息,复制原始路径

普通用户是挂载不了的

切为root

sudo -i
mount -t nfs4 192.168.8.233:/MyData/Movie /vol1/1000/movie

此时在文件夹中应该能看到威联通中的文件了

开机自动挂载

修改/etc/fstab

但发现用XTerminal 自带的文件管理直接修改提示无权限

sudo -i后还是如此

那么只好sudo -i 后用vi了

增加

192.168.8.233:/MyData/Movie /vol1/1000/movie   nfs4      defaults    0 0

但启用不了gpu转码待研究


LXC容器

直接apt install docker.io

安装之后运行容器会报错

docker: Error response from daemon: AppArmor enabled on system but the docker-default profile could not be loaded: running '/usr/sbin/apparmor_parser -Kr /var/lib/docker/tmp/docker-default2667756519' failed with output: apparmor_parser: Unable to replace "docker-default".  apparmor_parser: Access denied. You need policy admin privileges to manage profiles

在宿主机/etc/pve/lxc/105.conf  中添加下面几行

lxc.apparmor.profile: unconfined  
lxc.cgroup2.devices.allow: a  
lxc.cap.drop:

reboot重启后还是报上面的错

此时按步骤安装docker-ce 运行反而不报错

但是去掉上面conf文件中的几行reboot重启后还是报错

加上reboot重启后仍然报错

最后在docker run 后面加 --privileged 成功了

docker run --privileged hello-world

注意--privileged的顺序,如果是 docker run hello-word --privilileged就还是不行

然后创建挂载文件夹

mkdir /mnt/movie

然后

apt install nfs-common

不安装上面的直接挂载会报错

mount: /mnt/movie: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.       dmesg(1) may have more information after failed mount system call.

然后挂载文件

mount -t nfs4 192.168.8.233:/MyData/Movie /mnt/movie

创建docker

docker run --privileged -d -p 8096:8096   --name=jellyfin-cn --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /mnt/movie:/movie  \
-e TZ=Asia/Shanghai -e PUID=0 -e PGID=0 \
--device=/dev/dri:/dev/dri \
nyanmisaka/jellyfin:latest

这非官方的镜像还是不能实现硬解。

下载ffmpeg

Download FFmpeg

然后下载下面这个

wget下载比较慢,可以用迅雷下载后再上传到/root下

解压

tar -xvf ffmpeg-git-amd64-static.tar.xz

然后cd到解压后的目录

./ffmpeg

如果想要ffmpeg命令全局可用,可以在bin目录加个链接。比如,分别执行如下命令,即可在:/usr/bin目录下创建ffmpeg和ffprobe软链接。

cd /usr/bin
ln -s /root/ffmpeg-git-20240629-amd64-static/ffmpeg ffmpeg
ln -s /root/ffmpeg-git-20240629-amd64-static/ffprobe ffprobe

然后创建docker的时候映射下目录

-v /root/ffmpeg-git-20240629-amd64-static:/ffmpeg

我起初映射的jellyfin默认的ffmpeg目录会报错所以改成了  /ffmpeg

-v /root/ffmpeg-git-20240629-amd64-static:/usr/lib/jellyfin-ffmpeg/ffmpeg

完整的

docker run --privileged -d -p 8096:8096   --name=jellyfin-cn --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /mnt/movie:/movie  -v /root/ffmpeg-git-20240629-amd64-static:/ffmpeg \
-e TZ=Asia/Shanghai -e PUID=0 -e PGID=0 \
--device=/dev/dri:/dev/dri \
nyanmisaka/jellyfin:latest

然后

这里选择intel qsv也试过,倒是不报"该客户端与媒体不兼容,服务器未发送兼容的媒体格式。"了,但是是调用的cpu转码。


最后发现硬件转码正常的是虚拟机windows 直装官方jellyfin 和Ubuntu虚拟机直装官方jellyfin  

ubuntu虚拟机安装需要科学上网

curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash

但我发现ubuntu LXC这样直接安装后还是不能硬解。


2025.04.28

Ubuntu 虚拟机扩容,由于pve当时分了100G给ubuntu虚拟机,但安装ubuntu的时候貌似是50G ,所以还有剩余的,那么如何利用起来,问deepseek得到答案

sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv

经实现是可行的,运行第二条后XTerminal 显示的磁盘空间立马发生变化了

然后我发现XTerminal 没有显示虚拟内存,按照之前的教程又设置了一遍4G虚拟内存,重启还是没显示,想起FinalShell会显示,于是用FinalShell 登录发现虚拟内存为8G 了,看来是默认已经有4G了这次会再增加4G?


2025.5.18

今天试下黑群晖,用的RR引导

github下载最新的rr-25.5.7.img

将img文件上传到pve中

创建虚拟机,不使用任何介质

删除scsci0

cpu选host

创建完成后在硬件中删除cd/dvd

然后将img导入

qm importdisk 110 /var/lib/vz/template/iso/rr.img local-lvm

然后在虚拟机中添加此硬盘

再新装一块20G 以上硬盘用来装系统

总线选SATA不然后面会认不到

然后设置启动顺序

可以先将核显的sriov增加到虚拟机中不然后面RR引导选择系统的时候会看不到G

引导RR后在浏览器输入网址

先在setting menu中改下语言

选择型号,选择SA6400  如果前面没增加sriov核显的话会看不到G,不过貌似没关系

然后选择版本,这里我选的7.2

然后点击URL下载pat

点击确定

选择编译引导

安装完成后开启SSH

貌似没video station了

ssh进入查看显卡

ls /dev/dri

再查看i915

dmesg | grep i915

貌似都正常自带了


上一篇:个人代码全部开源

下一篇:N150 万兆小主机折腾记


0 评论

查看所有评论

给个评论吧